Ver código fonte

计算首期金额,少算一天

zhangyao 1 mês atrás
pai
commit
b0b18d590c

+ 6 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractServiceAdj.java

@@ -580,8 +580,12 @@ public class contractServiceAdj {
                         SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
                         SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
 
-                        BigDecimal ratio = new BigDecimal(EFFECTIVE_DATE.getDayOfMonth()).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
-                        ratio = BigDecimal.ONE.subtract(ratio);
+                        //BigDecimal ratio = new BigDecimal(EFFECTIVE_DATE.getDayOfMonth()).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
+                        // ratio = BigDecimal.ONE.subtract(ratio);
+
+                        BigDecimal ratio = new BigDecimal(EFFECTIVE_DATE.lengthOfMonth() - EFFECTIVE_DATE.getDayOfMonth() + 1)
+                                .divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
+
 
                         COST_1STMONTH = SERVICE_TOTAL_COST.multiply(ratio);
 

+ 5 - 2
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/service/PaymentPlanService.java

@@ -141,8 +141,11 @@ public class PaymentPlanService {
 
                         } else {
                             UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
-                            BigDecimal ratio = new BigDecimal(PERIOD_BEGIN_DATE.getDayOfMonth()).divide(new BigDecimal(PERIOD_BEGIN_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
-                            ratio = BigDecimal.ONE.subtract(ratio);
+
+                            // 计算“日期当天到当月月底”的天数占当月总天数的比例(2025-6-25 对应 6/30)
+                            BigDecimal ratio = new BigDecimal(PERIOD_BEGIN_DATE.lengthOfMonth() - PERIOD_BEGIN_DATE.getDayOfMonth() + 1)
+                                    .divide(new BigDecimal(PERIOD_BEGIN_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
+
                             UNIT_COST_1STMONTH = ratio.multiply(UNIT_COST_1STMONTH);
                             firstPeriodBeginDate = PERIOD_BEGIN_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                             //下月一号