|
@@ -2376,31 +2376,24 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
|
|
|
|
|
|
|
|
String outNo = orderRefundService.centerRefund(orderRefundReq, orderDon);
|
|
String outNo = orderRefundService.centerRefund(orderRefundReq, orderDon);
|
|
|
|
|
|
|
|
- if (mixedRefund) {
|
|
|
|
|
- // bxj 原记录的 outRefundNo 属于首次现金退款,不能覆盖;单独记录本次转换流水。
|
|
|
|
|
- RefundOrderDon conversionRecord = new RefundOrderDon();
|
|
|
|
|
- conversionRecord.setUserId(refundOrderDon.getUserId());
|
|
|
|
|
- conversionRecord.setOrderId(orderId);
|
|
|
|
|
- conversionRecord.setGoodsType(refundOrderDon.getGoodsType());
|
|
|
|
|
- conversionRecord.setOutRefundNo(outNo);
|
|
|
|
|
- conversionRecord.setGoodsId(refundOrderDon.getGoodsId());
|
|
|
|
|
- conversionRecord.setSkuId(refundOrderDon.getSkuId());
|
|
|
|
|
- conversionRecord.setGoodsTitle(refundOrderDon.getGoodsTitle());
|
|
|
|
|
- conversionRecord.setSpecVal(refundOrderDon.getSpecVal());
|
|
|
|
|
- conversionRecord.setTotalFee(refundOrderDon.getTotalFee());
|
|
|
|
|
- conversionRecord.setRefundFee(refundFee);
|
|
|
|
|
- conversionRecord.setRefundBalance(BigDecimal.ZERO);
|
|
|
|
|
- conversionRecord.setRefundDesc("混合退款余额转现金");
|
|
|
|
|
- // 现金退款流水记录实际原支付渠道,与普通现金退款记录保持一致。
|
|
|
|
|
- conversionRecord.setRefundMethod(paymentType.name());
|
|
|
|
|
- conversionRecord.setIsClearBalance(true);
|
|
|
|
|
- conversionRecord.setOperator(refundOrderDon.getOperator());
|
|
|
|
|
- conversionRecord.setChatImg(refundOrderDon.getChatImg());
|
|
|
|
|
- refundOrderDonMapper.insert(conversionRecord);
|
|
|
|
|
- } else {
|
|
|
|
|
- refundOrderDonMapper.update(null, Wrappers.lambdaUpdate(RefundOrderDon.class)
|
|
|
|
|
- .set(RefundOrderDon::getOutRefundNo, outNo)
|
|
|
|
|
- .eq(RefundOrderDon::getId, refundOrderId));
|
|
|
|
|
|
|
+ // balance 和 bxj 都只更新原退款记录,保留原记录 ID 和创建时间。
|
|
|
|
|
+ // refund_fee 记录现金累计,refund_balance 记录转换后剩余余额。
|
|
|
|
|
+ BigDecimal remainingRecordBalance = refundableBalance.subtract(refundFee);
|
|
|
|
|
+ BigDecimal originalCash = mixedRefund
|
|
|
|
|
+ ? Optional.ofNullable(refundOrderDon.getRefundFee()).orElse(BigDecimal.ZERO)
|
|
|
|
|
+ : BigDecimal.ZERO;
|
|
|
|
|
+ String updatedRefundMethod = remainingRecordBalance.signum() > 0
|
|
|
|
|
+ ? OrderRefundReq.RefundType.bxj.name() : paymentType.name();
|
|
|
|
|
+ int refundUpdate = refundOrderDonMapper.update(null, Wrappers.lambdaUpdate(RefundOrderDon.class)
|
|
|
|
|
+ .set(RefundOrderDon::getRefundFee, originalCash.add(refundFee))
|
|
|
|
|
+ .set(RefundOrderDon::getRefundBalance, remainingRecordBalance)
|
|
|
|
|
+ .set(RefundOrderDon::getRefundMethod, updatedRefundMethod)
|
|
|
|
|
+ .set(RefundOrderDon::getIsClearBalance, true)
|
|
|
|
|
+ .set(RefundOrderDon::getOutRefundNo, outNo)
|
|
|
|
|
+ .set(RefundOrderDon::getUpdateTime, new Date())
|
|
|
|
|
+ .eq(RefundOrderDon::getId, refundOrderId));
|
|
|
|
|
+ if (refundUpdate != 1) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("余额转现金退款记录更新失败");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|