java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java
@@ -176,6 +176,8 @@ private String curYear; private String targetEndTime; public String getAmount() { return amount; } @@ -866,4 +868,12 @@ public void setCurYear(String curYear) { this.curYear = curYear; } public String getTargetEndTime() { return targetEndTime; } public void setTargetEndTime(String targetEndTime) { this.targetEndTime = targetEndTime; } } java110-core/src/main/java/com/java110/core/smo/IComputeFeeSMO.java
@@ -159,6 +159,9 @@ void computeEveryOweFee(FeeDto tmpFeeDto, RoomDto roomDto); void computeEveryOweFeeByTargetEndTime(FeeDto tmpFeeDto, String targetEndTime); /** * 计算停车时间和费用 * @@ -196,4 +199,5 @@ void dealRentRateCustEndTime(FeeDto feeDto, Date custEndTime); long computeOneIntegralQuantity(IntegralRuleConfigDto integralRuleConfigDto, JSONObject reqJson); } java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
@@ -117,6 +117,46 @@ 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); } /** * 计算欠费金额 @@ -2144,7 +2184,6 @@ // todo 最大周期 double maxCycle = Math.ceil(rateMonth / rateCycle); // todo 增长前的欠费 service-fee/src/main/java/com/java110/fee/api/FeeApi.java
@@ -13,6 +13,7 @@ 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 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 @@ 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); service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java
@@ -81,7 +81,7 @@ 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 @@ 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( service-fee/src/main/java/com/java110/fee/cmd/oweFeeCallable/SaveOweFeeCallableCmd.java
@@ -33,6 +33,7 @@ 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 @@ JSONArray roomIds = reqJson.getJSONArray("roomIds"); if (roomIds == null || roomIds.size() < 1) { if (ListUtil.isNull(roomIds)) { throw new CmdException("未包含房屋信息"); }