wuxw пре 2 година
родитељ
комит
45bdd91e45

+ 18 - 0
java110-interface/src/main/java/com/java110/intf/fee/IRuleGeneratorPayFeeBillV1InnerServiceSMO.java

@@ -17,6 +17,7 @@ package com.java110.intf.fee;
 
 import com.java110.config.feign.FeignConfiguration;
 import com.java110.dto.payFeeRule.PayFeeRuleDto;
+import com.java110.po.fee.PayFeePo;
 import com.java110.po.payFeeRule.PayFeeRulePo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -47,4 +48,21 @@ public interface IRuleGeneratorPayFeeBillV1InnerServiceSMO {
     int covertCommunityPayFee(@RequestBody String communityId);
 
 
+    /**
+     * 生成费用账单(周期性费用和间接性费用)
+     *
+     * @param feePos
+     * @return Y表示生成 N 表示条件不具备不需要生成
+     */
+    @RequestMapping(value = "/needGeneratorBillData", method = RequestMethod.POST)
+    String needGeneratorBillData(@RequestBody List<PayFeePo> feePos);
+
+    /**
+     * 生成费用账单(周期性费用和间接性费用)
+     *
+     * @param feePo
+     * @return Y表示生成 N 表示条件不具备不需要生成
+     */
+    @RequestMapping(value = "/needGeneratorBillDataOnlyFee", method = RequestMethod.POST)
+    String needGeneratorBillDataOnlyFee(@RequestBody PayFeePo feePo);
 }

+ 93 - 141
service-fee/src/main/java/com/java110/fee/cmd/fee/SaveRoomCreateFeeCmd.java

@@ -16,10 +16,7 @@ import com.java110.dto.user.UserDto;
 import com.java110.fee.bmo.fee.IFeeBMO;
 import com.java110.fee.feeMonth.IPayFeeMonth;
 import com.java110.intf.community.IRoomInnerServiceSMO;
-import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
-import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
-import com.java110.intf.fee.IFeeInnerServiceSMO;
-import com.java110.intf.fee.IPayFeeBatchV1InnerServiceSMO;
+import com.java110.intf.fee.*;
 import com.java110.intf.user.IOwnerInnerServiceSMO;
 import com.java110.intf.user.IUserInnerServiceSMO;
 import com.java110.po.fee.FeeAttrPo;
