|
|
@ -198,6 +198,70 @@ public class AuditServiceImpl implements AuditService { |
|
|
//erp增加退款数据 |
|
|
//erp增加退款数据 |
|
|
if(oldOrder.getType()==1){ |
|
|
if(oldOrder.getType()==1){ |
|
|
int type = 2; |
|
|
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){ |
|
|
if (order.getPermanentGold()!=0||order.getFreeJune()!=0||order.getFreeDecember()!=0||order.getTaskGold()!=0){ |
|
|
GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费-商品 |
|
|
GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费-商品 |
|
|
(double) (order.getFreeDecember()+order.getFreeJune()) /100,SimpleIdGenerator.generateId(), |
|
|
(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()); |
|
|
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){ |
|
|
else if (oldOrder.getType()==0){ |
|
|
//判断够不够扣 |
|
|
//判断够不够扣 |
|
|
|
|
|
|
|
|
if(userNow.getNowPermanentGold().compareTo(BigDecimal.valueOf(Math.abs(order.getPermanentGold()))) < 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){ |
|
|
|| userNow.getNowTaskGold().compareTo(BigDecimal.valueOf(Math.abs(order.getTaskGold()))) < 0){ |
|
|
log.error("用户余额不足,无法退款"); |
|
|
log.error("用户余额不足,无法退款"); |
|
|
throw new IllegalArgumentException("用户余额不足,无法退款"); |
|
|
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("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}", |
|
|
log.error("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}", |
|
|
order.getRedDiff(), userNow.getNowSumGold()); |
|
|
order.getRedDiff(), userNow.getNowSumGold()); |
|
|
throw new IllegalArgumentException("用户余额不足,无法抵扣红包"); |
|
|
throw new IllegalArgumentException("用户余额不足,无法抵扣红包"); |
|
|
@ -279,7 +332,7 @@ public class AuditServiceImpl implements AuditService { |
|
|
consumeUser.setSumGold(order.getRedDiff()); |
|
|
consumeUser.setSumGold(order.getRedDiff()); |
|
|
consumeUser.setAdminId(order.getAdminId()); |
|
|
consumeUser.setAdminId(order.getAdminId()); |
|
|
consumeUser.setRemark(order.getRemark()); |
|
|
consumeUser.setRemark(order.getRemark()); |
|
|
consumeUser.setPrice(order.getPrice()); |
|
|
|
|
|
|
|
|
consumeUser.setPrice(price); |
|
|
// 执行金币抵扣红包 |
|
|
// 执行金币抵扣红包 |
|
|
redService.updateRed(consumeUser); |
|
|
redService.updateRed(consumeUser); |
|
|
//link扣除已有红包 |
|
|
//link扣除已有红包 |
|
|
|