From f47fdbe821df9d9666e86b6d45f439a7a2b742d8 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期三, 24 十一月 2021 10:07:51 +0800
Subject: [PATCH] 优化报表

---
 java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java |  509 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 450 insertions(+), 59 deletions(-)

diff --git a/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java b/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
index d1d9a06..aae9a18 100755
--- a/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
+++ b/java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
@@ -6,6 +6,8 @@
 import com.java110.dto.contract.ContractDto;
 import com.java110.dto.contractRoom.ContractRoomDto;
 import com.java110.dto.fee.*;
+import com.java110.dto.machine.CarInoutDetailDto;
+import com.java110.dto.machine.CarInoutDto;
 import com.java110.dto.owner.OwnerCarDto;
 import com.java110.dto.owner.OwnerDto;
 import com.java110.dto.parking.ParkingSpaceDto;
@@ -16,6 +18,8 @@
 import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.fee.ITempCarFeeConfigAttrInnerServiceSMO;
+import com.java110.intf.fee.ITempCarFeeConfigInnerServiceSMO;
 import com.java110.intf.store.IContractInnerServiceSMO;
 import com.java110.intf.store.IContractRoomInnerServiceSMO;
 import com.java110.intf.user.IOwnerCarInnerServiceSMO;
@@ -75,6 +79,12 @@
     @Autowired(required = false)
     private IContractInnerServiceSMO contractInnerServiceSMOImpl;
 