@@ -75,12 +72,14 @@ public class SaveRoomCreateFeeCmd extends Cmd {
     @Autowired
     private IPayFeeMonth payFeeMonthImpl;
 
+    @Autowired
+    private IRuleGeneratorPayFeeBillV1InnerServiceSMO ruleGeneratorPayFeeBillV1InnerServiceSMOImpl;
+
 
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         // super.validatePageInfo(pd);
         Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID");
-        Assert.hasKeyAndValue(reqJson, "locationTypeCd", "未包含收费范围");
         Assert.hasKeyAndValue(reqJson, "locationObjId", "未包含收费对象");
         Assert.hasKeyAndValue(reqJson, "configId", "未包含收费项目");
         Assert.hasKeyAndValue(reqJson, "storeId", "未包含商户ID");
@@ -98,14 +97,11 @@ public class SaveRoomCreateFeeCmd extends Cmd {
         if (!FeeDto.FEE_FLAG_CYCLE.equals(feeConfigDtos.get(0).getFeeFlag()) && reqJson.containsKey("endTime")) {
             Date endTime = null;
             Date configEndTime = null;
-            try {
-                endTime = DateUtil.getDateFromString(reqJson.getString("endTime"), DateUtil.DATE_FORMATE_STRING_B);
-                configEndTime = DateUtil.getDateFromString(feeConfigDtos.get(0).getEndTime(), DateUtil.DATE_FORMATE_STRING_A);
-                if (endTime.getTime() > configEndTime.getTime()) {
-                    throw new IllegalArgumentException("结束时间不能超过费用项时间");
-                }
-            } catch (ParseException e) {
-                throw new IllegalArgumentException("结束时间错误" + reqJson.getString("endTime"));
+
+            endTime = DateUtil.getDateFromStringB(reqJson.getString("endTime"));
+            configEndTime = DateUtil.getDateFromStringA(feeConfigDtos.get(0).getEndTime());
+            if (endTime.getTime() > configEndTime.getTime()) {
+                throw new IllegalArgumentException("结束时间不能超过费用项时间");
             }
         }
 
@@ -125,152 +121,80 @@ public class SaveRoomCreateFeeCmd extends Cmd {
         reqJson.put("userId", userId);
         List<RoomDto> roomDtos = null;
 
-
-        //生成批次号
+        //todo 生成批次号
         generatorBatch(reqJson);
-        //判断收费范围
+
         RoomDto roomDto = new RoomDto();
-        /*if (reqJson.containsKey("roomState") && RoomDto.STATE_SELL.equals(reqJson.getString("roomState"))) {
-            roomDto.setState(RoomDto.STATE_SELL);
-        }*/
-        if (reqJson.containsKey("roomState") && (reqJson.getString("roomState").contains(",") || !StringUtil.isEmpty(reqJson.getString("roomState")))) {
-            String states = reqJson.getString("roomState");
-            roomDto.setStates(states.split(","));
-        }
-        //如果区分了 房屋类型则设置
-        if (reqJson.containsKey("roomType")) {
-            roomDto.setRoomType(reqJson.getString("roomType"));
-        }
-        if (reqJson.containsKey("feeLayer") && !"全部".equals(reqJson.getString("feeLayer"))) {
-            String[] layers = reqJson.getString("feeLayer").split("#");
-            roomDto.setLayers(layers);
-        }
-        if ("1000".equals(reqJson.getString("locationTypeCd"))) {//小区
-            roomDto.setCommunityId(reqJson.getString("communityId"));
-            roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-        } else if ("4000".equals(reqJson.getString("locationTypeCd"))) {//楼栋
-            //RoomDto roomDto = new RoomDto();
-            roomDto.setCommunityId(reqJson.getString("communityId"));
-            roomDto.setFloorId(reqJson.getString("locationObjId"));
-            roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-        } else if ("2000".equals(reqJson.getString("locationTypeCd"))) {//单元
-            //RoomDto roomDto = new RoomDto();
-            roomDto.setCommunityId(reqJson.getString("communityId"));
-            roomDto.setUnitId(reqJson.getString("locationObjId"));
-            roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-        } else if ("3000".equals(reqJson.getString("locationTypeCd"))) {//房屋
-            //RoomDto roomDto = new RoomDto();
-            roomDto.setCommunityId(reqJson.getString("communityId"));
-            roomDto.setRoomId(reqJson.getString("locationObjId"));
-            roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-        } else {
-            throw new IllegalArgumentException("收费范围错误");
-        }
-        if (roomDtos == null || roomDtos.size() < 1) {
+        roomDto.setRoomType(reqJson.getString("roomType"));
+        roomDto.setCommunityId(reqJson.getString("communityId"));
+        roomDto.setRoomId(reqJson.getString("locationObjId"));
+        roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
+
+        if (roomDtos == null || roomDtos.isEmpty()) {
             throw new IllegalArgumentException("未查到需要付费的房屋或未绑定业主");
         }
-        dealRoomFee(roomDtos, cmdDataFlowContext, reqJson, event);
+        dealRoomFee(roomDtos.get(0), cmdDataFlowContext, reqJson, event);
     }
 
-    /**
-     * 生成批次号
-     *
-     * @param reqJson
-     */
-    private void generatorBatch(JSONObject reqJson) {
-        PayFeeBatchPo payFeeBatchPo = new PayFeeBatchPo();
-        payFeeBatchPo.setBatchId(GenerateCodeFactory.getGeneratorId("12"));
-        payFeeBatchPo.setCommunityId(reqJson.getString("communityId"));
-        payFeeBatchPo.setCreateUserId(reqJson.getString("userId"));
-        UserDto userDto = new UserDto();
-        userDto.setUserId(reqJson.getString("userId"));
-        List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
-
-        Assert.listOnlyOne(userDtos, "用户不存在");
-        payFeeBatchPo.setCreateUserName(userDtos.get(0).getUserName());
-        payFeeBatchPo.setState(PayFeeBatchDto.STATE_NORMAL);
-        payFeeBatchPo.setMsg("正常");
-        int flag = payFeeBatchV1InnerServiceSMOImpl.savePayFeeBatch(payFeeBatchPo);
+    private void dealRoomFee(RoomDto roomDto, ICmdDataFlowContext context, JSONObject reqJson, CmdEvent event) {
 
-        if (flag < 1) {
-            throw new IllegalArgumentException("生成批次失败");
-        }
-
-        reqJson.put("batchId", payFeeBatchPo.getBatchId());
-    }
-
-    private void dealRoomFee(List<RoomDto> roomDtos, ICmdDataFlowContext context, JSONObject reqJson, CmdEvent event) {
-        List<String> roomIds = new ArrayList<>();
-        for (RoomDto roomDto : roomDtos) {
-            roomIds.add(roomDto.getRoomId());
-        }
-        //房屋刷入业主信息
+        //todo 房屋刷入业主信息
         OwnerDto ownerDto = new OwnerDto();
-        ownerDto.setCommunityId(roomDtos.get(0).getCommunityId());
-        ownerDto.setRoomIds(roomIds.toArray(new String[roomIds.size()]));
+        ownerDto.setCommunityId(roomDto.getCommunityId());
+        ownerDto.setRoomId(roomDto.getRoomId());
         List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto);
-        for (RoomDto roomDto : roomDtos) {
-            for (OwnerDto tmpOwnerDto : ownerDtos) {
-                if (roomDto.getRoomId().equals(tmpOwnerDto.getRoomId())) {
-                    roomDto.setOwnerId(tmpOwnerDto.getOwnerId());
-                    roomDto.setOwnerName(tmpOwnerDto.getName());
-                    roomDto.setLink(tmpOwnerDto.getLink());
-                }
-            }
+
+        if (ownerDtos != null && !ownerDtos.isEmpty()) {
+            roomDto.setOwnerId(ownerDtos.get(0).getOwnerId());
+            roomDto.setOwnerName(ownerDtos.get(0).getName());
+            roomDto.setLink(ownerDtos.get(0).getLink());
         }
+
         List<PayFeePo> feePos = new ArrayList<>();
         List<FeeAttrPo> feeAttrsPos = new ArrayList<>();
         ResponseEntity<String> responseEntity = null;
-        int failRooms = 0;
-        //添加单元信息
-        int curFailRoomCount = 0;
-        int saveFlag = 0;
-        for (int roomIndex = 0; roomIndex < roomDtos.size(); roomIndex++) {
-            curFailRoomCount++;
-            //加入 房屋费用
-            feePos.add(BeanConvertUtil.covertBean(feeBMOImpl.addRoomFee(roomDtos.get(roomIndex), reqJson, context), PayFeePo.class));
-            if (!StringUtil.isEmpty(roomDtos.get(roomIndex).getOwnerId())) {
-                if (!FeeDto.FEE_FLAG_CYCLE.equals(reqJson.getString("feeFlag"))) {
-                    feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME, reqJson.containsKey("endTime") ? reqJson.getString("endTime") : reqJson.getString("configEndTime")));
-                }
-                feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_ID, roomDtos.get(roomIndex).getOwnerId()));
-                feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_LINK, roomDtos.get(roomIndex).getLink()));
-                feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_NAME, roomDtos.get(roomIndex).getOwnerName()));
-            }
 
