浏览代码

优化查询借楼

java110 3 年之前
父节点
当前提交
5a99eb2559

+ 22 - 5
java110-db/src/main/resources/mapper/report/ReportFeeStatisticsServiceDaoImplMapper.xml

@@ -735,15 +735,15 @@
         ) oweFee,
         (
         select ifnull(sum(t.received_amount),0.0) receivedFee
-        from pay_fee_detail_month t
+        from pay_fee_detail t
         INNER JOIN pay_fee pf on t.fee_id = pf.fee_id and pf.status_cd = '0'
-        inner join pay_fee_config pfc1 on pfc1.config_id = t.config_id and pfc1.status_cd = '0'
-        where t.obj_id = a.obj_id
+        inner join pay_fee_config pfc1 on pfc1.config_id = pf.config_id and pfc1.status_cd = '0'
+        where pf.payer_obj_id = a.obj_id
         and t.status_cd = '0'
         and t.community_id= a.community_id
         and pfc1.fee_type_cd = pfc.fee_type_cd
-        and t.pay_fee_time > #{startDate}
-        and t.pay_fee_time < #{endDate}
+        and t.create_time > #{startDate}
+        and t.create_time < #{endDate}
         ) receivedFee
         from pay_fee_detail_month a
         inner join pay_fee_config pfc on a.config_id = pfc.config_id and pfc.status_cd = '0'
@@ -1043,6 +1043,23 @@
             #{item}
         </foreach>
     </select>
+
+    <!-- 对象实收 -->
+    <select id="getObjReceivedFee" parameterType="Map" resultType="Map">
+        select pf.payer_obj_id payerObjId, pf.fee_type_cd feeTypeCd,pf.fee_name feeName,
+        DATE_FORMAT(t.start_time,'%Y-%m-%d') startTime,DATE_FORMAT(t.end_time,'%Y-%m-%d') endTime,t.received_amount receivedAmount
+        from pay_fee_detail t
+        left join pay_fee pf on t.fee_id = pf.fee_id and pf.status_cd = '0'
+        where 1=1
+        and t.payer_obj_type = '3333'
+        and t.community_id = #{communityId}
+        and t.create_time &gt; #{startDate}
+        and t.create_time &lt; #{endDate}
+        and t.payer_obj_id in
+        <foreach collection="objIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </select>
     <!-- 已收房屋数 -->
     <select id="getReceivedRoomCount" parameterType="Map" resultType="Map">
         select count(DISTINCT pf.payer_obj_id) count from pay_fee_detail t

+ 3 - 0
java110-interface/src/main/java/com/java110/intf/report/IReportFeeStatisticsInnerServiceSMO.java

@@ -241,4 +241,7 @@ public interface IReportFeeStatisticsInnerServiceSMO {
 
     @RequestMapping(value = "/getHisOweReceivedRoomAmount", method = RequestMethod.POST)
     double getHisOweReceivedRoomAmount(@RequestBody QueryStatisticsDto queryStatisticsDto);
+
+    @RequestMapping(value = "/getObjReceivedFee", method = RequestMethod.POST)
+    List<Map> getObjReceivedFee(@RequestBody QueryStatisticsDto queryStatisticsDto);
 }

+ 111 - 9
service-report/src/main/java/com/java110/report/cmd/dataReport/QueryReceivedDetailStatisticsCmd.java

@@ -21,6 +21,7 @@ import org.springframework.http.ResponseEntity;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -110,26 +111,127 @@ public class QueryReceivedDetailStatisticsCmd extends Cmd {
         }
 
         queryStatisticsDto.setObjIds(objIds.toArray(new String[objIds.size()]));
-        List<Map> infos = feeStatisticsImpl.getObjFeeSummary(queryStatisticsDto);
+        List<Map> infos = feeStatisticsImpl.getObjReceivedFee(queryStatisticsDto);
 
