|
|
|
@@ -2600,14 +2600,47 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
|
|
|
|
|
|
|
|
private BigDecimal[] calcuteReveneuJump(BigDecimal sales,WxRentContract rentcontract,Date startDate,Date endDate,List<Date> freePeriods) {
|
|
|
|
BigDecimal revenueDecimal = new BigDecimal(0);
|
|
|
|
BigDecimal rentDecimal = new BigDecimal(0);
|
|
|
|
//根据免租期来计算
|
|
|
|
List<Date> validDates = WxRentContractHelper.getValidDays(startDate, endDate, freePeriods);
|
|
|
|
if (null == validDates || validDates.size() <= 0 ) {
|
|
|
|
BigDecimal[] bs = new BigDecimal[] {revenueDecimal,rentDecimal,new BigDecimal(0)};
|
|
|
|
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<WxRentContractRevenueJump> 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),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}else {
|
|
|
|
sales = sales.multiply(new BigDecimal(validDates.size())).divide(new BigDecimal(allDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}
|
|
|
|
}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,Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}else {
|
|
|
|
sales = sales.multiply(new BigDecimal(validDates.size())).divide(new BigDecimal(allDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (int i = 0 ; i< jumpList.size() ; i ++) {
|
|
|
|
WxRentContractRevenueJump rj = jumpList.get(i);
|
|
|
|
String minMoney = rj.getMinMoney();
|
|
|
|
@@ -2639,7 +2672,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
endDate,0,0,false,rentcontract.getReceivePeriodUnit(),rentcontract.getReceivePeriod());
|
|
|
|
}
|
|
|
|
rentDecimal = new BigDecimal(rentNeedpay);
|
|
|
|
BigDecimal[] bs = new BigDecimal[] {revenueDecimal,rentDecimal};
|
|
|
|
BigDecimal[] bs = new BigDecimal[] {revenueDecimal,rentDecimal,sales};
|
|
|
|
return bs;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2756,13 +2789,14 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
BigDecimal[] jumppays = calcuteReveneuJump(salesDeciaml, rentcontract,rentBill.getStarttime(), rentBill.getEndtime(),freePeriods);
|
|
|
|
BigDecimal jumpRevenuePay = jumppays[0];
|
|
|
|
BigDecimal jumpRentPay = jumppays[1];
|
|
|
|
BigDecimal saleDecimalValid = jumppays[2];
|
|
|
|
BigDecimal jumppay = new BigDecimal(0);
|
|
|
|
if (jumpRevenuePay.compareTo(jumpRentPay) > 0 ) {
|
|
|
|
jumppay = jumppay.add(jumpRevenuePay);
|
|
|
|
}else {
|
|
|
|
jumppay = jumppay.add(jumpRentPay);
|
|
|
|
}
|
|
|
|
StringBuffer sb = new StringBuffer();
|
|
|
|
StringBuffer sb = new StringBuffer("有效销售额:"+saleDecimalValid.toPlainString()+",");
|
|
|
|
if (jumppay.compareTo(new BigDecimal(needpay)) > 0 ) {
|
|
|
|
sb.append("跳点规则计算金额:"+jumppay.toPlainString()+",合同租金扣点规则计算金额:"+needpay+".");
|
|
|
|
needpay = jumppay.toPlainString();
|
|
|
|
@@ -2778,6 +2812,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
List<WxRentContractRevenueSales> saleList = wxRentContractRevenueSalesMapper.findList(rs);
|
|
|
|
if (null != saleList && saleList.size() > 0 ) {
WxRentContractRevenueSales sale = saleList.get(0); |
|
|
|
sale.setSaleMoney(sales);
|
|
|
|
sale.setSaleMoneyValid(saleDecimalValid.toPlainString());
|
|
|
|
sale.setUpdateTime(new Date());
|
|
|
|
wxRentContractRevenueSalesMapper.updateById(sale);
|
|
|
|
}else {
|
|
|
|
@@ -2789,6 +2824,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
sale.setRentContractId(rentcontract.getId());
|
|
|
|
sale.setBillMoney(rentBill.getReceivePay());
|
|
|
|
sale.setSaleMoney(sales);
|
|
|
|
sale.setSaleMoneyValid(saleDecimalValid.toPlainString());
|
|
|
|
sale.setCalcuteMoney(needpay);
|
|
|
|
sale.setPropertyContractId(propertyContractId);
|
|
|
|
sale.setCreateTime(new Date());
|
|
|
|
@@ -3017,7 +3053,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { |
|
|
|
WxRentContractRevenueSales rsq = new WxRentContractRevenueSales();
|
|
|
|
rsq.updateTenantInfo(rentcontract);
|
|
|
|
rsq.setRentContractId(rentcontract.getId());
|
|
|
|
BigDecimal sum = wxRentContractRevenueSalesMapper.findSumSalesMoney(rsq);
|
|
|
|
BigDecimal sum = wxRentContractRevenueSalesMapper.findSumSalesMoneyValid(rsq);
|
|
|
|
if (null == sum || sum.compareTo(new BigDecimal(0)) <= 0 ) {
|
|
|
|
WxRentContractYearsSumVo vo = new WxRentContractYearsSumVo();
|
|
|
|
vo.setTotalSales("0");
|
|
|
|
|