From 45c39c4deba8f37d6152793efc3b271c352fac89 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: 星期五, 25 八月 2023 23:16:52 +0800
Subject: [PATCH] 优化diamante

---
 java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java | 1125 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 1,011 insertions(+), 114 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 7de3ffe..5e72802 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
@@ -1,11 +1,19 @@
 package com.java110.core.smo.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.java110.config.properties.code.Java110Properties;
+import com.java110.core.context.Environment;
+import com.java110.core.log.LoggerFactory;
 import com.java110.core.smo.IComputeFeeSMO;
-import com.java110.dto.RoomDto;
+import com.java110.dto.room.RoomAttrDto;
+import com.java110.dto.room.RoomDto;
 import com.java110.dto.community.CommunityDto;
 import com.java110.dto.contract.ContractDto;
-import com.java110.dto.contractRoom.ContractRoomDto;
+import com.java110.dto.contract.ContractRoomDto;
 import com.java110.dto.fee.*;
+import com.java110.dto.integral.IntegralRuleConfigDto;
+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;
@@ -15,12 +23,16 @@
 import com.java110.intf.community.ICommunityInnerServiceSMO;
 import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
 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;
 import com.java110.intf.user.IOwnerInnerServiceSMO;
-import com.java110.po.feeReceiptDetail.FeeReceiptDetailPo;
+import com.java110.po.fee.FeeReceiptDetailPo;
+import com.java110.utils.constant.FeeConfigConstant;
 import com.java110.utils.constant.ResponseConstant;
 import com.java110.utils.exception.ListenerExecuteException;
 import com.java110.utils.util.Assert;
