wuxw лет назад: 2
Родитель
Сommit
d79b3ed292

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java

@@ -172,6 +172,8 @@ public class FeeDto extends PageDto implements Serializable {
 
     private String ruleId;
 
+    private String monthCycle;
+
     public String getAmount() {
         return amount;
     }
@@ -846,4 +848,12 @@ public class FeeDto extends PageDto implements Serializable {
     public void setRuleId(String ruleId) {
         this.ruleId = ruleId;
     }
+
+    public String getMonthCycle() {
+        return monthCycle;
+    }
+
+    public void setMonthCycle(String monthCycle) {
+        this.monthCycle = monthCycle;
+    }
 }

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/payFeeRuleBill/PayFeeRuleBillDto.java

@@ -26,6 +26,8 @@ public class PayFeeRuleBillDto extends FeeDto implements Serializable {
     private String batchId;
     private String feeId;
 
+    private String monthCycle;
+
 
     private Date createTime;
 
@@ -120,4 +122,12 @@ public class PayFeeRuleBillDto extends FeeDto implements Serializable {
     public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
+
+    public String getMonthCycle() {
+        return monthCycle;
+    }
+
+    public void setMonthCycle(String monthCycle) {
+        this.monthCycle = monthCycle;
+    }
 }

+ 8 - 0
java110-bean/src/main/java/com/java110/po/payFeeRuleBill/PayFeeRuleBillPo.java

@@ -39,6 +39,8 @@ public class PayFeeRuleBillPo implements Serializable {
     private String batchId;
     private String feeId;
 
+    private String monthCycle;
+
     public String getBillName() {
         return billName;
     }
@@ -119,5 +121,11 @@ public class PayFeeRuleBillPo implements Serializable {
         this.feeId = feeId;
     }
 
+    public String getMonthCycle() {
+        return monthCycle;
+    }
 
+    public void setMonthCycle(String monthCycle) {
+        this.monthCycle = monthCycle;
+    }
 }

+ 6 - 78
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java

@@ -158,54 +158,6 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
     }
 
     private void computeFeePrice(FeeDto feeDto, RoomDto roomDto) {
-
-        if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) { //房屋相关
-            computeFeePriceByRoom(feeDto, roomDto);
-        } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {//车位相关
-            computeFeePriceByParkingSpace(feeDto);
-        } else if (FeeDto.PAYER_OBJ_TYPE_CONTRACT.equals(feeDto.getPayerObjType())) { //房屋相关
-            computeFeePriceByContract(feeDto, roomDto);
-        }
-    }
-
-    private void computeFeePriceByParkingSpace(FeeDto feeDto) {
-        Map<String, Object> targetEndDateAndOweMonth = getTargetEndDateAndOweMonth(feeDto);
-        Date targetEndDate = (Date) targetEndDateAndOweMonth.get("targetEndDate");
-        double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
-        OwnerCarDto ownerCarDto = new OwnerCarDto();
-        ownerCarDto.setCommunityId(feeDto.getCommunityId());
-        ownerCarDto.setCarId(feeDto.getPayerObjId());
-        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-
-        if (ownerCarDtos == null || ownerCarDtos.size() < 1) { //数据有问题
-            return;
-        }
-
-        String computingFormula = feeDto.getComputingFormula();
-        Map feePriceAll = getFeePrice(feeDto);
-
-        feeDto.setFeePrice(Double.parseDouble(feePriceAll.get("feePrice").toString()));
-        BigDecimal price = new BigDecimal(feeDto.getFeePrice());
-        price = price.multiply(new BigDecimal(oweMonth));
-        feeDto.setFeeTotalPrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-        feeDto.setDeadlineTime(targetEndDate);
-
-        //动态费用
-        if ("4004".equals(computingFormula)
-                && FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())
-                && !FeeDto.STATE_FINISH.equals(feeDto.getState())) {
-            feeDto.setAmountOwed(feeDto.getFeeTotalPrice() + "");
-            //feeDto.setDeadlineTime(DateUtil.getCurrentDate()); 欠费日期不对先注释
-        }
-
-    }
-
-    /**
-     * 根据房屋来算单价
-     *
-     * @param feeDto
-     */
-    private void computeFeePriceByRoom(FeeDto feeDto, RoomDto roomDto) {
         Map<String, Object> targetEndDateAndOweMonth = getTargetEndDateAndOweMonth(feeDto);
         Date targetEndDate = (Date) targetEndDateAndOweMonth.get("targetEndDate");
         double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
@@ -213,7 +165,7 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
         String computingFormula = feeDto.getComputingFormula();
         Map feePriceAll = getFeePrice(feeDto, roomDto);
         feeDto.setFeePrice(Double.parseDouble(feePriceAll.get("feePrice").toString()));
-        //double month = dayCompare(feeDto.getEndTime(), DateUtil.getCurrentDate());
+
         BigDecimal price = new BigDecimal(feeDto.getFeePrice());
         price = price.multiply(new BigDecimal(oweMonth));
         feeDto.setFeeTotalPrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
@@ -227,38 +179,10 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
             //feeDto.setDeadlineTime(DateUtil.getCurrentDate()); 欠费日期不对先注释
         }
 
