diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java index e304b8b8f..930aac930 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxFinanceController.java @@ -228,7 +228,7 @@ public class WxFinanceController extends BaseController { if (null == record.getBills() || null == record.getPayWays()) { return new ResultData(Result.ERROR,"请选择账单和支付方式"); } - List list = wxFinanceService.createReceive(record,this.getUser()); + List list = wxFinanceService.createPay(record,this.getUser()); return new ResultData(list); } diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxAllBillController.java b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxAllBillController.java index 7a7be7848..6723af84c 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxAllBillController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxAllBillController.java @@ -499,19 +499,6 @@ public class WxAllBillController extends BillBaseController { return new ResultData(retMap); } - //退回押金 - @PostMapping("returnDeposit") - public ResultData returnDeposit(@RequestBody WxBillPayDTO dto) { - dto.updateTenantInfo(getTenantInfo()); - //如果是管理费,默认一个商业管理费 - if (dto.getBillTypeValue().intValue() == Constant.bill_all_type_manage_fee) { - dto.setBillTypeValue(EnumBillAllType.RENT_BUSSINESS_MANAGE.getCode()); - } - billAllHelper.returnDeposit(dto, getUser()); - return new ResultData(); - //return wxBillAllService.updateReceivePay(wxBillAll, getUser(),false); - } - //坏账 @PostMapping("bad") public ResultData bad(@RequestBody WxBillPayDTO dto) { diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/FinanceReceiveCalcuteDTO.java b/mallinkService/src/main/java/com/iformall/domain/dto/FinanceReceiveCalcuteDTO.java index 5227c339d..3a262681f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/FinanceReceiveCalcuteDTO.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/FinanceReceiveCalcuteDTO.java @@ -15,4 +15,5 @@ public class FinanceReceiveCalcuteDTO extends TenantEntity{ private static final long serialVersionUID = 5653697108361199126L; private BigDecimal totalRemainReceive; private BigDecimal totalSetoff; + private BigDecimal totalRemainPay; } diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/WxBillPayDTO.java b/mallinkService/src/main/java/com/iformall/domain/dto/WxBillPayDTO.java index 7b0c54de5..41f963fa3 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/WxBillPayDTO.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/WxBillPayDTO.java @@ -15,6 +15,7 @@ public class WxBillPayDTO extends TenantEntity{ private Long id; private Integer billTypeValue;// EnumBillAllType private String addpay;//支付金额 + private String payToMerchant;//支付给商户金额 private String setOff="0";//冲抵金额 private WxBillPayWay payWayObject;//支付方式 private Long payWay;//传值 diff --git a/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java b/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java index fed25987a..441af9ab6 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxAllBillService.java @@ -45,7 +45,7 @@ public interface WxAllBillService { void updatePayByMerchant(WxBillPayDTO dto,WxMerchantBUser user,boolean isOnline); - void returnDeposit(WxBillPayDTO dto, MallUserInfo user); + void updatePayToMerchant(WxBillPayDTO dto, MallUserInfo user); void bad(WxBillPayDTO dto,MallUserInfo user); diff --git a/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java b/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java index e8107494c..285551ee2 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxFinanceService.java @@ -27,9 +27,10 @@ public interface WxFinanceService { Map getPayWayMap(WxBillPayWay record); void payWayInit(TenantEntity tenantInfo); - //收款 + //收付款 PageInfo receiveVoListAsPage(WxFinanceReceive record, Integer pageIndex, Integer pageSize); List createReceive(WxFinanceReceive record,MallUserInfo user); + List createPay(WxFinanceReceive record,MallUserInfo user); WxFinanceReceive getReceiveById(TenantEntity tenantEntity,Long id); void invalidReceive(WxFinanceReceive record,MallUserInfo user,String remark); void redSetoffReceive(WxFinanceReceive record,MallUserInfo user); @@ -41,11 +42,6 @@ public interface WxFinanceService { void createAdvance(WxFinanceReceive record,MallUserInfo user); PageInfo receiveSetoffListAsPage(WxFinanceReceive record, Integer pageIndex, Integer pageSize); - - - - - //打印 List printDataList(WxFinancePrintData record); List printTemplateList(WxFinancePrintTemplate record); 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 ea491aee5..8d2d205a8 100644 --- a/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java +++ b/mallinkService/src/main/java/com/iformall/service/helper/WxBillAllHelper.java @@ -344,8 +344,8 @@ public class WxBillAllHelper { return wxAllBillService.getById(wxMerchant,billId); } - public void returnDeposit(WxBillPayDTO dto,MallUserInfo user) { - wxAllBillService.returnDeposit(dto, user); + public void updatePayToMerchant(WxBillPayDTO dto,MallUserInfo user) { + wxAllBillService.updatePayToMerchant(dto, user); } public void bad(WxBillPayDTO dto,MallUserInfo user) { 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 6d8282ef2..227029b8f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAllBillServiceImpl.java @@ -319,7 +319,7 @@ public class WxAllBillServiceImpl extends WxBillBaseService implements WxAllBill } @Override - public void returnDeposit(WxBillPayDTO dto, MallUserInfo user) { + public void updatePayToMerchant(WxBillPayDTO dto, MallUserInfo user) { WxAllBill dbBill = wxAllBillMapper.selectById(dto.getId(),dto.getTenantId()); BigDecimal oldpay = new BigDecimal(0); if (StringUtils.isNotBlank(dbBill.getReturnPay())) { @@ -329,7 +329,7 @@ public class WxAllBillServiceImpl extends WxBillBaseService implements WxAllBill wxBillRent.setId(dto.getId()); wxBillRent.updateTenantInfo(dto); wxBillRent.setUpdatetime(new Date()); - wxBillRent.setReturnPay(oldpay.add(new BigDecimal(dto.getAddpay())).toPlainString()); + wxBillRent.setReturnPay(oldpay.add(new BigDecimal(dto.getPayToMerchant())).toPlainString()); wxAllBillMapper.updateById(wxBillRent); this.addBillAction(EnumBillAction.RETURN, dto.getBillTypeValue(),dto.getId(), dto.getAddpay(), dto.getAddpay(),null,wxBillRent.getPayDate(),dto.getPayWayObject(),dto.getRemark(),null,null, user); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java index 2b79d5598..902e79de2 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxFinanceServiceImpl.java @@ -543,7 +543,7 @@ public class WxFinanceServiceImpl implements WxFinanceService { sortBills(bills); //创建主收款单 - WxFinanceReceive addreceive = generateReceive(receiveId,user, EnumFinanceReceiveType.RECEIVE, receiveTotal.toPlainString(), record.getMerchantId(), null, record.getRemark()); + WxFinanceReceive addreceive = generateReceive(receiveId,user, EnumFinanceCashierType.RECEIVE,EnumFinanceReceiveType.RECEIVE, receiveTotal.toPlainString(),null, record.getMerchantId(), null, record.getRemark()); if (receiveTotal.compareTo(new BigDecimal(0)) > 0) { addreceive.setMoneyDetail(JSON.toJSONString(record.getPayWays())); wxFinanceReceivePaywayMapper.insertPayWays(record.getTenantId(),receivePayWayList); @@ -615,14 +615,14 @@ public class WxFinanceServiceImpl implements WxFinanceService { be.setCurrentReceive(money); //创建一个实收款单关联 - createFinanceReceiveBill(addreceive,bill,money,payWay0.getId()); + createFinanceReceiveBill(addreceive,bill,money,null,payWay0.getId()); bill.setCurrentReceive(money); //并且有抵扣 if(StringUtils.isNotBlank(be.getCurrentSetOff())) { calcuteDto.setTotalSetoff(calcuteDto.getTotalSetoff().add(new BigDecimal(be.getCurrentSetOff()))); payDto.setSetOff(be.getCurrentSetOff()); //创建一个冲抵收款单 - createFinanceReceiveBill(addreceive,bill,be.getCurrentSetOff(),Constant.bill_pay_way_setoff); + createFinanceReceiveBill(addreceive,bill,be.getCurrentSetOff(),null,Constant.bill_pay_way_setoff); //处理关联抵扣的预收单 createFinanceReceiveSetoff(addreceive,be,bill); } @@ -633,21 +633,22 @@ public class WxFinanceServiceImpl implements WxFinanceService { calcuteDto.setTotalSetoff(calcuteDto.getTotalSetoff().add(new BigDecimal(be.getCurrentSetOff()))); //没收款,有冲抵,就要更新账单的冲抵,然后把对应的预充值使用金额更新,并进行关联 //创建一个冲抵收款单 - createFinanceReceiveBill(addreceive,bill,be.getCurrentSetOff(),Constant.bill_pay_way_setoff); + createFinanceReceiveBill(addreceive,bill,be.getCurrentSetOff(),null,Constant.bill_pay_way_setoff); //处理预充关联 createFinanceReceiveSetoff(addreceive,be,bill); } return noNeedCreate; } - public WxFinanceReceive generateReceive(Long receiveId,MallUserInfo user,EnumFinanceReceiveType type,String receiveMoney,Long merchantId,Long feesId,String remark) { + public WxFinanceReceive generateReceive(Long receiveId,MallUserInfo user,EnumFinanceCashierType cashierType,EnumFinanceReceiveType type,String receiveMoney,String payMoney,Long merchantId,Long feesId,String remark) { WxFinanceReceive addreceive = new WxFinanceReceive(); addreceive.setId(receiveId); addreceive.updateTenantInfo(user); - addreceive.setType(EnumFinanceCashierType.RECEIVE.getCode()); + addreceive.setType(cashierType.getCode()); addreceive.setStatus(EnumFinanceReceiveStatus.NORMAL.getCode()); addreceive.setType(type.getCode()); addreceive.setReceiveMoney(receiveMoney); + addreceive.setPayMoney(payMoney); addreceive.setMerchantId(merchantId); addreceive.setCreateTime(new Date()); addreceive.setCreateBy(user.getId()); @@ -660,7 +661,7 @@ public class WxFinanceServiceImpl implements WxFinanceService { return addreceive; } - public void createFinanceReceiveBill(WxFinanceReceive addreceive,WxAllBill bill,String billMoney,Long payway) { + public void createFinanceReceiveBill(WxFinanceReceive addreceive,WxAllBill bill,String receiveMoney,String payMoeny,Long payway) { WxFinanceReceiveBill frbs = new WxFinanceReceiveBill(); frbs.updateTenantInfo(addreceive); final IdWorker idWorker = IdWorker.get(); @@ -670,7 +671,8 @@ public class WxFinanceServiceImpl implements WxFinanceService { frbs.setBillType(bill.getBillType()); frbs.setFeesId(bill.getEnergyFeesId()); frbs.setPayWay(payway); - frbs.setReceive(billMoney); + frbs.setReceive(receiveMoney); + frbs.setPay(payMoeny); frbs.setCreateTime(new Date()); frbs.setUpdateTime(new Date()); frbs.setMerchantId(bill.getMerchantId()); @@ -704,6 +706,112 @@ public class WxFinanceServiceImpl implements WxFinanceService { } } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public List createPay(WxFinanceReceive record,MallUserInfo user) { + //费用计算自动优先匹配时间最早的那个 + //单保存冲抵的时候,实收金额为0 + BigDecimal payTotal = new BigDecimal(0); + WxBillPayWay payWay0 = null; + final IdWorker idWorker = IdWorker.get(); + Long receiveId = idWorker.nextId(); + List receivePayWayList = new ArrayList(); + if (null != record.getPayWays()) { + for (int i = 0 ; i < record.getPayWays().size() ; i ++) { + WxBillPayWay payWay = record.getPayWays().get(i); + if (null == payWay.getId() || StringUtils.isBlank(payWay.getMoney())) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"收款方式,收款金额不能为空"); + } + payTotal = payTotal.add(new BigDecimal(payWay.getMoney())); + if (null == payWay0) { + payWay0 = payWay; + } + WxFinanceReceivePayway rpw = new WxFinanceReceivePayway(); + rpw.updateTenantInfo(record); + rpw.setReceiveId(receiveId); + rpw.setPay(payWay.getMoney()); + rpw.setPayWay(payWay.getId()); + rpw.setCreateTime(new Date()); + rpw.setUpdateTime(new Date()); + rpw.setIsDel(EnumYesOrNo.NO.getCode()); + receivePayWayList.add(rpw); + } + } + List bills = record.getBills(); + sortBills(bills); + + //创建主收款单 + WxFinanceReceive addreceive = generateReceive(receiveId,user,EnumFinanceCashierType.PAY ,EnumFinanceReceiveType.RECEIVE, null,payTotal.toPlainString(), record.getMerchantId(), null, record.getRemark()); + if (payTotal.compareTo(new BigDecimal(0)) > 0) { + addreceive.setMoneyDetail(JSON.toJSONString(record.getPayWays())); + wxFinanceReceivePaywayMapper.insertPayWays(record.getTenantId(),receivePayWayList); + } + WxMerchant merchant = new WxMerchant(); + merchant.updateTenantInfo(record); + boolean isAllEmpity = true; + + FinanceReceiveCalcuteDTO calcuteDto = new FinanceReceiveCalcuteDTO(); + calcuteDto.setTotalRemainPay(payTotal); + //建立子账单关联单 + for (int i = 0 ; i < record.getBills().size(); i++) { + WxAllBill be = record.getBills().get(i); + //每个账单要创建一个收款关联单,如果有冲抵,要额外创建 + boolean noNeedCreate = createBillPay(calcuteDto,user,addreceive,be,merchant,payWay0); + if (!noNeedCreate) { + isAllEmpity = false; + } + } + if (isAllEmpity) { + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"请付款"); + } + addreceive.setMerchantId(record.getMerchantId()); + addreceive.setRemark(record.getRemark()); + wxFinanceReceiveMapper.insert(addreceive); + return bills; + } + + public boolean createBillPay(FinanceReceiveCalcuteDTO calcuteDto,MallUserInfo user,WxFinanceReceive addreceive,WxAllBill be,WxMerchant merchant,WxBillPayWay payWay0) { + //如果既没有收款,也没有冲抵,则不更新 + boolean noNeedCreate = true; + //计算账单收款费用,更新账单收款 + BigDecimal b0 = new BigDecimal(0); + WxAllBill bill = wxBillAllHelper.getBillDetail(EnumBillAllType.getEnum(be.getBillType()), merchant, be.getId()); + if (calcuteDto.getTotalRemainPay().compareTo(b0) > 0) { + noNeedCreate = false; + //有收款,就要更新账单的收款 + //更新账单收款信息 + String money = ""; + BigDecimal oweDecimal = new BigDecimal(bill.getOwe()); + //只有没有有欠款才会支付 + if (oweDecimal.compareTo(b0) > 0 ) { + noNeedCreate = true; + return noNeedCreate; + } + if (calcuteDto.getTotalRemainPay().add(oweDecimal).compareTo(b0) > 0 ) { + money = oweDecimal.multiply(new BigDecimal(-1)).toPlainString(); + calcuteDto.setTotalRemainPay(calcuteDto.getTotalRemainPay().add(oweDecimal)); + }else { + money = calcuteDto.getTotalRemainPay().toPlainString(); + calcuteDto.setTotalRemainPay(new BigDecimal(0)); + } + WxBillPayDTO payDto = new WxBillPayDTO(); + payDto.updateTenantInfo(addreceive); + payDto.setId(be.getId()); + payDto.setBillTypeValue(be.getBillType()); + payDto.setPayToMerchant(money); + payDto.setPayWay(payWay0.getId()); + payDto.setPayWayObject(payWay0); + payDto.setRemark("付款单付款["+addreceive.getId()+"]"+addreceive.getRemark()); + be.setCurrentReceive(money); + + //创建一个实收款单关联 + createFinanceReceiveBill(addreceive,bill,null,money,payWay0.getId()); + bill.setCurrentReceive(money); + wxBillAllHelper.updatePayToMerchant(payDto, user); + + } + return noNeedCreate; + } @Override public WxFinanceReceive getReceiveById(TenantEntity tenantEntity, Long id) { @@ -715,7 +823,7 @@ public class WxFinanceServiceImpl implements WxFinanceService { //创建预收主单 final IdWorker idWorker = IdWorker.get(); Long receiveId = idWorker.nextId(); - WxFinanceReceive addreceive = generateReceive(receiveId,user, EnumFinanceReceiveType.ADVANCE, record.getReceiveMoney(), + WxFinanceReceive addreceive = generateReceive(receiveId,user,EnumFinanceCashierType.RECEIVE ,EnumFinanceReceiveType.ADVANCE, record.getReceiveMoney(), null, record.getMerchantId(), record.getFeesId(), record.getRemark()); wxFinanceReceiveMapper.insert(addreceive); //创建预收账单? WxBillAdvance