分账后自动提现

This commit is contained in:
Hawking 2023-07-23 22:43:18 +08:00
parent b95dcce2b4
commit bd6dee6d8c
1 changed files with 113 additions and 87 deletions

View File

@ -510,11 +510,28 @@ public class OrderDetailServiceImpl implements OrderDetailService {
pcDeptRate = MoneyUtil.lt0(pcDeptRate) ? BigDecimal.ZERO : pcDeptRate; pcDeptRate = MoneyUtil.lt0(pcDeptRate) ? BigDecimal.ZERO : pcDeptRate;
BigDecimal pcDeptMoney = MoneyUtil.lt0(deptGoodsCategory.getPcDeptMoney()) ? BigDecimal.ZERO : deptGoodsCategory.getPcDeptMoney(); BigDecimal pcDeptMoney = MoneyUtil.lt0(deptGoodsCategory.getPcDeptMoney()) ? BigDecimal.ZERO : deptGoodsCategory.getPcDeptMoney();
BigDecimal dtx = BigDecimal.ZERO;
// 追加金额分账 // 追加金额分账
addPaymentConfirm(orderDetailId, deptId, memberId, masterMemberId, teamRete, teamMoney, pcDeptRate, pcDeptMoney); BigDecimal dtx1 = addPaymentConfirm(orderDetailId, deptId, memberId, masterMemberId, teamRete, teamMoney, pcDeptRate, pcDeptMoney);
dtx = dtx.add(dtx1);
// 改价单分账 // 改价单分账
BigDecimal changeMoney = changePaymentConfirm(orderDetailId, orderDetail.getWorkerId(), deptId, memberId, masterMemberId, teamRete, teamMoney, deptRate, deptMoney); BigDecimal changeMoney = BigDecimal.ZERO;
// 查询子订单的加价记录
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId));
if (CollectionUtils.isNotEmpty(financialChangeRecords)) {
// 改价记录只会有一条 直接取出
FinancialChangeRecord fcRecord = financialChangeRecords.get(0);
boolean paid = PayStatus.PAID.getCode().equals(fcRecord.getPayStatus());
boolean payedAdd = PayStatus.PAYED_ADD.getCode().equals(fcRecord.getPayStatus());
if (paid || payedAdd) {
changeMoney = fcRecord.getChangeMoney();
BigDecimal dtx2 = changePaymentConfirm(fcRecord, orderDetailId, orderDetail.getWorkerId(), deptId, memberId,
masterMemberId, teamRete, teamMoney, deptRate, deptMoney);
dtx = dtx.add(dtx2);
}
}
// --------------------- 子财务单分账部分 start --------------------- // --------------------- 子财务单分账部分 start ---------------------
// 子单的实际金额 // 子单的实际金额
@ -551,6 +568,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
BigDecimal workerMoney = odMoney.subtract(fineMoney); BigDecimal workerMoney = odMoney.subtract(fineMoney);
if (MoneyUtil.gt0(workerMoney)) { if (MoneyUtil.gt0(workerMoney)) {
divMembers.add(new DivMember(memberId, MoneyUtil.toS(workerMoney), false)); divMembers.add(new DivMember(memberId, MoneyUtil.toS(workerMoney), false));
dtx = dtx.add(workerMoney);
} }
} else { } else {
// 没有罚金 自己承担手续费 // 没有罚金 自己承担手续费
@ -565,10 +583,25 @@ public class OrderDetailServiceImpl implements OrderDetailService {
Assert.isTrue(status, response.toString()); Assert.isTrue(status, response.toString());
// 分账成功 把罚金状态改为已扣除 // 分账成功 把罚金状态改为已扣除
fineIds.forEach(fineRecordId -> orderFineRecordMapper.updateFineStatus(fineRecordId, 1)); fineIds.forEach(fineRecordId -> orderFineRecordMapper.updateFineStatus(fineRecordId, 1));
if (!haveFine) {
String feeAmt = response.getString("fee_amt");
dtx = dtx.add(odMoney).subtract(new BigDecimal(feeAmt));
}
} }
// --------------------- 子财务单分账部分 end --------------------- // --------------------- 子财务单分账部分 end ---------------------
// 分账后自动提现去掉了 改用定时提现 2023-07-07 // --------------------- 自动提现流程 start ---------------------
// 走到这里确认分账成功了 进入自动提现流程
logger.info("子订单[code={}]开始自动提现", odCode);
if (MoneyUtil.lte0(dtx)) {
logger.info("子订单[code={}] 待提现金额={} 无需提现", odCode, dtx);
} else {
// 待提现金额
String cashAmt = AdapayUtils.bigDecimalToString(dtx);
executor.execute(() -> drawCash(orderDetailId, financialDetail.getDeptId(), memberId, cashAmt));
}
// --------------------- 自动提现流程 end ---------------------
} }
/** /**
@ -586,18 +619,10 @@ public class OrderDetailServiceImpl implements OrderDetailService {
* @return 改价金额 * @return 改价金额
* @throws BaseAdaPayException AdaPay分账接口可能抛出的异常 * @throws BaseAdaPayException AdaPay分账接口可能抛出的异常
*/ */
private BigDecimal changePaymentConfirm(Long orderDetailId, Long workerId, Long deptId, String memberId, String masterMemberId, private BigDecimal changePaymentConfirm(FinancialChangeRecord fcRecord, Long orderDetailId, Long workerId, Long deptId,
BigDecimal teamRete, BigDecimal teamMoney, BigDecimal deptRate, BigDecimal deptMoney) throws BaseAdaPayException { String memberId, String masterMemberId, BigDecimal teamRete, BigDecimal teamMoney,
BigDecimal changeMoney = BigDecimal.ZERO; BigDecimal deptRate, BigDecimal deptMoney) throws BaseAdaPayException {
// 查询子订单的加价记录 BigDecimal changeMoney = fcRecord.getChangeMoney();
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId));
if (CollectionUtils.isNotEmpty(financialChangeRecords)) {
// 改价记录只会有一条 直接取出
FinancialChangeRecord fcRecord = financialChangeRecords.get(0);
boolean paid = PayStatus.PAID.getCode().equals(fcRecord.getPayStatus());
boolean payedAdd = PayStatus.PAYED_ADD.getCode().equals(fcRecord.getPayStatus());
if (paid || payedAdd) {
changeMoney = fcRecord.getChangeMoney();
// 平台抽成 // 平台抽成
BigDecimal platformFee = changeMoney.multiply(deptRate).add(deptMoney).setScale(2, RoundingMode.UP); BigDecimal platformFee = changeMoney.multiply(deptRate).add(deptMoney).setScale(2, RoundingMode.UP);
// 大师傅抽成 // 大师傅抽成
@ -667,9 +692,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
throw new IllegalArgumentException(response.getString("error_msg")); throw new IllegalArgumentException(response.getString("error_msg"));
} }
} }
} return workerFee;
}
return changeMoney;
} }
/** /**
@ -685,8 +708,9 @@ public class OrderDetailServiceImpl implements OrderDetailService {
* @param pcDeptMoney 平台抽成金额 * @param pcDeptMoney 平台抽成金额
* @throws BaseAdaPayException AdaPay分账接口可能抛出的异常 * @throws BaseAdaPayException AdaPay分账接口可能抛出的异常
*/ */
private void addPaymentConfirm(Long orderDetailId, Long deptId, String memberId, String masterMemberId, private BigDecimal addPaymentConfirm(Long orderDetailId, Long deptId, String memberId, String masterMemberId,
BigDecimal teamRete, BigDecimal teamMoney, BigDecimal pcDeptRate, BigDecimal pcDeptMoney) throws BaseAdaPayException { BigDecimal teamRete, BigDecimal teamMoney, BigDecimal pcDeptRate, BigDecimal pcDeptMoney) throws BaseAdaPayException {
BigDecimal dtx = BigDecimal.ZERO;
List<OrderAddSubtract> oasList = orderAddSubtractMapper.select(new OrderAddSubtract() List<OrderAddSubtract> oasList = orderAddSubtractMapper.select(new OrderAddSubtract()
.setOrderDetailId(orderDetailId).setPayStatus(PayStatus.PAID.getCode())); .setOrderDetailId(orderDetailId).setPayStatus(PayStatus.PAID.getCode()));
List<OrderAddSubtract> adds = oasList.stream().filter(oas -> MoneyUtil.gt0(oas.getMoney())).collect(Collectors.toList()); List<OrderAddSubtract> adds = oasList.stream().filter(oas -> MoneyUtil.gt0(oas.getMoney())).collect(Collectors.toList());
@ -717,6 +741,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
} }
if (MoneyUtil.gt0(workerFee)) { if (MoneyUtil.gt0(workerFee)) {
divMembers.add(new DivMember(memberId, MoneyUtil.toS(workerFee), !feeFlag)); divMembers.add(new DivMember(memberId, MoneyUtil.toS(workerFee), !feeFlag));
dtx = dtx.add(workerFee);
} }
String orderNo = "OAS_" + oas.getId() + "_" + System.currentTimeMillis(); String orderNo = "OAS_" + oas.getId() + "_" + System.currentTimeMillis();
//调用分账 //调用分账
@ -725,6 +750,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
orderNo, MoneyUtil.toS(oasMoney), divMembers, null, null); orderNo, MoneyUtil.toS(oasMoney), divMembers, null, null);
logger.info("子订单[{}]的追加单[{}]分账结果: {}", orderDetailId, oas.getId(), response.toString()); logger.info("子订单[{}]的追加单[{}]分账结果: {}", orderDetailId, oas.getId(), response.toString());
} }
return dtx;
} }
/** /**