From 59b8087dcdc6d200a06804107e2536a62f76469b Mon Sep 17 00:00:00 2001 From: winter Date: Thu, 29 Aug 2024 20:56:41 +0800 Subject: [PATCH] fix --- .../service/helper/WxRentContractHelper.java | 2 +- .../impl/WxRentContractServiceImpl.java | 37 ++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java index 16291b527..05d04a9b6 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java @@ -661,7 +661,7 @@ public class WxRentContractHelper { return total.toPlainString(); } - private static List getValidDays(Date start,Date end,List freeDays) { + public static List getValidDays(Date start,Date end,List freeDays) { List allDays = DateUtils.getAllDays(start, end); if (null == allDays) { return null; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java index bc3977cdf..f4f9813a3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -2600,14 +2600,47 @@ public class WxRentContractServiceImpl implements WxRentContractService { private BigDecimal[] calcuteReveneuJump(BigDecimal sales,WxRentContract rentcontract,Date startDate,Date endDate,List freePeriods) { + BigDecimal revenueDecimal = new BigDecimal(0); + BigDecimal rentDecimal = new BigDecimal(0); + //根据免租期来计算 + List validDates = WxRentContractHelper.getValidDays(startDate, endDate, freePeriods); + if (null == validDates || validDates.size() <= 0 ) { + BigDecimal[] bs = new BigDecimal[] {revenueDecimal,rentDecimal}; + return bs; + } + int allDays = DateUtils.daysBetween(startDate,endDate)+1; + boolean isFull = false; + if (allDays == validDates.size()) { + isFull = true; + } WxRentContractRevenueJump jq = new WxRentContractRevenueJump(); jq.updateTenantInfo(rentcontract); jq.setRentContractId(rentcontract.getId()); jq.setSortColumn(" minMoney asc"); - BigDecimal revenueDecimal = new BigDecimal(0); - BigDecimal rentDecimal = new BigDecimal(0); List jumpList = wxRentContractRevenueJumpMapper.findList(jq); if (null != jumpList && jumpList.size() > 0 ) { + //不是满时间段的,要按天来计算 + if (!isFull) { + Date realEndStart = DateUtils.getDaySet(endDate, Calendar.SECOND, 1); + int[] diffs = DateUtils.getDiff(startDate, realEndStart); + if (diffs[0] <= 0 ) { + if (rentcontract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) { + sales = sales.multiply(new BigDecimal(validDates.size())).divide(new BigDecimal(30)); + }else { + sales = sales.multiply(new BigDecimal(validDates.size())).divide(new BigDecimal(allDays)); + } + }else { + Date preextraStartDay = DateUtils.getTimeAfterMonths(diffs[0], startDate); + Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(preextraStartDay); + int predays = DateUtils.daysBetween(preextraStartDay, extraStartDayMonthEnd)+1; + if (rentcontract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) { + BigDecimal days = new BigDecimal(diffs[0]).multiply(new BigDecimal(30)).add(new BigDecimal(predays)); + sales = sales.multiply(new BigDecimal(validDates.size())).divide(days); + }else { + sales = sales.multiply(new BigDecimal(validDates.size())).divide(new BigDecimal(allDays)); + } + } + } for (int i = 0 ; i< jumpList.size() ; i ++) { WxRentContractRevenueJump rj = jumpList.get(i); String minMoney = rj.getMinMoney();