diff --git a/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java b/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java index cdcfdf0..0a7ba62 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java +++ b/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java @@ -64,5 +64,7 @@ public class GoldDetail { private Integer isRefund; @ExcelIgnore private String goodsName; + private BigDecimal price; + private String linkId; } diff --git a/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java b/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java index ff2c65f..c52aa0b 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java +++ b/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java @@ -46,6 +46,7 @@ public class RefundUser implements Serializable { private Integer adminId; //提交人Id private String adminName; //提交人姓名 private BigDecimal price; //原价 + private String linkId; //LinkId @ExcelIgnore @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") 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 3b90d14..a700c0b 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java @@ -61,10 +61,12 @@ public class AuditServiceImpl implements AuditService { @Transactional(rollbackFor = Exception.class) @Override public boolean auditOrder(String token, String orderCode, Integer auditId, Integer action,String rejectReason,BigDecimal price,String linkId) throws Exception { + if (linkId== null){ linkId=orderCode; } UserGoldRecord order=auditMapper.selectOrderByOrderCode(orderCode); + if (price== null){ price= BigDecimal.valueOf(order.getPermanentGold()); } @@ -73,6 +75,7 @@ public class AuditServiceImpl implements AuditService { if (order == null || (order.getAuditStatus() != 0 && order.getAuditStatus() !=4)) { throw new IllegalArgumentException("订单不存在或已被审核"); } + GoldUser userNow = userMapper.selectUser(order.getJwcode().toString()); //更新订单的审核状态和审核人 UserGoldRecord updateOrder = new UserGoldRecord(); updateOrder.setOrderCode(orderCode); @@ -204,32 +207,23 @@ public class AuditServiceImpl implements AuditService { (double) (order.getTaskGold() ) /100,SimpleIdGenerator.generateId(), order.getRemark(),0, auditName, "退款商品"+order.getGoodsName()); // 执行审核更新 - redMapper.update(order.getJwcode(),type,order.getPrice()); + redMapper.update(order.getJwcode(),type,order.getPrice().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); }//金币充值退款 else if (oldOrder.getType()==0){ - - if(order.getTaskGold()==0){ //无任务金币统一走免费+永久 - GoldTistV2.addCoinNew(order.getJwcode().toString(), 58, //退款免费+永久金币-充值 - (double) (order.getFreeDecember()+order.getFreeJune()+order.getPermanentGold() ) /100,SimpleIdGenerator.generateId(), - order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");} - if (order.getTaskGold()!=0){ - GoldTistV2.addCoinNew(order.getJwcode().toString(), 59, //退款任务+永久金币-充值 - (double) (order.getTaskGold()+order.getPermanentGold() ) /100,SimpleIdGenerator.generateId(), - order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");} - //额外扣金币抵扣红包 if (order.getAuditStatus()==4){ int type = 1; //红包充值累计 - GoldUser user = userMapper.selectUser(order.getJwcode().toString()); + // 检查用户余额是否足够抵扣红包差额 - if (order.getRedDiff().compareTo(user.getNowSumGold()) > 0) { + + if (order.getPrice().add(order.getRedDiff()).compareTo(userNow.getNowSumGold()) > 0) { log.error("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}", - order.getRedDiff(), user.getNowSumGold()); + order.getRedDiff(), userNow.getNowSumGold()); throw new IllegalArgumentException("用户余额不足,无法抵扣红包"); } ConsumeUser consumeUser = new ConsumeUser(); // 1. 先扣除任务金币 - if (order.getRedDiff().compareTo(user.getNowTaskGold()) <= 0) { + if (order.getRedDiff().compareTo(userNow.getNowTaskGold().add(BigDecimal.valueOf(order.getTaskGold()))) <= 0) { // 红包差额小于等于任务金币,只扣任务金币 consumeUser.setJwcode(order.getJwcode()); consumeUser.setTaskGold(order.getRedDiff()); @@ -237,20 +231,20 @@ public class AuditServiceImpl implements AuditService { consumeUser.setPermanentGold(BigDecimal.ZERO); } else { // 2. 任务金币不足,扣除任务+免费金币 - BigDecimal remainingAfterTask = order.getRedDiff().subtract(user.getNowTaskGold()); - if (remainingAfterTask.compareTo(user.getNowFreeGold()) <= 0) { + BigDecimal remainingAfterTask = order.getRedDiff().subtract(userNow.getNowTaskGold().add(BigDecimal.valueOf(order.getTaskGold()))); + if (remainingAfterTask.compareTo(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune()+order.getFreeDecember()))) <= 0) { consumeUser.setJwcode(order.getJwcode()); - consumeUser.setTaskGold(user.getNowTaskGold()); - consumeUser.setFreeGold(user.getNowFreeGold().subtract(remainingAfterTask)); + consumeUser.setTaskGold(userNow.getNowTaskGold().add(BigDecimal.valueOf(order.getTaskGold()))); + consumeUser.setFreeGold(remainingAfterTask); consumeUser.setPermanentGold(BigDecimal.ZERO); } else { // 3. 任务+免费金币仍不足,扣除全部任务+免费+部分永久金币 - BigDecimal remainingAfterFree = remainingAfterTask.subtract(user.getNowFreeGold()); - if (remainingAfterFree.compareTo(user.getNowPermanentGold()) <= 0) { + BigDecimal remainingAfterFree = remainingAfterTask.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.setTaskGold(user.getNowTaskGold()); - consumeUser.setFreeGold(user.getNowFreeGold()); - consumeUser.setPermanentGold(user.getNowPermanentGold().subtract(remainingAfterFree)); + consumeUser.setTaskGold(userNow.getNowTaskGold().add(BigDecimal.valueOf(order.getTaskGold()))); + consumeUser.setFreeGold(userNow.getNowFreeGold().add(BigDecimal.valueOf(order.getFreeJune()+order.getFreeDecember()))); + consumeUser.setPermanentGold(remainingAfterFree); } else { throw new IllegalArgumentException("用户金币不足,无法抵扣红包"); } @@ -262,22 +256,32 @@ public class AuditServiceImpl implements AuditService { consumeUser.setPrice(order.getPrice()); // 执行金币抵扣红包 redService.updateRed(consumeUser); + //link扣除已有红包 + redService.consumeRed(linkId); // 执行审核更新 redMapper.update(order.getJwcode(),type,order.getPrice()); } - - //link扣除已有红包 - if (!AuditContext.getRedCheckResult().equals("old")){ + else if (!AuditContext.getRedCheckResult().equals("old")){ redService.consumeRed(linkId); } - else { Exception e = new Exception("旧订单退款"); String title = "旧订单退款"; - String detail= (order.getJwcode()).toString()+"金币订单号"+orderCode; + 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); } + if(order.getTaskGold()==0){ //无任务金币统一走免费+永久 + GoldTistV2.addCoinNew(order.getJwcode().toString(), 58, //退款免费+永久金币-充值 + (double) (order.getFreeDecember()+order.getFreeJune()+order.getPermanentGold() ) /100,SimpleIdGenerator.generateId(), + order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");} + if (order.getTaskGold()!=0){ + GoldTistV2.addCoinNew(order.getJwcode().toString(), 59, //退款任务+永久金币-充值 + (double) (order.getTaskGold()+order.getPermanentGold() ) /100,SimpleIdGenerator.generateId(), + order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");} + } } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java index bd0b912..3f8c919 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java @@ -179,7 +179,9 @@ public class RefundServiceImpl implements RefundService { userGoldRecord.setPayPlatform("金币系统"); userGoldRecord.setRemark(refundUser.getRemark()); + if (refundUser.getLinkId() != null&&refundUser.getPrice()!=null){ userGoldRecord.setPrice(refundUser.getPrice()); + userGoldRecord.setLinkId((refundUser.getLinkId()));} userGoldRecord.setAdminId(refundUser.getAdminId()); userGoldRecord.setType((byte) 2); userGoldRecord.setAuditStatus(0); diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index 80c4817..4bb38d6 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -8,7 +8,7 @@ red_diff = #{redDiff}, reject_reason = #{rejectReason}, audit_time = #{auditTime} - where order_code = #{orderCode} and audit_status = 0 + where order_code = #{orderCode} and audit_status in (1,4) order by create_time DESC limit 1 @@ -219,7 +219,7 @@