@@ -28,7 +40,6 @@
 import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -36,6 +47,9 @@
 import javax.script.ScriptEngineManager;
 import java.math.BigDecimal;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.*;
 
 /**
@@ -53,6 +67,9 @@
 
     @Autowired(required = false)
     private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired(required = false)
+    private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
 
     @Autowired(required = false)
     private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
@@ -75,6 +92,15 @@
     @Autowired(required = false)
     private IContractInnerServiceSMO contractInnerServiceSMOImpl;
 
+    @Autowired(required = false)
+    private ITempCarFeeConfigInnerServiceSMO tempCarFeeConfigInnerServiceSMOImpl;
+
+    @Autowired(required = false)
+    private ITempCarFeeConfigAttrInnerServiceSMO tempCarFeeConfigAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private Java110Properties java110Properties;
+
     @Override
     public Date getFeeEndTime() {
         return null;
@@ -93,6 +119,7 @@
     public void computeEveryOweFee(FeeDto tmpFeeDto, RoomDto roomDto) {
         computeFeePrice(tmpFeeDto, roomDto);
     }
+
 
     /**
      * 璁$畻娆犺垂閲戦
@@ -158,19 +185,19 @@
         }
 
         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());
+        feeDto.setFeeTotalPrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
         feeDto.setDeadlineTime(targetEndDate);
 
         //鍔ㄦ�佽垂鐢�
         if ("4004".equals(computingFormula)
                 && FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())
                 && !FeeDto.STATE_FINISH.equals(feeDto.getState())) {
-            feeDto.setAmountOwed(feeDto.getFeePrice() + "");
+            feeDto.setAmountOwed(feeDto.getFeeTotalPrice() + "");
             //feeDto.setDeadlineTime(DateUtil.getCurrentDate()); 娆犺垂鏃ユ湡涓嶅鍏堟敞閲�
         }
 
@@ -187,21 +214,24 @@
         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));
-        feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+        feeDto.setFeeTotalPrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
         feeDto.setDeadlineTime(targetEndDate);
 
         //鍔ㄦ�佽垂鐢�
         if ("4004".equals(computingFormula)
                 && FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())
                 && !FeeDto.STATE_FINISH.equals(feeDto.getState())) {
-            feeDto.setAmountOwed(feeDto.getFeePrice() + "");
+            feeDto.setAmountOwed(feeDto.getFeeTotalPrice() + "");
             //feeDto.setDeadlineTime(DateUtil.getCurrentDate()); 娆犺垂鏃ユ湡涓嶅鍏堟敞閲�
         }
+
+        //鑰冭檻绉熼噾閫掑
+        dealRentRate(feeDto);
     }
 
     /**
@@ -215,19 +245,19 @@
         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));
-        feeDto.setFeePrice(price.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+        feeDto.setFeeTotalPrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
         feeDto.setDeadlineTime(targetEndDate);
 
         //鍔ㄦ�佽垂鐢�
         if ("4004".equals(computingFormula)
                 && FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())
                 && !FeeDto.STATE_FINISH.equals(feeDto.getState())) {
-            feeDto.setAmountOwed(feeDto.getFeePrice() + "");
+            feeDto.setAmountOwed(feeDto.getFeeTotalPrice() + "");
             //feeDto.setDeadlineTime(DateUtil.getCurrentDate()); 娆犺垂鏃ユ湡涓嶅鍏堟敞閲�
         }
     }
@@ -256,13 +286,22 @@
             } 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 ("1102".equals(computingFormula)) { // 绉熼噾
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice(roomDto.getRoomRent());
             } 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);
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
                     feeReceiptDetailPo.setArea(sub.doubleValue() + "");
                     feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
                 }
@@ -284,10 +323,16 @@
                 } 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);
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
                     feeReceiptDetailPo.setArea(sub.doubleValue() + "");
                     feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
                 }
+            } else if ("1101".equals(computingFormula)) { //绉熼噾
+                feeReceiptDetailPo.setArea(roomDtos.get(0).getBuiltUpArea());
+                feeReceiptDetailPo.setSquarePrice(roomDtos.get(0).getRoomRent());
+            } else if ("1102".equals(computingFormula)) { //绉熼噾
+                feeReceiptDetailPo.setArea(roomDtos.get(0).getBuiltUpArea());
+                feeReceiptDetailPo.setSquarePrice(roomDtos.get(0).getRoomRent());
             } else {
             }
         } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDto.getPayerObjType())) {//杞︿綅鐩稿叧
@@ -295,6 +340,7 @@
             OwnerCarDto ownerCarDto = new OwnerCarDto();
             ownerCarDto.setCommunityId(feeDto.getCommunityId());
             ownerCarDto.setCarId(feeDto.getPayerObjId());
+            ownerCarDto.setCarTypeCd(OwnerCarDto.CAR_TYPE_PRIMARY);
             List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
             Assert.listOnlyOne(ownerCarDtos, "鏈壘鍒拌溅杈嗕俊鎭�");
             if ("1001".equals(computingFormula)) { //闈㈢Н*鍗曚环+闄勫姞璐�
@@ -310,13 +356,22 @@
             } 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 ("1102".equals(computingFormula)) { // 绉熼噾锛堥�掑锛�
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice("0");
             } 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);
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
                     feeReceiptDetailPo.setArea(sub.doubleValue() + "");
                     feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
                 }
@@ -345,11 +400,12 @@
                 } 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);
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
                     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();
@@ -372,13 +428,34 @@
             } 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("");
+                feeReceiptDetailPo.setSquarePrice(builtUpArea.doubleValue() + "");
+            } else if ("1102".equals(computingFormula)) { // 绉熼噾
+                BigDecimal builtUpArea = new BigDecimal(0);
+                for (ContractRoomDto tmpContractRoomDto : contractRoomDtos) {
+                    builtUpArea = builtUpArea.add(new BigDecimal(Double.parseDouble(tmpContractRoomDto.getRoomRent())));
+                }
+                feeReceiptDetailPo.setArea("");
+                feeReceiptDetailPo.setSquarePrice(builtUpArea.doubleValue() + "");
             } 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);
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
                     feeReceiptDetailPo.setArea(sub.doubleValue() + "");
                     feeReceiptDetailPo.setSquarePrice(feeDto.getSquarePrice() + "/" + feeDto.getAdditionalAmount());
                 }
@@ -404,7 +481,7 @@
                 } 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);
+                    BigDecimal sub = curDegree.subtract(preDegree).setScale(2, BigDecimal.ROUND_HALF_UP);
                     feeReceiptDetailPo.setArea(sub.doubleValue() + "");
                     feeReceiptDetailPo.setSquarePrice(feeDto.getMwPrice() + "/" + feeDto.getAdditionalAmount());
                 }
@@ -454,7 +531,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());
@@ -692,6 +769,10 @@
         endCalender.add(Calendar.HOUR, hours);
         if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
             return FeeDto.STATE_FINISH;
+        } else if (FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())) {
+            if ((endCalender.getTime()).after(feeDto.getDeadlineTime())) {
+                return FeeDto.STATE_FINISH;
+            }
         } else {
             if ((endCalender.getTime()).after(feeDto.getConfigEndTime())) {
                 return FeeDto.STATE_FINISH;
@@ -723,6 +804,13 @@
             } else {
                 endCalender.setTime(feeDto.getImportFeeEndTime());
             }
+        } else if (FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())) {
+            if (feeDto.getDeadlineTime() == null) {
+                throw new IllegalArgumentException("闂存帴鎬ц垂鐢ㄦ湭璁剧疆缁撴潫鏃堕棿");
+            }
+            if ((endCalender.getTime()).after(feeDto.getDeadlineTime())) {
+                endCalender.setTime(feeDto.getDeadlineTime());
+            }
         } else {
             if ((endCalender.getTime()).after(feeDto.getConfigEndTime())) {
                 endCalender.setTime(feeDto.getConfigEndTime());
@@ -749,11 +837,22 @@
                 BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getSquarePrice()));
                 BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(reportRoomDto.getBuiltUpArea()));
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
-                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
             } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
                 //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
-                feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+            } 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(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+            } else if ("1102".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
             } else if ("4004".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
             } else if ("5005".equals(computingFormula)) {
@@ -767,7 +866,7 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
@@ -784,7 +883,7 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
                 }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
@@ -796,11 +895,18 @@
                 BigDecimal squarePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getSquarePrice()));
                 BigDecimal builtUpArea = new BigDecimal(Double.parseDouble("0"));
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
-                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
             } else if ("2002".equals(computingFormula)) { // 鍥哄畾璐圭敤
                 //feePrice = Double.parseDouble(feeDto.getAdditionalAmount());
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAdditionalAmount()));
-                feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+            } 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 ("1102".equals(computingFormula)) { // 绉熼噾
+                feePrice = new BigDecimal(0);
             } else if ("4004".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
             } else if ("5005".equals(computingFormula)) {
@@ -814,7 +920,7 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(tmpReportFeeDto.getAmount()));
@@ -831,23 +937,46 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
                 }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
             }
         }
-        return feePrice.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        return feePrice.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
 
     @Override
-    public double getFeePrice(FeeDto feeDto) {
+    public Map getFeePrice(FeeDto feeDto) {
         return getFeePrice(feeDto, null);
     }
 
+    /*
+     *
+     * @param feeDto
+     * @param roomDto
+     * @return
+     */
     @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 (Environment.isOwnerPhone(java110Properties)) {
+            return getOwnerPhoneFee(feeAmount);
+        }
+
+        //todo 濡傛灉 cycle 涓�105 鍒� 鏍规嵁缂磋垂鏃堕棿娈� 鏀瑰啓涓�
+        if ("105".equals(feeDto.getCycle())) {
+            double cycle = dayCompare(DateUtil.getDateFromStringB(feeDto.getCustomStartTime()), DateUtil.getDateFromStringB(feeDto.getCustomEndTime()));
+            feeDto.setCycle(cycle + "");
+        }
+        // todo 鎸夌粨鏉熸椂闂寸即璐�
+        if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
+            double cycle = dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime()));
+            feeDto.setCycle(cycle + "");
+        }
+
         if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) { //鎴垮眿鐩稿叧
             String computingFormula = feeDto.getComputingFormula();
             if (roomDto == null) {
@@ -856,7 +985,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);
             }