-            //todo 定制开发 加入
-            //1、对合同约定的租金递增比例、递增年限各不相同的问题,支持按合同到期日期设租金递增比例。
-            //2、能自动设置递增的租金实行自动计算当月的租金。
-            if (reqJson.containsKey("configComputingFormula") && FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(reqJson.getString("configComputingFormula"))) {
-                feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE_CYCLE, reqJson.getString("rateCycle")));
-                feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE, reqJson.getString("rate")));
-                feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE_START_TIME, reqJson.getString("rateStartTime")));
-            }
+        //todo 加入 房屋费用
+        feePos.add(BeanConvertUtil.covertBean(feeBMOImpl.addRoomFee(roomDto, reqJson, context), PayFeePo.class));
+
+        //todo 走账单模式
+        String billModal = ruleGeneratorPayFeeBillV1InnerServiceSMOImpl.needGeneratorBillData(feePos);
+        if ("Y".equals(billModal)) {
+            JSONObject paramOut = new JSONObject();
+            paramOut.put("totalRoom", 1);
+            paramOut.put("successRoom", 1);
+            paramOut.put("errorRoom", 0);
+            responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK);
+            context.setResponseEntity(responseEntity);
+            return;
+        }
 
-            //付费对象名称
-            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME, roomDtos.get(roomIndex).getFloorNum() + "-" + roomDtos.get(roomIndex).getUnitNum() + "-" + roomDtos.get(roomIndex).getRoomNum()));
-
-            if (roomIndex % DEFAULT_ADD_FEE_COUNT == 0 && roomIndex != 0) {
-                saveFlag = saveFeeAndAttrs(feePos, feeAttrsPos);
-                feePos = new ArrayList<>();
-                feeAttrsPos = new ArrayList<>();
-                if (saveFlag < 1) {
-                    failRooms += curFailRoomCount;
-                } else {
-                    curFailRoomCount = 0;
-                }
+        if (!StringUtil.isEmpty(roomDto.getOwnerId())) {
+            if (!FeeDto.FEE_FLAG_CYCLE.equals(reqJson.getString("feeFlag"))) {
+                feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME, reqJson.containsKey("endTime") ? reqJson.getString("endTime") : reqJson.getString("configEndTime")));
             }
+            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_ID, roomDto.getOwnerId()));
+            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_LINK, roomDto.getLink()));
+            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_OWNER_NAME, roomDto.getOwnerName()));
         }
-        if (feePos != null && feePos.size() > 0) {
-            saveFlag = saveFeeAndAttrs(feePos, feeAttrsPos);
-            if (saveFlag < 1) {
-                failRooms += curFailRoomCount;
-            }
+
+        //todo 定制开发 加入
+        //1、对合同约定的租金递增比例、递增年限各不相同的问题,支持按合同到期日期设租金递增比例。
+        //2、能自动设置递增的租金实行自动计算当月的租金。
+        if (reqJson.containsKey("configComputingFormula") && FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(reqJson.getString("configComputingFormula"))) {
+            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE_CYCLE, reqJson.getString("rateCycle")));
+            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE, reqJson.getString("rate")));
+            feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_RATE_START_TIME, reqJson.getString("rateStartTime")));
         }
+        //付费对象名称
+        feeAttrsPos.add(feeBMOImpl.addFeeAttr(reqJson, context, FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME, roomDto.getFloorNum() + "-" + roomDto.getUnitNum() + "-" + roomDto.getRoomNum()));
+
+        int saveFlag = saveFeeAndAttrs(feePos, feeAttrsPos);
+
         JSONObject paramOut = new JSONObject();
-        paramOut.put("totalRoom", roomDtos.size());
-        paramOut.put("successRoom", roomDtos.size() - failRooms);
-        paramOut.put("errorRoom", failRooms);
+        paramOut.put("totalRoom", saveFlag);
+        paramOut.put("successRoom", saveFlag);
+        paramOut.put("errorRoom", 0);
         responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK);
         context.setResponseEntity(responseEntity);
     }
@@ -293,9 +217,37 @@ public class SaveRoomCreateFeeCmd extends Cmd {
         }
         payFeeMonthImpl.doGeneratorFeeMonths(feeIds, feePos.get(0).getCommunityId());
 
-        payFeeMonthImpl.doGeneratorOweFees(feeIds,feePos.get(0).getCommunityId());
+        payFeeMonthImpl.doGeneratorOweFees(feeIds, feePos.get(0).getCommunityId());
         return flag;
     }
 
 
+    /**
+     * 生成批次号
+     *
+     * @param reqJson
+     */
+    private void generatorBatch(JSONObject reqJson) {
+        PayFeeBatchPo payFeeBatchPo = new PayFeeBatchPo();
+        payFeeBatchPo.setBatchId(GenerateCodeFactory.getGeneratorId("12"));
+        payFeeBatchPo.setCommunityId(reqJson.getString("communityId"));
+        payFeeBatchPo.setCreateUserId(reqJson.getString("userId"));
+        UserDto userDto = new UserDto();
+        userDto.setUserId(reqJson.getString("userId"));
+        List<UserDto> userDtos = userInnerServiceSMOImpl.getUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "用户不存在");
+        payFeeBatchPo.setCreateUserName(userDtos.get(0).getUserName());
+        payFeeBatchPo.setState(PayFeeBatchDto.STATE_NORMAL);
+        payFeeBatchPo.setMsg("正常");
+        int flag = payFeeBatchV1InnerServiceSMOImpl.savePayFeeBatch(payFeeBatchPo);
+
+        if (flag < 1) {
+            throw new IllegalArgumentException("生成批次失败");
+        }
+
+        reqJson.put("batchId", payFeeBatchPo.getBatchId());
+    }
+
+
 }

