From 7958f1dddb8a7f4e70d232b07a7703955ecedae0 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: 星期六, 26 八月 2023 12:45:33 +0800
Subject: [PATCH] 优化diamante

---
 service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java |   90 ++++++++++++++++++++++++++-------------------
 1 files changed, 52 insertions(+), 38 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
index 5a9624e..8e92b02 100644
--- a/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
+++ b/service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
@@ -5,11 +5,11 @@
 import com.java110.dto.fee.FeeAttrDto;
 import com.java110.dto.fee.FeeDetailDto;
 import com.java110.dto.fee.FeeDto;
-import com.java110.dto.payFeeDetailMonth.PayFeeDetailMonthDto;
-import com.java110.dto.payFeeDetailMonth.PayFeeMonthOwnerDto;
+import com.java110.dto.payFee.PayFeeDetailMonthDto;
+import com.java110.dto.payFee.PayFeeMonthOwnerDto;
 import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.fee.IPayFeeDetailMonthInnerServiceSMO;
-import com.java110.po.payFeeDetailMonth.PayFeeDetailMonthPo;
+import com.java110.po.payFee.PayFeeDetailMonthPo;
 import com.java110.utils.util.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -96,6 +96,7 @@
             return;
         }
 
+
         for (FeeDetailDto feeDetailDto : feeDetailDtos) {
             // todo 閫愭潯鍘荤鏁�
             doDispersedFeeDetail(feeDetailDto, feeDto, payFeeMonthOwnerDto);
@@ -113,10 +114,7 @@
      */
     @Override
     public void waitDispersedOweFee(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date deadlineTime) {
-        // todo 璐圭敤宸茬粡缁撴潫
-        if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
-            return;
-        }
+
 
         // todo 娓呯悊 detailId 涓�-1 鐨勬暟鎹�
         PayFeeDetailMonthPo payFeeDetailMonthPo = new PayFeeDetailMonthPo();
@@ -124,6 +122,11 @@
         payFeeDetailMonthPo.setFeeId(feeDto.getFeeId());
         payFeeDetailMonthPo.setDetailId("-1");
         payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo);
+
+        // todo 璐圭敤宸茬粡缁撴潫
+        if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
+            return;
+        }
 
         List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
         // todo 澶勭悊 寮�濮嬫椂闂村拰缁撴潫鏃堕棿
@@ -140,7 +143,7 @@
             if (day < 1) {
                 day = 1;
             }
-            dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
+            dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
         }
 
         // todo 瀵绘壘绗竴涓嚜鐒舵湀 涓�鏃�
@@ -158,20 +161,24 @@
 
         while (firstMonthDayTime.getTime() < endTime.getTime()) {
             curDay = DateUtil.daysBetween(firstMonthDayTime, startMonthDayTime);
+            // todo 璁$畻褰撴湀澶╂暟
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(startMonthDayTime);
+            curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
 
-            //todo 鍛ㄦ湡鎬ц垂鐢� 鏃ュ簲鏀堕噸鏂扮畻
-            if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
-                // todo 璁$畻褰撴湀澶╂暟
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(startMonthDayTime);
-                curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
-                dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
-            }
-            // todo 璁$畻 搴旀敹
-            curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
-
+            // todo 濡傛灉涓嶆槸鏁存湀锛屽垯杞崲涓烘寜澶╄绠�
+//            if (curDay != curMonthMaxDay) {
+                //todo 鍛ㄦ湡鎬ц垂鐢� 鏃ュ簲鏀堕噸鏂扮畻
+                if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+                    dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+                }
+                // todo 璁$畻 搴旀敹
+                curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+//            } else { // todo 濡傛灉鏄暣鏈� 閭e氨鎸夋湀璁$畻锛屼互鍏� 杞崲鎴愬ぉ鍐� 涔樹互澶╂暟鍚庣殑璇樊
+//                curMonthReceivableAmount = receivableAmount;
+//            }
             // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
-            toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime);
+            toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, deadlineTime);
 
             // todo 灏唖tartTime 淇敼涓� 涓嬫湀1鏃ユ椂闂�
             startMonthDayTime = firstMonthDayTime;
@@ -186,24 +193,29 @@
         }
 
         curDay = DateUtil.daysBetween(endTime, startMonthDayTime);
-        //todo 鍛ㄦ湡鎬ц垂鐢� 鏃ュ簲鏀堕噸鏂扮畻
-        if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
-            // todo 璁$畻褰撴湀澶╂暟
-            Calendar calendar = Calendar.getInstance();
-            calendar.setTime(startMonthDayTime);
-            curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
-            dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+        // todo 璁$畻褰撴湀澶╂暟
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(startMonthDayTime);
+        curMonthMaxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        // todo 濡傛灉涓嶆槸鏁存湀锛屽垯杞崲涓烘寜澶╄绠�
+        if (curDay != curMonthMaxDay) {
+            //todo 鍛ㄦ湡鎬ц垂鐢� 鏃ュ簲鏀堕噸鏂扮畻
+            if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+                dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+            }
+            // todo 璁$畻 搴旀敹
+            curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
+        } else { // todo 濡傛灉鏄暣鏈� 閭e氨鎸夋湀璁$畻锛屼互鍏� 杞崲鎴愬ぉ鍐� 涔樹互澶╂暟鍚庣殑璇樊
+            curMonthReceivableAmount = receivableAmount;
         }