-        //考虑租金递增
+        //todo 考虑租金递增
         dealRentRate(feeDto);
     }
 
-    /**
-     * 根据房屋来算单价
-     *
-     * @param feeDto
-     */
-    private void computeFeePriceByContract(FeeDto feeDto, RoomDto roomDto) {
-        Map<String, Object> targetEndDateAndOweMonth = getTargetEndDateAndOweMonth(feeDto);
-        Date targetEndDate = (Date) targetEndDateAndOweMonth.get("targetEndDate");
-        double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
-
-        String computingFormula = feeDto.getComputingFormula();
-        Map feePriceAll = getFeePrice(feeDto, roomDto);
-        feeDto.setFeePrice(Double.parseDouble(feePriceAll.get("feePrice").toString()));
-        //double month = dayCompare(feeDto.getEndTime(), DateUtil.getCurrentDate());
-        BigDecimal price = new BigDecimal(feeDto.getFeePrice());
-        price = price.multiply(new BigDecimal(oweMonth));
-        feeDto.setFeeTotalPrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-        feeDto.setDeadlineTime(targetEndDate);
-
-        //动态费用
-        if ("4004".equals(computingFormula)
-                && FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())
-                && !FeeDto.STATE_FINISH.equals(feeDto.getState())) {
-            feeDto.setAmountOwed(feeDto.getFeeTotalPrice() + "");
-            //feeDto.setDeadlineTime(DateUtil.getCurrentDate()); 欠费日期不对先注释
-        }
-    }
-
 
     /**
      * 刷新 收据明细
@@ -1720,6 +1644,10 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
             if (preEndTime.getTime() <= DateUtil.getCurrentDate().getTime()) {
                 // 目标到期时间 - 到期时间 = 欠费月份
                 oweMonth = 1.0;
+                //todo 这里考虑 账单模式的场景
+                if (!StringUtil.isNumber(feeDto.getMonthCycle())) {
+                    oweMonth = Integer.parseInt(feeDto.getMonthCycle());
+                }
             }
 
         } else if (FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())) {

+ 3 - 1
java110-db/src/main/resources/mapper/fee/FeeServiceDaoImplMapper.xml

@@ -139,7 +139,8 @@
         mw.pre_reading_time preReadingTime,mw.cur_reading_time curReadingTime,pfa1.`value` deadlineTime,pfa1.`value` maxEndTime,mw.price
         mwPrice,
         pfa2.`value` ownerName,t.batch_id,t.batch_id batchId,
-        pfc.pay_online payOnline,pfc.scale,pfc.decimal_place decimalPlace,pfc.units,pfc.prepayment_period prepaymentPeriod
+        pfc.pay_online payOnline,pfc.scale,pfc.decimal_place decimalPlace,pfc.units,pfc.prepayment_period prepaymentPeriod,
+        pfrb.rule_id ruleId,pfrb.month_cycle monthCycle
         from pay_fee t
         INNER join pay_fee_config pfc on t.config_id = pfc.config_id and
         pfc.status_cd = '0'
@@ -155,6 +156,7 @@
         LEFT JOIN pay_fee_attrs pfa2 on t.fee_id = pfa2.fee_id and pfa2.spec_cd = '390008' and pfa2.status_cd = '0'
         left join import_fee_detail ifd on t.fee_id = ifd.fee_id and ifd.status_cd = '0' and t.fee_flag = '2006012'
         LEFT JOIN meter_water mw on t.fee_id = mw.fee_id and mw.status_cd = '0' and mw.community_id = t.community_id
+        LEFT JOIN pay_fee_rule_bill pfrb on t.fee_id = pfrb.fee_id and pfrb.status_cd = '0' and pfrb.community_id = t.community_id
         <if test="ownerId != null and ownerId != ''">
             LEFT JOIN pay_fee_attrs pfao on t.fee_id = pfao.fee_id and pfao.spec_cd = '390007' and pfao.status_cd = '0'
         </if>

+ 5 - 8
java110-db/src/main/resources/mapper/fee/PayFeeRuleBillV1ServiceDaoImplMapper.xml

@@ -8,18 +8,18 @@
     <!-- 保存费用账单信息 add by wuxw 2018-07-03 -->
     <insert id="savePayFeeRuleBillInfo" parameterType="Map">
         insert into pay_fee_rule_bill(
-        bill_name,config_id,bill_id,cur_year_month,remark,rule_id,community_id,batch_id,fee_id
+        bill_name,config_id,bill_id,cur_year_month,remark,rule_id,community_id,batch_id,fee_id,month_cycle
         ) values (
-        #{billName},#{configId},#{billId},#{curYearMonth},#{remark},#{ruleId},#{communityId},#{batchId},#{feeId}
+        #{billName},#{configId},#{billId},#{curYearMonth},#{remark},#{ruleId},#{communityId},#{batchId},#{feeId},#{monthCycle}
         )
     </insert>
 
     <insert id="savePayFeeRuleBills" parameterType="Map">
         insert into pay_fee_rule_bill(
-        bill_name,config_id,bill_id,cur_year_month,remark,rule_id,community_id,batch_id,fee_id
+        bill_name,config_id,bill_id,cur_year_month,remark,rule_id,community_id,batch_id,fee_id,month_cycle
         ) values
         <foreach collection="payFeeRuleBillPos" item="item" separator=",">
-            (#{item.billName},#{item.configId},#{item.billId},#{item.curYearMonth},#{item.remark},#{item.ruleId},#{item.communityId},#{item.batchId},#{item.feeId})
+            (#{item.billName},#{item.configId},#{item.billId},#{item.curYearMonth},#{item.remark},#{item.ruleId},#{item.communityId},#{item.batchId},#{item.feeId},#{item.monthCycle})
         </foreach>
 
     </insert>
@@ -40,7 +40,7 @@
         pfa.value importFeeName,pfa1.`value` deadlineTime,pfa1.`value` maxEndTime,
         pfa2.`value` ownerName,t.batch_id,t.batch_id batchId,
         pfc.pay_online payOnline,pfc.scale,pfc.decimal_place decimalPlace,pfc.units,pfc.prepayment_period prepaymentPeriod,
-        pfrb.bill_name billName,pfrb.bill_id billId,pfrb.cur_year_month curYearMonth,pfrb.remark,pfrb.rule_id ruleId
+        pfrb.bill_name billName,pfrb.bill_id billId,pfrb.cur_year_month curYearMonth,pfrb.remark,pfrb.rule_id ruleId,pfrb.month_cycle monthCycle
         from pay_fee t
         inner join pay_fee_rule_bill pfrb on t.fee_id = pfrb.fee_id and pfrb.status_cd = '0'
         INNER join pay_fee_config pfc on t.config_id = pfc.config_id and
@@ -111,9 +111,6 @@
             , t.remark= #{remark}
         </if>
 
-
-
-
         where 1=1
         <if test="billId !=null and billId != ''">
             and t.bill_id= #{billId}

+ 3 - 1
java110-db/src/main/resources/mapper/report/ReportFeeServiceDaoImplMapper.xml

@@ -64,7 +64,8 @@
         mw.pre_reading_time preReadingTime,mw.cur_reading_time curReadingTime,pfa1.`value` deadlineTime,mw.price
         mwPrice,
         pfa2.`value` ownerTel, pfa3.`value` ownerName,br.room_area roomArea,
-        pfc.pay_online payOnline,pfc.scale,pfc.decimal_place decimalPlace,pfc.units,br.room_rent roomRent,pfc.prepayment_period prepaymentPeriod
+        pfc.pay_online payOnline,pfc.scale,pfc.decimal_place decimalPlace,pfc.units,br.room_rent roomRent,pfc.prepayment_period prepaymentPeriod,
+        pfrb.rule_id ruleId,pfrb.month_cycle monthCycle
         from pay_fee t
         INNER JOIN pay_fee_config pfc on t.config_id = pfc.config_id and pfc.status_cd = '0'
         left join building_room br on t.payer_obj_id = br.room_id and t.payer_obj_type = '3333' and br.status_cd = '0'
@@ -77,6 +78,7 @@
         LEFT JOIN pay_fee_attrs pfa3 on t.fee_id = pfa3.fee_id and pfa3.spec_cd = '390008' and pfa3.status_cd = '0'
         left join import_fee_detail ifd on t.fee_id = ifd.fee_id and ifd.status_cd = '0' and t.fee_flag = '2006012'
         LEFT JOIN meter_water mw on t.fee_id = mw.fee_id and mw.status_cd = '0' and mw.community_id = t.community_id
+        LEFT JOIN pay_fee_rule_bill pfrb on t.fee_id = pfrb.fee_id and pfrb.status_cd = '0' and pfrb.community_id = t.community_id
         where t.status_cd = '0'
         <if test="state !=null and state != ''">
             and t.state= #{state}

+ 4 - 49
service-fee/src/main/java/com/java110/fee/cmd/fee/ListFeeCmd.java

@@ -219,55 +219,6 @@ public class ListFeeCmd extends Cmd {
     }
 
     private void freshFeeAttrs(List<ApiFeeDataVo> fees, List<FeeDto> feeDtos) {
-        String link = "";
-        //todo 影响查询性能 注释 by wuxw
-//        for (FeeDto feeDto : feeDtos) {
-//            if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) { //房屋
-//                OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
-//                ownerRoomRelDto.setRoomId(feeDto.getPayerObjId());
-//                List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelV1InnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
-//                if (ownerRoomRelDtos == null || ownerRoomRelDtos.size() < 1) {
-//                    continue;
-//                }
-//                OwnerDto ownerDto = new OwnerDto();
-//                ownerDto.setMemberId(ownerRoomRelDtos.get(0).getOwnerId());
-//                List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto);
-//                Assert.listOnlyOne(ownerDtos, "查询业主错误!");
-//                link = ownerDtos.get(0).getLink();
-//            } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {
-//                OwnerCarDto ownerCarDto = new OwnerCarDto();
-//                ownerCarDto.setMemberId(feeDto.getPayerObjId());
-//                List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-//                Assert.listOnlyOne(ownerCarDtos, "查询业主车辆表错误!");
-//                OwnerDto ownerDto = new OwnerDto();
-//                ownerDto.setMemberId(ownerCarDtos.get(0).getOwnerId());
-//                List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto);
-//                Assert.listOnlyOne(ownerDtos, "查询业主错误!");
-//                link = ownerDtos.get(0).getLink();
-//            }
-//            FeeAttrDto feeAttrDto = new FeeAttrDto();
-//            feeAttrDto.setFeeId(feeDto.getFeeId());
-//            List<FeeAttrDto> feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto);
-//            if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
-//                continue;
-//            }
-//            for (FeeAttrDto feeAttr : feeAttrDtos) {
-//                if (!FeeAttrDto.SPEC_CD_OWNER_LINK.equals(feeAttr.getSpecCd())) { //联系方式
-//                    continue;
-//                }
-//                if (feeAttr.getValue().equals(link)) {
-//                    continue;
-//                }
-//                FeeAttrPo feeAttrPo = new FeeAttrPo();
-//                feeAttrPo.setAttrId(feeAttr.getAttrId());
-//                feeAttrPo.setValue(link);
-//                int flag = feeAttrInnerServiceSMOImpl.updateFeeAttr(feeAttrPo);
-//                if (flag < 1) {
-//                    throw new CmdException("更新业主联系方式失败");
-//                }
-//
-//            }
-//        }
         for (ApiFeeDataVo apiFeeDataVo : fees) {
             for (FeeDto feeDto : feeDtos) {
                 if (apiFeeDataVo.getFeeId().equals(feeDto.getFeeId())) {
@@ -302,6 +253,10 @@ public class ListFeeCmd extends Cmd {
                 Date targetEndDate = (Date) targetEndDateAndOweMonth.get("targetEndDate");
                 double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
                 feeDto.setCycle(feeDto.getPaymentCycle());
+                //todo 这里考虑 账单模式的场景
+                if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+                    feeDto.setCycle(oweMonth + "");
+                }
                 feeDto.setDeadlineTime(targetEndDate);
                 //todo 算费
                 doComputeFeePrice(feeDto, oweMonth);