|
|
|
@@ -2324,9 +2324,20 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
}
|
|
|
|
|
|
|
|
private BigDecimal calcuteUnitPrice(Date startDate,Date endDate,BigDecimal salesDeciaml,Integer priceUnit,
|
|
|
|
Integer dayPriceCalcute,Integer mothAverageDays) {
|
|
|
|
Integer dayPriceCalcute,Integer mothAverageDays,Integer receivePeriod,Integer receivePeriodUnit) {
|
|
|
|
BigDecimal unitPrice = new BigDecimal(0);
|
|
|
|
int[] diffs = DateUtils.getDiff(startDate, endDate);
|
|
|
|
|
|
|
|
//是否正好为一个周期
|
|
|
|
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
Calendar instance = Calendar.getInstance();
|
|
|
|
instance.setTime(startDate);
|
|
|
|
instance = EnumContractReceivePeriodUnit.getAfterCalendarDay(instance, receivePeriod, receivePeriodUnit);
|
|
|
|
boolean isPeriodEnd= false;
|
|
|
|
if(sd.format(instance.getTime()).equals(sd.format(endDate))){
|
|
|
|
isPeriodEnd = true;
|
|
|
|
}
|
|
|
|
Date realEndStart = DateUtils.getDaySet(endDate, Calendar.SECOND, 1);
|
|
|
|
int[] diffs = DateUtils.getDiff(startDate, realEndStart);
|
|
|
|
if (priceUnit.equals(EnumPriceUnit.D.getCode())){
|
|
|
|
int allDays = 0;
|
|
|
|
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
|
|
|
|
@@ -2337,33 +2348,50 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
//每一天的单价
|
|
|
|
unitPrice = salesDeciaml.divide(new BigDecimal(allDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}else if(EnumPriceUnit.Y.getCode().equals(priceUnit)) {
|
|
|
|
//每一年的单价
|
|
|
|
BigDecimal years = new BigDecimal(diffs[0]/12);
|
|
|
|
int extraMonths = diffs[0]%12;
|
|
|
|
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
|
|
|
|
int days = extraMonths*mothAverageDays + diffs[1];
|
|
|
|
years = years.add(new BigDecimal(days).divide(new BigDecimal(12*mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
|
|
|
|
//按照当前金额,当前时间区间,计算每一年的单价
|
|
|
|
//如果是一个周期结束,则
|
|
|
|
if (isPeriodEnd) {
|
|
|
|
//判断是不是一个完整的周期
|
|
|
|
//按月,那就得、12
|
|
|
|
unitPrice = salesDeciaml.multiply(new BigDecimal(12)).divide(new BigDecimal(diffs[0]),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}else {
|
|
|
|
int days = DateUtils.daysBetween(startDate, endDate)+1;
|
|
|
|
years = years.add(new BigDecimal(days).divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
|
|
|
|
}
|
|
|
|
//每一天的单价
|
|
|
|
unitPrice = salesDeciaml.divide(years,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
//当前时间有多少个月
|
|
|
|
int months = diffs[0];
|
|
|
|
int days = diffs[1];
|
|
|
|
//计算当前区间算多少年
|
|
|
|
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
|
|
|
|
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 {
|
|
|
|
Date lastMonthStartDate = DateUtils.getDaySet(startDate, Calendar.MONTH, months);
|
|
|
|
int realDays = DateUtils.daysBetween(lastMonthStartDate, endDate)+1;
|
|
|
|
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(lastMonthStartDate);
|
|
|
|
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(lastMonthStartDate);
|
|
|
|
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
|
|
|
|
BigDecimal _months = new BigDecimal(realDays).divide(new BigDecimal(monthDays),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 if(EnumPriceUnit.M.getCode().equals(priceUnit)) {
|
|
|
|
//每一月的单价
|
|
|
|
BigDecimal months = new BigDecimal(diffs[0]);
|
|
|
|
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
|
|
|
|
months = months.add(new BigDecimal(diffs[1]).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
|
|
|
|
if (isPeriodEnd) {
|
|
|
|
//按月
|
|
|
|
unitPrice = salesDeciaml.divide(new BigDecimal(diffs[0]),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}else {
|
|
|
|
Date extraStartDay = DateUtils.getTimeAfterMonths(diffs[0], startDate);
|
|
|
|
int extraDays = DateUtils.daysBetween(extraStartDay, endDate)+1;
|
|
|
|
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(extraStartDay);
|
|
|
|
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(extraStartDay);
|
|
|
|
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
|
|
|
|
months = months.add(new BigDecimal(extraDays).divide(new BigDecimal(monthDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
|
|
|
|
}
|
|
|
|
//每一天的单价
|
|
|
|
unitPrice = salesDeciaml.divide(months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
//每一月的单价
|
|
|
|
BigDecimal months = new BigDecimal(diffs[0]);
|
|
|
|
if (dayPriceCalcute.intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
|
|
|
|
months = months.add(new BigDecimal(diffs[1]).divide(new BigDecimal(mothAverageDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
|
|
|
|
}else {
|
|
|
|
Date extraStartDay = DateUtils.getTimeAfterMonths(diffs[0], startDate);
|
|
|
|
int extraDays = DateUtils.daysBetween(extraStartDay, realEndStart)+1;
|
|
|
|
Date extraStartDayMonthStart = DateUtils.getFirstDayForCurrMonth(extraStartDay);
|
|
|
|
Date extraStartDayMonthEnd = DateUtils.getLastDayForMonth(extraStartDay);
|
|
|
|
int monthDays = DateUtils.daysBetween(extraStartDayMonthStart, extraStartDayMonthEnd)+1;
|
|
|
|
months = months.add(new BigDecimal(extraDays).divide(new BigDecimal(monthDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP));
|
|
|
|
}
|
|
|
|
//每一天的单价
|
|
|
|
unitPrice = salesDeciaml.divide(months,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return unitPrice;
|
|
|
|
}
|
|
|
|
@@ -2372,7 +2400,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
private BigDecimal calcuteRentPropertyPrice(WxRentContract rentcontract,WxPropertyContract propertyContract,Date startDate,Date endDate,BigDecimal money) {
|
|
|
|
//计算物业费的单价
|
|
|
|
BigDecimal unitPropertyPrice = calcuteUnitPrice(startDate, endDate,money,
|
|
|
|
propertyContract.getPriceUnit(),propertyContract.getDayPriceCalcute(),propertyContract.getMonthAverageDays());
|
|
|
|
propertyContract.getPriceUnit(),propertyContract.getDayPriceCalcute(),propertyContract.getMonthAverageDays(),propertyContract.getReceivePeriod(),propertyContract.getReceivePeriodUnit());
|
|
|
|
//如果租金是按天计算
|
|
|
|
if (rentcontract.getPriceUnit().equals(EnumPriceUnit.D.getCode())){
|
|
|
|
//物业也是按天
|
|
|
|
@@ -2502,7 +2530,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
|
|
|
|
//根据销售额来计算价格均值
|
|
|
|
BigDecimal unitRevenuePrice = calcuteUnitPrice(rentBill.getStarttime(), rentBill.getEndtime(),salesDeciaml,
|
|
|
|
rentcontract.getPriceUnit(),rentcontract.getDayPriceCalcute(),rentcontract.getMonthAverageDays());
|
|
|
|
rentcontract.getPriceUnit(),rentcontract.getDayPriceCalcute(),rentcontract.getMonthAverageDays(),rentcontract.getReceivePeriod(),rentcontract.getReceivePeriodUnit());
|
|
|
|
//设置保底营业额
|
|
|
|
rentcontract.setRevenue(unitRevenuePrice.toPlainString());
|
|
|
|
//联营扣点
|
|
|
|
@@ -2657,9 +2685,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
if (yearDays == 365) {
|
|
|
|
}else {
|
|
|
|
if (rentcontract.getDayPriceCalcute().intValue() == EnumRentDayPriceCalcute.AVERAGE_DAYS.getCode()) {
|
|
|
|
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(12*rentcontract.getMonthAverageDays()),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(12*rentcontract.getMonthAverageDays()),rentcontract.getDecimalSize(),BigDecimal.ROUND_HALF_UP);
|
|
|
|
}else {
|
|
|
|
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(365),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
jumpRevenuePay = jumpRevenuePay.multiply(new BigDecimal(yearDays)).divide(new BigDecimal(365),rentcontract.getDecimalSize(),BigDecimal.ROUND_HALF_UP);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2745,4 +2773,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
public List<WxRentContractRevenueJump> findJumpList(WxRentContractRevenueJump jump) {
|
|
|
|
return wxRentContractRevenueJumpMapper.findList(jump);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
Date date = DateUtils.stringToDate("2025-04-01 00:00:00",DateUtils.DATE_TIME_PATTERN);
|
|
|
|
System.out.println(date.getTime());
|
|
|
|
}
|
|
|
|
}
|