From f7944cfa4eb8ca331a25be281ef7804085a890e4 Mon Sep 17 00:00:00 2001 From: winter Date: Thu, 29 Aug 2024 18:22:12 +0800 Subject: [PATCH 1/4] fix --- .../java/com/iformall/service/helper/WxRentContractHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c03f3f25a..16291b527 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxRentContractHelper.java @@ -373,7 +373,7 @@ public class WxRentContractHelper { BigDecimal _p = priceD.multiply(new BigDecimal(integers.get(i))).divide(new BigDecimal(100)); priceArrs[i] = _p.setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } - }else if (ratioWay.equals(EnumRentContractAdjustRatioWay.FIX_RATIO.getCode())){ + }else if (ratioWay.equals(EnumRentContractAdjustRatioWay.FIX_UNIT_PRICE.getCode())){ for (int i = 1; i < size; i++) { priceArrs[i] = new BigDecimal(integers.get(i)).multiply(new BigDecimal(rentArea)).setScale(decimalSize, RoundingMode.HALF_UP).toPlainString(); } From 59b8087dcdc6d200a06804107e2536a62f76469b Mon Sep 17 00:00:00 2001 From: winter Date: Thu, 29 Aug 2024 20:56:41 +0800 Subject: [PATCH 2/4] 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(); From 4bf0e7eacac8ff689bafaa0d884ac11682a113a0 Mon Sep 17 00:00:00 2001 From: winter Date: Thu, 29 Aug 2024 21:15:21 +0800 Subject: [PATCH 3/4] fix --- .../domain/po/WxRentContractRevenueSales.java | 3 +++ .../mapper/WxRentContractRevenueSalesMapper.java | 2 +- .../service/impl/WxRentContractServiceImpl.java | 11 +++++++---- .../mapper/WxRentContractRevenueSalesMapper.xml | 7 ++++--- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContractRevenueSales.java b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContractRevenueSales.java index 1a7fbb1ca..419009b80 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContractRevenueSales.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContractRevenueSales.java @@ -41,6 +41,9 @@ public class WxRentContractRevenueSales extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="销售金额",name="maxMoney") private String saleMoney; + @io.swagger.annotations.ApiModelProperty(value="有效销售金额(免租期扣除掉的)",name="saleMoneyValid") + private String saleMoneyValid; + @io.swagger.annotations.ApiModelProperty(value="计算金额",name="rentMoney") private String calcuteMoney; diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java index 1abe5ae2e..0a942eeb6 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java @@ -16,7 +16,7 @@ public interface WxRentContractRevenueSalesMapper extends CommonMapper findBillId(WxRentContractRevenueSales wxBillRent); 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 f4f9813a3..2809f30e9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -2605,7 +2605,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { //根据免租期来计算 List validDates = WxRentContractHelper.getValidDays(startDate, endDate, freePeriods); if (null == validDates || validDates.size() <= 0 ) { - BigDecimal[] bs = new BigDecimal[] {revenueDecimal,rentDecimal}; + BigDecimal[] bs = new BigDecimal[] {revenueDecimal,rentDecimal,new BigDecimal(0)}; return bs; } int allDays = DateUtils.daysBetween(startDate,endDate)+1; @@ -2672,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; } @@ -2789,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(); @@ -2811,6 +2812,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { List 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 { @@ -2822,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()); @@ -3050,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"); diff --git a/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml b/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml index 8962970e4..55a042c7a 100644 --- a/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml @@ -12,13 +12,14 @@ + `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`rent_contract_id`,`property_contract_id`,`bill_id`,`bill_money`, - `sale_money`,`calcute_money`,`remark` + `sale_money`,`sale_money_valid`,`calcute_money`,`remark` @@ -55,8 +56,8 @@ from wx_rent_contract_revenue_sales where id = #{id} and `tenant_id` = #{tenantId} - + select sum(CAST(ifnull(sale_money_valid,'0') AS DECIMAL(20,2))) receive_pay from wx_rent_contract_revenue_sales From 6a3329d151590be570b0984153c51bb3d07c8e38 Mon Sep 17 00:00:00 2001 From: winter Date: Fri, 30 Aug 2024 10:43:28 +0800 Subject: [PATCH 4/4] fix --- .../iformall/service/impl/WxRentContractServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 2809f30e9..3b37a2d8b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -2625,9 +2625,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { 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)); + 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)); + 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); @@ -2635,9 +2635,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { 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); + 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)); + sales = sales.multiply(new BigDecimal(validDates.size())).divide(new BigDecimal(allDays),Constant.default_long_decimal_size,BigDecimal.ROUND_HALF_UP); } } }