@@ -865,13 +994,78 @@
                 BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
                 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);
+                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } 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);
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } 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(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } else if ("1102".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("4004".equals(computingFormula)) {  //鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("5005".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍗曚环+闄勫姞璐�
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -883,14 +1077,62 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal cycle = null;
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        cycle = new BigDecimal(feeDto.getCycle());
+                    }
+                    if (cycle == null) {
+                        feeTotalPrice = new BigDecimal(0);
+                    } else {
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                    }
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
+                if (roomDto == null) {
+                    roomDto = new RoomDto();
+                    roomDto.setRoomId(feeDto.getPayerObjId());
+                    roomDto.setCommunityId(feeDto.getCommunityId());
+                    List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
+                    if (roomDtos == null || roomDtos.size() != 1) {
+                        throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "鏈煡鍒版埧灞嬩俊鎭紝鏌ヨ澶氭潯鏁版嵁 roomId=" + feeDto.getPayerObjId());
+                    }
+                    roomDto = roomDtos.get(0);
+                }
                 feePrice = computeRoomCustomizeFormula(feeDto, roomDto);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("8008".equals(computingFormula)) {  //鎵嬪姩鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("9009".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -902,7 +1144,16 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(2, BigDecimal.ROUND_HALF_UP);
+                    BigDecimal cycle = null;
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        cycle = new BigDecimal(feeDto.getCycle());
+                    }
+                    if (cycle == null) {
+                        feeTotalPrice = new BigDecimal(0);
+                    } else {
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                    }
                 }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
@@ -911,6 +1162,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);
@@ -926,13 +1178,82 @@
                 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);
+                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } 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);
+                feePrice = additionalAmount.setScale(4, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } 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(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } else if ("1102".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("4004".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("5005".equals(computingFormula)) {
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -944,12 +1265,42 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal cycle = null;
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        cycle = new BigDecimal(feeDto.getCycle());
+                    }
+                    if (cycle == null) {
+                        feeTotalPrice = new BigDecimal(0);
+                    } else {
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                    }
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feePrice = computeCarCustomizeFormula(feeDto, ownerCarDtos.get(0));
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("9009".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -961,7 +1312,17 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal cycle = null;
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        cycle = new BigDecimal(feeDto.getCycle());
+                    }
+                    if (cycle == null) {
+                        feeTotalPrice = new BigDecimal(0);
+                    } else {
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                    }
                 }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
@@ -984,15 +1345,85 @@
                 }
                 feeDto.setBuiltUpArea(builtUpArea.doubleValue() + "");
                 BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
-                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(3, BigDecimal.ROUND_HALF_EVEN);
+                feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } 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);
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } 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(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } else if ("1101".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
+            } else if ("1102".equals(computingFormula)) { // 绉熼噾
+                BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(roomDto.getRoomRent()));
+                feePrice = additionalAmount.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = additionalAmount.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("4004".equals(computingFormula)) {  //鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("5005".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍗曚环+闄勫姞璐�
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -1004,14 +1435,55 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+
+                    BigDecimal cycle = null;
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        cycle = new BigDecimal(feeDto.getCycle());
+                    }
+                    if (cycle == null) {
+                        feeTotalPrice = new BigDecimal(0);
+                    } else {
+                        feeTotalPrice = (sub.multiply(squarePrice).add(additionalAmount)).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                    }
                 }
             } else if ("6006".equals(computingFormula)) {
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("7007".equals(computingFormula)) { //鑷畾涔夊叕寮�
                 feePrice = computeContractCustomizeFormula(feeDto, contractRoomDtos);
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("8008".equals(computingFormula)) {  //鎵嬪姩鍔ㄦ�佽垂鐢�
                 feePrice = new BigDecimal(Double.parseDouble(feeDto.getAmount()));
+
+                BigDecimal cycle = null;
+                if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                    cycle = new BigDecimal(feeDto.getCycle());
+                }
+                if (cycle == null) {
+                    feeTotalPrice = new BigDecimal(0);
+                } else {
+                    feeTotalPrice = feePrice.multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                }
             } else if ("9009".equals(computingFormula)) {  //(鏈湡搴︽暟-涓婃湡搴︽暟)*鍔ㄦ�佸崟浠�+闄勫姞璐�
                 if (StringUtil.isEmpty(feeDto.getCurDegrees())) {
                     //throw new IllegalArgumentException("鎶勮〃鏁版嵁寮傚父");
@@ -1023,13 +1495,27 @@
                     BigDecimal sub = curDegree.subtract(preDegree);
                     feePrice = sub.multiply(squarePrice)
                             .add(additionalAmount)
-                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                            .setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+
+                    BigDecimal cycle = null;
+                    if (!StringUtil.isEmpty(feeDto.getCycle())) {
+                        cycle = new BigDecimal(feeDto.getCycle());
+                    }
+                    if (cycle == null) {
+                        feeTotalPrice = new BigDecimal(0);
+                    } else {
+                        feeTotalPrice = sub.multiply(squarePrice).add(additionalAmount).multiply(cycle).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                    }
                 }
             } else {
                 throw new IllegalArgumentException("鏆備笉鏀寔璇ョ被鍏紡");
             }
         }
