winter 1 год назад
Родитель
Сommit
af475b12ca
12 измененных файлов: 210 добавлений и 196 удалений
  1. +8
    -13
      mallinkAdmin/src/main/java/com/iformall/controller/contract/WxRentContractController.java
  2. +4
    -0
      mallinkAdmin/src/main/resources/db/migration/V202411000000001.sql
  3. +5
    -6
      mallinkService/src/main/java/com/iformall/domain/po/WxRentContractRevenueSales.java
  4. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java
  5. +0
    -2
      mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java
  6. +2
    -0
      mallinkService/src/main/java/com/iformall/service/WxAllBillService.java
  7. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxRentContractService.java
  8. +13
    -0
      mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java
  9. +6
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java
  10. +150
    -164
      mallinkService/src/main/java/com/iformall/service/impl/WxRentContractServiceImpl.java
  11. +16
    -0
      mallinkService/src/main/resources/mapper/WxAllBillMapper.xml
  12. +3
    -10
      mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml

+ 8
- 13
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<WxAllBill> billList = wxAllBillService.list(bq);
WxAllBill bq = wxBillAllHelper.generateRentContractQueryBill(sales,sales.getRentContractId(),null,null);
List<WxAllBill> 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<WxRentContractRevenueSales> salesList = wxRentContractService.getContractSales(rc);
Map<Long,WxRentContractRevenueSales> billSalesMap = new HashMap<Long,WxRentContractRevenueSales>();
Map<String,WxRentContractRevenueSales> billSalesMap = new HashMap<String,WxRentContractRevenueSales>();
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());


+ 4
- 0
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;


+ 5
- 6
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;


+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxAllBillMapper.java Просмотреть файл

