支持挂账部分退款

This commit is contained in:
谭凯凯
2024-12-11 11:25:44 +08:00
committed by Tankaikai
parent dacd138364
commit 6f8115dd2e

View File

@@ -314,56 +314,23 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl<TbCreditBuyerOrde
if (dto == null) { if (dto == null) {
throw new BadRequestException("挂账订单不存在"); throw new BadRequestException("挂账订单不存在");
} }
// 1.只挂账未还款的情况,直接返回挂账额度 // 只挂账未还款的情况,直接返回挂账额度
if ("unpaid".equals(dto.getStatus())) { if ("unpaid".equals(dto.getStatus())) {
// 退回额度 // 退回额度
//creditBuyer.setCreditAmount(NumberUtil.add(creditBuyer.getCreditAmount(), refundAmount)); //creditBuyer.setCreditAmount(NumberUtil.add(creditBuyer.getCreditAmount(), refundAmount));
//tbCreditBuyerService.updateById(creditBuyer); //tbCreditBuyerService.updateById(creditBuyer);
return true; return true;
} }
// 2.部分还款/已还款,删除挂账订单+红冲还款记录,并把已还款金额退回余额或挂账额度
// 已还款金额小于退款金额,需要把已还款金额退回余额,实时恢复挂账额度,然后进行自动还款
if (NumberUtil.isLessOrEqual(dto.getPaidAmount(), refundAmount)) {
creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), dto.getPaidAmount()));
// 这部分需要返回到额度
// BigDecimal subAmount = NumberUtil.sub(refundAmount, dto.getPaidAmount());
// creditBuyer.setCreditAmount(NumberUtil.add(creditBuyer.getCreditAmount(), subAmount));
// 已还款金额进行冲红
TbCreditPaymentRecord record = new TbCreditPaymentRecord();
record.setCreditBuyerId(creditBuyerId);
record.setOrderId(orderId);
record.setRepaymentAmount(NumberUtil.sub(BigDecimal.ZERO, dto.getPaidAmount()));
record.setPaymentMethod("挂账退款");
record.setPaymentTime(new Date());
record.setRemark(StrUtil.format("挂账订单:{},申请退款¥{}元,还款部分¥{}元已归还至账户余额,挂账额度已恢复。", orderInfo.getOrderNo(), refundAmount, dto.getPaidAmount()));
record.setCreateTime(new Date());
tbCreditPaymentRecordMapper.insert(record);
tbCreditBuyerService.updateById(creditBuyer);
// 回置挂账订单数据
dto.setPaidAmount(NumberUtil.sub(dto.getPaidAmount(), refundAmount));
if (NumberUtil.equals(dto.getPaidAmount(), BigDecimal.ZERO)) {
dto.setStatus("unpaid");
} else if (NumberUtil.isGreater(dto.getPaidAmount(), BigDecimal.ZERO) && NumberUtil.isLess(dto.getPaidAmount(), dto.getPayAmount())) {
dto.setStatus("partial");
}
dto.setUnpaidAmount(NumberUtil.sub(dto.getPayAmount(), dto.getPaidAmount()));
tbCreditBuyerOrderMapper.update(
Wrappers.<TbCreditBuyerOrder>lambdaUpdate()
.eq(TbCreditBuyerOrder::getId, dto.getId())
.set(TbCreditBuyerOrder::getPaidAmount, dto.getPaidAmount())
.set(TbCreditBuyerOrder::getStatus, dto.getStatus()));
} else {
// 1.把退款归还至余额 // 1.把退款归还至余额
creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), refundAmount)); creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), refundAmount));
// 2.保存挂账退款记录 // 2.保存挂账退款记录
TbCreditPaymentRecord record = new TbCreditPaymentRecord(); TbCreditPaymentRecord record = new TbCreditPaymentRecord();
record.setCreditBuyerId(creditBuyerId); record.setCreditBuyerId(creditBuyerId);
record.setOrderId(orderId); record.setOrderId(orderId);
record.setRepaymentAmount(refundAmount); record.setRepaymentAmount(NumberUtil.sub(BigDecimal.ZERO, refundAmount));
record.setPaymentMethod("挂账退款"); record.setPaymentMethod("挂账退款");
record.setPaymentTime(new Date()); record.setPaymentTime(new Date());
record.setRemark(StrUtil.format("挂账订单:{},申请退款¥{}元,退款金额¥{}元已归还至账户余额,挂账额度已恢复。", orderInfo.getOrderNo(), refundAmount, refundAmount)); record.setRemark(StrUtil.format("挂账订单:{},申请退款¥{}元,退款金额¥{}元已转移至账户余额,挂账额度已恢复。", orderInfo.getOrderNo(), refundAmount, refundAmount));
record.setCreateTime(new Date()); record.setCreateTime(new Date());
tbCreditPaymentRecordMapper.insert(record); tbCreditPaymentRecordMapper.insert(record);
tbCreditBuyerService.updateById(creditBuyer); tbCreditBuyerService.updateById(creditBuyer);
@@ -421,6 +388,4 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl<TbCreditBuyerOrde
tbCreditBuyerService.updateById(creditBuyer); tbCreditBuyerService.updateById(creditBuyer);
return true; return true;
} }
return false;
}
} }