+    @Autowired(required = false)
+    private ITempCarFeeConfigInnerServiceSMO tempCarFeeConfigInnerServiceSMOImpl;
+
+    @Autowired(required = false)
+    private ITempCarFeeConfigAttrInnerServiceSMO tempCarFeeConfigAttrInnerServiceSMOImpl;
+
     @Override
     public Date getFeeEndTime() {
         return null;
@@ -93,6 +103,7 @@
     public void computeEveryOweFee(FeeDto tmpFeeDto, RoomDto roomDto) {
         computeFeePrice(tmpFeeDto, roomDto);
     }
+
 
     /**
      * 璁$畻娆犺垂閲戦
@@ -158,9 +169,9 @@
         }
 
         String computingFormula = feeDto.getComputingFormula();
-        double feePrice = getFeePrice(feeDto);
+        Map feePriceAll = getFeePrice(feeDto);
 
-        feeDto.setFeePrice(feePrice);
+        feeDto.setFeePrice(Double.parseDouble(feePriceAll.get("feePrice").toString()));
         BigDecimal price = new BigDecimal(feeDto.getFeePrice());
         price = price.multiply(new BigDecimal(oweMonth));
         feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
@@ -187,8 +198,8 @@
         double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
 
         String computingFormula = feeDto.getComputingFormula();
-        double feePrice = getFeePrice(feeDto, roomDto);
-        feeDto.setFeePrice(feePrice);
+        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));
@@ -215,8 +226,8 @@
         double oweMonth = (double) targetEndDateAndOweMonth.get("oweMonth");
 
         String computingFormula = feeDto.getComputingFormula();
-        double feePrice = getFeePrice(feeDto, roomDto);
-        feeDto.setFeePrice(feePrice);
+        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));
@@ -256,6 +267,12 @@
             } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
                 feeReceiptDetailPo.setArea("");
                 feeReceiptDetailPo.setSquarePrice(feeDto.getAdditionalAmount());
+            } else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
+                feeReceiptDetailPo.setArea(roomDtos.get(0).getRoomArea());
+                feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice(roomDto.getRoomRent());
             } else if ("4004".equals(computingFormula)) {
             } else if ("5005".equals(computingFormula)) {
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -279,6 +296,15 @@
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feeReceiptDetailPo.setArea(roomDtos.get(0).getBuiltUpArea());
                 feeReceiptDetailPo.setSquarePrice(feeDto.getComputingFormulaText());
+            } else if ("9009".equals(computingFormula)) {
+                if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    feeReceiptDetailPo.setArea(sub.doubleValue() + "");
+                    feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
+                }
             } else {
             }
         } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {//杞︿綅鐩稿叧
@@ -301,6 +327,12 @@
             } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
                 feeReceiptDetailPo.setArea("");
                 feeReceiptDetailPo.setSquarePrice(feeDto.getAdditionalAmount());
+            } else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice("0");
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice("0");
             } else if ("4004".equals(computingFormula)) {
             } else if ("5005".equals(computingFormula)) {
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
@@ -331,6 +363,89 @@
                 }
                 feeReceiptDetailPo.setArea(parkingSpaceDtos.get(0).getArea());
                 feeReceiptDetailPo.setSquarePrice(feeDto.getComputingFormulaText());
+            } else if ("9009".equals(computingFormula)) {
+                if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    feeReceiptDetailPo.setArea(sub.doubleValue() + "");
+                    feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
+                }
+            } else {
+
+            }
+        } else if (FeeDto.PAYER_OBJ_TYPE_CONTRACT.equals(feeDto.getPayerObjType())) {//杞︿綅鐩稿叧
+            String computingFormula = feeDto.getComputingFormula();
+            ContractRoomDto contractRoomDto = new ContractRoomDto();
+            contractRoomDto.setContractId(feeDto.getPayerObjId());
+            contractRoomDto.setCommunityId(feeDto.getCommunityId());
+            List<ContractRoomDto> contractRoomDtos = contractRoomInnerServiceSMOImpl.queryContractRooms(contractRoomDto);
+            if (contractRoomDtos == null || contractRoomDtos.size() == 0) {
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+                return;
+            }
+            if ("1001".equals(computingFormula)) { //闈㈢Н*鍗曚环+闄勫姞璐�
+                BigDecimal builtUpArea = new BigDecimal(0);
+                for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
+                    builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getBuiltUpArea())));
+                }
+                feeReceiptDetailPo.setArea(builtUpArea.doubleValue() + "");
+                feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+            } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice(feeDto.getAdditionalAmount());
+            } else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
+                BigDecimal builtUpArea = new BigDecimal(0);
+                for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
+                    builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getRoomArea())));
+                }
+                feeReceiptDetailPo.setArea(builtUpArea.doubleValue() + "");
+                feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal builtUpArea = new BigDecimal(0);
+                for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
+                    builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getRoomRent())));
+                }
+                feeReceiptDetailPo.setArea(builtUpArea.doubleValue() + "");
+                feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+            } else if ("4004".equals(computingFormula)) {
+            } else if ("5005".equals(computingFormula)) {
+                if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    feeReceiptDetailPo.setArea(sub.doubleValue() + "");
+                    feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+                }
+            } else if ("6006".equals(computingFormula)) {
+                String value = "";
+                List<FeeAttrDto> feeAttrDtos = feeDto.getFeeAttrDtos();
+                for (FeeAttrDto feeAttrDto : feeAttrDtos) {
+                    if (feeAttrDto.getSpecCd().equals(FeeAttrDto.SPEC_CD_PROXY_CONSUMPTION)) {
+                        value = feeAttrDto.getValue();
+                    }
+                }
+                feeReceiptDetailPo.setArea(value);
+                feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
+            } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
+                BigDecimal builtUpArea = new BigDecimal(0);
+                for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
+                    builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getBuiltUpArea())));
+                }
+                feeReceiptDetailPo.setArea(builtUpArea.doubleValue() + "");
+                feeReceiptDetailPo.setSquarePrice(feeDto.getComputingFormulaText());
+            } else if ("9009".equals(computingFormula)) {
+                if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    feeReceiptDetailPo.setArea(sub.doubleValue() + "");
+                    feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
+                }
             } else {
             }
         }
@@ -377,7 +492,7 @@
             if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) { //鏁版嵁鏈夐棶棰�
                 return objName;
             }
-            objName = objName + "(" + parkingSpaceDtos.get(0).getAreaNum() + "鍋滆溅鍦�" + parkingSpaceDtos.get(0).getNum() + "杞︿綅)";
+            objName = objName + "-" + parkingSpaceDtos.get(0).getAreaNum() + "鍋滆溅鍦�" + "-" + parkingSpaceDtos.get(0).getNum() + "杞︿綅";
         } else if (FeeDto.PAYER_OBJ_TYPE_CONTRACT.equals(feeDto.getPayerObjType())) {
             ContractDto contractDto = new ContractDto();
             contractDto.setContractId(feeDto.getPayerObjId());
@@ -677,6 +792,14 @@
                 //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
                 feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+            } else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
+                BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getSquarePrice()));
+                BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomArea()));
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
+                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
             } else if ("4004".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
             } else if ("5005".equals(computingFormula)) {
@@ -696,6 +819,19 @@
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feePrice = computeRoomCustomizeFormula(BeanConvertUtil.covertBean(tmpReportFeeDto, FeeDto.class), BeanConvertUtil.covertBean(reportRoomDto, RoomDto.class));
+            } else if ("9009".equals(computingFormula)) {
+                if (StringUtil.isEmpty(tmpReportFeeDto.getCurDegrees())) {
+                    //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getPreDegrees()));
+                    BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getMwPrice()));
+                    BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
+                    BigDecimal sub = curDegree.subtract(preDegree);
+                    feePrice = sub.multiply(squarePrice)
+                            .add(additionalAmount)
+                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
             }
@@ -711,6 +847,11 @@
                 //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
                 feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+            } else if ("3003".equals(computingFormula)) { // 鍥哄畾璐圭敤
+                //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
+                feePrice = new BigDecimal(0);
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                feePrice = new BigDecimal(0);
             } else if ("4004".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
             } else if ("5005".equals(computingFormula)) {
@@ -730,6 +871,19 @@
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feePrice = computeCarCustomizeFormula(BeanConvertUtil.covertBean(tmpReportFeeDto, FeeDto.class), BeanConvertUtil.covertBean(reportCarDto, OwnerCarDto.class));
+            } else if ("9009".equals(computingFormula)) {
+                if (StringUtil.isEmpty(tmpReportFeeDto.getCurDegrees())) {
+                    throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getPreDegrees()));
+                    BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getMwPrice()));
+                    BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
+                    BigDecimal sub = curDegree.subtract(preDegree);
+                    feePrice = sub.multiply(squarePrice)
+                            .add(additionalAmount)
+                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
             }
@@ -738,13 +892,15 @@
     }
 
     @Override
-    public double getFeePrice(FeeDto feeDto) {
+    public Map getFeePrice(FeeDto feeDto) {
         return getFeePrice(feeDto, null);
     }
 
     @Override
-    public double getFeePrice(FeeDto feeDto, RoomDto roomDto) {
-        BigDecimal feePrice = new BigDecimal(0.0);
+    public Map getFeePrice(FeeDto feeDto, RoomDto roomDto) {
+        BigDecimal feePrice = new BigDecimal("0.0");
+        BigDecimal feeTotalPrice = new BigDecimal(0.0);
+        Map<String, Object> feeAmount = new HashMap<>();
         if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) { //鎴垮眿鐩稿叧
             String computingFormula = feeDto.getComputingFormula();
             if (roomDto == null) {
@@ -753,7 +909,7 @@
                 roomDto.setCommunityId(feeDto.getCommunityId());
                 List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
                 if (roomDtos == null || roomDtos.size() != 1) {
-                    throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "鏈煡鍒版埧灞嬩俊鎭紝鏌ヨ澶氭潯鏁版嵁");
+                    throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "鏈煡鍒版埧灞嬩俊鎭紝鏌ヨ澶氭潯鏁版嵁 roomId=" + feeDto.getPayerObjId());
                 }
                 roomDto = roomDtos.get(0);
             }
@@ -763,12 +919,41 @@
                 BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDto.getBuiltUpArea()));
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
                 feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
                 //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
                 feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } 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);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("4004".equals(computingFormula)) {  //鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("5005".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍗曚环+闄勫姞璐�
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -781,13 +966,49 @@
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
                             .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                    }
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feePrice = computeRoomCustomizeFormula(feeDto, roomDto);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("8008".equals(computingFormula)) {  //鎵嬪姩鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } else if ("9009".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
+                if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
+                    //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
+                    BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getMwPrice()));
+                    BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
+                    BigDecimal sub = curDegree.subtract(preDegree);
+                    feePrice = sub.multiply(squarePrice)
+                            .add(additionalAmount)
+                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                    }
+                }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
             }
@@ -795,6 +1016,7 @@
             String computingFormula = feeDto.getComputingFormula();
 
             OwnerCarDto ownerCarDto = new OwnerCarDto();
+            ownerCarDto.setCarTypeCd("1001"); //涓氫富杞﹁締
             ownerCarDto.setCommunityId(feeDto.getCommunityId());
             ownerCarDto.setCarId(feeDto.getPayerObjId());
             List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
@@ -811,12 +1033,41 @@
                 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);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
                 //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
                 feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } 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);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("4004".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("5005".equals(computingFormula)) {
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -829,11 +1080,41 @@
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
                             .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                    }
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feePrice = computeCarCustomizeFormula(feeDto, ownerCarDtos.get(0));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } else if ("9009".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
+                if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
+                    //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
+                    BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getMwPrice()));
+                    BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
+                    BigDecimal sub = curDegree.subtract(preDegree);
+                    feePrice = sub.multiply(squarePrice)
+                            .add(additionalAmount)
+                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                    }
+                }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
             }
@@ -856,14 +1137,43 @@
                 feeDto.setBuiltUpArea(builtUpArea.doubleValue() + "");
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
                 feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
                 //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
 //                BigDecimal roomDount = new BigDecimal(contractRoomDtos.size());
 //                additionalAmount = additionalAmount.multiply(roomDount);
                 feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } 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);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = additionalAmount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("4004".equals(computingFormula)) {  //鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("5005".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍗曚环+闄勫姞璐�
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -876,18 +1186,56 @@
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
                             .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                    }
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feePrice = computeContractCustomizeFormula(feeDto, contractRoomDtos);
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    feeTotalPrice = feePrice.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
             } else if ("8008".equals(computingFormula)) {  //鎵嬪姩鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                    BigDecimal amount = new BigDecimal(feeDto.getAmount());
+                    feeTotalPrice = amount.multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                }
+            } else if ("9009".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
+                if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
+                    //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
+                } else {
+                    BigDecimal curDegree = new BigDecimal(Double.parseDouble(feeDto.getCurDegrees()));
+                    BigDecimal preDegree = new BigDecimal(Double.parseDouble(feeDto.getPreDegrees()));
+                    BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getMwPrice()));
+                    BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
+                    BigDecimal sub = curDegree.subtract(preDegree);
+                    feePrice = sub.multiply(squarePrice)
+                            .add(additionalAmount)
+                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        BigDecimal cycle1 = new BigDecimal(feeDto.getCycle());
+                        feeTotalPrice = sub.multiply(squarePrice).add(additionalAmount).multiply(cycle1).setScale(3, BigDecimal.ROUND_DOWN);
+                    }
+                }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
             }
         }
-        return feePrice.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        feePrice.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        feeAmount.put("feePrice", feePrice);
+        feeAmount.put("feeTotalPrice", feeTotalPrice);
+        return feeAmount;
     }
 
     /**
@@ -1024,18 +1372,26 @@
 
     }
 
+    /**
+     * 璁$畻 璁¤垂缁撴潫鏃堕棿鍜� 娆犺垂鏈堜唤锛堝彲鑳藉瓨鍦ㄥ皬鏁扮偣锛�
+     *
+     * @param feeDto
+     * @param ownerCarDto
+     * @return
+     */
     public Map getTargetEndDateAndOweMonth(FeeDto feeDto, OwnerCarDto ownerCarDto) {
         Date targetEndDate = null;
         double oweMonth = 0.0;
 
         Map<String, Object> targetEndDateAndOweMonth = new HashMap<>();
-
+        //鍒ゆ柇褰撳墠璐圭敤鏄惁宸茬粨鏉�
         if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
             targetEndDate = feeDto.getEndTime();
             targetEndDateAndOweMonth.put("oweMonth", oweMonth);
             targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
             return targetEndDateAndOweMonth;
         }
+        //褰撳墠璐圭敤涓轰竴娆℃�ц垂鐢�
         if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
             //鍏堝彇 deadlineTime
             if (feeDto.getDeadlineTime() != null) {
@@ -1049,31 +1405,13 @@
             }
             //鍒ゆ柇褰撳墠璐圭敤鏄笉鏄鍏ヨ垂鐢�
             oweMonth = 1.0;
-
-        } else {
+        } else { //鍛ㄦ湡鎬ц垂鐢�
             //褰撳墠鏃堕棿
             Date billEndTime = DateUtil.getCurrentDate();
-            //寮�濮嬫椂闂�
+            //寤鸿处鏃堕棿
             Date startDate = feeDto.getStartTime();
-            //鍒版湡鏃堕棿
+            //璁¤垂璧峰鏃堕棿
             Date endDate = feeDto.getEndTime();
-            if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {
-                if (ownerCarDto == null) {
-                    targetEndDateAndOweMonth.put("oweMonth", 0);
-                    targetEndDateAndOweMonth.put("targetEndDate", "");
-                    return targetEndDateAndOweMonth;
-                }
-                targetEndDate = ownerCarDto.getEndTime();
-                //璇存槑娌℃湁娆犺垂
-                if (endDate.getTime() >= targetEndDate.getTime()) {
-                    // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
-                    oweMonth = 0;
-                    targetEndDateAndOweMonth.put("oweMonth", oweMonth);
-                    targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
-                    return targetEndDateAndOweMonth;
-                }
-            }
-
             //缂磋垂鍛ㄦ湡
             long paymentCycle = Long.parseLong(feeDto.getPaymentCycle());
             // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂�  = 鏈堜唤
@@ -1082,18 +1420,18 @@
 
             // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
             double round = 0.0;
-            if ("1200".equals(feeDto.getPaymentCd())) { // 棰勪粯璐�
+            if ("1200".equals(feeDto.getPaymentCd())) { // 1200棰勪粯璐�
                 round = Math.floor(mulMonth / paymentCycle) + 1;
-            } else { //鍚庝粯璐�
+            } else { //2100鍚庝粯璐�
                 round = Math.floor(mulMonth / paymentCycle);
             }
             // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
-            targetEndDate = getTargetEndTime(round * paymentCycle, startDate);
-            //璐圭敤 蹇粨鏉熶簡
+            targetEndDate = getTargetEndTime(round * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+            //璐圭敤椤圭殑缁撴潫鏃堕棿<缂磋垂鐨勭粨鏉熸椂闂�  璐圭敤蹇粨鏉熶簡   鍙栬垂鐢ㄩ」鐨勭粨鏉熸椂闂�
             if (feeDto.getConfigEndTime().getTime() < targetEndDate.getTime()) {
                 targetEndDate = feeDto.getConfigEndTime();
             }
-            //璇存槑娌℃湁娆犺垂
+            //璇存槑娆犺垂
             if (endDate.getTime() < targetEndDate.getTime()) {
                 // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
                 oweMonth = dayCompare(endDate, targetEndDate);
@@ -1111,16 +1449,23 @@
 
     public Map getTargetEndDateAndOweMonth(FeeDto feeDto) {
 
-        if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {
-            OwnerCarDto ownerCarDto = new OwnerCarDto();
-            ownerCarDto.setCommunityId(feeDto.getCommunityId());
-            ownerCarDto.setCarId(feeDto.getPayerObjId());
-            List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-            return getTargetEndDateAndOweMonth(feeDto, ownerCarDtos == null || ownerCarDtos.size() < 1 ? null : ownerCarDtos.get(0));
-        }
+//        if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {
+//            OwnerCarDto ownerCarDto = new OwnerCarDto();
+//            ownerCarDto.setCommunityId(feeDto.getCommunityId());
+//            ownerCarDto.setCarId(feeDto.getPayerObjId());
+//            List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+//            return getTargetEndDateAndOweMonth(feeDto, ownerCarDtos == null || ownerCarDtos.size() < 1 ? null : ownerCarDtos.get(0));
+//        }
         return getTargetEndDateAndOweMonth(feeDto, null);
     }
 
+    /**
+     * 璁$畻 涓や釜鏃堕棿鐐规湀浠�
+     *
+     * @param fromDate 寮�濮嬫椂闂�
+     * @param toDate   缁撴潫鏃堕棿
+     * @return
+     */
     @Override
     public double dayCompare(Date fromDate, Date toDate) {
         double resMonth = 0.0;
@@ -1128,31 +1473,39 @@
         from.setTime(fromDate);
         Calendar to = Calendar.getInstance();
         to.setTime(toDate);
+        //姣旇緝鏈堜唤宸� 鍙兘鏈夋暣鏁� 涔熶細璐熸暟
         int result = to.get(Calendar.MONTH) - from.get(Calendar.MONTH);
+        //姣旇緝骞村樊
         int month = (to.get(Calendar.YEAR) - from.get(Calendar.YEAR)) * 12;
 
+        //鐪熷疄 鐩稿樊鏈堜唤
         result = result + month;
+
+        //寮�濮嬫椂闂�  2021-06-01  2021-08-05   result = 2    2021-08-01
         Calendar newFrom = Calendar.getInstance();
         newFrom.setTime(fromDate);
         newFrom.add(Calendar.MONTH, result);
-        //濡傛灉鍔犳湀浠藉悗 澶т簬浜嗗埌鏈熸椂闂� 榛樿鍔� 鏈堜唤 -1 鎯呭喌 12-19  21-01-10
+        //濡傛灉鍔犳湀浠藉悗 澶т簬浜嗗綋鍓嶆椂闂� 榛樿鍔� 鏈堜唤 -1 鎯呭喌 12-19  21-01-10
+        //杩欎釜鏄鐨勯�昏緫涓�瀹氬ソ濂界悊瑙�
         if (newFrom.getTime().getTime() > toDate.getTime()) {
             newFrom.setTime(fromDate);
             result = result - 1;
             newFrom.add(Calendar.MONTH, result);
         }
 
+        // t1 2021-08-01   t2 2021-08-05
         long t1 = newFrom.getTime().getTime();
         long t2 = to.getTime().getTime();
+        //鐩稿樊姣
         double days = (t2 - t1) * 1.00 / (24 * 60 * 60 * 1000);
-        BigDecimal tmpDays = new BigDecimal(days);
+        BigDecimal tmpDays = new BigDecimal(days); //鐩稿樊澶╂暟
         BigDecimal monthDay = null;
         Calendar newFromMaxDay = Calendar.getInstance();
         newFromMaxDay.set(newFrom.get(Calendar.YEAR), newFrom.get(Calendar.MONTH), 1, 0, 0, 0);
-        newFromMaxDay.add(Calendar.MONTH, 1);
-        //鍦ㄥ綋鍓嶆湀涓�
+        newFromMaxDay.add(Calendar.MONTH, 1); //涓嬩釜鏈�1鍙�
+        //鍦ㄥ綋鍓嶆湀涓� 杩欏潡鏈夐棶棰�
         if (toDate.getTime() < newFromMaxDay.getTime().getTime()) {
-            monthDay = new BigDecimal(newFromMaxDay.getActualMaximum(Calendar.DAY_OF_MONTH));
+            monthDay = new BigDecimal(newFrom.getActualMaximum(Calendar.DAY_OF_MONTH));
             return tmpDays.divide(monthDay, 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).doubleValue();
         }
         // 涓婃湀澶╂暟
@@ -1169,6 +1522,21 @@
         return resMonth;
     }
 
+    /**
+     * 銆�銆� *瀛楃涓茬殑鏃ユ湡鏍煎紡鐨勮绠�
+     */
+    public long daysBetween(Date smdate, Date bdate) {
+        long between_days = 0;
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(smdate);
+        long time1 = cal.getTimeInMillis();
+        cal.setTime(bdate);
+        long time2 = cal.getTimeInMillis();
+        between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+        return between_days;
+    }
+
     @Override
     public Date getTargetEndTime(double month, Date startDate) {
         Calendar endDate = Calendar.getInstance();
@@ -1180,25 +1548,48 @@
         if (doubleMonth <= 0) {
             return endDate.getTime();
         }
-//        Calendar futureDate = Calendar.getInstance();
-//        futureDate.setTime(endDate.getTime());
-//        futureDate.add(Calendar.MONTH, 1);
         int futureDay = endDate.getActualMaximum(Calendar.DAY_OF_MONTH);
         Double hour = doubleMonth * futureDay * 24;
         endDate.add(Calendar.HOUR_OF_DAY, hour.intValue());
         return endDate.getTime();
     }
 
+
+    @Override
+    public List<CarInoutDto> computeTempCarStopTimeAndFee(List<CarInoutDto> carInoutDtos) {
+
+        if (carInoutDtos == null || carInoutDtos.size() < 1) {
+            return null;
+        }
+
+
+        carInoutDtos = tempCarFeeConfigInnerServiceSMOImpl.computeTempCarFee(carInoutDtos);
+
+        return carInoutDtos;
+
+    }
+
+    @Override
+    public List<CarInoutDetailDto> computeTempCarInoutDetailStopTimeAndFee(List<CarInoutDetailDto> carInoutDtos) {
+        if (carInoutDtos == null || carInoutDtos.size() < 1) {
+            return null;
+        }
+
+
+        carInoutDtos = tempCarFeeConfigInnerServiceSMOImpl.computeTempCarInoutDetailFee(carInoutDtos);
+
+        return carInoutDtos;
+    }
+
+
     public static void main(String[] args) {
         ComputeFeeSMOImpl computeFeeSMO = new ComputeFeeSMOImpl();
         try {
             double month = computeFeeSMO.dayCompare(
-
-                    DateUtil.getDateFromString("2020-12-19 00:00:00", DateUtil.DATE_FORMATE_STRING_A),
-                    DateUtil.getDateFromString("2021-1-10 00:00:00", DateUtil.DATE_FORMATE_STRING_A)
+                    DateUtil.getDateFromString("2021-09-30 14:20:02", DateUtil.DATE_FORMATE_STRING_A),
+                    DateUtil.getDateFromString("2021-11-03 14:20:02", DateUtil.DATE_FORMATE_STRING_A)
             );
-
-            System.out.println(month);
+            System.out.println(Math.ceil(month));
         } catch (ParseException e) {
             e.printStackTrace();
         }

--
Gitblit v1.8.0