java110 лет назад: 5
Родитель
Сommit
f00daf8755

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

@@ -24,7 +24,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.text.ParseException;
 import java.util.*;
 
@@ -758,19 +757,32 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
 
         long t1 = newFrom.getTimeInMillis();
         long t2 = to.getTimeInMillis();
-        double days = (t2 - t1)*1.00 / (24 * 60 * 60 * 1000);
+        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();
+        return tmpDays.divide(monthDay, 2, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).doubleValue();
     }
 
     @Override
     public Date getTargetEndTime(double month, Date startDate) {
+//        Calendar endDate = Calendar.getInstance();
+//        endDate.setTime(startDate);
+//        endDate.add(Calendar.MONTH, (int) month);
+//        return endDate.getTime();
+
         Calendar endDate = Calendar.getInstance();
         endDate.setTime(startDate);
-        endDate.add(Calendar.MONTH, (int) month);
+
+        Double intMonth = Math.floor(month);
+        endDate.add(Calendar.MONTH, intMonth.intValue());
+        double doubleMonth = month - intMonth;
+        if (doubleMonth <= 0) {
+            return endDate.getTime();
+        }
+        Double hour = doubleMonth * 30 * 24;
+        endDate.add(Calendar.HOUR_OF_DAY, hour.intValue());
         return endDate.getTime();
     }
 

+ 17 - 10
service-fee/src/main/java/com/java110/fee/listener/fee/UpdateFeeInfoListener.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Listener;
 import com.java110.core.context.DataFlowContext;
+import com.java110.core.smo.IComputeFeeSMO;
 import com.java110.dto.order.BusinessDto;
 import com.java110.entity.center.Business;
 import com.java110.fee.dao.IFeeDetailServiceDao;
@@ -43,6 +44,9 @@ public class UpdateFeeInfoListener extends AbstractFeeBusinessServiceDataFlowLis
     @Autowired
     private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
 
+    @Autowired
+    private IComputeFeeSMO computeFeeSMOImpl;
+
     @Autowired
     private IFeeServiceDao feeServiceDaoImpl;
 
@@ -207,7 +211,7 @@ public class UpdateFeeInfoListener extends AbstractFeeBusinessServiceDataFlowLis
             return endCalender;
         }
 
-        if(cycles >= 1){
+        if (cycles >= 1) {
             endCalender.add(Calendar.MONTH, new Double(Math.floor(cycles)).intValue());
             cycles = cycles - Math.floor(cycles);
         }
@@ -246,15 +250,18 @@ public class UpdateFeeInfoListener extends AbstractFeeBusinessServiceDataFlowLis
                     //根据当前的结束时间 修改
                     Date endTime = (Date) feeInfo.get(0).get("end_time");
 
-                    Calendar endCalender = Calendar.getInstance();
-                    endCalender.setTime(endTime);
-                    if (StringUtil.isNumber(cyclesStr)) {
-                        endCalender.add(Calendar.MONTH, new Double(cycles).intValue());
-                    } else {
-                        int hours = new Double(cycles * DateUtil.getCurrentMonthDay() * 24).intValue();
-                        endCalender.add(Calendar.HOUR, hours);
-                    }
-                    businessFeeInfo.put("end_time", endCalender.getTime());
+//                    Calendar endCalender = Calendar.getInstance();
+//                    endCalender.setTime(endTime);
+//                    if (StringUtil.isNumber(cyclesStr)) {
+//                        endCalender.add(Calendar.MONTH, new Double(cycles).intValue());
+//                    } else {
+//                        int hours = new Double(cycles * DateUtil.getCurrentMonthDay() * 24).intValue();
+//                        endCalender.add(Calendar.HOUR, hours);
+//                    }
+
+                    Date newEndTime = computeFeeSMOImpl.getTargetEndTime(Double.parseDouble(cyclesStr), endTime);
+
+                    businessFeeInfo.put("end_time", newEndTime);
 
 
                     // 一次性收费类型,缴费后,则设置费用状态为收费结束、设置结束日期为费用项终止日期