-        if(infos == null || infos.size() < 1){
+
+        if (infos == null || infos.size() < 1) {
             return datas;
         }
 
-        BigDecimal receivedFee = new BigDecimal(0.00);
-        for(int dataIndex = 0; dataIndex < datas.size();dataIndex ++){
+        //todo 清洗数据 将数据转变成 map roomId feeTypeCd->array
+        // todo 讲 payerObjId, feeTypeCd,feeName,endTime,deadlineTime,amountOwed 转换为 按payerObjId 纵向转换
+        // todo  nInfo.put(info.get("payerObjId").toString(), info.get("payerObjId").toString());
+        // todo  nInfo.put(info.get("feeTypeCd").toString(), tmpInfos);
+        infos = washInfos(infos);
+
+        BigDecimal oweFee = new BigDecimal(0.00);
+        List<Map> itemFees = null;
+        String feeTypeCd = "";
+
+        // todo 根据房屋ID 和payerObjId 比较 合并数据,讲费用大类 横向 放入 data中,
+        // todo 并且计算每个 房屋 费用大类的欠费 和房屋的总欠费
+        for (int dataIndex = 0; dataIndex < datas.size(); dataIndex++) {
             data = datas.getJSONObject(dataIndex);
-            for(Map info : infos){
-                if(!data.get("roomId").toString().equals(info.get("objId"))){
+            //todo 这里循环费用大类
+            for (Map info : infos) {
+                if (!data.getString("roomId").equals(info.get("payerObjId"))) {
                     continue;
                 }
-                receivedFee = receivedFee.add(new BigDecimal(info.get("receivedFee").toString()));
-                data.put("receivedFee"+info.get("feeTypeCd").toString(),info.get("receivedFee"));
+                feeTypeCd = info.get("feeTypeCd").toString();
+                oweFee = oweFee.add(new BigDecimal(info.get(feeTypeCd + "receivedFee").toString()));
+                data.put("receivedFee" + feeTypeCd, info.get(feeTypeCd));
             }
-            data.put("receivedFee",receivedFee.doubleValue());
+            data.put("receivedFee", oweFee.doubleValue());
         }
 
         return datas;
     }
 
+    /**
+     * //todo 清洗数据 将数据转变成 map roomId feeTypeCd->array
+     * // todo 讲 payerObjId, feeTypeCd,feeName,endTime,deadlineTime,amountOwed 转换为 按payerObjId 纵向转换
+     * // todo  nInfo.put(info.get("feeTypeCd").toString(), tmpInfos);
+     *
+     * @param infos
+     * @return
+     */
+    private List<Map> washInfos(List<Map> infos) {
+        List<Map> newInfos = new ArrayList<>();
+        for (Map info : infos) {
+            generatorNewInfo(newInfos, info);
+        }
+
+        List<Map> tmpInfos = null;
+        Map dInfo = null;
+        for (Map nInfo : newInfos) {
+            for (Map info : infos) {
+                if (!nInfo.get("payerObjId").equals(info.get("payerObjId"))) {
+                    continue;
+                }
+                tmpInfos = getTmpInfos(nInfo, info);
+                //todo 深拷贝
+                dInfo = new HashMap();
+                dInfo.putAll(info);
+                tmpInfos.add(dInfo);
+                //计算单项 欠费金额
+                computeReceivedAmount(tmpInfos, info.get("feeTypeCd").toString(), nInfo);
+                nInfo.put(info.get("feeTypeCd").toString(), tmpInfos);
+            }
+        }
+
+        return newInfos;
+
+    }
+
+    /**
+     * 计算每个费用大类的 欠费
+     *
+     * @param tmpInfos
+     * @param feeTypeCd
+     * @param nInfo
+     */
+    private void computeReceivedAmount(List<Map> tmpInfos, String feeTypeCd, Map nInfo) {
+        if (tmpInfos == null || tmpInfos.size() < 1) {
+            nInfo.put(feeTypeCd + "receivedFee", 0.0);
+            return;
+        }
+        BigDecimal receivedAmount = new BigDecimal(0.0);
+        for (Map tInfo : tmpInfos) {
+            receivedAmount = receivedAmount.add(new BigDecimal(tInfo.get("receivedAmount").toString()));
+        }
+        receivedAmount = receivedAmount.setScale(2, BigDecimal.ROUND_HALF_UP);
+        nInfo.put(feeTypeCd + "receivedFee", receivedAmount.doubleValue());
+    }
+
+    private List<Map> getTmpInfos(Map nInfo, Map info) {
+        String feeTypeCd = info.get("feeTypeCd").toString();
+        if (nInfo.containsKey(feeTypeCd)) {
+            return (List<Map>) nInfo.get(feeTypeCd);
+        }
+
+        return new ArrayList<>();
+    }
+
+    /**
+     * 查询 新数据对方
+     *
+     * @param newInfos
+     * @param info
+     * @return
+     */
+    private void generatorNewInfo(List<Map> newInfos, Map info) {
+        if (newInfos.size() < 1) {
+            newInfos.add(info);
+            return;
+        }
+
+        for (Map newInfo : newInfos) {
+            if (newInfo.get("payerObjId").equals(info.get("payerObjId"))) {
+                return;
+            }
+        }
+
+        newInfos.add(info);
+    }
+
 }

+ 7 - 0
service-report/src/main/java/com/java110/report/dao/IReportFeeStatisticsServiceDao.java

@@ -229,4 +229,11 @@ public interface IReportFeeStatisticsServiceDao {
     long getHisOweReceivedRoomCount(Map info);
 
     double getHisOweReceivedRoomAmount(Map info);
+
+    /**
+     * 费用对象实收
+     * @param info
+     * @return
+     */
+    List<Map> getObjReceivedFee(Map info);
 }

+ 15 - 0
service-report/src/main/java/com/java110/report/dao/impl/ReportFeeStatisticsServiceDaoImpl.java

@@ -218,6 +218,7 @@ public class ReportFeeStatisticsServiceDaoImpl extends BaseServiceDao implements
 
     /**
      * 查询优惠费用
+     *
      * @param info
      * @return
      */
@@ -234,6 +235,7 @@ public class ReportFeeStatisticsServiceDaoImpl extends BaseServiceDao implements
 
     /**
      * 查询滞纳金
+     *
      * @param info
      * @return
      */
@@ -250,6 +252,7 @@ public class ReportFeeStatisticsServiceDaoImpl extends BaseServiceDao implements
 
     /**
      * 查询预存账户
+     *
      * @param info
      * @return
      */
@@ -266,6 +269,7 @@ public class ReportFeeStatisticsServiceDaoImpl extends BaseServiceDao implements
 
     /**
      * 查询扣款
+     *
      * @param info
      * @return
      */
@@ -293,6 +297,7 @@ public class ReportFeeStatisticsServiceDaoImpl extends BaseServiceDao implements
 
     /**
      * 押金 退还
+     *
      * @param info
      * @return
      */
@@ -360,6 +365,7 @@ public class ReportFeeStatisticsServiceDaoImpl extends BaseServiceDao implements
 
     /**
      * 查询欠费对象
+     *
      * @param info
      * @return
      */
@@ -413,4 +419,13 @@ public class ReportFeeStatisticsServiceDaoImpl extends BaseServiceDao implements
         return Double.parseDouble(infos.get(0).get("amount").toString());
     }
 
+    @Override
+    public List<Map> getObjReceivedFee(Map info) {
+        List<Map> infos = sqlSessionTemplate.selectList("reportFeeStatisticsServiceDaoImpl.getObjReceivedFee", info);
+
+
+        return infos;
+
+    }
+
 }

