From c70104f762ba02ad58f3a97f802cd0bb653887b7 Mon Sep 17 00:00:00 2001 From: lijianlin Date: Fri, 16 Jan 2026 10:30:36 +0800 Subject: [PATCH] =?UTF-8?q?01-16=20=E6=96=B0=E5=A2=9E=E5=95=86=E5=93=81?= =?UTF-8?q?=E9=80=80=E6=AC=BE=E7=9A=84=E7=BA=A2=E5=8C=85=E6=8A=B5=E6=89=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/serviceImpl/coin/AuditServiceImpl.java | 83 ++++++++++++++++++---- src/main/resources/mapper/AuditMapper.xml | 6 +- 2 files changed, 72 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java index b25f2d1..2c313c7 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java @@ -198,6 +198,70 @@ public class AuditServiceImpl implements AuditService { //erp增加退款数据 if(oldOrder.getType()==1){ int type = 2; + //额外扣金币抵扣红包 + if (order.getAuditStatus()==4){ + + + // 检查用户余额是否足够抵扣红包差额 + + if (price.add(order.getRedDiff()).compareTo(userNow.getNowSumGold()) > 0) { + log.error("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}", + order.getRedDiff(), userNow.getNowSumGold()); + throw new IllegalArgumentException("用户余额不足,无法抵扣红包"); + } + ConsumeUser consumeUser = new ConsumeUser(); + // 1. 先扣除免费金币 + if (order.getRedDiff().compareTo(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember()))) <= 0) { + // 红包差额小于等于免费金币,只扣免费金币 + consumeUser.setJwcode(order.getJwcode()); + consumeUser.setFreeGold(order.getRedDiff()); + consumeUser.setPermanentGold(BigDecimal.ZERO); + consumeUser.setTaskGold(BigDecimal.ZERO); + } else { + // 2. 免费金币不足,扣除免费+永久金币 + BigDecimal remainingAfterFree = order.getRedDiff().subtract(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember()))); + if (remainingAfterFree.compareTo(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold()))) <= 0) { + consumeUser.setJwcode(order.getJwcode()); + consumeUser.setFreeGold(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember()))); + consumeUser.setPermanentGold(remainingAfterFree); + consumeUser.setTaskGold(BigDecimal.ZERO); + } else { + // 3. 免费+永久金币仍不足,扣除全部免费+永久+部分任务金币 + BigDecimal remainingAfterPermanent = remainingAfterFree.subtract(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold()))); + if (remainingAfterPermanent.compareTo(userNow.getNowTaskGold().add(BigDecimal.valueOf(order.getTaskGold()))) <= 0) { + consumeUser.setJwcode(order.getJwcode()); + consumeUser.setFreeGold(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune() + order.getFreeDecember()))); + consumeUser.setPermanentGold(userNow.getNowPermanentGold().add(BigDecimal.valueOf(order.getPermanentGold()))); + consumeUser.setTaskGold(remainingAfterPermanent); + } else { + throw new IllegalArgumentException("用户金币不足,无法抵扣红包"); + } + } + } + consumeUser.setSumGold(order.getRedDiff()); + consumeUser.setAdminId(order.getAdminId()); + consumeUser.setRemark(order.getRemark()); + consumeUser.setPrice(price); + // 执行金币抵扣红包 + redService.updateRed(consumeUser); + //link扣除已有红包 + redService.consumeRed(linkId); + } + //link扣除已有红包 + else if (AuditContext.getRedCheckResult()!=null &&!AuditContext.getRedCheckResult().equals("old")){ + redService.consumeRed(linkId); + } + else { + Exception e = new Exception("旧订单退款"); + String title = "旧订单退款"; + String detail= ("精网号:"+order.getJwcode())+"\n金币订单号:"+orderCode+"\n永久金币:"+Math.abs(order.getPermanentGold())/100+ + "\n免费金币:"+Math.abs((order.getFreeJune()+order.getFreeDecember()))/100+"\n任务金币:"+Math.abs(order.getTaskGold())/100+ + "\n退款类型:"+order.getRefundType()+"\n商品名:"+order.getGoodsName()+"\n备注:"+order.getRemark(); + GlobalExceptionHandler.sendFeishuAlert(e, title, detail); + } + // 执行审核更新 + redMapper.update(order.getJwcode(),type,price.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); + if (order.getPermanentGold()!=0||order.getFreeJune()!=0||order.getFreeDecember()!=0||order.getTaskGold()!=0){ GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费-商品 (double) (order.getFreeDecember()+order.getFreeJune()) /100,SimpleIdGenerator.generateId(), @@ -213,23 +277,12 @@ public class AuditServiceImpl implements AuditService { GoldTistV2.addCoinRecordNew(String.valueOf(order.getJwcode()), order.getRemark(),auditName,order.getGoodsName()); } - //如果是旧订单,发送报警 - if (AuditContext.getRedCheckResult()!=null &&AuditContext.getRedCheckResult().equals("old")){ - Exception e = new Exception("旧订单退款"); - String title = "旧订单退款"; - String detail= ("精网号:"+order.getJwcode())+"\n金币订单号:"+orderCode+"\n永久金币:"+Math.abs(order.getPermanentGold())/100+ - "\n免费金币:"+Math.abs((order.getFreeJune()+order.getFreeDecember()))/100+"\n任务金币:"+Math.abs(order.getTaskGold())/100+ - "\n退款类型:"+order.getRefundType()+"\n商品名:"+order.getGoodsName()+"\n备注:"+order.getRemark(); - GlobalExceptionHandler.sendFeishuAlert(e, title, detail); - } - // 执行审核更新 - redMapper.update(order.getJwcode(),type,price.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); + }//金币充值退款 else if (oldOrder.getType()==0){ //判断够不够扣 - if(userNow.getNowPermanentGold().compareTo(BigDecimal.valueOf(Math.abs(order.getPermanentGold()))) < 0 - || userNow.getNowFreeGold().compareTo(BigDecimal.valueOf(Math.abs(order.getFreeDecember() + order.getFreeJune()))) < 0 + || userNow.getNowFreeGold().compareTo(BigDecimal.valueOf(Math.abs(order.getFreeDecember() + order.getFreeJune()))) < 0 || userNow.getNowTaskGold().compareTo(BigDecimal.valueOf(Math.abs(order.getTaskGold()))) < 0){ log.error("用户余额不足,无法退款"); throw new IllegalArgumentException("用户余额不足,无法退款"); @@ -242,7 +295,7 @@ public class AuditServiceImpl implements AuditService { // 检查用户余额是否足够抵扣红包差额 - if (order.getPrice().add(order.getRedDiff()).compareTo(userNow.getNowSumGold()) > 0) { + if (price.add(order.getRedDiff()).compareTo(userNow.getNowSumGold()) > 0) { log.error("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}", order.getRedDiff(), userNow.getNowSumGold()); throw new IllegalArgumentException("用户余额不足,无法抵扣红包"); @@ -279,7 +332,7 @@ public class AuditServiceImpl implements AuditService { consumeUser.setSumGold(order.getRedDiff()); consumeUser.setAdminId(order.getAdminId()); consumeUser.setRemark(order.getRemark()); - consumeUser.setPrice(order.getPrice()); + consumeUser.setPrice(price); // 执行金币抵扣红包 redService.updateRed(consumeUser); //link扣除已有红包 diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index 9db578c..914fdf8 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -3,11 +3,13 @@ update user_gold_record - set audit_id = #{auditId}, + + audit_id = #{auditId}, audit_status = #{auditStatus}, - red_diff = #{redDiff}, + red_diff = #{redDiff}, reject_reason = #{rejectReason}, audit_time = #{auditTime} + where order_code = #{orderCode} and audit_status in (0,4) order by create_time DESC limit 1