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 |  209 ++++++++++++++--------------------------------------
 1 files changed, 56 insertions(+), 153 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 833744e..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
@@ -5,8 +5,8 @@
 import com.java110.core.context.Environment;
 import com.java110.core.log.LoggerFactory;
 import com.java110.core.smo.IComputeFeeSMO;
-import com.java110.dto.RoomAttrDto;
-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.contract.ContractRoomDto;
@@ -31,7 +31,7 @@
 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;
@@ -951,44 +951,7 @@
         return getFeePrice(feeDto, null);
     }
 
-    /**
-     * //璁$畻鍛ㄦ湡
-     * //                    Map<String, Object> cycleResults = dateDiff(feeDto.getEndTime(), feeDto.getCustEndTime());
-     * //                    //鏈堜唤澶т簬0
-     * //                    Integer months = Integer.valueOf(cycleResults.get("months").toString());
-     * //                    Integer days = Integer.valueOf(cycleResults.get("days").toString());
-     * //                    Integer startMonthDays = Integer.valueOf(cycleResults.get("startMonthDays").toString());
-     * //                    Integer endMonthDays = Integer.valueOf(cycleResults.get("endMonthDays").toString());
-     * //                    String isOneMonth = cycleResults.get("isOneMonth").toString();
-     * //                    //鏁存暟鏈�
-     * //                    if (months > 0 && days == 0) {
-     * //                        BigDecimal cycle = new BigDecimal(months);
-     * //                        feeTotalPrice = (squarePrice.multiply(builtUpArea).add(additionalAmount)).multiply(cycle).setScale(3, BigDecimal.ROUND_HALF_UP);
-     * //                    }
-     * //                    //鍑犱釜鏈堝嚑澶�   锛堝崟浠�*闈㈢Н+闄勫姞璐癸級*鏈堜唤+((鍗曚环*闈㈢Н+闄勫姞璐�)/鎬诲ぉ鏁�)*瀹為檯澶╂暟
-     * //                    if (months > 0 && days > 0) {
-     * //                        BigDecimal cycle = new BigDecimal(months);
-     * //                        BigDecimal endMonthDayss = new BigDecimal(endMonthDays);
-     * //                        BigDecimal dayss = new BigDecimal(days);
-     * //                        BigDecimal monthPrice = squarePrice.multiply(builtUpArea).add(additionalAmount);
-     * //                        feeTotalPrice = (monthPrice).multiply(cycle).add(monthPrice.divide(endMonthDayss).multiply(dayss)).setScale(3, BigDecimal.ROUND_HALF_UP);
-     * //                    }
-     * //                    //璺ㄦ湀浠� 涓嶈冻涓�鏈�  ((鍗曚环*闈㈢Н+闄勫姞璐�)/寮�濮嬫湀浠芥�诲ぉ鏁�)*瀹為檯澶╂暟+((鍗曚环*闈㈢Н+闄勫姞璐�)/缁撴潫鏈堜唤鎬诲ぉ鏁�)*瀹為檯澶╂暟
-     * //                    if (months == 0 && days > 0 && "true".equals(isOneMonth)) {
-     * //                        BigDecimal startEndOfMonth = new BigDecimal(cycleResults.get("startEndOfMonth").toString());
-     * //                        BigDecimal endBeginningOfMonth = new BigDecimal(cycleResults.get("endBeginningOfMonth").toString());
-     * //                        BigDecimal endMonthDayss = new BigDecimal(endMonthDays);
-     * //                        BigDecimal startMonthDayss = new BigDecimal(startMonthDays);
-     * //                        BigDecimal monthPrice = squarePrice.multiply(builtUpArea).add(additionalAmount);
-     * //                        feeTotalPrice = monthPrice.divide(startMonthDayss, 4, BigDecimal.ROUND_HALF_UP).multiply(startEndOfMonth).add(monthPrice.divide(endMonthDayss, 4, BigDecimal.ROUND_HALF_UP).multiply(endBeginningOfMonth)).setScale(3, BigDecimal.ROUND_HALF_UP);
-     * //                    }
-     * //                    //涓嶈法鏈堜唤 涓嶈冻涓�鏈�  (鍗曚环*闈㈢Н+闄勫姞璐�/寮�濮嬫湀浠芥�诲ぉ鏁�)*瀹為檯澶╂暟
-     * //                    if (months == 0 && days > 0 && "false".equals(isOneMonth)) {
-     * //                        BigDecimal cycle = new BigDecimal(days);
-     * //                        BigDecimal startMonthDayss = new BigDecimal(startMonthDays);
-     * //                        BigDecimal monthPrice = squarePrice.multiply(builtUpArea).add(additionalAmount);
-     * //                        feeTotalPrice = monthPrice.divide(startMonthDayss, 4, BigDecimal.ROUND_HALF_UP).multiply(cycle).setScale(3, BigDecimal.ROUND_HALF_UP);
-     * //                    }
+    /*
      *
      * @param feeDto
      * @param roomDto
@@ -1002,6 +965,18 @@
         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) {
@@ -1024,9 +999,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1039,9 +1011,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1057,9 +1026,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1071,9 +1037,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1087,9 +1050,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1100,9 +1060,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1126,9 +1083,6 @@
                     if (!StringUtil.isEmpty(feeDto.getCycle())) {
                         cycle = new BigDecimal(feeDto.getCycle());
                     }
-                    if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                        cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                    }
                     if (cycle == null) {
                         feeTotalPrice = new BigDecimal(0);
                     } else {
@@ -1141,9 +1095,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1166,9 +1117,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1179,9 +1127,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1203,9 +1148,6 @@
                     BigDecimal cycle = null;
                     if (!StringUtil.isEmpty(feeDto.getCycle())) {
                         cycle = new BigDecimal(feeDto.getCycle());
-                    }
-                    if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                        cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                     }
                     if (cycle == null) {
                         feeTotalPrice = new BigDecimal(0);
@@ -1241,9 +1183,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1257,9 +1196,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1276,9 +1212,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1291,9 +1224,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1308,9 +1238,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1321,9 +1248,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1347,9 +1271,6 @@
                     if (!StringUtil.isEmpty(feeDto.getCycle())) {
                         cycle = new BigDecimal(feeDto.getCycle());
                     }
-                    if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                        cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                    }
                     if (cycle == null) {
                         feeTotalPrice = new BigDecimal(0);
                     } else {
@@ -1363,9 +1284,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1377,9 +1295,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1402,9 +1317,6 @@
                     BigDecimal cycle = null;
                     if (!StringUtil.isEmpty(feeDto.getCycle())) {
                         cycle = new BigDecimal(feeDto.getCycle());
-                    }
-                    if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                        cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                     }
                     if (cycle == null) {
                         feeTotalPrice = new BigDecimal(0);
@@ -1438,9 +1350,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1457,9 +1366,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1475,9 +1381,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1490,9 +1393,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1507,9 +1407,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1521,9 +1418,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1548,9 +1442,6 @@
                     if (!StringUtil.isEmpty(feeDto.getCycle())) {
                         cycle = new BigDecimal(feeDto.getCycle());
                     }
-                    if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                        cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                    }
                     if (cycle == null) {
                         feeTotalPrice = new BigDecimal(0);
                     } else {
@@ -1564,9 +1455,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1579,9 +1467,6 @@
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
                 }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
-                }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
                 } else {
@@ -1593,9 +1478,6 @@
                 BigDecimal cycle = null;
                 if (!StringUtil.isEmpty(feeDto.getCycle())) {
                     cycle = new BigDecimal(feeDto.getCycle());
-                }
-                if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                    cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                 }
                 if (cycle == null) {
                     feeTotalPrice = new BigDecimal(0);
@@ -1618,9 +1500,6 @@
                     BigDecimal cycle = null;
                     if (!StringUtil.isEmpty(feeDto.getCycle())) {
                         cycle = new BigDecimal(feeDto.getCycle());
-                    }
-                    if (!StringUtil.isEmpty(feeDto.getCustEndTime())) {
-                        cycle = new BigDecimal(dayCompare(feeDto.getEndTime(), DateUtil.getDateFromStringB(feeDto.getCustEndTime())));
                     }
                     if (cycle == null) {
                         feeTotalPrice = new BigDecimal(0);
@@ -1775,13 +1654,13 @@
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine engine = manager.getEngineByName("JavaScript");
         BigDecimal valueObj = null;
-        logger.debug("璁$畻鍏紡涓猴細{}",value);
+        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);
+            logger.error("鍏紡璁$畻寮傚父锛屽叕寮忎负銆�" + feeDto.getComputingFormulaText() + "銆�,璁$畻 銆�" + value + "銆戝紓甯�", e);
             valueObj = new BigDecimal(0);
         }
 
@@ -1791,6 +1670,12 @@
 
         return valueObj;
 
+    }
+
+    @Override
+    public Date getDeadlineTime(FeeDto feeDto) {
+        Map info = getTargetEndDateAndOweMonth(feeDto);
+        return (Date) info.get("targetEndDate");
     }
 
     /**
@@ -1805,14 +1690,23 @@
         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
@@ -1851,7 +1745,16 @@
             }
             // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
             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;
             }
@@ -1875,7 +1778,7 @@
             long paymentCycle = Long.parseLong(feeDto.getPaymentCycle());
             // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂�  = 鏈堜唤
             double mulMonth = 0.0;
-            mulMonth = dayCompare(startDate, billEndTime);
+            mulMonth = dayCompare(endDate, billEndTime);
 
             // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
             double round = 0.0;
@@ -1885,7 +1788,15 @@
                 round = Math.floor(mulMonth / paymentCycle);
             }
             // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
-            targetEndDate = getTargetEndTime(round * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+            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;
@@ -1907,14 +1818,6 @@
     }
 
     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);
     }
 
@@ -2305,7 +2208,7 @@
             oweAmountDec = curFeePrice.multiply(new BigDecimal(curOweMonth)).setScale(FeeConfigConstant.FEE_SCALE, BigDecimal.ROUND_HALF_UP);
             // todo 閫掑
             curOweMonth = dayCompare(rateStartTime, feeDto.getDeadlineTime());
-        }else{
+        } else {
             // todo 閫掑
             curOweMonth = dayCompare(feeDto.getEndTime(), feeDto.getDeadlineTime());
         }

--
Gitblit v1.8.0