| | |
| | | import com.java110.core.factory.Java110ThreadPoolFactory; |
| | | import com.java110.core.log.LoggerFactory; |
| | | import com.java110.core.smo.IComputeFeeSMO; |
| | | import com.java110.dto.RoomDto; |
| | | import com.java110.dto.room.RoomDto; |
| | | import com.java110.dto.fee.FeeConfigDto; |
| | | import com.java110.dto.fee.FeeDto; |
| | | import com.java110.dto.owner.OwnerCarDto; |
| | |
| | | import com.java110.intf.user.IOwnerInnerServiceSMO; |
| | | import com.java110.utils.cache.MappingCache; |
| | | import com.java110.utils.constant.ResponseConstant; |
| | | import com.java110.utils.exception.CmdException; |
| | | import com.java110.utils.exception.ListenerExecuteException; |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.utils.util.NumberUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import com.java110.utils.util.*; |
| | | import com.java110.vo.ResultVo; |
| | | import org.slf4j.Logger; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.ParseException; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | |
| | | @Service |
| | |
| | | feeDtos = new ArrayList<>(); |
| | | return ResultVo.createResponseEntity(feeDtos); |
| | | } |
| | | String val = CommunitySettingFactory.getValue(feeDtos.get(0).getCommunityId(), TOTAL_FEE_PRICE); |
| | | if (StringUtil.isEmpty(val)) { |
| | | val = MappingCache.getValue(DOMAIN_COMMON, TOTAL_FEE_PRICE); |
| | | } |
| | | List<FeeDto> tmpFeeDtos = new ArrayList<>(); |
| | | for (FeeDto tmpFeeDto : feeDtos) { |
| | | try { |
| | | computeFeeSMOImpl.computeEveryOweFee(tmpFeeDto);//计算欠费金额 |
| | | //如果金额为0 就排除 |
| | | //if (tmpFeeDto.getFeePrice() > 0 && tmpFeeDto.getEndTime().getTime() <= DateUtil.getCurrentDate().getTime()) { |
| | | tmpFeeDto.setFeeTotalPrice( |
| | | MoneyUtil.computePriceScale( |
| | | tmpFeeDto.getFeeTotalPrice(), |
| | | tmpFeeDto.getScale(), |
| | | Integer.parseInt(tmpFeeDto.getDecimalPlace()) |
| | | ) |
| | | ); |
| | | |
| | | tmpFeeDto.setVal(val); |
| | | if (tmpFeeDto.getFeePrice() > 0) { |
| | | tmpFeeDtos.add(tmpFeeDto); |
| | | } |
| | |
| | | } |
| | | String cycel = null; |
| | | String custEndTime = null; |
| | | String customStartTime = ""; |
| | | String customEndTime = ""; |
| | | if (!StringUtil.isEmpty(feeDto.getCycle())) { |
| | | cycel = feeDto.getCycle(); |
| | | } |
| | | if (!StringUtil.isEmpty(feeDto.getCustEndTime())) { |
| | | custEndTime = feeDto.getCustEndTime(); |
| | | } |
| | | customStartTime = feeDto.getCustomStartTime(); |
| | | customEndTime = feeDto.getCustomEndTime(); |
| | | feeDto = feeDtos.get(0); |
| | | if (!StringUtil.isEmpty(cycel)) { |
| | | feeDto.setCycle(cycel); |
| | |
| | | if (!StringUtil.isEmpty(custEndTime)) { |
| | | feeDto.setCustEndTime(custEndTime); |
| | | } |
| | | |
| | | feeDto.setCustomStartTime(customStartTime); |
| | | feeDto.setCustomEndTime(customEndTime); |
| | | |
| | | if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDto.getPayerObjType())) { //房屋相关 |
| | | RoomDto roomDto = new RoomDto(); |
| | |
| | | feeDto.setPayerObjName(ownerCarDto.getCarNum() + "(" + parkingSpaceDto.getAreaNum() + "停车场" + parkingSpaceDto.getNum() + "车位)"); |
| | | feeDto.setBuiltUpArea(parkingSpaceDto.getArea()); |
| | | } |
| | | |
| | | Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto); |
| | | feeDto.setFeePrice(Double.parseDouble(feePriceAll.get("feePrice").toString())); |
| | | feeDto.setFeeTotalPrice(Double.parseDouble(feePriceAll.get("feeTotalPrice").toString())); |
| | | |
| | | if(!StringUtil.isEmpty(custEndTime)){ |
| | | try { |
| | | computeFeeSMOImpl.dealRentRateCustEndTime(feeDto, DateUtil.getDateFromString(custEndTime,DateUtil.DATE_FORMATE_STRING_B)); |
| | | } catch (Exception e) { |
| | | throw new CmdException("计算费用失败"+e); |
| | | } |
| | | }else { |
| | | feeDto.setFeeTotalPrice( |
| | | MoneyUtil.computePriceScale( |
| | | Double.parseDouble(feePriceAll.get("feeTotalPrice").toString()), |
| | | feeDto.getScale(), |
| | | Integer.parseInt(feeDto.getDecimalPlace()) |
| | | ) |
| | | ); |
| | | |
| | | if (!StringUtil.isEmpty(custEndTime)) { |
| | | Date date = DateUtil.getDateFromStringB(custEndTime); |
| | | computeFeeSMOImpl.dealRentRateCustEndTime(feeDto, date); |
| | | } else { |
| | | computeFeeSMOImpl.dealRentRateCycle(feeDto, NumberUtil.getDouble(feeDto.getCycle())); |
| | | } |
| | | |
| | |
| | | offlinePayFeeSwitch = MappingCache.getValue(DOMAIN_COMMON, OFFLINE_PAY_FEE_SWITCH); |
| | | } |
| | | feeDto.setOfflinePayFeeSwitch(offlinePayFeeSwitch); |
| | | //去掉多余0 |
| | | feeDto.setSquarePrice(Double.parseDouble(feeDto.getSquarePrice()) + ""); |
| | | feeDto.setAdditionalAmount(Double.parseDouble(feeDto.getAdditionalAmount()) + ""); |
| | | return ResultVo.createResponseEntity(feeDto); |
| | | } |
| | | |
| | |
| | | feePrice = 0.0; |
| | | } else if ("1101".equals(computingFormula)) { // 租金 |
| | | feePrice = 0.0; |
| | | }else if ("1102".equals(computingFormula)) { // 租金 |
| | | } else if ("1102".equals(computingFormula)) { // 租金 |
| | | feePrice = 0.0; |
| | | } else if ("4004".equals(computingFormula)) { |
| | | feePrice = Double.parseDouble(feeDto.getAmount()); |
| | |
| | | } else if ("1102".equals(computingFormula)) { // 租金 |
| | | BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(tmpRoomDto.getRoomRent())); |
| | | feePrice = additionalAmount.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | }else if ("4004".equals(computingFormula)) { |
| | | } else if ("4004".equals(computingFormula)) { |
| | | feePrice = Double.parseDouble(feeDto.getAmount()); |
| | | } else if ("5005".equals(computingFormula)) { |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 计算2个日期之间相差的 以年、月、日为单位,各自计算结果是多少 |
| | | * 比如:2011-02-02 到 2017-03-02 |
| | | * 以年为单位相差为:6年 |
| | | * 以月为单位相差为:73个月 |
| | | * 以日为单位相差为:2220天 |
| | | * |
| | | * @param fromDate |
| | | * @param toDate |
| | | * @return |
| | | */ |
| | | public static double dayCompare(Date fromDate, Date toDate) { |
| | | Calendar from = Calendar.getInstance(); |
| | | from.setTime(fromDate); |
| | | Calendar to = Calendar.getInstance(); |
| | | to.setTime(toDate); |
| | | |
| | | long t1 = from.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, RoundingMode.HALF_UP).doubleValue(); |
| | | } |
| | | |
| | | private Map getTargetEndDateAndOweMonth(FeeDto feeDto) { |
| | | Date targetEndDate = null; |
| | |
| | | long paymentCycle = Long.parseLong(feeDto.getPaymentCycle()); |
| | | // 当前时间 - 开始时间 = 月份 |
| | | double mulMonth = 0.0; |
| | | mulMonth = dayCompare(startDate, billEndTime); |
| | | mulMonth = DateUtil.dayCompare(startDate, billEndTime); |
| | | |
| | | // 月份/ 周期 = 轮数(向上取整) |
| | | double round = 0.0; |
| | |
| | | //说明没有欠费 |
| | | if (endDate.getTime() < targetEndDate.getTime()) { |
| | | // 目标到期时间 - 到期时间 = 欠费月份 |
| | | oweMonth = dayCompare(endDate, targetEndDate); |
| | | oweMonth = DateUtil.dayCompare(endDate, targetEndDate); |
| | | } |
| | | |
| | | if (feeDto.getEndTime().getTime() > targetEndDate.getTime()) { |