|
|
@@ -543,7 +543,7 @@ public class WxFinanceServiceImpl implements WxFinanceService { |
|
|
sortBills(bills); |
|
|
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) { |
|
|
if (receiveTotal.compareTo(new BigDecimal(0)) > 0) { |
|
|
addreceive.setMoneyDetail(JSON.toJSONString(record.getPayWays())); |
|
|
addreceive.setMoneyDetail(JSON.toJSONString(record.getPayWays())); |
|
|
wxFinanceReceivePaywayMapper.insertPayWays(record.getTenantId(),receivePayWayList); |
|
|
wxFinanceReceivePaywayMapper.insertPayWays(record.getTenantId(),receivePayWayList); |
|
|
@@ -615,14 +615,14 @@ public class WxFinanceServiceImpl implements WxFinanceService { |
|
|
be.setCurrentReceive(money); |
|
|
be.setCurrentReceive(money); |
|
|
|
|
|
|
|
|
//创建一个实收款单关联 |
|
|
//创建一个实收款单关联 |
|
|
createFinanceReceiveBill(addreceive,bill,money,payWay0.getId()); |
|
|
|
|
|
|
|
|
createFinanceReceiveBill(addreceive,bill,money,null,payWay0.getId()); |
|
|
bill.setCurrentReceive(money); |
|
|
bill.setCurrentReceive(money); |
|
|
//并且有抵扣 |
|
|
//并且有抵扣 |
|
|
if(StringUtils.isNotBlank(be.getCurrentSetOff())) { |
|
|
if(StringUtils.isNotBlank(be.getCurrentSetOff())) { |
|
|
calcuteDto.setTotalSetoff(calcuteDto.getTotalSetoff().add(new BigDecimal(be.getCurrentSetOff()))); |
|
|
calcuteDto.setTotalSetoff(calcuteDto.getTotalSetoff().add(new BigDecimal(be.getCurrentSetOff()))); |
|
|
payDto.setSetOff(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); |
|
|
createFinanceReceiveSetoff(addreceive,be,bill); |
|
|
} |
|
|
} |
|
|
@@ -633,21 +633,22 @@ public class WxFinanceServiceImpl implements WxFinanceService { |
|
|
calcuteDto.setTotalSetoff(calcuteDto.getTotalSetoff().add(new BigDecimal(be.getCurrentSetOff()))); |
|
|
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); |
|
|
createFinanceReceiveSetoff(addreceive,be,bill); |
|
|
} |
|
|
} |
|
|
return noNeedCreate; |
|
|
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(); |
|
|
WxFinanceReceive addreceive = new WxFinanceReceive(); |
|
|
addreceive.setId(receiveId); |
|
|
addreceive.setId(receiveId); |
|
|
addreceive.updateTenantInfo(user); |
|
|
addreceive.updateTenantInfo(user); |
|
|
addreceive.setType(EnumFinanceCashierType.RECEIVE.getCode()); |
|
|
|
|
|
|
|
|
addreceive.setType(cashierType.getCode()); |
|
|
addreceive.setStatus(EnumFinanceReceiveStatus.NORMAL.getCode()); |
|
|
addreceive.setStatus(EnumFinanceReceiveStatus.NORMAL.getCode()); |
|
|
addreceive.setType(type.getCode()); |
|
|
addreceive.setType(type.getCode()); |
|
|
addreceive.setReceiveMoney(receiveMoney); |
|
|
addreceive.setReceiveMoney(receiveMoney); |
|
|
|
|
|
addreceive.setPayMoney(payMoney); |
|
|
addreceive.setMerchantId(merchantId); |
|
|
addreceive.setMerchantId(merchantId); |
|
|
addreceive.setCreateTime(new Date()); |
|
|
addreceive.setCreateTime(new Date()); |
|
|
addreceive.setCreateBy(user.getId()); |
|
|
addreceive.setCreateBy(user.getId()); |
|
|
@@ -660,7 +661,7 @@ public class WxFinanceServiceImpl implements WxFinanceService { |
|
|
return addreceive; |
|
|
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(); |
|
|
WxFinanceReceiveBill frbs = new WxFinanceReceiveBill(); |
|
|
frbs.updateTenantInfo(addreceive); |
|
|
frbs.updateTenantInfo(addreceive); |
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
@@ -670,7 +671,8 @@ public class WxFinanceServiceImpl implements WxFinanceService { |
|
|
frbs.setBillType(bill.getBillType()); |
|
|
frbs.setBillType(bill.getBillType()); |
|
|
frbs.setFeesId(bill.getEnergyFeesId()); |
|
|
frbs.setFeesId(bill.getEnergyFeesId()); |
|
|
frbs.setPayWay(payway); |
|
|
frbs.setPayWay(payway); |
|
|
frbs.setReceive(billMoney); |
|
|
|
|
|
|
|
|
frbs.setReceive(receiveMoney); |
|
|
|
|
|
frbs.setPay(payMoeny); |
|
|
frbs.setCreateTime(new Date()); |
|
|
frbs.setCreateTime(new Date()); |
|
|
frbs.setUpdateTime(new Date()); |
|
|
frbs.setUpdateTime(new Date()); |
|
|
frbs.setMerchantId(bill.getMerchantId()); |
|
|
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<WxAllBill> createPay(WxFinanceReceive record,MallUserInfo user) { |
|
|
|
|
|
//费用计算自动优先匹配时间最早的那个 |
|
|
|
|
|
//单保存冲抵的时候,实收金额为0 |
|
|
|
|
|
BigDecimal payTotal = new BigDecimal(0); |
|
|
|
|
|
WxBillPayWay payWay0 = null; |
|
|
|
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
|
|
|
Long receiveId = idWorker.nextId(); |
|
|
|
|
|
List<WxFinanceReceivePayway> receivePayWayList = new ArrayList<WxFinanceReceivePayway>(); |
|
|
|
|
|
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<WxAllBill> 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 |
|
|
@Override |
|
|
public WxFinanceReceive getReceiveById(TenantEntity tenantEntity, Long id) { |
|
|
public WxFinanceReceive getReceiveById(TenantEntity tenantEntity, Long id) { |
|
|
@@ -715,7 +823,7 @@ public class WxFinanceServiceImpl implements WxFinanceService { |
|
|
//创建预收主单 |
|
|
//创建预收主单 |
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
final IdWorker idWorker = IdWorker.get(); |
|
|
Long receiveId = idWorker.nextId(); |
|
|
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()); |
|
|
record.getMerchantId(), record.getFeesId(), record.getRemark()); |
|
|
wxFinanceReceiveMapper.insert(addreceive); |
|
|
wxFinanceReceiveMapper.insert(addreceive); |
|
|
//创建预收账单? WxBillAdvance |
|
|
//创建预收账单? WxBillAdvance |
|
|
|