diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java index 8a4fe995..0b3775ca 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java @@ -46,6 +46,8 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpllambdaUpdate() + .eq(TbCreditBuyerOrder::getId, dto.getId()) + .set(TbCreditBuyerOrder::getPaidAmount, dto.getPaidAmount()) + .set(TbCreditBuyerOrder::getStatus, dto.getStatus())); + + } else { + // 1.把退款归还至余额 + creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), refundAmount)); + // 2.保存挂账退款记录 + TbCreditPaymentRecord record = new TbCreditPaymentRecord(); + record.setCreditBuyerId(creditBuyerId); + record.setOrderId(orderId); + record.setRepaymentAmount(refundAmount); + record.setPaymentMethod("挂账退款"); + record.setPaymentTime(new Date()); + record.setRemark(StrUtil.format("挂账订单:{},申请退款¥{}元,退款金额¥{}元已归还至账户余额,挂账额度已恢复。", orderInfo.getOrderNo(), refundAmount, refundAmount)); + record.setCreateTime(new Date()); + tbCreditPaymentRecordMapper.insert(record); + tbCreditBuyerService.updateById(creditBuyer); + // 3.修正挂账订单已还款数据 + 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.lambdaUpdate() + .eq(TbCreditBuyerOrder::getId, dto.getId()) + .set(TbCreditBuyerOrder::getPaidAmount, dto.getPaidAmount()) + .set(TbCreditBuyerOrder::getStatus, dto.getStatus())); + // 4.自动还款 + BigDecimal accountBalance = creditBuyer.getAccountBalance(); + BigDecimal sub = NumberUtil.sub(creditBuyer.getAccountBalance(), dto.getUnpaidAmount()); + // 4.1.可以还清 + if (NumberUtil.isGreaterOrEqual(sub, BigDecimal.ZERO)) { + creditBuyer.setAccountBalance(sub); + tbCreditBuyerOrderMapper.update( + Wrappers.lambdaUpdate() + .eq(TbCreditBuyerOrder::getId, dto.getId()) + .set(TbCreditBuyerOrder::getPaidAmount, NumberUtil.add(dto.getPaidAmount(), dto.getUnpaidAmount())) + .set(TbCreditBuyerOrder::getStatus, "paid")); + TbCreditPaymentRecord auto = new TbCreditPaymentRecord(); + auto.setCreditBuyerId(creditBuyerId); + auto.setOrderId(orderId); + auto.setRepaymentAmount(dto.getUnpaidAmount()); + auto.setPaymentMethod("自动还款"); + auto.setPaymentTime(new Date()); + auto.setRemark(StrUtil.format("挂账订单:{},已挂账金额¥{},账户余额¥{},自动还款¥{}。", orderInfo.getOrderNo(), dto.getUnpaidAmount(), accountBalance, dto.getUnpaidAmount())); + auto.setCreateTime(new Date()); + tbCreditPaymentRecordMapper.insert(auto); + } else { + // 4.2.可以还部分 + creditBuyer.setAccountBalance(BigDecimal.ZERO); + tbCreditBuyerOrderMapper.update( + Wrappers.lambdaUpdate() + .eq(TbCreditBuyerOrder::getId, dto.getId()) + .set(TbCreditBuyerOrder::getPaidAmount, NumberUtil.add(dto.getPaidAmount(), accountBalance)) + .set(TbCreditBuyerOrder::getStatus, "partial")); + TbCreditPaymentRecord auto = new TbCreditPaymentRecord(); + auto.setCreditBuyerId(creditBuyerId); + auto.setOrderId(orderId); + auto.setRepaymentAmount(accountBalance); + auto.setPaymentMethod("自动还款"); + auto.setPaymentTime(new Date()); + auto.setRemark(StrUtil.format("挂账订单:{},已挂账金额¥{},账户余额¥{},自动还款¥{}。", orderInfo.getOrderNo(), dto.getUnpaidAmount(), accountBalance, accountBalance)); + auto.setCreateTime(new Date()); + tbCreditPaymentRecordMapper.insert(auto); + } + tbCreditBuyerService.updateById(creditBuyer); return true; } return false;