| @@ -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() || | |||