From af475b12ca1b9a1e6f3fc9a08f43aa63db986d77 Mon Sep 17 00:00:00 2001 From: winter <664946893@qq.com> Date: Mon, 11 Nov 2024 16:44:12 +0800 Subject: [PATCH] fix --- .../contract/WxRentContractController.java | 21 +- .../db/migration/V202411000000001.sql | 4 + .../domain/po/WxRentContractRevenueSales.java | 11 +- .../com/iformall/mapper/WxAllBillMapper.java | 2 + .../WxRentContractRevenueSalesMapper.java | 2 - .../iformall/service/WxAllBillService.java | 2 + .../service/WxRentContractService.java | 2 +- .../service/helper/WxBillAllHelper.java | 13 + .../service/impl/WxAllBillServiceImpl.java | 6 + .../impl/WxRentContractServiceImpl.java | 314 +++++++++--------- .../main/resources/mapper/WxAllBillMapper.xml | 16 + .../WxRentContractRevenueSalesMapper.xml | 13 +- 12 files changed, 210 insertions(+), 196 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java index 3fc2df2ee..e3f141181 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java @@ -15,6 +15,7 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxRentContractMapper; import com.iformall.service.*; +import com.iformall.service.helper.WxBillAllHelper; import com.iformall.utils.Constant; import com.iformall.utils.DateUtils; import io.swagger.annotations.ApiImplicitParam; @@ -61,6 +62,8 @@ public class WxRentContractController extends WxContractBaseController { WxMallBuildingService buildingService; @Autowired WxMallFloorService floorService; + @Autowired + WxBillAllHelper wxBillAllHelper; @GetMapping("/list") @ApiImplicitParams({ @@ -737,15 +740,8 @@ public class WxRentContractController extends WxContractBaseController { if (null == sales) sales = new WxRentContractRevenueSales(); sales.updateTenantInfo(getTenantInfo()); - WxAllBill bq = new WxAllBill(); - bq.updateTenantInfo(sales); - bq.setRentContractId(sales.getRentContractId()); - bq.setIsPreview(EnumYesOrNo.NO.getCode()); - bq.setBillType(EnumBillAllType.RENT.getCode()); - bq.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId()); - bq.setNoExtraCreateFrom(EnumYesOrNo.YES.getCode()); - bq.setSortColumn(" starttime asc"); - List billList = wxAllBillService.list(bq); + WxAllBill bq = wxBillAllHelper.generateRentContractQueryBill(sales,sales.getRentContractId(),null,null); + List billList = wxAllBillService.getContractSamePeriodBillSumList(bq); if (null == billList || billList.size() <= 0 ) { return new ResultData(); } @@ -755,17 +751,16 @@ public class WxRentContractController extends WxContractBaseController { rc.updateTenantInfo(sales); rc.setId(sales.getRentContractId()); List salesList = wxRentContractService.getContractSales(rc); - Map billSalesMap = new HashMap(); + Map billSalesMap = new HashMap(); if (null != salesList && salesList.size() > 0) { - for (int i = 0 ; i < salesList.size() ; i ++ ) { WxRentContractRevenueSales rs = salesList.get(i); - billSalesMap.put(rs.getBillId(), rs); + billSalesMap.put(rs.getStarttime()+"_"+rs.getEndtime(), rs); } } for (int i = 0 ; i < billList.size() ; i ++) { WxAllBill bill = billList.get(i); - WxRentContractRevenueSales s = billSalesMap.get(bill.getId()); + WxRentContractRevenueSales s = billSalesMap.get(bill.getStarttime()+"_"+bill.getEndtime()); if (null != s) { bill.setSales(s.getSaleMoney()); bill.setSalesTime(s.getUpdateTime()); diff --git a/mallinkAdmin/src/main/resources/db/migration/V202411000000001.sql b/mallinkAdmin/src/main/resources/db/migration/V202411000000001.sql index cb181f207..54294d4ac 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202411000000001.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202411000000001.sql @@ -51,6 +51,10 @@ alter table wx_property_contract add column customers_id bigint(20) not null com alter table wx_rent_contract add column shop_id_str varchar(300) not null comment '客户ID'; alter table wx_property_contract add column shop_id_str varchar(300) not null comment '客户ID'; +alter table wx_rent_contract_revenue_sales drop column bill_id; +alter table wx_rent_contract_revenue_sales drop column bill_money; +去掉唯一索引,增加 contract_id, starttime,endtime 联合唯一索引 + alter table wx_shop_users change shop_id create_shop_id bigint(20) not null; alter table wx_shop_users drop column status; alter table wx_shop_users drop column begin_date; 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 16a0f39f4..1c0594e8f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRentContractRevenueSales.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRentContractRevenueSales.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; @@ -32,17 +33,15 @@ public class WxRentContractRevenueSales extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "物业合同编号", name = "propertyContractId") private Long propertyContractId; - @io.swagger.annotations.ApiModelProperty(value = "账单编号", name = "billId") - private Long billId; - @io.swagger.annotations.ApiModelProperty(value = "账单开始日期", name = "starttime") private Date starttime; + @TableField(exist = false) + private Date starttimeEqual; @io.swagger.annotations.ApiModelProperty(value = "账单结束日期", name = "endtime") private Date endtime; - - @io.swagger.annotations.ApiModelProperty(value="账单应付金额",name="minMoney") - private String billMoney; + @TableField(exist = false) + private Date endtimeEqual; @io.swagger.annotations.ApiModelProperty(value="销售金额",name="maxMoney") private String saleMoney; diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java index d9362c3f5..ea171f8cf 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java @@ -17,6 +17,8 @@ public interface WxAllBillMapper extends CommonMapper { List findList(WxAllBill wxBillRent); List queryBillRentContractIdList(WxAllBill record); + List findContractSamePeriodSum(WxAllBill wxBillRent); + List getShopIdList(WxAllBill record); List getMerchantAdvanceGroupSumList(WxAllBill wxBillRent); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java index 00f8ccc53..5cdfcb2b2 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java @@ -18,8 +18,6 @@ public interface WxRentContractRevenueSalesMapper extends CommonMapper findBillId(WxRentContractRevenueSales wxBillRent); - void updateConfirm(WxRentContractRevenueSales wxBillRent); void updateCalcute(WxRentContractRevenueSales wxBillRent); diff --git a/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java b/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java index a39275626..744a1a1f9 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java @@ -60,6 +60,8 @@ public interface WxAllBillService { List list(WxAllBill record); + List getContractSamePeriodBillSumList(WxAllBill record); + List notifyList(WxAllBill record); void backPay(WxBillPayDTO dto,MallUserInfo user); diff --git a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java index df084bd27..af276ceba 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRentContractService.java @@ -148,7 +148,7 @@ public interface WxRentContractService { List getContractSales(WxRentContract wxRentContract); - WxRentContractRevenueSetSalesVo setRevenueSales(WxRentContract rentcontract,String sales,Long billId,Long propertyContractId); + WxRentContractRevenueSetSalesVo setRevenueSales(WxRentContract rentcontract,String sales,Date startime, Date endtime,Long propertyContractId); void setContractSalesConfirm(WxRentContract wxRentContract); diff --git a/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java b/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java index 414e28409..3cf62c9b2 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java @@ -194,6 +194,19 @@ public class WxBillAllHelper { return wxAllBillService.getShopIds(br); } + public WxAllBill generateRentContractQueryBill(TenantEntity tenantEntity,Long rentContractId,Date starttime, Date endtime) { + WxAllBill bq = new WxAllBill(); + bq.updateTenantInfo(tenantEntity); + bq.setRentContractId(rentContractId); + bq.setIsPreview(EnumYesOrNo.NO.getCode()); + bq.setBillType(EnumBillAllType.RENT.getCode()); + bq.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId()); + bq.setNoExtraCreateFrom(EnumYesOrNo.YES.getCode()); + bq.setStarttimeEqual(starttime); + bq.setEndtimeEqual(endtime); + return bq; + } + private List getUnionIds(List...lists ) { if (null != lists && lists.length > 0 ) { List retList = new ArrayList(); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java index 9662e94ec..c4afbe3d5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java @@ -527,6 +527,12 @@ public class WxAllBillServiceImpl extends WxBillBaseService implements WxAllBill updateQueryParam(record); return wxAllBillMapper.findList(record); } + + @Override + public List getContractSamePeriodBillSumList(WxAllBill record) { + updateQueryParam(record); + return wxAllBillMapper.findContractSamePeriodSum(record); + } @Override public List notifyList(WxAllBill record) { 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 14d63d4eb..ea07d1bb9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java @@ -2525,15 +2525,22 @@ public class WxRentContractServiceImpl implements WxRentContractService { @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Override - public WxRentContractRevenueSetSalesVo setRevenueSales(WxRentContract rentcontract, String sales, Long billId, Long propertyContractId) { + public WxRentContractRevenueSetSalesVo setRevenueSales(WxRentContract rentcontract, String sales, Date startime, Date endtime, Long propertyContractId) { //如果账单存在缴费,付款,减免,冲抵,等情况,则不允许。 - WxAllBill rentBill = wxAllBillMapper.selectById(billId, rentcontract.getTenantId()); - if ((StringUtils.isNotBlank(rentBill.getPay()) && new BigDecimal(rentBill.getPay()).compareTo(new BigDecimal(0)) > 0 ) - || (StringUtils.isNotBlank(rentBill.getSetOff()) && new BigDecimal(rentBill.getSetOff()).compareTo(new BigDecimal(0)) > 0 ) - || (StringUtils.isNotBlank(rentBill.getReturnPay()) && new BigDecimal(rentBill.getReturnPay()).compareTo(new BigDecimal(0)) > 0 ) - || (StringUtils.isNotBlank(rentBill.getUseMoney()) && new BigDecimal(rentBill.getUseMoney()).compareTo(new BigDecimal(0)) > 0 ) ) { - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"账单存在已经已经缴费或付款,扣减,减免,冲抵的情况,不允许操作"); - } + WxAllBill bq = wxBillAllHelper.generateRentContractQueryBill(rentcontract, rentcontract.getId(),startime,endtime); + List rentBillList = wxAllBillMapper.findList(bq); + if (null == rentBillList || rentBillList.size() <= 0 ) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"未查询到账单"); + } + for (int i = 0 ; i < rentBillList.size() ; i ++) { + WxAllBill rentBill = rentBillList.get(i); + if ((StringUtils.isNotBlank(rentBill.getPay()) && new BigDecimal(rentBill.getPay()).compareTo(new BigDecimal(0)) > 0 ) + || (StringUtils.isNotBlank(rentBill.getSetOff()) && new BigDecimal(rentBill.getSetOff()).compareTo(new BigDecimal(0)) > 0 ) + || (StringUtils.isNotBlank(rentBill.getReturnPay()) && new BigDecimal(rentBill.getReturnPay()).compareTo(new BigDecimal(0)) > 0 ) + || (StringUtils.isNotBlank(rentBill.getUseMoney()) && new BigDecimal(rentBill.getUseMoney()).compareTo(new BigDecimal(0)) > 0 ) ) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"租金账单存在已经已经缴费或付款,扣减,减免,冲抵的情况,不允许操作"); + } + } BigDecimal salesDeciaml = new BigDecimal(sales); @@ -2542,11 +2549,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { billDel.updateTenantInfo(rentcontract); billDel.setRentContractId(rentcontract.getId()); billDel.setExtraCreateFrom(EnumBillExtraCreateFrom.RNET_REVENUE_SALES.getCode()); - billDel.setStarttimeEqual(rentBill.getStarttime()); + billDel.setStarttimeEqual(startime); wxAllBillMapper.deleteByRentReveneuSales(billDel); //加上物业 - WxAllBill propertyBill = null; + List propertyBillList = null; BigDecimal propertyPrice = new BigDecimal(0); WxPropertyContract propertyContract = null; if (null != propertyContractId) { @@ -2556,16 +2563,22 @@ public class WxRentContractServiceImpl implements WxRentContractService { propertyBillq.setBillType(EnumBillAllType.PROPERTY.getCode()); propertyBillq.setEnergyFeesId(EnumBillAllType.PROPERTY.getEnergyFeesId()); propertyBillq.setIsPreview(EnumYesOrNo.NO.getCode()); - propertyBillq.setStarttimeEqual(rentBill.getStarttime()); - propertyBillq.setEndtimeEqual(rentBill.getEndtime()); - List propertyBillList = wxAllBillMapper.findList(propertyBillq); - if (null != propertyBillList && propertyBillList.size() > 0) { - propertyBill = propertyBillList.get(0); + propertyBillq.setStarttimeEqual(startime); + propertyBillq.setEndtimeEqual(endtime); + propertyBillList = wxAllBillMapper.findList(propertyBillq); + for (int i = 0 ; i < propertyBillList.size() ; i ++) { + WxAllBill propertyBill = propertyBillList.get(i); + if ((StringUtils.isNotBlank(propertyBill.getPay()) && new BigDecimal(propertyBill.getPay()).compareTo(new BigDecimal(0)) > 0 ) + || (StringUtils.isNotBlank(propertyBill.getSetOff()) && new BigDecimal(propertyBill.getSetOff()).compareTo(new BigDecimal(0)) > 0 ) + || (StringUtils.isNotBlank(propertyBill.getReturnPay()) && new BigDecimal(propertyBill.getReturnPay()).compareTo(new BigDecimal(0)) > 0 ) + || (StringUtils.isNotBlank(propertyBill.getUseMoney()) && new BigDecimal(propertyBill.getUseMoney()).compareTo(new BigDecimal(0)) > 0 ) ) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"物业账单存在已经已经缴费或付款,扣减,减免,冲抵的情况,不允许操作"); + } } } //根据销售额来计算平均每计费周期营业额,相当于设置联营扣点保底营业额 - BigDecimal unitRevenuePrice = calcuteUnitPrice(rentBill.getStarttime(), rentBill.getEndtime(),salesDeciaml, + BigDecimal unitRevenuePrice = calcuteUnitPrice(startime, endtime,salesDeciaml, rentcontract.getPriceUnit(),rentcontract.getDayPriceCalcute(),rentcontract.getMonthAverageDays(),rentcontract.getAdjustPeriod(),rentcontract.getReceivePeriodUnit()); //设置保底营业额 rentcontract.setRevenue(unitRevenuePrice.toPlainString()); @@ -2575,7 +2588,7 @@ public class WxRentContractServiceImpl implements WxRentContractService { Constant.default_long_decimal_size,RoundingMode.HALF_UP).toPlainString()); }else if (rentcontract.getType().intValue() == EnumRentContractType.RENT_BY_AREA_AND_JOINT.getCode()) { //取高才能加上物业费 - if (null != propertyContractId && null != propertyBill) { + if (null != propertyContractId && null != propertyBillList) { propertyContract = wxPropertyContractMapper.selectById(propertyContractId); //有可能物业的单价时间跟租金的不一致,需要根据物业的单价重新计算 //propertyPrice = calcuteRentPropertyPrice(rentcontract, propertyContract, rentBill.getStarttime(), rentBill.getEndtime(), @@ -2601,8 +2614,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { for( int i = 0 ; i < yearList.size() ; i ++) { Date yearStartDate = yearList.get(i); Date yearEndDate = DateUtils.getTimeAfterMonths(12, yearStartDate); - if (rentBill.getStarttime().equals(yearStartDate) || - (rentBill.getStarttime().after(yearStartDate) && (rentBill.getEndtime().before(yearEndDate) || rentBill.getEndtime().equals(yearEndDate)) )) { + if (startime.equals(yearStartDate) || + (startime.after(yearStartDate) && (endtime.before(yearEndDate) || endtime.equals(yearEndDate)) )) { yearIndex = i; break; } @@ -2637,11 +2650,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { List freePeriods = getFreeDays(rentcontract); //根据扣点规则和租赁相关费用取高来计算费用 - String needpay = WxRentContractHelper.getNeedPayMoney(freePeriods,rentcontract, priceDecimal.toPlainString(),rentBill.getStarttime(), - rentBill.getEndtime(),0,0,false,rentcontract.getReceivePeriodUnit(),rentcontract.getReceivePeriod()); + String needpay = WxRentContractHelper.getNeedPayMoney(freePeriods,rentcontract, priceDecimal.toPlainString(),startime, + endtime,0,0,false,rentcontract.getReceivePeriodUnit(),rentcontract.getReceivePeriod()); //计算跳点。 - BigDecimal[] jumppays = calcuteReveneuJump(salesDeciaml, rentcontract,rentBill.getStarttime(), rentBill.getEndtime(),freePeriods); + BigDecimal[] jumppays = calcuteReveneuJump(salesDeciaml, rentcontract,startime, endtime,freePeriods); BigDecimal jumpRevenuePay = jumppays[0]; BigDecimal jumpRentPay = jumppays[1]; BigDecimal saleDecimalValid = jumppays[2]; @@ -2663,7 +2676,8 @@ public class WxRentContractServiceImpl implements WxRentContractService { WxRentContractRevenueSales rs = new WxRentContractRevenueSales(); rs.updateTenantInfo(rentcontract); rs.setRentContractId(rentcontract.getId()); - rs.setBillId(billId); + rs.setStarttimeEqual(startime); + rs.setEndtimeEqual(endtime); List saleList = wxRentContractRevenueSalesMapper.findList(rs); if (null != saleList && saleList.size() > 0 ) { WxRentContractRevenueSales sale = saleList.get(0); sale.setCalcuteMoney(needpay); @@ -2676,11 +2690,9 @@ public class WxRentContractServiceImpl implements WxRentContractService { final IdWorker idWorker = IdWorker.get(); sale.setId(idWorker.nextId()); sale.updateTenantInfo(rentcontract); - sale.setBillId(billId); - sale.setStarttime(rentBill.getStarttime()); - sale.setEndtime(rentBill.getEndtime()); + sale.setStarttime(startime); + sale.setEndtime(endtime); sale.setRentContractId(rentcontract.getId()); - sale.setBillMoney(rentBill.getReceivePay()); sale.setSaleMoney(sales); sale.setSaleMoneyValid(saleDecimalValid.toPlainString()); sale.setCalcuteMoney(needpay); @@ -2689,11 +2701,11 @@ public class WxRentContractServiceImpl implements WxRentContractService { sale.setUpdateTime(new Date()); wxRentContractRevenueSalesMapper.insert(sale); } - return handleBills(sb,rentcontract,propertyContractId,needpay,rentBill,null,null,EnumBillExtraCreateFrom.RNET_REVENUE_SALES,propertyBill,rentPriceArrs,bussinessManagerPriceArrs,operationManagerPriceArrs,propertyContractArrs,yearIndex); + return handleBills(sb,rentcontract,propertyContractId,needpay,rentBillList,startime,endtime,EnumBillExtraCreateFrom.RNET_REVENUE_SALES,propertyBillList,rentPriceArrs,bussinessManagerPriceArrs,operationManagerPriceArrs,propertyContractArrs,yearIndex); } - private WxRentContractRevenueSetSalesVo handleBills(StringBuffer sb,WxRentContract rentcontract,Long propertyContractId, String needpay,WxAllBill rentBill,Date rentStartDate,Date rentEndDate, - EnumBillExtraCreateFrom createFrom,WxAllBill propertyBill,String[] rentPriceArrs,String[] bussinessManagerPriceArrs,String[] operationManagerPriceArrs,String[] propertyContractArrs,int yearIndex) { + private WxRentContractRevenueSetSalesVo handleBills(StringBuffer sb,WxRentContract rentcontract,Long propertyContractId, String needpay,List rentBillList,Date startDate,Date endDate, + EnumBillExtraCreateFrom createFrom,List propertyBillList,String[] rentPriceArrs,String[] bussinessManagerPriceArrs,String[] operationManagerPriceArrs,String[] propertyContractArrs,int yearIndex) { //计算资金分摊的比例 租金,商业管理费,营业管理费,物业费。每个科目税点不一样,这样分摊能降低成本 String[] moneyShareRates = new String[4]; @@ -2736,55 +2748,49 @@ public class WxRentContractServiceImpl implements WxRentContractService { String propertyRate = moneyShareRates[3]; //更新账单费用 String rentneedpay = new BigDecimal(needpay).multiply(new BigDecimal(rentRate)).setScale(rentcontract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).toPlainString(); - if (null != rentBill) { - sb.append(" 租金原合同租金金额:"+rentBill.getNeedPay()+"元,分摊比率为:"+rentRate+",计算之后为:"+rentneedpay+"元。"); - rentBill.setMoneyChangeDetail(sb.toString()); - rentBill.setReceivePay(rentneedpay); - rentBill.setBillRemark(createFrom.getMessage()+",自动计算:"+sb.toString()); - rentBill.setUpdatetime(new Date()); - if (new BigDecimal(rentBill.getOwe()).compareTo(new BigDecimal(0)) < 0 ) { - //rentBill.setStatus(EnumBillStatus.STOP_TO_SETTLE.getCode()); - }else { - //rentBill.setStatus(EnumBillStatus.PAID.getCode()); + if (null != rentBillList) { + for (int i = 0 ; i < rentBillList.size(); i++){ + WxAllBill _rb = rentBillList.get(i); + wxAllBillMapper.deleteById(_rb.getId(), _rb.getTenantId()); } - wxAllBillMapper.updateById(rentBill); - }else { - rentBill = generateRentBill(rentcontract,rentneedpay,rentRate,rentStartDate,rentEndDate,createFrom); } List shopIdList = rentcontract.shopIdsByRentInfo(); + Map shopAreaRateMap = rentcontract.getRentShopAreaRate(); WxShopUsers suq = new WxShopUsers(); suq.updateTenantInfo(rentcontract); suq.setShopIds(shopIdList); suq.setStatus(EnumShopUsersStatus.LIVE.getCode()); Map shopUserMap = wxShopService.getShopUserMap(suq); - //物业账单应收就改为0,因为金额已经合并了 - WxAllBill propeBill = generatePropertyBill(shopIdList,shopUserMap,rentcontract, propertyContractId, rentBill,propertyBill, needpay, propertyRate,createFrom); + List rentBill = generateRentBill(shopIdList,shopUserMap,shopAreaRateMap,rentcontract,rentneedpay,rentRate,startDate,endDate,createFrom); + + List propeBill = generatePropertyBill(shopIdList,shopUserMap,shopAreaRateMap,rentcontract, propertyContractId,propertyBillList,startDate,endDate, needpay, propertyRate,createFrom); - WxAllBill bmbill = generateManageBill(shopIdList,shopUserMap,rentcontract, rentBill, needpay, bussinessRate, EnumBillAllType.RENT_BUSSINESS_MANAGE,createFrom); + List bmbill = generateManageBill(shopIdList,shopUserMap,shopAreaRateMap,rentcontract, startDate,endDate, needpay, bussinessRate, EnumBillAllType.RENT_BUSSINESS_MANAGE,createFrom); - WxAllBill ombill = generateManageBill(shopIdList,shopUserMap,rentcontract, rentBill, needpay, operaterRate, EnumBillAllType.RENT_OPERATION_MANAGE,createFrom); + List ombill = generateManageBill(shopIdList,shopUserMap,shopAreaRateMap,rentcontract, startDate,endDate, needpay, operaterRate, EnumBillAllType.RENT_OPERATION_MANAGE,createFrom); WxRentContractRevenueSetSalesVo vo = new WxRentContractRevenueSetSalesVo(); vo.setTotal(needpay); List blist = new ArrayList(); - blist.add(rentBill); + blist.addAll(rentBill); if (null != propeBill) { - blist.add(propeBill); + blist.addAll(propeBill); } if (null != bmbill) { - blist.add(bmbill); + blist.addAll(bmbill); } if (null != ombill) { - blist.add(ombill); + blist.addAll(ombill); } vo.setBillList(blist);; return vo; } @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxAllBill generateManageBill(List shopIds,Map shopUserMap,WxRentContract rentcontract,WxAllBill rentBill,String total,String rate,EnumBillAllType type,EnumBillExtraCreateFrom createFrom) { + public List generateManageBill(List shopIds,Map shopUserMap,Map shopAreaRateMap,WxRentContract rentcontract, + Date starttime, Date endtime,String total,String rate,EnumBillAllType type,EnumBillExtraCreateFrom createFrom) { //商业管理费,营运管理费应收改为0,因为金额已经合并了 WxAllBill bussinessmanageBill = new WxAllBill(); bussinessmanageBill.updateTenantInfo(rentcontract); @@ -2792,102 +2798,72 @@ public class WxRentContractServiceImpl implements WxRentContractService { bussinessmanageBill.setEnergyFeesId(type.getEnergyFeesId()); bussinessmanageBill.setRentContractId(rentcontract.getId()); bussinessmanageBill.setIsPreview(EnumYesOrNo.NO.getCode()); - bussinessmanageBill.setStarttimeEqual(rentBill.getStarttime()); - bussinessmanageBill.setEndtimeEqual(rentBill.getEndtime()); + bussinessmanageBill.setStarttimeEqual(starttime); + bussinessmanageBill.setEndtimeEqual(endtime); List bmbillList = wxAllBillMapper.findList(bussinessmanageBill); - WxAllBill bmbill = null; - Map shopAreaRateMap = rentcontract.getRentShopAreaRate(); - List shopIdList = rentcontract.shopIdsByRentInfo(); String bussinessmoney = new BigDecimal(total).multiply(new BigDecimal(rate)).setScale(rentcontract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).toPlainString(); if (null != bmbillList && bmbillList.size() > 0 ) { //查询每一个铺位的 for (int i = 0 ; i < bmbillList.size() ; i ++) { WxAllBill b = bmbillList.get(i); - Long sid = b.getShopId(); + wxAllBillMapper.deleteById(b.getId(),b.getTenantId()); + } + } + if (new BigDecimal(bussinessmoney).compareTo(new BigDecimal(0)) > 0 ) { + List billList = new ArrayList(); + for (int i = 0 ; i < shopIds.size(); i++) { + Long sid = shopIds.get(i); BigDecimal shoprate = shopAreaRateMap.get(sid); - String oldmoney = b.getNeedPay(); String newmoney = new BigDecimal(bussinessmoney).multiply(shoprate).setScale(rentcontract.getDecimalSize()).toPlainString(); - b.setMoneyChangeDetail("原合同商业管理费金额:"+bmbill.getNeedPay()+"元,总计分摊比率为:"+rate+",计算调整为:"+bussinessmoney+"元。本铺分摊:"+newmoney+"元"); - b.setReceivePay(newmoney); - b.setNeedPay(newmoney); - b.setBillRemark(createFrom.getMessage()+",自动计算。"+"原合同商业管理费金额:"+oldmoney+"元,总计分摊比率为:"+rate+",计算调整为:"+bussinessmoney+"元。本铺分摊:"+newmoney+"元"); + WxAllBill b = new WxAllBill(); + final IdWorker idWorker = IdWorker.get(); + b.setId(idWorker.nextId()); + b.updateTenantInfo(rentcontract); + b.setBillType(type.getCode()); + b.setEnergyFeesId(type.getEnergyFeesId()); + b.setRentContractId(rentcontract.getId()); + b.setIsPreview(EnumYesOrNo.NO.getCode()); + b.setCanEdit(EnumYesOrNo.NO.getCode()); + b.setShopId(sid); + b.setCusName(shopUserMap.get(sid).getName()); + b.setCreatetime(new Date()); b.setUpdatetime(new Date()); - wxAllBillMapper.updateById(b); - } - - bmbill = new WxAllBill(); - try { - BeanUtils.copyProperties(bmbill, bmbillList.get(0)); - } catch (IllegalAccessException | InvocationTargetException e) { - logger.error("generateManageBill error.",e); - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"创建账单错误"); - } - bmbill.setMoneyChangeDetail("原合同商业管理费金额:"+bmbill.getNeedPay()+"元,总计分摊比率为:"+rate+",计算调整为:"+bussinessmoney+"元。"); - bmbill.setReceivePay(bussinessmoney); - bmbill.setBillRemark(createFrom.getMessage()+",自动计算。"+"原合同商业管理费金额:"+bmbill.getNeedPay()+"元,总计分摊比率为:"+rate+",计算调整为:"+bussinessmoney+"元。"); - }else { - if (new BigDecimal(bussinessmoney).compareTo(new BigDecimal(0)) > 0 ) { - for (int i = 0 ; i < shopIdList.size(); i++) { - Long sid = shopIdList.get(i); - BigDecimal shoprate = shopAreaRateMap.get(sid); - String newmoney = new BigDecimal(bussinessmoney).multiply(shoprate).setScale(rentcontract.getDecimalSize()).toPlainString(); - WxAllBill b = new WxAllBill(); - final IdWorker idWorker = IdWorker.get(); - b.setId(idWorker.nextId()); - b.updateTenantInfo(rentcontract); - b.setBillType(type.getCode()); - b.setEnergyFeesId(type.getEnergyFeesId()); - b.setRentContractId(rentcontract.getId()); - b.setIsPreview(EnumYesOrNo.NO.getCode()); - b.setCanEdit(EnumYesOrNo.NO.getCode()); - b.setShopId(sid); - b.setCreatetime(new Date()); - b.setUpdatetime(new Date()); - b.setPriceDetail(""); - b.setNeedPay(newmoney); - b.setReceivePay(newmoney); - b.setPay("0"); - b.setStarttime(rentBill.getStarttime()); - b.setEndtime(rentBill.getEndtime()); - b.setBillRemark(createFrom.getMessage()+",自动计算创建,总计分摊比率为:"+rate+",本铺分摊:"+newmoney+"元"); - b.setExtraCreateFrom(createFrom.getCode()); - b.setMoneyChangeDetail("自动计算创建,总计分摊比率为:"+rate+",应收金额为:"+bussinessmoney+"元,"); - wxAllBillMapper.insert(bmbill); - if (null == bmbill) { - bmbill = new WxAllBill(); - try { - BeanUtils.copyProperties(bmbill, b); - } catch (IllegalAccessException | InvocationTargetException e) { - logger.error("generateManageBill error.",e); - throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"创建账单错误"); - } - bmbill.setBillRemark(createFrom.getMessage()+",自动计算创建,总计分摊比率为:"+rate); - bmbill.setReceivePay(bussinessmoney); - } - } - }else { - return null; + b.setPriceDetail(""); + b.setNeedPay(newmoney); + b.setReceivePay(newmoney); + b.setPay("0"); + b.setStarttime(starttime); + b.setEndtime(endtime); + b.setBillRemark(createFrom.getMessage()+"自动计算创建,科目总计分摊比率为:"+rate+",总应收金额为:"+bussinessmoney+"元,"+",本铺分担比例"+shoprate.toEngineeringString()); + b.setExtraCreateFrom(createFrom.getCode()); + b.setMoneyChangeDetail("自动计算创建,科目总计分摊比率为:"+rate+",总应收金额为:"+bussinessmoney+"元,"+",本铺分担比例"+shoprate.toEngineeringString()); + wxAllBillMapper.insert(b); + billList.add(b); } + return billList; } - return bmbill; + return null; + } - private WxAllBill generatePropertyBill(List shopIds,Map shopUserMap,WxRentContract rentcontract,Long propertyContractId,WxAllBill rentBill,WxAllBill propertyBill,String total,String rate,EnumBillExtraCreateFrom createFrom) { + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public List generatePropertyBill(List shopIds,Map shopUserMap,Map shopAreaRateMap,WxRentContract rentcontract, + Long propertyContractId,List propertyBillList,Date starttime,Date endtime,String total,String rate,EnumBillExtraCreateFrom createFrom) { String bussinessmoney = new BigDecimal(total).multiply(new BigDecimal(rate)).setScale(rentcontract.getDecimalSize(),BigDecimal.ROUND_HALF_UP).toPlainString(); - if (null != propertyBill ) { - propertyBill.setMoneyChangeDetail("原合同商业管理费金额:"+propertyBill.getNeedPay()+"元,总计分摊比率为:"+rate+",计算调整为:"+bussinessmoney+"元。"); - propertyBill.setReceivePay(bussinessmoney); - propertyBill.setBillRemark(createFrom.getMessage()+",自动计算"+"原合同商业管理费金额:"+propertyBill.getNeedPay()+"元,总计分摊比率为:"+rate+",计算调整为:"+bussinessmoney+"元。"); - if (new BigDecimal(propertyBill.getOwe()).compareTo(new BigDecimal(0)) < 0 ) { - //propertyBill.setStatus(EnumBillStatus.STOP_TO_SETTLE.getCode()); - }else { - //bmbill.setStatus(EnumBillStatus.PAID.getCode()); + if (null != propertyBillList ) { + if (null != propertyBillList) { + for (int i = 0 ; i < propertyBillList.size(); i++){ + WxAllBill _rb = propertyBillList.get(i); + wxAllBillMapper.deleteById(_rb.getId(), _rb.getTenantId()); + } } - propertyBill.setUpdatetime(new Date()); - wxAllBillMapper.updateById(propertyBill); - return propertyBill; - }else { - if (new BigDecimal(bussinessmoney).compareTo(new BigDecimal(0)) > 0 ) { + } + if (new BigDecimal(bussinessmoney).compareTo(new BigDecimal(0)) > 0 ) { + List billList = new ArrayList(); + for (int i = 0 ; i < shopIds.size() ; i ++) { + Long sid = shopIds.get(i); + BigDecimal shoprate = shopAreaRateMap.get(sid); + WxAllBill bmbill = new WxAllBill(); final IdWorker idWorker = IdWorker.get(); bmbill.setId(idWorker.nextId()); @@ -2898,51 +2874,61 @@ public class WxRentContractServiceImpl implements WxRentContractService { bmbill.setPropertyContractId(propertyContractId); bmbill.setIsPreview(EnumYesOrNo.NO.getCode()); bmbill.setCanEdit(EnumYesOrNo.NO.getCode()); - bmbill.setMerchantId(rentcontract.getMerchantId()); + bmbill.setShopId(sid); + bmbill.setCusName(shopUserMap.get(sid).getName()); bmbill.setCreatetime(new Date()); bmbill.setUpdatetime(new Date()); bmbill.setPriceDetail(""); bmbill.setNeedPay(bussinessmoney); bmbill.setReceivePay(bussinessmoney); bmbill.setPay("0"); - bmbill.setStarttime(rentBill.getStarttime()); - bmbill.setEndtime(rentBill.getEndtime()); - bmbill.setBillRemark(createFrom.getMessage()+",自动计算创建,总计分摊比率为:"+rate); + bmbill.setStarttime(starttime); + bmbill.setEndtime(endtime); + bmbill.setBillRemark(createFrom.getMessage()+".自动计算创建,科目分摊比率为:"+rate+",总应收金额为:"+bussinessmoney+"元,"+",本铺分担比例"+shoprate.toEngineeringString()); bmbill.setExtraCreateFrom(createFrom.getCode()); - bmbill.setMoneyChangeDetail("自动计算创建,总计分摊比率为:"+rate+",应收金额为:"+bussinessmoney+"元,"); + bmbill.setMoneyChangeDetail("自动计算创建,科目分摊比率为:"+rate+",总应收金额为:"+bussinessmoney+"元,"+",本铺分担比例"+shoprate.toEngineeringString()); wxAllBillMapper.insert(bmbill); - return bmbill; + billList.add(bmbill); } - return null; + return billList; } return null; } - private WxAllBill generateRentBill(WxRentContract rentcontract,String money,String rate,Date starttime,Date endtime,EnumBillExtraCreateFrom createFrom) { - WxAllBill bmbill = new WxAllBill(); - final IdWorker idWorker = IdWorker.get(); - bmbill.setId(idWorker.nextId()); - bmbill.updateTenantInfo(rentcontract); - bmbill.setBillType(EnumBillAllType.RENT.getCode()); - bmbill.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId()); - bmbill.setRentContractId(rentcontract.getId()); - bmbill.setIsPreview(EnumYesOrNo.NO.getCode()); - bmbill.setCanEdit(EnumYesOrNo.NO.getCode()); - bmbill.setMerchantId(rentcontract.getMerchantId()); - bmbill.setCreatetime(new Date()); - bmbill.setUpdatetime(new Date()); - bmbill.setPriceDetail(""); - bmbill.setNeedPay(money); - bmbill.setReceivePay(money); - bmbill.setPay("0"); - bmbill.setStarttime(starttime); - bmbill.setEndtime(endtime); - bmbill.setBillRemark(createFrom.getMessage()+",自动计算创建,分摊比例为"+rate); - bmbill.setExtraCreateFrom(createFrom.getCode()); - bmbill.setMoneyChangeDetail("自动计算创建,分摊比例为"+rate+",计算应收金额为:"+money+"元,"); - wxAllBillMapper.insert(bmbill); - return bmbill; + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public List generateRentBill(List shopIds,Map shopUserMap,Map shopAreaRateMap,WxRentContract rentcontract, + String money,String rate,Date starttime,Date endtime,EnumBillExtraCreateFrom createFrom) { + List billList = new ArrayList(); + for (int i = 0 ; i < shopIds.size(); i++) { + Long sid = shopIds.get(i); + BigDecimal shoprate = shopAreaRateMap.get(sid); + WxAllBill bmbill = new WxAllBill(); + final IdWorker idWorker = IdWorker.get(); + bmbill.setId(idWorker.nextId()); + bmbill.updateTenantInfo(rentcontract); + bmbill.setBillType(EnumBillAllType.RENT.getCode()); + bmbill.setEnergyFeesId(EnumBillAllType.RENT.getEnergyFeesId()); + bmbill.setRentContractId(rentcontract.getId()); + bmbill.setIsPreview(EnumYesOrNo.NO.getCode()); + bmbill.setCanEdit(EnumYesOrNo.NO.getCode()); + bmbill.setShopId(sid); + bmbill.setCusName(shopUserMap.get(sid).getName()); + bmbill.setCreatetime(new Date()); + bmbill.setUpdatetime(new Date()); + bmbill.setPriceDetail(""); + bmbill.setNeedPay(new BigDecimal(money).multiply(shoprate).toPlainString()); + bmbill.setReceivePay(bmbill.getNeedPay()); + bmbill.setPay("0"); + bmbill.setStarttime(starttime); + bmbill.setEndtime(endtime); + bmbill.setBillRemark(createFrom.getMessage()+".自动计算创建,科目分摊比例为"+rate+",计算总应收金额为:"+money+"元,"+",本铺分担比例"+shoprate.toEngineeringString()); + bmbill.setExtraCreateFrom(createFrom.getCode()); + bmbill.setMoneyChangeDetail("自动计算创建,科目分摊比例为"+rate+",计算总应收金额为:"+money+"元,"+",本铺分担比例"+shoprate.toEngineeringString()); + wxAllBillMapper.insert(bmbill); + billList.add(bmbill); + } + return billList; } @Override diff --git a/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml b/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml index 8a1088d6f..dd95db80b 100644 --- a/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxAllBillMapper.xml @@ -220,6 +220,22 @@ group by energy_fees_id + + diff --git a/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml b/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml index 4fcc723f2..d76af906f 100644 --- a/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml @@ -9,10 +9,8 @@ - - @@ -23,7 +21,7 @@ - `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`rent_contract_id`,`property_contract_id`,`bill_id`,`starttime`,`endtime`,`bill_money`, + `id`,`tenant_id`,`parent_tenant_id`,`create_time`,`update_time`,`rent_contract_id`,`property_contract_id`,`starttime`,`endtime`, `sale_money`,`sale_money_valid`,`calcute_money`,`remark`,`is_confirm`,`is_calcute` @@ -38,9 +36,10 @@ and `rent_contract_id` = #{rentContractId} and `property_contract_id` = #{propertyContractId} - and `bill_id` = #{billId} and `starttime` >= #{starttime} + and `starttime` = #{starttimeEqual} and `endtime` <= #{endtime} + and `endtime` = #{endtimeEqual} and `is_confirm` = #{isConfirm} and `is_calcute` = #{isCalcute} @@ -71,12 +70,6 @@ - - update wx_rent_contract_revenue_sales set is_confirm = 1 where `tenant_id` = #{tenantId} and `rent_contract_id` = #{rentContractId} and `starttime` >= #{starttime} and `endtime` <= #{endtime}