Sfoglia il codice sorgente

optimize owe pay fee detail month

java110 2 anni fa
parent
commit
529c32f46e

+ 12 - 0
service-fee/src/main/java/com/java110/fee/feeMonth/IPayFeeMonthHelp.java

@@ -20,7 +20,19 @@ public interface IPayFeeMonthHelp {
     Double getDiscountAmount(Double feePrice, double receivedAmount, Date curDate, FeeDto feeDto);
 
 
+    /**
+     * 处理实收 问题
+     * @param feeDto
+     * @param payFeeMonthOwnerDto
+     */
     void waitDispersedFeeDetail(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto);
 
+    /**
+     * 处理欠费问题
+     * @param feeDto
+     * @param payFeeMonthOwnerDto
+     * @param feePrice
+     * @param deadlineTime
+     */
     void waitDispersedOweFee(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice, Date deadlineTime);
 }

+ 38 - 23
service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java

@@ -52,16 +52,16 @@ public class PayFeeMonthHelp implements IPayFeeMonthHelp {
 
         Double feePrice = Double.parseDouble(feePriceAll.get("feePrice").toString());
         //todo 如果是一次性费用 除以
-        if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getPayerObjType())) {
-            return feePrice;
-        }
-        double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(feeDto.getStartTime(), feeDto.getEndTime()));
-        if (maxMonth <= 0) {
-            return feePrice;
-
-        }
-        BigDecimal feePriceDec = new BigDecimal(feePrice).divide(new BigDecimal(maxMonth), 2, BigDecimal.ROUND_HALF_UP);
-        feePrice = feePriceDec.doubleValue();
+//        if (!FeeDto.FEE_FLAG_ONCE.equals(feeDto.getPayerObjType())) {
+//            return feePrice;
+//        }
+//        double maxMonth = Math.ceil(computeFeeSMOImpl.dayCompare(feeDto.getStartTime(), feeDto.getEndTime()));
+//        if (maxMonth <= 0) {
+//            return feePrice;
+//
+//        }
+//        BigDecimal feePriceDec = new BigDecimal(feePrice).divide(new BigDecimal(maxMonth), 2, BigDecimal.ROUND_HALF_UP);
+//        feePrice = feePriceDec.doubleValue();
         return feePrice;
     }
 
@@ -132,6 +132,17 @@ public class PayFeeMonthHelp implements IPayFeeMonthHelp {
 
         BigDecimal receivableAmount = new BigDecimal(feePrice);
 
+        BigDecimal dayReceivableAmount = null;
+
+        //todo 一次性费用 日应收计算
+        if (FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())) {
+            int day = DateUtil.daysBetween(endTime, startTime);
+            if (day < 1) {
+                day = 1;
+            }
+            dayReceivableAmount = receivableAmount.divide(new BigDecimal(day), 4, BigDecimal.ROUND_HALF_UP);// 日 应收
+        }
+
         // todo 寻找第一个自然月 一日
         Calendar firstMonthDayCal = Calendar.getInstance();
         firstMonthDayCal.setTime(startTime);
@@ -144,15 +155,18 @@ public class PayFeeMonthHelp implements IPayFeeMonthHelp {
         int curDay = 0;
         int curMonthMaxDay = 30;
         BigDecimal curMonthReceivableAmount = null;
-        BigDecimal dayReceivableAmount = null;
+
         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);
-            dayReceivableAmount = receivableAmount.divide(new BigDecimal(curMonthMaxDay), 4, BigDecimal.ROUND_HALF_UP);// 日 实收
+            //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);
 
@@ -172,12 +186,14 @@ public class PayFeeMonthHelp implements IPayFeeMonthHelp {
         }
 
         curDay = DateUtil.daysBetween(endTime, startMonthDayTime);
-
-        // 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 周期性费用 日应收重新算
+        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);
 
@@ -307,5 +323,4 @@ public class PayFeeMonthHelp implements IPayFeeMonthHelp {
     }
 
 
-
 }