java110 vor 5 Jahren
Ursprung
Commit
569a6a5000

+ 22 - 4
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java

@@ -751,6 +751,7 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
 
     @Override
     public double dayCompare(Date fromDate, Date toDate) {
+        double resMonth = 0.0;
         Calendar from = Calendar.getInstance();
         from.setTime(fromDate);
         Calendar to = Calendar.getInstance();
@@ -766,11 +767,28 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
         long t1 = newFrom.getTimeInMillis();
         long t2 = to.getTimeInMillis();
         double days = (t2 - t1) * 1.00 / (24 * 60 * 60 * 1000);
-
         BigDecimal tmpDays = new BigDecimal(days);
-        BigDecimal monthDay = new BigDecimal(30);
-
-        return tmpDays.divide(monthDay, 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).doubleValue();
+        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);
+        //在当前月中
+        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();
+        }
+        // 上月天数
+        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).add(new BigDecimal(result));
+
+        //下月天数
+        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();
+        return resMonth;
     }
 
     @Override