Przeglądaj źródła

优化结束时间

wuxw 2 lat temu
rodzic
commit
4356029f74

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java

@@ -176,6 +176,8 @@ public class FeeDto extends PageDto implements Serializable {
 
     private String curYear;
 
+    private String targetEndTime;
+
     public String getAmount() {
         return amount;
     }
@@ -866,4 +868,12 @@ public class FeeDto extends PageDto implements Serializable {
     public void setCurYear(String curYear) {
         this.curYear = curYear;
     }
+
+    public String getTargetEndTime() {
+        return targetEndTime;
+    }
+
+    public void setTargetEndTime(String targetEndTime) {
+        this.targetEndTime = targetEndTime;
+    }
 }

+ 4 - 0
java110-core/src/main/java/com/java110/core/smo/IComputeFeeSMO.java

@@ -159,6 +159,9 @@ public interface IComputeFeeSMO {
 
     void computeEveryOweFee(FeeDto tmpFeeDto, RoomDto roomDto);
 
+
+    void computeEveryOweFeeByTargetEndTime(FeeDto tmpFeeDto, String targetEndTime);
+
     /**
      * 计算停车时间和费用
      *
@@ -196,4 +199,5 @@ public interface IComputeFeeSMO {
     void dealRentRateCustEndTime(FeeDto feeDto, Date custEndTime);
 
     long computeOneIntegralQuantity(IntegralRuleConfigDto integralRuleConfigDto, JSONObject reqJson);
+
 }

+ 40 - 1
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java

@@ -117,6 +117,46 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
         computeFeePrice(tmpFeeDto, roomDto);
     }
 
+    /**
+     * 设定结束时间
+     *
+     * @param feeDto
+     * @param targetEndTime
+     */
+    @Override
+    public void computeEveryOweFeeByTargetEndTime(FeeDto feeDto, String targetEndTime) {
+
+        Date targetEndDate = DateUtil.getDateFromStringB(targetEndTime);
+        double oweMonth = 1.0;
+        if (feeDto.getEndTime().getTime() > targetEndDate.getTime()) {
+            targetEndDate = feeDto.getEndTime();
+        }
+        if (feeDto.getEndTime().getTime() < targetEndDate.getTime()) {
+            // 目标到期时间 - 到期时间 = 欠费月份
+            oweMonth = DateUtil.dayCompare(feeDto.getEndTime(), targetEndDate);
+        }
+
+        String computingFormula = feeDto.getComputingFormula();
+        Map feePriceAll = getFeePrice(feeDto, null);
+        feeDto.setFeePrice(Double.parseDouble(feePriceAll.get("feePrice").toString()));
+
+        BigDecimal price = new BigDecimal(feeDto.getFeePrice());
+        price = price.multiply(new BigDecimal(oweMonth));
+        feeDto.setFeeTotalPrice(price.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+        feeDto.setDeadlineTime(targetEndDate);
+
+        //动态费用
+        if ("4004".equals(computingFormula)
+                && FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())
+                && !FeeDto.STATE_FINISH.equals(feeDto.getState())) {
+            feeDto.setAmountOwed(feeDto.getFeeTotalPrice() + "");
+            //feeDto.setDeadlineTime(DateUtil.getCurrentDate()); 欠费日期不对先注释
+        }
+
+        //todo 考虑租金递增
+        dealRentRate(feeDto);
+    }
+
 
     /**
      * 计算欠费金额
@@ -2146,7 +2186,6 @@ public class ComputeFeeSMOImpl implements IComputeFeeSMO {
         double maxCycle = Math.ceil(rateMonth / rateCycle);
 
 
-
         // todo 增长前的欠费
         BigDecimal addTotalAmount = oweAmountDec;
         // todo 递增周期内的 未递增费用

+ 6 - 0
service-fee/src/main/java/com/java110/fee/api/FeeApi.java

@@ -13,6 +13,7 @@ import com.java110.utils.constant.ResponseConstant;
 import com.java110.utils.exception.InitConfigDataException;
 import com.java110.utils.exception.InitDataFlowContextException;
 import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -174,6 +175,7 @@ public class FeeApi extends BaseController {
     public ResponseEntity<String> listOweFees(@RequestParam(value = "payObjId", required = false) String payObjId,
                                               @RequestParam(value = "payObjType", required = false) String payObjType,
                                               @RequestParam(value = "ownerId", required = false) String ownerId,
+                                              @RequestParam(value = "targetEndTime", required = false) String targetEndTime,
                                               @RequestParam(value = "communityId") String communityId) {
         if (StringUtil.isEmpty(payObjId) && StringUtil.isEmpty(ownerId)) {
             throw new IllegalArgumentException("费用对象或者业主不能都为空");
@@ -186,6 +188,10 @@ public class FeeApi extends BaseController {
                 feeDto.setPayerObjId(payObjId);
             }
         }
+        if(!StringUtil.isEmpty(targetEndTime)){
+            targetEndTime = DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(targetEndTime),1);
+            feeDto.setTargetEndTime(targetEndTime);
+        }
         feeDto.setPayerObjType(payObjType);
         feeDto.setOwnerId(ownerId);
         feeDto.setCommunityId(communityId);

+ 9 - 2
service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java

@@ -81,7 +81,7 @@ public class QueryOweFeeImpl implements IQueryOweFee {
         feeDto.setState(FeeDto.STATE_DOING);
         List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
 
-        if (feeDtos == null || feeDtos.size() < 1) {
+        if (ListUtil.isNull(feeDtos)) {
             feeDtos = new ArrayList<>();
             return ResultVo.createResponseEntity(feeDtos);
         }
@@ -92,7 +92,14 @@ public class QueryOweFeeImpl implements IQueryOweFee {
         List<FeeDto> tmpFeeDtos = new ArrayList<>();
         for (FeeDto tmpFeeDto : feeDtos) {
             try {
-                computeFeeSMOImpl.computeEveryOweFee(tmpFeeDto);//计算欠费金额
+                //todo 有目标结束时间,并且不是一次性费用
+                if (!StringUtil.isEmpty(feeDto.getTargetEndTime())
+                        && !FeeDto.FEE_FLAG_ONCE.equals(feeDto.getFeeFlag())
+                ) {
+                    computeFeeSMOImpl.computeEveryOweFeeByTargetEndTime(tmpFeeDto, feeDto.getTargetEndTime());//计算欠费金额
+                } else {
+                    computeFeeSMOImpl.computeEveryOweFee(tmpFeeDto);//计算欠费金额
+                }
                 //如果金额为0 就排除
                 tmpFeeDto.setFeeTotalPrice(
                         MoneyUtil.computePriceScale(

+ 2 - 1
service-fee/src/main/java/com/java110/fee/cmd/oweFeeCallable/SaveOweFeeCallableCmd.java

@@ -33,6 +33,7 @@ import com.java110.po.oweFeeCallable.OweFeeCallablePo;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.ListUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.slf4j.Logger;
@@ -73,7 +74,7 @@ public class SaveOweFeeCallableCmd extends Cmd {
 
         JSONArray roomIds = reqJson.getJSONArray("roomIds");
 
-        if (roomIds == null || roomIds.size() < 1) {
+        if (ListUtil.isNull(roomIds)) {
             throw new CmdException("未包含房屋信息");
         }