-        return feePrice.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+
+        feePrice.setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
+        feeAmount.put("feePrice", feePrice);
+        feeAmount.put("feeTotalPrice", feeTotalPrice);
+        return feeAmount;
     }
 
     /**
@@ -1122,6 +1608,11 @@
     private BigDecimal computeRoomCustomizeFormula(FeeDto feeDto, RoomDto roomDto) {
 
         String value = feeDto.getComputingFormulaText();
+
+        if (StringUtil.isEmpty(value)) {
+            return new BigDecimal(0);
+        }
+
         value = value.replace("\n", "")
                 .replace("\r", "")
                 .trim();
@@ -1135,26 +1626,41 @@
             } else {
                 value = value.replace("C", communityDtos.get(0).getCommunityArea());
             }
-        } else if (value.contains("F")) { //澶勭悊妤兼爧
+        }
+        if (value.contains("F")) { //澶勭悊妤兼爧
             value = value.replace("F", roomDto.getFloorArea());
-        } else if (value.contains("U")) { //澶勭悊鍗曞厓
+        }
+        if (value.contains("U")) { //澶勭悊鍗曞厓
             value = value.replace("U", roomDto.getUnitArea());
-        } else if (value.contains("R")) { //澶勭悊 鎴垮眿闈㈢Н
+        }
+        if (value.contains("RL")) {
+            List<RoomAttrDto> roomAttrDtos = roomDto.getRoomAttrDto();
+            if (roomAttrDtos != null && roomAttrDtos.size() > 0) {
+                for (RoomAttrDto roomAttrDto : roomAttrDtos) {
+                    value = value.replace("RL" + roomAttrDto.getSpecCd(), roomAttrDto.getValue());
+                }
+            }
+        }
+        if (value.contains("R")) { //澶勭悊 鎴垮眿闈㈢Н
             value = value.replace("R", roomDto.getBuiltUpArea());
-        } else if (value.contains("X")) {// 澶勭悊 鎴垮眿绯绘暟
+        }
+        if (value.contains("X")) {// 澶勭悊 鎴垮眿绯绘暟
             value = value.replace("X", roomDto.getFeeCoefficient());
-        } else if (value.contains("L")) {//澶勭悊鎴垮眿灞傛暟
+        }
+        if (value.contains("L")) {//澶勭悊鎴垮眿灞傛暟
             value = value.replace("L", roomDto.getLayer());
         }
 
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine engine = manager.getEngineByName("JavaScript");
         BigDecimal valueObj = null;
+        logger.debug("璁$畻鍏紡涓猴細{}", value);
         try {
             value = engine.eval(value).toString();
             valueObj = new BigDecimal(Double.parseDouble(value));
         } catch (Exception e) {
             //throw new IllegalArgumentException("鍏紡璁$畻寮傚父锛屽叕寮忎负銆�" + feeDto.getComputingFormulaText() + "銆�,璁$畻 銆�" + value + "銆戝紓甯�");
+            logger.error("鍏紡璁$畻寮傚父锛屽叕寮忎负銆�" + feeDto.getComputingFormulaText() + "銆�,璁$畻 銆�" + value + "銆戝紓甯�", e);
             valueObj = new BigDecimal(0);
         }
 
@@ -1166,18 +1672,42 @@
 
     }
 
+    @Override
+    public Date getDeadlineTime(FeeDto feeDto) {
+        Map info = getTargetEndDateAndOweMonth(feeDto);
+        return (Date) info.get("targetEndDate");
+    }
+
+    /**
+     * 璁$畻 璁¤垂缁撴潫鏃堕棿鍜� 娆犺垂鏈堜唤锛堝彲鑳藉瓨鍦ㄥ皬鏁扮偣锛�
+     *
+     * @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<>();
-
+        //todo 鍒ゆ柇褰撳墠璐圭敤鏄惁宸茬粨鏉�
         if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
             targetEndDate = feeDto.getEndTime();
             targetEndDateAndOweMonth.put("oweMonth", oweMonth);
             targetEndDateAndOweMonth.put("targetEndDate", targetEndDate);
             return targetEndDateAndOweMonth;
         }
+
+        //todo 鑰冭檻璐圭敤椤� 璐圭敤鎻愬墠鐢熸垚
+        Calendar preEndTimeCal = Calendar.getInstance();
+        preEndTimeCal.setTime(feeDto.getEndTime());
+        if (StringUtil.isNumber(feeDto.getPrepaymentPeriod())) {
+            preEndTimeCal.add(Calendar.DAY_OF_MONTH, Integer.parseInt(feeDto.getPrepaymentPeriod()) * -1);
+        }
+        Date preEndTime = preEndTimeCal.getTime();
+
+        //todo 褰撳墠璐圭敤涓轰竴娆℃�ц垂鐢�
+        Date maxEndTime = feeDto.getConfigEndTime();
         if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
             //鍏堝彇 deadlineTime
             if (feeDto.getDeadlineTime() != null) {
@@ -1185,37 +1715,21 @@
             } else if (!StringUtil.isEmpty(feeDto.getCurDegrees())) {
                 targetEndDate = feeDto.getCurReadingTime();
             } else if (feeDto.getImportFeeEndTime() == null) {
-                targetEndDate = feeDto.getConfigEndTime();
+                targetEndDate = maxEndTime;
             } else {
                 targetEndDate = feeDto.getImportFeeEndTime();
             }
             //鍒ゆ柇褰撳墠璐圭敤鏄笉鏄鍏ヨ垂鐢�
             oweMonth = 1.0;
-
-        } else {
-            //褰撳墠鏃堕棿
+        } else if (FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())) {
+            if (feeDto.getDeadlineTime() != null) {
+                maxEndTime = feeDto.getDeadlineTime();
+            }
             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());
             // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂�  = 鏈堜唤
@@ -1224,18 +1738,70 @@
 
             // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
             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);
-            //璐圭敤 蹇粨鏉熶簡
-            if (feeDto.getConfigEndTime().getTime() < targetEndDate.getTime()) {
-                targetEndDate = feeDto.getConfigEndTime();
+            targetEndDate = getTargetEndTime(round * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+
+            //todo 濡傛灉 鍒颁簡 棰勪粯鏈� 浜х敓涓嬩釜鍛ㄦ湡鐨勮垂鐢�
+            if (DateUtil.getFormatTimeStringB(targetEndDate).equals(DateUtil.getFormatTimeStringB(endDate))
+                    && DateUtil.getCurrentDate().getTime() > preEndTime.getTime()
+            ) {
+                targetEndDate = getTargetEndTime((round + 1) * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
             }
-            //璇存槑娌℃湁娆犺垂
+
+
+            //todo 璐圭敤椤圭殑缁撴潫鏃堕棿<缂磋垂鐨勭粨鏉熸椂闂�  璐圭敤蹇粨鏉熶簡   鍙栬垂鐢ㄩ」鐨勭粨鏉熸椂闂�
+            if (maxEndTime.getTime() < targetEndDate.getTime()) {
+                targetEndDate = maxEndTime;
+            }
+            //璇存槑娆犺垂
+            if (endDate.getTime() < targetEndDate.getTime()) {
+                // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
+                oweMonth = dayCompare(endDate, targetEndDate);
+            }
+
+            if (feeDto.getEndTime().getTime() > targetEndDate.getTime()) {
+                targetEndDate = feeDto.getEndTime();
+            }
+        } else { //鍛ㄦ湡鎬ц垂鐢�
+            //褰撳墠鏃堕棿
+            Date billEndTime = DateUtil.getCurrentDate();
+            //寤鸿处鏃堕棿
+            Date startDate = feeDto.getStartTime();
+            //璁¤垂璧峰鏃堕棿
+            Date endDate = feeDto.getEndTime();
+            //缂磋垂鍛ㄦ湡
+            long paymentCycle = Long.parseLong(feeDto.getPaymentCycle());
+            // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂�  = 鏈堜唤
+            double mulMonth = 0.0;
+            mulMonth = dayCompare(endDate, billEndTime);
+
+            // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
+            double round = 0.0;
+            if ("1200".equals(feeDto.getPaymentCd())) { // 1200棰勪粯璐�
+                round = Math.floor(mulMonth / paymentCycle) + 1;
+            } else { //2100鍚庝粯璐�
+                round = Math.floor(mulMonth / paymentCycle);
+            }
+            // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
+            targetEndDate = getTargetEndTime(round * paymentCycle, endDate);//鐩爣缁撴潫鏃堕棿
+
+            //todo 濡傛灉 鍒颁簡 棰勪粯鏈� 浜х敓涓嬩釜鍛ㄦ湡鐨勮垂鐢�
+            if (DateUtil.getFormatTimeStringB(targetEndDate).equals(DateUtil.getFormatTimeStringB(endDate))
+                    && DateUtil.getCurrentDate().getTime() > preEndTime.getTime()
+            ) {
+                targetEndDate = getTargetEndTime((round + 1) * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+            }
+
+            //璐圭敤椤圭殑缁撴潫鏃堕棿<缂磋垂鐨勭粨鏉熸椂闂�  璐圭敤蹇粨鏉熶簡   鍙栬垂鐢ㄩ」鐨勭粨鏉熸椂闂�
+            if (maxEndTime.getTime() < targetEndDate.getTime()) {
+                targetEndDate = maxEndTime;
+            }
+            //璇存槑娆犺垂
             if (endDate.getTime() < targetEndDate.getTime()) {
                 // 鐩爣鍒版湡鏃堕棿 - 鍒版湡鏃堕棿 = 娆犺垂鏈堜唤
                 oweMonth = dayCompare(endDate, targetEndDate);
@@ -1252,17 +1818,16 @@
     }
 
     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));
-//        }
         return getTargetEndDateAndOweMonth(feeDto, null);
     }
 
+    /**
+     * 璁$畻 涓や釜鏃堕棿鐐规湀浠�
+     *
+     * @param fromDate 寮�濮嬫椂闂�
+     * @param toDate   缁撴潫鏃堕棿
+     * @return
+     */
     @Override
     public double dayCompare(Date fromDate, Date toDate) {
         double resMonth = 0.0;
@@ -1270,45 +1835,77 @@
         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));
