From f5cf4bb2fe167c425d544f5bf8f26e01f70f5727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E5=87=AF=E5=87=AF?= Date: Wed, 11 Dec 2024 11:16:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=BF=94=E5=9B=9E=E5=BA=97?= =?UTF-8?q?=E9=93=BA=E6=8E=88=E6=9D=83=E8=BF=87=E6=9C=9F=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TbCreditBuyerOrderServiceImpl.java | 114 ++++++++++++++---- 1 file changed, 90 insertions(+), 24 deletions(-) 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;