+ 6 - 0
service-report/src/main/java/com/java110/report/smo/impl/ReportFeeStatisticsInnerServiceSMOImpl.java

@@ -280,4 +280,10 @@ public class ReportFeeStatisticsInnerServiceSMOImpl extends BaseServiceSMO imple
         double info = reportFeeStatisticsServiceDaoImpl.getHisOweReceivedRoomAmount(BeanConvertUtil.beanCovertMap(queryStatisticsDto));
         return info;
     }
+
+    @Override
+    public List<Map> getObjReceivedFee(@RequestBody QueryStatisticsDto queryStatisticsDto) {
+        List<Map> infos = reportFeeStatisticsServiceDaoImpl.getObjReceivedFee(BeanConvertUtil.beanCovertMap(queryStatisticsDto));
+        return infos;
+    }
 }

+ 7 - 0
service-report/src/main/java/com/java110/report/statistics/IFeeStatistics.java

@@ -229,4 +229,11 @@ public interface IFeeStatistics {
     long getHisOweReceivedRoomCount(QueryStatisticsDto queryStatisticsDto);
 
     double getHisOweReceivedRoomAmount(QueryStatisticsDto queryStatisticsDto);
+
+    /**
+     * 查询实收
+     * @param queryStatisticsDto
+     * @return
+     */
+    List<Map> getObjReceivedFee(QueryStatisticsDto queryStatisticsDto);
 }

+ 5 - 0
service-report/src/main/java/com/java110/report/statistics/impl/FeeStatisticsImpl.java

@@ -271,4 +271,9 @@ public class FeeStatisticsImpl implements IFeeStatistics {
         return reportFeeStatisticsInnerServiceSMOImpl.getHisOweReceivedRoomAmount(queryStatisticsDto);
     }
 
+    @Override
+    public List<Map> getObjReceivedFee(QueryStatisticsDto queryStatisticsDto) {
+        return reportFeeStatisticsInnerServiceSMOImpl.getObjReceivedFee(queryStatisticsDto);
+    }
+
 }