-            return tmpDays.divide(monthDay, 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).doubleValue();
+            monthDay = new BigDecimal(newFrom.getActualMaximum(Calendar.DAY_OF_MONTH));
+            return tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).doubleValue();
         }
         // 涓婃湀澶╂暟
         days = (newFromMaxDay.getTimeInMillis() - t1) * 1.00 / (24 * 60 * 60 * 1000);
         tmpDays = new BigDecimal(days);
         monthDay = new BigDecimal(newFrom.getActualMaximum(Calendar.DAY_OF_MONTH));
-        BigDecimal preRresMonth = tmpDays.divide(monthDay, 2, BigDecimal.ROUND_HALF_UP);
+        BigDecimal preRresMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP);
 
         //涓嬫湀澶╂暟
         days = (t2 - newFromMaxDay.getTimeInMillis()) * 1.00 / (24 * 60 * 60 * 1000);
         tmpDays = new BigDecimal(days);
         monthDay = new BigDecimal(newFromMaxDay.getActualMaximum(Calendar.DAY_OF_MONTH));
-        resMonth = tmpDays.divide(monthDay, 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).add(preRresMonth).doubleValue();
+        resMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).add(preRresMonth).doubleValue();
         return resMonth;
+    }
+
+
+    //鎵嬫満绔即璐瑰鐞�
+    public Map getOwnerPhoneFee(Map feeAmount) {
+        feeAmount.put("feePrice", new BigDecimal(1.00 / 100));
+        feeAmount.put("feeTotalPrice", new BigDecimal(1.00 / 100));
+        return feeAmount;
+    }
+
+
+    /**
+     * 銆�銆� *瀛楃涓茬殑鏃ユ湡鏍煎紡鐨勮绠�
+     */
+    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
@@ -1322,31 +1919,50 @@
         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();
     }
 