-        // todo 璁$畻 搴旀敹
-        curMonthReceivableAmount = new BigDecimal(curDay).multiply(dayReceivableAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
-
         // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
-        toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime);
+        toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), 0, null, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, deadlineTime);
         payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
 
     }
 
-    private void doDispersedFeeDetail(FeeDetailDto feeDetailDto, FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto) {
+    private void doDispersedFeeDetail(FeeDetailDto feeDetailDto, FeeDto feeDto, PayFeeMonthOwnerDto
+            payFeeMonthOwnerDto) {
         List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>();
 
         // todo 鍘婚櫎 寮�濮嬫椂闂村拰 缁撴潫鏃堕棿鐨� 灏忔椂 鍒嗛挓 绉�
@@ -218,8 +230,8 @@
         BigDecimal receivableAmount = new BigDecimal(Double.parseDouble(feeDetailDto.getReceivableAmount()));
         BigDecimal receivedAmount = new BigDecimal(Double.parseDouble(feeDetailDto.getReceivedAmount()));
 
-        BigDecimal dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
-        BigDecimal dayReceivedAmount = receivedAmount.divide(new BigDecimal(day), 4, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
+        BigDecimal dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 搴旀敹
+        BigDecimal dayReceivedAmount = receivedAmount.divide(new BigDecimal(day), 8, BigDecimal.ROUND_HALF_UP);// 鏃� 瀹炴敹
 
         // todo 瀵绘壘绗竴涓嚜鐒舵湀 涓�鏃�
         Calendar firstMonthDayCal = Calendar.getInstance();
@@ -241,7 +253,7 @@
             curMonthReceivedAmount = new BigDecimal(curDay).multiply(dayReceivedAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
 
             // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
-            toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), curMonthReceivedAmount.doubleValue(), feeDetailDto, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime);
+            toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), curMonthReceivedAmount.doubleValue(), feeDetailDto, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, endTime);
 
             // todo 灏唖tartTime 淇敼涓� 涓嬫湀1鏃ユ椂闂�
             startMonthDayTime = firstMonthDayTime;
@@ -262,7 +274,7 @@
         curMonthReceivedAmount = new BigDecimal(curDay).multiply(dayReceivedAmount).setScale(4, BigDecimal.ROUND_HALF_UP);
 
         // todo 淇濆瓨鏁版嵁鍒皃ay_fee_detail_month
-        toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), curMonthReceivedAmount.doubleValue(), feeDetailDto, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime);
+        toSavePayFeeDetailMonth(curMonthReceivableAmount.doubleValue(), curMonthReceivedAmount.doubleValue(), feeDetailDto, feeDto, payFeeMonthOwnerDto, payFeeDetailMonthPos, startMonthDayTime, endTime);
         payFeeDetailMonthInnerServiceSMOImpl.savePayFeeDetailMonths(payFeeDetailMonthPos);
 
     }
@@ -281,7 +293,8 @@
                                          FeeDto feeDto,
                                          PayFeeMonthOwnerDto payFeeMonthOwnerDto,
                                          List<PayFeeDetailMonthPo> payFeeDetailMonthPos,
-                                         Date curTime) {
+                                         Date curTime,
+                                         Date deadlineTime) {
 
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(curTime);
@@ -302,7 +315,7 @@
                 getDiscountAmount(Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivableAmount()),
                         Double.parseDouble(tmpPayFeeDetailMonthPo.getReceivedAmount()),
                         calendar.getTime(), feeDto) + "");
-        tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId));
+        tmpPayFeeDetailMonthPo.setMonthId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_monthId, true));
         tmpPayFeeDetailMonthPo.setRemark("绋嬪簭璁$畻鐢熸垚");
         tmpPayFeeDetailMonthPo.setObjName(payFeeMonthOwnerDto.getObjName());
         tmpPayFeeDetailMonthPo.setObjId(payFeeMonthOwnerDto.getObjId());
@@ -310,6 +323,7 @@
         tmpPayFeeDetailMonthPo.setOwnerName(payFeeMonthOwnerDto.getOwnerName());
         tmpPayFeeDetailMonthPo.setLink(payFeeMonthOwnerDto.getLink());
         tmpPayFeeDetailMonthPo.setCurMonthTime(DateUtil.getFormatTimeStringB(calendar.getTime()));
+        tmpPayFeeDetailMonthPo.setDeadlineTime(DateUtil.getFormatTimeStringA(deadlineTime));
         if (feeDetailDto == null) {
             tmpPayFeeDetailMonthPo.setPayFeeTime(null);
         } else { // todo 浜よ垂璁板綍 淇濆瓨鏃�

--
Gitblit v1.8.0