From f99b0c64abaf0e755b7592c02a7ccdc428f990be 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 09:48:24 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/TbCreditBuyerOrderService.java | 14 +++- .../impl/TbCreditBuyerOrderServiceImpl.java | 69 +++++++++++++++++++ .../cn/ysk/cashier/pojo/shop/TbShopInfo.java | 5 ++ .../impl/shopimpl/TbShopInfoServiceImpl.java | 12 ++++ .../impl/shopimpl/TbShopTableServiceImpl.java | 9 +-- 5 files changed, 104 insertions(+), 5 deletions(-) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbCreditBuyerOrderService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbCreditBuyerOrderService.java index 01b0c8ab..91064124 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbCreditBuyerOrderService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/TbCreditBuyerOrderService.java @@ -4,6 +4,7 @@ import cn.ysk.cashier.mybatis.entity.TbCreditBuyerOrder; import cn.ysk.cashier.mybatis.entity.TbCreditPaymentRecord; import com.baomidou.mybatisplus.extension.service.IService; +import java.math.BigDecimal; import java.util.Map; /** @@ -27,11 +28,22 @@ public interface TbCreditBuyerOrderService extends IService boolean save(String creditBuyerId, Long orderId); /** - * 挂账人退款 + * 挂账人退款(整单退款) * @param creditBuyerId 挂账人id * @param orderId 订单id * @return */ + @Deprecated boolean refund(String creditBuyerId, Long orderId); + + /** + * 挂账人退款(部分退款) + * @param creditBuyerId 挂账人id + * @param orderId 订单id + * @param refundAmount 退款金额 + * @return + */ + boolean partRefund(String creditBuyerId, Long orderId, BigDecimal refundAmount); + } \ No newline at end of file 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 2f6fa687..2d420988 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 @@ -240,6 +240,7 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl params = new HashMap<>(2); + params.put("creditBuyerId", creditBuyerId); + params.put("orderId", orderId); + CreditBuyerOrderDTO dto = baseMapper.getOne(params); + if (dto == null) { + throw new BadRequestException("挂账订单不存在"); + } + // 1.只挂账未还款的情况,直接返回挂账额度 + if ("unpaid".equals(dto.getStatus())) { + // 退回额度 + creditBuyer.setCreditAmount(NumberUtil.add(creditBuyer.getCreditAmount(), refundAmount)); + tbCreditBuyerService.updateById(creditBuyer); + return true; + } + // 2.部分还款/已还款,删除挂账订单+红冲还款记录,并把已还款金额退回余额或挂账额度 + if ("partial".equals(dto.getStatus()) || "paid".equals(dto.getStatus())) { + // 已还款金额小于退款金额,需要把已还款金额退回余额 + 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(), subAmount)); + record.setCreateTime(new Date()); + tbCreditPaymentRecordMapper.insert(record); + tbCreditBuyerService.updateById(creditBuyer); + return true; + } + // 已还款金额大于退款金额,需要把已还款金额退回余额 + creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), refundAmount)); + // 已还款金额进行冲红 + TbCreditPaymentRecord record = new TbCreditPaymentRecord(); + record.setCreditBuyerId(creditBuyerId); + record.setOrderId(orderId); + record.setRepaymentAmount(NumberUtil.sub(BigDecimal.ZERO, 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); + tbCreditBuyerService.updateById(creditBuyer); + return true; + } + return false; + } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbShopInfo.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbShopInfo.java index fcabc2ae..64f57aee 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbShopInfo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/shop/TbShopInfo.java @@ -17,6 +17,7 @@ package cn.ysk.cashier.pojo.shop; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -299,6 +300,10 @@ public class TbShopInfo implements Serializable { @ApiModelProperty(value = "台桌预订短信") private String bookingSms; + @Transient + @TableField(exist = false) + private String registerCode; + public void copy(TbShopInfo source){ BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java index b6acf46b..82e7e6c9 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopInfoServiceImpl.java @@ -323,6 +323,18 @@ public class TbShopInfoServiceImpl implements TbShopInfoService { ValidationUtil.isNull(tbShopInfo.getId(), "TbShopInfo", "id", resources.getId()); tbShopInfo.copy(resources); tbShopInfo.setUpdatedAt(Instant.now().toEpochMilli()); + if (resources.getRegisterCode() != null) { + TbMerchantRegister tbMerchantRegister = merchantRegisterRepository.findByRegisterCode(resources.getRegisterCode()); + if (tbMerchantRegister == null) { + throw new BadRequestException("激活码有误"); + } + if (tbMerchantRegister.getStatus() == 1) { + throw new BadRequestException("激活码已激活,不能重复绑定"); + } + tbShopInfo.setExpireAt(DateUtil.addMonthsAndGetTimestamp(tbMerchantRegister.getPeriodYear())); + //向redis中存入key + redisUtils.set(CacheKey.ACT_CODE + resources.getAccount(), "1", tbShopInfo.getExpireAt() - Instant.now().toEpochMilli()); + } tbShopInfoRepository.save(tbShopInfo); } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java index 2a5506b2..80a8a182 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java @@ -2883,11 +2883,12 @@ public class TbShopTableServiceImpl implements TbShopTableService { .eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId()) .eq(TbOrderDetail::getStatus, "closed") .eq(TbOrderDetail::getOrderId, returnOrderDTO.getOrderId()) + .in(TbOrderDetail::getId, detailIds) .orderByDesc(TbOrderDetail::getUserCouponId)); - if (detailList.size() != returnOrderDTO.getOrderDetails().size()) { + /*if (detailList.size() != returnOrderDTO.getOrderDetails().size()) { throw new BadRequestException("挂账退款必须全退"); - } + }*/ } else { detailList = orderDetailMapper.selectList(new LambdaQueryWrapper() .eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId()) @@ -3122,7 +3123,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public Object returnOrder(ReturnOrderDTO returnOrderDTO) { TbOrderInfo orderInfo = orderInfoMapper.selectOne(new LambdaQueryWrapper() .eq(TbOrderInfo::getId, returnOrderDTO.getOrderId()) @@ -3164,7 +3165,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { mpOrderDetailService.updateStatusByOrderIdAndIds(OrderStatusEnums.REFUNDING, OrderStatusEnums.REFUND, returnOrderDTO.getOrderId(), returnOrderDTO.getOrderDetails().stream().map(ReturnOrderDTO.OrderDetail::getId).collect(Collectors.toList())); } else if (TableConstant.OrderInfo.PayType.CREDIT_BUYER.equalsVals(payType)) { - creditBuyerOrderService.refund(orderInfo.getCreditBuyerId(), Long.valueOf(orderInfo.getId())); + creditBuyerOrderService.partRefund(orderInfo.getCreditBuyerId(), Long.valueOf(orderInfo.getId()), returnAmount); } orderInfo.setStatus(TableConstant.OrderInfo.Status.CLOSED.getValue()); From 4b05243c5b1c6ac53133717cc7d28f8b3746c8f4 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 10:07:09 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TbCreditBuyerOrderServiceImpl.java | 7 +++---- 1 file changed, 3 insertions(+), 4 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 2d420988..8a4fe995 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 @@ -315,8 +315,8 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl Date: Wed, 11 Dec 2024 11:16:56 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=8E=88=E6=9D=83=E8=BF=87=E6=9C=9F=E6=97=A5?= =?UTF-8?q?=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; From 9b273893ef0e4fff2627e19fff3e871d168a301d 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:25:44 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TbCreditBuyerOrderServiceImpl.java | 167 +++++++----------- 1 file changed, 66 insertions(+), 101 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 0b3775ca..e6e03ab4 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 @@ -314,113 +314,78 @@ 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; + // 1.把退款归还至余额 + creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), refundAmount)); + // 2.保存挂账退款记录 + TbCreditPaymentRecord record = new TbCreditPaymentRecord(); + record.setCreditBuyerId(creditBuyerId); + record.setOrderId(orderId); + record.setRepaymentAmount(NumberUtil.sub(BigDecimal.ZERO, 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"); } - return false; + 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; } } From 686a79bc78fca19d3f2f39900e3d03fe07a0733b 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:29:48 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TbCreditBuyerOrderServiceImpl.java | 7 ------- 1 file changed, 7 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 e6e03ab4..68077fdf 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 @@ -314,13 +314,6 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl Date: Wed, 11 Dec 2024 11:42:45 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TbCreditBuyerOrderServiceImpl.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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 68077fdf..629d2551 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 @@ -323,10 +323,24 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl Date: Wed, 11 Dec 2024 11:44:34 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=8E=88=E6=9D=83=E8=BF=87=E6=9C=9F=E6=97=A5?= =?UTF-8?q?=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 629d2551..d837b0c5 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 @@ -333,9 +333,9 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl Date: Wed, 11 Dec 2024 14:34:56 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 d837b0c5..fb7731d3 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 @@ -371,7 +371,8 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl Date: Wed, 11 Dec 2024 16:34:55 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TbCreditBuyerOrderServiceImpl.java | 87 ++++--------------- 1 file changed, 16 insertions(+), 71 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 fb7731d3..0e4b347a 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 @@ -294,6 +294,7 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpllambdaUpdate() - .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()); - dto.setUnpaidAmount(NumberUtil.sub(dto.getPayAmount(), NumberUtil.add(dto.getPaidAmount(), dto.getUnpaidAmount()))); - 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()); - dto.setUnpaidAmount(NumberUtil.sub(dto.getPayAmount(), NumberUtil.add(dto.getPaidAmount(), accountBalance))); - auto.setRemark(StrUtil.format("挂账订单:{},挂账金额¥{},账户余额¥{},自动还款¥{}。", orderInfo.getOrderNo(), dto.getUnpaidAmount(), accountBalance, accountBalance)); - auto.setCreateTime(new Date()); - tbCreditPaymentRecordMapper.insert(auto); - } - tbCreditBuyerService.updateById(creditBuyer); return true; } } From 30156865112ca34d5aa928b6b97416aca1607b74 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 16:39:59 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0e4b347a..ddec441e 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 @@ -335,7 +335,7 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpl Date: Wed, 11 Dec 2024 16:43:09 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/service/impl/TbCreditBuyerOrderServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 ddec441e..7d5da534 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 @@ -294,7 +294,6 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpllambdaUpdate() + .eq(TbCreditBuyerOrder::getId, dto.getId()) + .set(TbCreditBuyerOrder::getPaidAmount, BigDecimal.ZERO) + ); // 退回余额 creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), dto.getPaidAmount())); tbCreditBuyerService.updateById(creditBuyer); From 243d1def48ecad24a3e58513f1cbc5c525faaf57 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 16:49:29 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8C=82=E8=B4=A6?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TbCreditBuyerOrderServiceImpl.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 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 7d5da534..b890dd1c 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 @@ -325,22 +325,22 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpllambdaUpdate() .eq(TbCreditBuyerOrder::getId, dto.getId()) - .set(TbCreditBuyerOrder::getPaidAmount, BigDecimal.ZERO) + .set(TbCreditBuyerOrder::getPaidAmount, NumberUtil.add(dto.getPaidAmount(), dto.getUnpaidAmount())) ); // 退回余额 - creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), dto.getPaidAmount())); + creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), dto.getUnpaidAmount().abs())); tbCreditBuyerService.updateById(creditBuyer); } return true; From 617b2a07d6c49e2210fcc9e68c80372fa163af78 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 17:07:50 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=BA=97=E9=93=BA=E6=8E=88=E6=9D=83=E8=BF=87=E6=9C=9F=E6=97=A5?= =?UTF-8?q?=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TbCreditBuyerOrderServiceImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 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 b890dd1c..544b916b 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 @@ -325,22 +325,23 @@ public class TbCreditBuyerOrderServiceImpl extends ServiceImpllambdaUpdate() .eq(TbCreditBuyerOrder::getId, dto.getId()) - .set(TbCreditBuyerOrder::getPaidAmount, NumberUtil.add(dto.getPaidAmount(), dto.getUnpaidAmount())) + .set(TbCreditBuyerOrder::getPaidAmount, NumberUtil.sub(dto.getPaidAmount(), sub)) ); // 退回余额 - creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), dto.getUnpaidAmount().abs())); + creditBuyer.setAccountBalance(NumberUtil.add(creditBuyer.getAccountBalance(), sub)); tbCreditBuyerService.updateById(creditBuyer); } return true;