+ 114 - 0
service-fee/src/main/java/com/java110/fee/smo/impl/RuleGeneratorPayFeeBillV1InnerServiceSMOImpl.java

@@ -17,12 +17,21 @@ package com.java110.fee.smo.impl;
 
 
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.factory.CommunitySettingFactory;
+import com.java110.dto.fee.FeeConfigDto;
+import com.java110.dto.fee.FeeDto;
 import com.java110.fee.bill.ICycleConvertOnceFee;
+import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
 import com.java110.intf.fee.IRuleGeneratorPayFeeBillV1InnerServiceSMO;
+import com.java110.po.fee.PayFeeConfigPo;
+import com.java110.po.fee.PayFeePo;
+import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * 类表述: 服务之前调用的接口实现类,不对外提供接口能力 只用于接口建调用
  * add by 吴学文 at 2023-10-18 18:08:44 mail: 928255095@qq.com
@@ -37,6 +46,12 @@ public class RuleGeneratorPayFeeBillV1InnerServiceSMOImpl extends BaseServiceSMO
     @Autowired
     private ICycleConvertOnceFee cycleConvertOnceFeeImpl;
 
+    public static final String BILL_NO = "N";//不能生成账单
+    public static final String BILL_YES = "Y";//生成账单
+
+    @Autowired
+    private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
+
 
     /**
      * 将小区里的费用批量转换为一次性费用
@@ -46,6 +61,105 @@ public class RuleGeneratorPayFeeBillV1InnerServiceSMOImpl extends BaseServiceSMO
      */
     @Override
     public int covertCommunityPayFee(@RequestBody String communityId) {
+        String value = CommunitySettingFactory.getValue(communityId, "PAY_FEE_MONTH");
+
+        //todo 小区没有按月缴费 skip
+        if (!"ON".equals(value)) {
+            return 0;
+        }
         return cycleConvertOnceFeeImpl.covertCommunityPayFee(communityId);
     }
+
+    @Override
+    public String needGeneratorBillData(@RequestBody List<PayFeePo> feePos) {
+
+        if (feePos == null || feePos.isEmpty()) {
+            return BILL_NO;
+        }
+
+        String communityId = feePos.get(0).getCommunityId();
+
+        if (StringUtil.isEmpty(communityId)) {
+            return BILL_NO;
+        }
+
+        String value = CommunitySettingFactory.getValue(communityId, "PAY_FEE_MONTH");
+
+        //todo 小区没有按月缴费 skip
+        if (!"ON".equals(value)) {
+            return BILL_NO;
+        }
+
+        // todo 判断费用是否为周期性或者间接性费用,如果包含一次性费用就不生成
+        for (PayFeePo payFeePo : feePos) {
+            if (FeeDto.FEE_FLAG_ONCE.equals(payFeePo.getFeeFlag())) {
+                return BILL_NO;
+            }
+        }
+
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setConfigId(feePos.get(0).getConfigId());
+        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+        //todo 数据有问题 咱不处理
+        if (feeConfigDtos == null || feeConfigDtos.isEmpty()) {
+            return BILL_NO;
+        }
+
+        //todo 计算公式是否为租金递增,租金递增暂时不支持 账单模式,因为计算比较复杂
+        if (FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(feeConfigDtos.get(0).getComputingFormula())) {
+            return BILL_NO;
+        }
+
+        cycleConvertOnceFeeImpl.convertPayFees(feePos);
+
+
+        return BILL_YES;
+    }
+
+    @Override
+    public String needGeneratorBillDataOnlyFee(PayFeePo feePo) {
+        if (feePo == null) {
+            return BILL_NO;
+        }
+
+        String communityId = feePo.getCommunityId();
+
+        if (StringUtil.isEmpty(communityId)) {
+            return BILL_NO;
+        }
+
+        String value = CommunitySettingFactory.getValue(communityId, "PAY_FEE_MONTH");
+
+        //todo 小区没有按月缴费 skip
+        if (!"ON".equals(value)) {
+            return BILL_NO;
+        }
+
+        // todo 判断费用是否为周期性或者间接性费用,如果包含一次性费用就不生成
+
+        if (FeeDto.FEE_FLAG_ONCE.equals(feePo.getFeeFlag())) {
+            return BILL_NO;
+        }
+
+
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setConfigId(feePo.getConfigId());
+        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+        //todo 数据有问题 咱不处理
+        if (feeConfigDtos == null || feeConfigDtos.isEmpty()) {
+            return BILL_NO;
+        }
+
+        //todo 计算公式是否为租金递增,租金递增暂时不支持 账单模式,因为计算比较复杂
+        if (FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(feeConfigDtos.get(0).getComputingFormula())) {
+            return BILL_NO;
+        }
+
+        cycleConvertOnceFeeImpl.convertPayFee(feePo);
+
+
+        return BILL_YES;
+    }
 }

+ 14 - 4
service-job/src/main/java/com/java110/job/adapt/fee/RoomCreatePayFeeAdapt.java

@@ -18,10 +18,7 @@ import com.java110.dto.system.Business;
 import com.java110.dto.user.UserDto;
 import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.community.IRoomV1InnerServiceSMO;
-import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
-import com.java110.intf.fee.IFeeInnerServiceSMO;
-import com.java110.intf.fee.IOweFeeCallableV1InnerServiceSMO;
-import com.java110.intf.fee.IPayFeeMonthInnerServiceSMO;
+import com.java110.intf.fee.*;
 import com.java110.intf.report.IReportOweFeeInnerServiceSMO;
 import com.java110.intf.user.*;
 import com.java110.job.adapt.DatabusAdaptImpl;