-    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)
-            );
+    @Override
+    public List<CarInoutDto> computeTempCarStopTimeAndFee(List<CarInoutDto> carInoutDtos) {
 
-            System.out.println(month);
-        } catch (ParseException e) {
-            e.printStackTrace();
+        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) {
+//        BigDecimal squarePrice = new BigDecimal(Double.parseDouble("4.50"));
+//        BigDecimal builtUpArea = new BigDecimal(Double.parseDouble("52.69"));
+//        BigDecimal additionalAmount = new BigDecimal(Double.parseDouble("0"));
+//            BigDecimal cycle = new BigDecimal(Double.parseDouble("3"));
+//        BigDecimal  feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(3, BigDecimal.ROUND_HALF_DOWN);
+//        System.out.println(feeTotalPrice.doubleValue());
+//    }
+
+    //    public static void main(String[] args) {
 //        ComputeFeeSMOImpl computeFeeSMO = new ComputeFeeSMOImpl();
 //        try {
 //            Date startTime = DateUtil.getDateFromString("2020-12-31 00:00:00", DateUtil.DATE_FORMATE_STRING_A);
@@ -1359,4 +1975,285 @@
 //            e.printStackTrace();
 //        }
 //    }
+    static int[] getDiff(LocalDate start, LocalDate end) {
+
+        if (!start.isBefore(end)) {
+            throw new IllegalArgumentException("Start must not be before end.");
+        }
+
+        int year1 = start.getYear();
+        int month1 = start.getMonthValue();
+        int day1 = start.getDayOfMonth();
+
+        int year2 = end.getYear();
+        int month2 = end.getMonthValue();
+        int day2 = end.getDayOfMonth();
+
+        int yearDiff = year2 - year1;     // yearDiff >= 0
+        int monthDiff = month2 - month1;
+
+        int dayDiff = day2 - day1;
+
+        if (dayDiff < 0) {
+            LocalDate endMinusOneMonth = end.minusMonths(1);   // end 鐨勪笂涓�涓湀
+            int monthDays = endMinusOneMonth.lengthOfMonth();  // 璇ユ湀鐨勫ぉ鏁�
+
+            dayDiff += monthDays;  // 鐢ㄤ笂涓�涓湀鐨勫ぉ鏁拌ˉ涓婅繖涓湀宸帀鐨勬棩瀛�
+
+            if (monthDiff > 0) {   // eg. start is 2018-04-03, end is 2018-08-01
+                monthDiff--;
+
+            } else {  // eg. start is 2018-04-03, end is 2019-02-01
+                monthDiff += 11;
+                yearDiff--;
+
+            }
+        }
+
+        int[] diff = new int[2];
+
+        diff[0] = yearDiff * 12 + monthDiff;
+        diff[1] = dayDiff;
+
+        return diff;
+    }
+
+    /**
+     * 璁$畻涓や釜鏃ユ湡鐨勬椂闂村樊
+     *
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public Map<String, Object> dateDiff(Date startDate, String endDate) {
+        Map<String, Object> cycle = new HashMap<>();
+
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Date endDates = null;
+        try {
+            endDates = format.parse(endDate);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        LocalDate start = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(endDates);
+        calendar.add(calendar.DATE, 1);
+        Date date = calendar.getTime();
+        LocalDate end = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        int[] diff = getDiff(start, end);
+        cycle.put("months", diff[0]);//鍑犱釜鏈�
+        cycle.put("days", diff[1]);//鍑犲ぉ
+        String startDateString = format.format(startDate);
+        String endDateString = format.format(endDates);
+        cycle.put("startMonthDays", getDayOfMonth(startDateString));//寮�濮嬫湀浠藉ぉ鏁�
+        cycle.put("endMonthDays", getDayOfMonth(endDateString));//缁撴潫鏈堜唤澶╂暟
+        cycle.put("isOneMonth", false);// false 涓嶈法鏈� true鏈堜唤
+        if (diff[0] == 0) {
+            //鍒ゆ柇鏄惁鍚屼竴涓湀
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            String date1 = sdf.format(startDate);
+            String date2 = sdf.format(endDates);
+            if (!date1.equals(date2)) {
+                cycle.put("isOneMonth", true);
+                //璁$畻澶告湀鍒嗕袱涓湀鍒嗗埆鏄灏戝ぉ
+                SimpleDateFormat sdfday = new SimpleDateFormat("dd");
+                Integer startDate1 = Integer.valueOf(sdfday.format(startDate));
+                String endDates2 = sdfday.format(endDates);
+                cycle.put("startEndOfMonth", getDayOfMonth(startDateString) - startDate1 + 1);//寮�濮嬫湀浠藉ぉ鏁�
+                cycle.put("endBeginningOfMonth", Integer.valueOf(endDates2));//缁撴潫鏈堜唤澶╂暟
+            }
+        }
+        return cycle;
+
+    }
+
+    /**
+     * 鑾峰彇鏃ユ湡鍐呯殑澶╂暟
+     *
+     * @param dateStr
+     * @return
+     */
+    public int getDayOfMonth(String dateStr) {
+        int year = Integer.parseInt(dateStr.substring(0, 4));
+        int month = Integer.parseInt(dateStr.substring(5, 7));
+        Calendar c = Calendar.getInstance();
+        c.set(year, month, 0); //杈撳叆绫诲瀷涓篿nt绫诲瀷
+        return c.get(Calendar.DAY_OF_MONTH);
+    }
+
+    /**
+     * @param feeDto
+     * @param cycle
+     */
+    public void dealRentRateCycle(FeeDto feeDto, double cycle) {
+
+        if (!FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(feeDto.getComputingFormula())) {
+            return;
+        }
+
+        Date endTime = feeDto.getEndTime();
+        Date date = getTargetEndTime(cycle, endTime);
+        feeDto.setDeadlineTime(date);
+        dealRentRate(feeDto);
+
+    }
+
+    /**
+     * @param feeDto
+     * @param custEndTime
+     */
+    public void dealRentRateCustEndTime(FeeDto feeDto, Date custEndTime) {
+
+        if (!FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(feeDto.getComputingFormula())) {
+            return;
+        }
+
+        feeDto.setDeadlineTime(custEndTime);
+        dealRentRate(feeDto);
+
+    }
+
+    @Override
+    public long computeOneIntegralQuantity(IntegralRuleConfigDto integralRuleConfigDto, JSONObject reqJson) {
+        String computingFormula = integralRuleConfigDto.getComputingFormula();
+        BigDecimal amountDec = null;
+        long amount = 0;
+        if (IntegralRuleConfigDto.COMPUTING_FORMULA_AREA.equals(computingFormula)) { //闈㈢Н涔樹互鍗曚环
+            BigDecimal areaDec = new BigDecimal(Double.parseDouble(reqJson.getString("area")));
+            BigDecimal squarePriceDec = new BigDecimal(Double.parseDouble(integralRuleConfigDto.getSquarePrice()));
+            amountDec = areaDec.multiply(squarePriceDec).setScale(2, BigDecimal.ROUND_HALF_UP);
+        } else if (IntegralRuleConfigDto.COMPUTING_FORMULA_MONEY.equals(computingFormula)) { // 閲戦涔樹互鍗曚环
+            BigDecimal aDec = new BigDecimal(Double.parseDouble(reqJson.getString("amount")));
+            BigDecimal squarePriceDec = new BigDecimal(Double.parseDouble(integralRuleConfigDto.getSquarePrice()));
+            amountDec = aDec.multiply(squarePriceDec).setScale(2, BigDecimal.ROUND_HALF_UP);
+        } else if (IntegralRuleConfigDto.COMPUTING_FORMULA_FIXED.equals(computingFormula)) { // 鍥哄畾绉垎
+            amountDec = new BigDecimal(Double.parseDouble(integralRuleConfigDto.getAdditionalAmount()));
+        } else {
+            amountDec = new BigDecimal(0);
+        }
+
+        if (IntegralRuleConfigDto.SCALE_UP.equals(integralRuleConfigDto.getScale())) {
+            amount = new Double(Math.ceil(amountDec.doubleValue())).longValue();
+        } else {
+            amount = new Double(Math.floor(amountDec.doubleValue())).longValue();
+        }
+        integralRuleConfigDto.setQuantity(amount + "");
+        return amount;
+    }
+
+    /**
+     * 绉熼噾澶勭悊
+     *
+     * @param feeDto
+     */
+    public void dealRentRate(FeeDto feeDto) {
+        if (!FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(feeDto.getComputingFormula())) {
+            return;
+        }
+
+        //鏌ヨ閫掑淇℃伅
+        FeeAttrDto feeAttrDto = new FeeAttrDto();
+        feeAttrDto.setFeeId(feeDto.getFeeId());
+        feeAttrDto.setCommunityId(feeDto.getCommunityId());
+        List<FeeAttrDto> feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto);
+
+        if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
+            return;
+        }
+        int rateCycle = 0;
+        double rate = 0.0;
+        Date rateStartTime = null;
+        try {
+            for (FeeAttrDto tmpFeeAttrDto : feeAttrDtos) {
+                if (FeeAttrDto.SPEC_CD_RATE.equals(tmpFeeAttrDto.getSpecCd())) {
+                    feeDto.setRate(tmpFeeAttrDto.getValue().trim());
+                    rate = Double.parseDouble(tmpFeeAttrDto.getValue().trim());
+                }
+                if (FeeAttrDto.SPEC_CD_RATE_CYCLE.equals(tmpFeeAttrDto.getSpecCd())) {
+                    feeDto.setRateCycle(tmpFeeAttrDto.getValue().trim());
+                    rateCycle = Integer.parseInt(tmpFeeAttrDto.getValue().trim());
+                }
+                if (FeeAttrDto.SPEC_CD_RATE_START_TIME.equals(tmpFeeAttrDto.getSpecCd())) {
+                    feeDto.setRateStartTime(tmpFeeAttrDto.getValue().trim());
+                    rateStartTime = DateUtil.getDateFromString(tmpFeeAttrDto.getValue().trim(), DateUtil.DATE_FORMATE_STRING_B);
+                }
+            }
+        } catch (Exception e) {
+            logger.error("绉熼噾閫掑寮傚父", e);
+            return;
+        }
+
+        if (!FeeDto.STATE_DOING.equals(feeDto.getState())) {
+            return;
+        }
+
+        if (rateCycle == 0 || rate == 0) {
+            return;
+        }
+
+        if (feeDto.getDeadlineTime().getTime() <= rateStartTime.getTime()) {
+            return;
+        }
+
+        BigDecimal oweAmountDec = new BigDecimal(0);
+        //璁$畻 璁¤垂璧峰鏃堕棿 鍒� rateStartTime 鏃剁殑璐圭敤
+        double curOweMonth = 0;
+        BigDecimal curFeePrice = new BigDecimal(feeDto.getFeePrice());
+
+        // todo 濡傛灉璁¤垂璧峰鏃堕棿 灏忓尯 閫掑寮�濮嬫椂闂�
+        if (feeDto.getEndTime().getTime() < rateStartTime.getTime()) {
+            //todo 閫掑鍓嶇殑娆犺垂
+            curOweMonth = dayCompare(feeDto.getEndTime(), rateStartTime);
+            oweAmountDec = curFeePrice.multiply(new BigDecimal(curOweMonth)).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+            // todo 閫掑
+            curOweMonth = dayCompare(rateStartTime, feeDto.getDeadlineTime());
+        } else {
+            // todo 閫掑
+            curOweMonth = dayCompare(feeDto.getEndTime(), feeDto.getDeadlineTime());
+        }
+        double rateMonth = dayCompare(rateStartTime, feeDto.getDeadlineTime());
+
+        // todo 鏈�澶у懆鏈�
+        double maxCycle = Math.ceil(rateMonth / rateCycle);
+
+        // todo 澧為暱鍓嶇殑娆犺垂
+        BigDecimal addTotalAmount = oweAmountDec;
+        // todo 閫掑鍛ㄦ湡鍐呯殑 鏈�掑璐圭敤
+        BigDecimal preCycleAmount = curFeePrice.multiply(new BigDecimal(rateCycle));
+        BigDecimal rateDec = null; //閫掑鍛ㄦ湡鎵�鏀惰垂鐢�
+        BigDecimal lastRateAmountDec = null;
+        double curCycle = 0;
+        BigDecimal curAmount = null; // 褰撴湡閲戦
+        Date curEndTime = null;
+        for (int cycleIndex = 0; cycleIndex < maxCycle; cycleIndex++) {
+            //褰撴湡澧為暱閮ㄥ垎
+            rateDec = preCycleAmount.multiply(new BigDecimal(rate)).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+            //澧為暱鍛ㄦ湡鐨勫�嶆暟
+            curCycle = (cycleIndex + 1) * rateCycle;
+
+            // 璁$畻鏈疆鐨� 璁¤垂璧峰鏃堕棿
+            Calendar curEndTimeCalender = Calendar.getInstance();
+            curEndTimeCalender.setTime(rateStartTime);
+            curEndTimeCalender.add(Calendar.MONTH, new Double(curCycle).intValue());
+            curEndTime = curEndTimeCalender.getTime();
+            if (curCycle > rateMonth) {
+                //涓嶈冻澧為暱鍛ㄦ湡澧為暱鐜�
+                rateDec = new BigDecimal(curOweMonth / rateCycle - Math.floor(curOweMonth / rateCycle)).multiply(rateDec).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                lastRateAmountDec = new BigDecimal(curOweMonth / rateCycle - Math.floor(curOweMonth / rateCycle)).multiply(preCycleAmount).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
+                addTotalAmount = addTotalAmount.add(rateDec).add(lastRateAmountDec);
+                continue;
+            }
+            //鏈湡閲戦
+            curAmount = rateDec.add(preCycleAmount);// 澧為暱閮ㄥ垎 + 涓婃湰鏈熻垂鐢�
+            //濡傛灉璁¤垂璧峰鏃堕棿 澶т簬 閫掑寮�濮嬫椂闂� 閭d箞鏈疆 涓嶈鍏�
+            if (feeDto.getEndTime().getTime() < curEndTime.getTime()) {
+                addTotalAmount = addTotalAmount.add(curAmount); // 璁″叆鎬荤殑 璐圭敤涓�
+            }
+            preCycleAmount = curAmount;
+        }
+        feeDto.setAmountOwed(addTotalAmount.doubleValue() + "");
+        feeDto.setFeeTotalPrice(addTotalAmount.doubleValue());
+    }
 }
+

--
Gitblit v1.8.0