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 820c994f4..ee61848e3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -2353,30 +2353,40 @@ public class WxRentContractServiceImpl implements WxRentContractService { //按照当前金额,当前时间区间,计算每一年的单价 //当前时间有多少个月 int months = diffs[0]; - //计算当前区间算多少年 - if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) { - int days = DateUtils.daysBetween(startDate, endDate)+1; - BigDecimal _months = new BigDecimal(days).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP).add(new BigDecimal(months)); - unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(_months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); + int lastdays = diffs[1]; + if (lastdays > 0) { + //计算当前区间算多少年 + if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) { + Date lastmonthStartDate = DateUtils.getTimeAfterMonths(diffs[0], startDate); + int days = DateUtils.daysBetween(lastmonthStartDate, endDate)+1; + BigDecimal _months = new BigDecimal(days).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP).add(new BigDecimal(months)); + unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(_months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); + }else { + BigDecimal _months = getMonthsByRealDays(months,startDate,endDate,adjustPeriod,receivePeriodUnit); + unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(_months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); + } }else { - BigDecimal _months = getMonthsByRealDays(months,startDate,endDate,mothAverageDays,adjustPeriod,receivePeriodUnit); - unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(_months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); - } + unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(new BigDecimal(months),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); + } }else if(EnumPriceUnit.M.getCode().equals(priceUnit)) { //每一月的单价 BigDecimal months = new BigDecimal(diffs[0]); - if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) { - int days = DateUtils.daysBetween(startDate, endDate)+1; - months = new BigDecimal(days).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); - }else { - months = getMonthsByRealDays(diffs[0],startDate,endDate,mothAverageDays,adjustPeriod,receivePeriodUnit); - } + int lastdays = diffs[1]; + if (lastdays > 0) { + if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) { + Date lastmonthStartDate = DateUtils.getTimeAfterMonths(diffs[0], startDate); + int days = DateUtils.daysBetween(lastmonthStartDate, endDate)+1; + months = months.add(new BigDecimal(days).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP)); + }else { + months = getMonthsByRealDays(diffs[0],startDate,endDate,adjustPeriod,receivePeriodUnit); + } + } unitPrice = salesDeciaml.divide(months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); } return unitPrice; } - private BigDecimal getMonthsByRealDays(int months,Date startDate,Date endDate,Integer mothAverageDays,Integer adjustPeriod,Integer receivePeriodUnit) { + private BigDecimal getMonthsByRealDays(int months,Date startDate,Date endDate,Integer adjustPeriod,Integer receivePeriodUnit) { BigDecimal _months = new BigDecimal(0); //如果是自然月或者自然季度,则是到月底 if (adjustPeriod == EnumRentContractAdjustPeriod.ADJUST_PERIOD_NAR_MONTH.getCode() ||