@@ -17,6 +17,8 @@ public interface WxAllBillMapper extends CommonMapper<WxAllBill, Long> {
List<WxAllBill> findList(WxAllBill wxBillRent);
List<Long> queryBillRentContractIdList(WxAllBill record);
List<WxAllBill> findContractSamePeriodSum(WxAllBill wxBillRent);
List<Long> getShopIdList(WxAllBill record);
List<WxAllBill> getMerchantAdvanceGroupSumList(WxAllBill wxBillRent);


+ 0
- 2
mallinkService/src/main/java/com/iformall/mapper/WxRentContractRevenueSalesMapper.java Просмотреть файл

@@ -18,8 +18,6 @@ public interface WxRentContractRevenueSalesMapper extends CommonMapper<WxRentCon
BigDecimal findSumSalesMoneyValid(WxRentContractRevenueSales wxBillRent);
List<Long> findBillId(WxRentContractRevenueSales wxBillRent);
void updateConfirm(WxRentContractRevenueSales wxBillRent);
void updateCalcute(WxRentContractRevenueSales wxBillRent);


+ 2
- 0
mallinkService/src/main/java/com/iformall/service/WxAllBillService.java Просмотреть файл

@@ -60,6 +60,8 @@ public interface WxAllBillService {
List<WxAllBill> list(WxAllBill record);
List<WxAllBill> getContractSamePeriodBillSumList(WxAllBill record);
List<WxBillNotify> notifyList(WxAllBill record);
void backPay(WxBillPayDTO dto,MallUserInfo user);


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/WxRentContractService.java Просмотреть файл

@@ -148,7 +148,7 @@ public interface WxRentContractService {
List<WxRentContractRevenueSales> 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);


+ 13
- 0
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<Long> getUnionIds(List<Long>...lists ) {
if (null != lists && lists.length > 0 ) {
List<Long> retList = new ArrayList<Long>();


+ 6
- 0
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<WxAllBill> getContractSamePeriodBillSumList(WxAllBill record) {
updateQueryParam(record);
return wxAllBillMapper.findContractSamePeriodSum(record);
}
@Override
public List<WxBillNotify> notifyList(WxAllBill record) {


+ 150
- 164
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<WxAllBill> 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<WxAllBill> 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<WxAllBill> 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<Date> 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<WxRentContractRevenueSales> 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<WxAllBill> rentBillList,Date startDate,Date endDate,
EnumBillExtraCreateFrom createFrom,List<WxAllBill> 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<Long> shopIdList = rentcontract.shopIdsByRentInfo();
Map<Long, BigDecimal> shopAreaRateMap = rentcontract.getRentShopAreaRate();
WxShopUsers suq = new WxShopUsers();
suq.updateTenantInfo(rentcontract);
suq.setShopIds(shopIdList);
suq.setStatus(EnumShopUsersStatus.LIVE.getCode());
Map<Long,WxShopUsers> shopUserMap = wxShopService.getShopUserMap(suq);
//物业账单应收就改为0,因为金额已经合并了
WxAllBill propeBill = generatePropertyBill(shopIdList,shopUserMap,rentcontract, propertyContractId, rentBill,propertyBill, needpay, propertyRate,createFrom);
List<WxAllBill> rentBill = generateRentBill(shopIdList,shopUserMap,shopAreaRateMap,rentcontract,rentneedpay,rentRate,startDate,endDate,createFrom);
List<WxAllBill> 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<WxAllBill> 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<WxAllBill> ombill = generateManageBill(shopIdList,shopUserMap,shopAreaRateMap,rentcontract, startDate,endDate, needpay, operaterRate, EnumBillAllType.RENT_OPERATION_MANAGE,createFrom);
WxRentContractRevenueSetSalesVo vo = new WxRentContractRevenueSetSalesVo();
vo.setTotal(needpay);
List<WxAllBill> blist = new ArrayList<WxAllBill>();
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<Long> shopIds,Map<Long,WxShopUsers> shopUserMap,WxRentContract rentcontract,WxAllBill rentBill,String total,String rate,EnumBillAllType type,EnumBillExtraCreateFrom createFrom) {
public List<WxAllBill> generateManageBill(List<Long> shopIds,Map<Long,WxShopUsers> shopUserMap,Map<Long, BigDecimal> 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<WxAllBill> bmbillList = wxAllBillMapper.findList(bussinessmanageBill);
WxAllBill bmbill = null;
Map<Long, BigDecimal> shopAreaRateMap = rentcontract.getRentShopAreaRate();
List<Long> 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<WxAllBill> billList = new ArrayList<WxAllBill>();
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<Long> shopIds,Map<Long,WxShopUsers> 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<WxAllBill> generatePropertyBill(List<Long> shopIds,Map<Long,WxShopUsers> shopUserMap,Map<Long, BigDecimal> shopAreaRateMap,WxRentContract rentcontract,
Long propertyContractId,List<WxAllBill> 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<WxAllBill> billList = new ArrayList<WxAllBill>();
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<WxAllBill> generateRentBill(List<Long> shopIds,Map<Long,WxShopUsers> shopUserMap,Map<Long, BigDecimal> shopAreaRateMap,WxRentContract rentcontract,
String money,String rate,Date starttime,Date endtime,EnumBillExtraCreateFrom createFrom) {
List<WxAllBill> billList = new ArrayList<WxAllBill>();
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


+ 16
- 0
mallinkService/src/main/resources/mapper/WxAllBillMapper.xml Просмотреть файл

@@ -220,6 +220,22 @@
group by energy_fees_id
</select>
<select id="findContractSamePeriodSum" parameterType="com.iformall.domain.po.WxAllBill" resultMap="BaseResultMap">
select
sum(CAST(need_pay AS DECIMAL(20,2))) need_pay ,
sum(CAST(receive_pay AS DECIMAL(20,2))) receive_pay ,
sum(CAST(ifnull(pay,'0') AS DECIMAL(20,2))) pay,
sum(CAST(ifnull(set_off,'0') AS DECIMAL(20,2))) set_off,
sum(CAST(ifnull(use_money,'0') AS DECIMAL(20,2))) use_money,
sum(CAST(ifnull(return_pay,'0') AS DECIMAL(20,2))) return_pay,
starttime,
endtime
from wx_all_bill
<include refid="dynamicWhereConditions"/>
group by starttime,endtime
order by starttime asc
</select>
<resultMap id="SumBaseResultMap" type="com.iformall.domain.vo.WxBillSum">
<result column="cut_off_pay" jdbcType="VARCHAR" property="cutOffPay"/>
<result column="receive_pay" jdbcType="VARCHAR" property="needPay"/>


+ 3
- 10
mallinkService/src/main/resources/mapper/WxRentContractRevenueSalesMapper.xml Просмотреть файл

@@ -9,10 +9,8 @@
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="rent_contract_id" jdbcType="BIGINT" property="rentContractId"/>
<result column="property_contract_id" jdbcType="BIGINT" property="propertyContractId"/>
<result column="bill_id" jdbcType="BIGINT" property="billId"/>
<result column="starttime" jdbcType="TIMESTAMP" property="starttime"/>
<result column="endtime" jdbcType="TIMESTAMP" property="endtime"/>
<result column="bill_money" jdbcType="VARCHAR" property="billMoney"/>
<result column="sale_money" jdbcType="VARCHAR" property="saleMoney"/>
<result column="sale_money_valid" jdbcType="VARCHAR" property="saleMoneyValid"/>
<result column="calcute_money" jdbcType="VARCHAR" property="calcuteMoney"/>
@@ -23,7 +21,7 @@
</resultMap>

<sql id="allColumns">
`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`
</sql>

@@ -38,9 +36,10 @@
</if>
<if test=" null != rentContractId ">and `rent_contract_id` = #{rentContractId}</if>
<if test=" null != propertyContractId ">and `property_contract_id` = #{propertyContractId}</if>
<if test=" null != billId ">and `bill_id` = #{billId}</if>
<if test=" null != starttime ">and `starttime` &gt;= #{starttime}</if>
<if test=" null != starttimeEqual ">and `starttime` = #{starttimeEqual}</if>
<if test=" null != endtime ">and `endtime` &lt;= #{endtime}</if>
<if test=" null != endtimeEqual ">and `endtime` = #{endtimeEqual}</if>
<if test=" null != isConfirm ">and `is_confirm` = #{isConfirm}</if>
<if test=" null != isCalcute ">and `is_calcute` = #{isCalcute}</if>
<if test=" null != ids ">
@@ -71,12 +70,6 @@
<include refid="dynamicWhereConditions"/>
</select>
<select id="findBillId" parameterType="com.iformall.domain.po.WxRentContractRevenueSales" resultType="Long">
select distinct bill_id
from wx_rent_contract_revenue_sales
<include refid="dynamicWhereConditions"/>
</select>
<update id= "updateConfirm" parameterType="com.iformall.domain.po.WxRentContractRevenueSales">
update wx_rent_contract_revenue_sales set is_confirm = 1
where `tenant_id` = #{tenantId} and `rent_contract_id` = #{rentContractId} and `starttime` &gt;= #{starttime} and `endtime` &lt;= #{endtime}


Загрузка…
Отмена
Сохранить