@@ -82,6 +79,10 @@ public class RoomCreatePayFeeAdapt extends DatabusAdaptImpl {
     @Autowired
     private IPayFeeMonthInnerServiceSMO payFeeMonthInnerServiceSMOImpl;
 
+
+    @Autowired
+    private IRuleGeneratorPayFeeBillV1InnerServiceSMO ruleGeneratorPayFeeBillV1InnerServiceSMOImpl;
+
     @Override
     public void execute(Business business, List<Business> businesses) throws ParseException {
         JSONObject data = business.getData();
@@ -218,6 +219,15 @@ public class RoomCreatePayFeeAdapt extends DatabusAdaptImpl {
         if (feePos == null || feePos.isEmpty()) {
             return 1;
         }
+
+        //todo 账单模式
+        String billModal = ruleGeneratorPayFeeBillV1InnerServiceSMOImpl.needGeneratorBillData(feePos);
+
+        if ("Y".equals(billModal)) {
+            return 1;
+        }
+
+
         int flag = feeInnerServiceSMOImpl.saveFee(feePos);
         if (flag < 1) {
             return flag;

+ 1 - 5
service-job/src/main/java/com/java110/job/task/fee/GenerateBillProTemplate.java

@@ -57,6 +57,7 @@ public class GenerateBillProTemplate extends TaskSystemQuartz {
     private IRuleGeneratorPayFeeBillV1InnerServiceSMO ruleGeneratorPayFeeBillV1InnerServiceSMOImpl;
 
 
+
     @Override
     protected void process(TaskDto taskDto) throws Exception {
 
@@ -87,12 +88,7 @@ public class GenerateBillProTemplate extends TaskSystemQuartz {
      */
     private void doRuleCreatePayFeeBill(TaskDto taskDto, CommunityDto communityDto) {
 
-        String value = CommunitySettingFactory.getValue(communityDto.getCommunityId(), "PAY_FEE_MONTH");
 
-        //todo 小区没有按月缴费 skip
-        if (!"ON".equals(value)) {
-            return;
-        }
 
         ruleGeneratorPayFeeBillV1InnerServiceSMOImpl.covertCommunityPayFee(communityDto.getCommunityId());
     }

+ 0 - 526
service-job/src/main/java/com/java110/job/task/fee/GenerateBillTemplate.java

@@ -1,526 +0,0 @@
-package com.java110.job.task.fee;
-
-import com.java110.core.factory.GenerateCodeFactory;
-import com.java110.dto.room.RoomDto;
-import com.java110.dto.community.CommunityDto;
-import com.java110.dto.fee.*;
-import com.java110.dto.owner.OwnerCarDto;
-import com.java110.dto.owner.OwnerRoomRelDto;
-import com.java110.dto.parking.ParkingSpaceDto;
-import com.java110.dto.task.TaskDto;
-import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
-import com.java110.intf.community.IRoomInnerServiceSMO;
-import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
-import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
-import com.java110.intf.fee.IFeeInnerServiceSMO;
-import com.java110.intf.user.IOwnerCarInnerServiceSMO;
-import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
-import com.java110.job.quartz.TaskSystemQuartz;
-import com.java110.utils.constant.ResponseConstant;
-import com.java110.utils.exception.TaskTemplateException;
-import com.java110.utils.util.DateUtil;
-import com.java110.utils.util.StringUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @ClassName GenerateOwnerBillTemplate
- * @Description TODO  房屋费用账单生成
- * @Author wuxw
- * @Date 2020/6/4 8:33
- * @Version 1.0
- * add by wuxw 2020/6/4
- **/
-@Component
-public class GenerateBillTemplate extends TaskSystemQuartz {
-    private static final String TASK_ATTR_BILL_TYPE = "10002"; // 出账类型
-
-    private static final String TASK_ATTR_VALUE_MONTH = "002"; //按月出账
-
-    private static final String TASK_ATTR_VALUE_DAY = "003"; //按日出账
-
-    private static final String TASK_ATTR_VALUE_YEAR = "001"; //按年出账
-
-    private static final String TASK_ATTR_VALUE_ONCE_MONTH = "005"; //一次性按月出账
-
-    @Autowired
-    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
-
-    @Autowired
-    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
-
-    @Autowired
-    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
-
-    @Autowired
-    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
-
-    @Autowired
-    private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
-
-    @Autowired
-    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
-
-    @Autowired
-    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
-
-
-    @Override
-    protected void process(TaskDto taskDto) throws Exception {
-
-        // 获取小区
-        List<CommunityDto> communityDtos = getAllCommunity();
-
-        for (CommunityDto communityDto : communityDtos) {
-            GenerateBill(taskDto, communityDto);
-        }
-
-    }
-
-    /**
-     * 根据小区生成账单
-     *
-     * @param communityDto
-     */
-    private void GenerateBill(TaskDto taskDto, CommunityDto communityDto) {
-
-        //查询费用项
-        FeeConfigDto feeConfigDto = new FeeConfigDto();
-        feeConfigDto.setCommunityId(communityDto.getCommunityId());
-        feeConfigDto.setBillType(getCurTaskAttr(taskDto, TASK_ATTR_BILL_TYPE).getValue());
-
-        if (StringUtil.isEmpty(feeConfigDto.getBillType())) {
-            throw new IllegalArgumentException("配置错误 未拿到属性值");
-        }
-        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
-
-        for (FeeConfigDto tmpFeeConfigDto : feeConfigDtos) {
-            try {
-                GenerateBillByFeeConfig(taskDto, tmpFeeConfigDto);
-            } catch (Exception e) {
-                logger.error("费用出账失败" + tmpFeeConfigDto.getConfigId(), e);
-            }
-        }
-
-
-    }
-
-    /**
-     * 按费用项来出账
-     *
-     * @param taskDto
-     * @param feeConfigDto
-     */
-    private void GenerateBillByFeeConfig(TaskDto taskDto, FeeConfigDto feeConfigDto) throws Exception {
-
-        //当前费用项是否
-        BillDto tmpBillDto = new BillDto();
-        tmpBillDto.setCurBill("T");
-        tmpBillDto.setConfigId(feeConfigDto.getConfigId());
-        tmpBillDto.setCommunityId(feeConfigDto.getCommunityId());
-        Date startTime = getDefaultStartTime(feeConfigDto.getBillType());
-        tmpBillDto.setCurBillTime(DateUtil.getFormatTimeString(startTime, DateUtil.DATE_FORMATE_STRING_A));
-        List<BillDto> billDtos = feeInnerServiceSMOImpl.queryBills(tmpBillDto);
-
-        //Assert.listOnlyOne(billDtos, "当前存在多个有效账单" + feeConfigDto.getConfigId());
-        if (billDtos != null && billDtos.size() > 0) {
-            throw new TaskTemplateException(ResponseConstant.RESULT_CODE_ERROR, "已经出过账了");
-        }
-
-        String billId = GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_billId);
-        BillDto billDto = new BillDto();
-        billDto.setBillId(billId);
-        billDto.setBillName(feeConfigDto.getFeeName() + "-" + DateUtil.getFormatTimeString(new Date(), DateUtil.DATE_FORMATE_STRING_H));
-        billDto.setBillTime(DateUtil.getFormatTimeString(new Date(), DateUtil.DATE_FORMATE_STRING_A));
-        billDto.setCommunityId(feeConfigDto.getCommunityId());
-        billDto.setConfigId(feeConfigDto.getConfigId());
-        billDto.setCurBill("T");
-        //查询历史有效账单
-        tmpBillDto = new BillDto();
-        tmpBillDto.setCurBill("T");
-        tmpBillDto.setConfigId(feeConfigDto.getConfigId());
-        tmpBillDto.setCommunityId(feeConfigDto.getCommunityId());
-        billDtos = feeInnerServiceSMOImpl.queryBills(tmpBillDto);
-
-        startTime = (billDtos == null || billDtos.size() < 1) ? getDefaultStartTime(feeConfigDto.getBillType())
-                : DateUtil.getDateFromString(billDtos.get(0).getBillTime(), DateUtil.DATE_FORMATE_STRING_A);
-
-        FeeDto feeDto = new FeeDto();
-        feeDto.setConfigId(feeConfigDto.getConfigId());
-        feeDto.setCommunityId(feeConfigDto.getCommunityId());
-        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
-
-        //没有关联费用不做出账
-        if (feeDto == null || feeDtos.size() < 1) {
-            return;
-        }
-        billDto.setReceivable("0");
-        billDto.setReceipts("0");
-        billDto.setCurReceivable("0");
-        for (FeeDto tmpFeeDto : feeDtos) {
-            try {
-                generateFee(startTime, tmpFeeDto, billDto, feeConfigDto);
-            } catch (Exception e) {
-                logger.error("生成费用失败", e);
-            }
-        }
-
-
-        //生成本次账单
-        Date billEndTime = DateUtil.getCurrentDate();
-        billDto.setRemark(DateUtil.getFormatTimeString(startTime, DateUtil.DATE_FORMATE_STRING_A) +
-                "-" + DateUtil.getFormatTimeString(billEndTime, DateUtil.DATE_FORMATE_STRING_A) + "账单数据");
-        feeInnerServiceSMOImpl.insertBill(billDto);
-
-    }
-
-    /**
-     * 生成 费用
-     *
-     * @param feeDto
-     */
-    private void generateFee(Date startTime, FeeDto feeDto, BillDto billDto, FeeConfigDto feeConfigDto) {
-        Date billEndTime = DateUtil.getCurrentDate();
-        if ("2009001".equals(feeDto.getState())) { //判断是否缴费结束
-            FeeDetailDto feeDetailDto = new FeeDetailDto();
-            feeDetailDto.setCommunityId(feeDto.getCommunityId());
-            feeDetailDto.setFeeId(feeDto.getFeeId());
-            List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
-
-            if (feeDetailDtos == null || feeDetailDtos.size() < 1) {
-                return;//这种数据有问题 不做出账处理
-            }
-
-            Date detailTime = feeDetailDtos.get(0).getCreateTime();
-            if (detailTime.getTime() < startTime.getTime()) {
-                //说明上次出账已经出国 无需再出
-                return;
-            }
-        }
-
-        if (feeDto.getEndTime().getTime() > billEndTime.getTime()) { //当期没有欠费
-            return;
-        }
-
-        if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) {
-            computeFeePriceByRoom(feeDto);
-        } else if (FeeDto.PAYER_OBJ_TYPE_PARKING_SPACE.equals(feeDto.getPayerObjType())) {
-            computeFeePriceByParkingSpace(feeDto);
-        } else {
-            return;//这个没有欠费可算
-            //throw new IllegalArgumentException("暂不支持该类型出账" + feeDto.getFeeId());
-        }
-
-        if (feeDto.getFeeTotalPrice() <= 0) {
-            return;//这个没有欠费可算
-        }
-
-        BillOweFeeDto billOweFeeDto = new BillOweFeeDto();
-        billOweFeeDto.setOweId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_oweId));
-        billOweFeeDto.setFeeId(feeDto.getFeeId());
-        billOweFeeDto.setBillId(billDto.getBillId());
-        double month = 0.0;
-        if (TASK_ATTR_VALUE_DAY.equals(feeConfigDto.getBillType())) {
-            month = DateUtil.dayCompare(feeDto.getEndTime(), billEndTime);
-        } else {
-            month = monthCompare(feeDto.getEndTime(), billEndTime);
-        }
-        BigDecimal curFeePrice = new BigDecimal(feeDto.getFeePrice());
-        curFeePrice = curFeePrice.multiply(new BigDecimal(month));
-        billOweFeeDto.setAmountOwed(curFeePrice.doubleValue() + "");
-        if (TASK_ATTR_VALUE_DAY.equals(feeConfigDto.getBillType())) {
-            month = DateUtil.dayCompare(feeDto.getEndTime(), billEndTime);
-        } else {
-            month = monthCompare(feeDto.getEndTime(), billEndTime);
-        }
-        BigDecimal feePrice = new BigDecimal(feeDto.getFeePrice());
-        feePrice = feePrice.multiply(new BigDecimal(month));
-
-        billOweFeeDto.setBillAmountOwed(feePrice.doubleValue() + "");
-        billOweFeeDto.setFeeEndTime(DateUtil.getFormatTimeString(feeDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_A));
-        billOweFeeDto.setCommunityId(feeDto.getCommunityId());
-        billOweFeeDto.setPayerObjType(feeDto.getPayerObjType());
-        billOweFeeDto.setState("1000");
-
-        if ("3333".equals(feeDto.getPayerObjType())) {
-            getRoomInfo(billOweFeeDto, feeDto);
-        } else {
-            getParkingSpaceInfo(billOweFeeDto, feeDto);
-        }
-
-        feeInnerServiceSMOImpl.insertBillOweFees(billOweFeeDto);
-
-        double recFee = StringUtil.isEmpty(billDto.getReceivable()) ? 0.0 : Double.parseDouble(billDto.getReceivable());
-
-        BigDecimal recFeeBig = new BigDecimal(recFee);
-        BigDecimal newRecFee = recFeeBig.add(feePrice);
-
-        //应收
-        billDto.setReceivable(newRecFee.doubleValue() + "");
-
-        //当期应收
-        double curRecFee = StringUtil.isEmpty(billDto.getCurReceivable()) ? 0.0 : Double.parseDouble(billDto.getCurReceivable());
-        BigDecimal curRecFeeBig = new BigDecimal(curRecFee);
-        BigDecimal curNewRecFee = curRecFeeBig.add(curFeePrice);
-        billDto.setCurReceivable(curNewRecFee.doubleValue() + "");
-
-        FeeDetailDto feeDetailDto = new FeeDetailDto();
-        feeDetailDto.setFeeId(feeDto.getFeeId());
-        feeDetailDto.setCommunityId(feeDto.getCommunityId());
-        feeDetailDto.setStartTime(startTime);
-        feeDetailDto.setEndTime(billEndTime);
-        List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto);
-
-        double curReceiptFee = StringUtil.isEmpty(billDto.getReceipts()) ? 0.0 : Double.parseDouble(billDto.getReceipts());
-        BigDecimal curReceipts = new BigDecimal(curReceiptFee);
-        if (feeDetailDtos != null && feeDetailDtos.size() > 0) {
-            for (FeeDetailDto tmpFeeDetailDto : feeDetailDtos) {
-                BigDecimal recAmount = new BigDecimal(Double.parseDouble(tmpFeeDetailDto.getReceivedAmount()));
-                curReceipts = recAmount.add(curReceipts);
-            }
-        }
-
-        billDto.setReceipts(curReceipts.doubleValue() + "");
-
-
-    }
-
-    /**
-     * 查询车位信息
-     *
-     * @param billOweFeeDto
-     * @param feeDto
-     */
-    private void getParkingSpaceInfo(BillOweFeeDto billOweFeeDto, FeeDto feeDto) {
-
-        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
-        parkingSpaceDto.setPsId(feeDto.getPayerObjId());
-        parkingSpaceDto.setCommunityId(feeDto.getCommunityId());
-        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-        if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
-            //车位可能被删除了
-            billOweFeeDto.setOwnerId("1");
-            billOweFeeDto.setOwnerName("未知");
-            billOweFeeDto.setOwnerTel("19999999999");
-            billOweFeeDto.setPayerObjName("未知");
-            return;
-        }
-
-        billOweFeeDto.setPayerObjName(parkingSpaceDtos.get(0).getAreaNum() + "停车场" + parkingSpaceDtos.get(0).getNum() + "车位");
-
-
-        OwnerCarDto ownerCarDto = new OwnerCarDto();
-        ownerCarDto.setWithOwner(true);
-        ownerCarDto.setPsId(parkingSpaceDtos.get(0).getPsId());
-        ownerCarDto.setCommunityId(feeDto.getCommunityId());
-
-        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-
-
-        if (ownerCarDtos == null || ownerCarDtos.size() < 1) {
-            //房屋可能被删除了
-            billOweFeeDto.setOwnerId("1");
-            billOweFeeDto.setOwnerName("未知");
-            billOweFeeDto.setOwnerTel("19999999999");
-            return;
-        }
-
-        billOweFeeDto.setOwnerId(ownerCarDtos.get(0).getOwnerId());
-        billOweFeeDto.setOwnerName(ownerCarDtos.get(0).getOwnerName());
-        billOweFeeDto.setOwnerTel(ownerCarDtos.get(0).getLink());
-    }
-
-    /**
-     * 查询房屋信息
-     *
-     * @param billOweFeeDto
-     * @param feeDto
-     */
-    private void getRoomInfo(BillOweFeeDto billOweFeeDto, FeeDto feeDto) {
-        RoomDto roomDto = new RoomDto();
-        roomDto.setRoomId(feeDto.getPayerObjId());
-        roomDto.setCommunityId(feeDto.getCommunityId());
-        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-
-        if (roomDtos == null || roomDtos.size() < 1) {
-            //房屋可能被删除了
-            billOweFeeDto.setOweId("1");
-            billOweFeeDto.setOwnerName("未知");
-            billOweFeeDto.setOwnerTel("19999999999");
-            billOweFeeDto.setPayerObjName("未知");
-            return;
-        }
-
-        RoomDto tmpRoomDto = roomDtos.get(0);
-
-        //billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "栋" + tmpRoomDto.getUnitNum() + "单元" + tmpRoomDto.getRoomNum() + "室");
-
-        if (RoomDto.ROOM_TYPE_ROOM.equals(tmpRoomDto.getRoomType())) {
-            billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "栋" + tmpRoomDto.getUnitNum() + "单元" + tmpRoomDto.getRoomNum() + "室");
-        } else {
-            billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "栋" + tmpRoomDto.getRoomNum() + "室");
-        }
-        OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
-        ownerRoomRelDto.setByOwnerInfo(true);
-        ownerRoomRelDto.setRoomId(tmpRoomDto.getRoomId());
-        List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
-
-        if (ownerRoomRelDtos == null || ownerRoomRelDtos.size() < 1) {
-            //房屋可能被删除了
-            billOweFeeDto.setOweId("1");
-            billOweFeeDto.setOwnerName("未知");
-            billOweFeeDto.setOwnerTel("19999999999");
-            return;
-        }
-
-        billOweFeeDto.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId());
-        billOweFeeDto.setOwnerName(ownerRoomRelDtos.get(0).getOwnerName());
-        billOweFeeDto.setOwnerTel(ownerRoomRelDtos.get(0).getLink());
-
-    }
-
-    private Date getDefaultStartTime(String billType) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(new Date());
-        if (billType.equals(TASK_ATTR_VALUE_MONTH)) {
-            calendar.add(Calendar.MONTH, -1);
-            return calendar.getTime();
-        }
-
-        if (billType.equals(TASK_ATTR_VALUE_DAY)) {
-            calendar.add(Calendar.DATE, -1);
-            return calendar.getTime();
-        }
-
-        if (billType.equals(TASK_ATTR_VALUE_DAY)) {
-            calendar.add(Calendar.DATE, -1);
-            return calendar.getTime();
-        }
-
-        if (billType.equals(TASK_ATTR_VALUE_YEAR)) {
-            calendar.add(Calendar.YEAR, -1);
-            return calendar.getTime();
-        }
-
-        return calendar.getTime();
-
-    }
-
-    /**
-     * 根据房屋来算单价
-     *
-     * @param feeDto
-     */
-    private void computeFeePriceByRoom(FeeDto feeDto) {
-        RoomDto roomDto = new RoomDto();
-        roomDto.setCommunityId(feeDto.getCommunityId());
-        roomDto.setRoomId(feeDto.getPayerObjId());
-        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
-
-        if (roomDtos == null || roomDtos.size() < 1) { //数据有问题
-            return;
-        }
-
-        String computingFormula = feeDto.getComputingFormula();
-        double feePrice = 0.00;
-        if ("1001".equals(computingFormula)) { //面积*单价+附加费
-            BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
-            BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDtos.get(0).getBuiltUpArea()));
-            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
-            feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-        } else if ("2002".equals(computingFormula)) { // 固定费用
-            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
-            feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-        } else if ("3003".equals(computingFormula)) { // 固定费用
-            BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
-            BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDto.getRoomArea()));
-            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
-            feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-        } else if ("1101".equals(computingFormula)) { // 租金
-            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
-            feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-        }  else if ("1102".equals(computingFormula)) { // 租金
-            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
-            feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-        }else {
-            feePrice = -1.00;
-        }
-
-        feeDto.setFeePrice(feePrice);
-
-        //查询业主信息
-
-
-    }
-
-    /**
-     * 根据车位来算单价
-     *
-     * @param feeDto
-     */
-    private void computeFeePriceByParkingSpace(FeeDto feeDto) {
-        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
-        parkingSpaceDto.setCommunityId(feeDto.getCommunityId());
-        parkingSpaceDto.setPsId(feeDto.getPayerObjId());
-        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
-
-        if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) { //数据有问题
-            return;
-        }
-
-        String computingFormula = feeDto.getComputingFormula();
-        double feePrice = 0.00;
-        if ("1001".equals(computingFormula)) { //面积*单价+附加费
-            BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
-            BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(parkingSpaceDtos.get(0).getArea()));
-            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
-            feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-        } else if ("2002".equals(computingFormula)) { // 固定费用
-            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
-            feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
-        } else if ("3003".equals(computingFormula)) { // 固定费用
-            feePrice = 0;
-        } else if ("1101".equals(computingFormula)) { // 租金
-            feePrice = 0;
-        } else if ("1102".equals(computingFormula)) { // 租金
-            feePrice = 0;
-        } else {
-            feePrice = -1.00;
-        }
-
-        feeDto.setFeePrice(feePrice);
-    }
-
-    /**
-     * 计算2个日期之间相差的  以年、月、日为单位,各自计算结果是多少
-     * 比如:2011-02-02 到  2017-03-02
-     * 以年为单位相差为:6年
-     * 以月为单位相差为:73个月
-     * 以日为单位相差为:2220天
-     *
-     * @param fromDate
-     * @param toDate
-     * @return
-     */
-    public static int monthCompare(Date fromDate, Date toDate) {
-        Calendar from = Calendar.getInstance();
-        from.setTime(fromDate);
-        Calendar to = Calendar.getInstance();
-        to.setTime(toDate);
-        //只要年月
-        int fromYear = from.get(Calendar.YEAR);
-        int fromMonth = from.get(Calendar.MONTH);
-        int toYear = to.get(Calendar.YEAR);
-        int toMonth = to.get(Calendar.MONTH);
-        int month = toYear * 12 + toMonth - (fromYear * 12 + fromMonth);
-        return month;
-    }
-
-
-}