Browse Source

Merge remote-tracking branch 'refs/remotes/origin/milestone-20251215-红包修改' into milestone-20260113-现金管理0109

milestone-20260113-现金管理0109
lijianlin 3 hours ago
parent
commit
9c21e41ff8
  1. 83
      src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java
  2. 6
      src/main/resources/mapper/AuditMapper.xml

83
src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java

@ -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扣除已有红包

6
src/main/resources/mapper/AuditMapper.xml

@ -3,11 +3,13 @@
<mapper namespace="com.example.demo.mapper.coin.AuditMapper"> <mapper namespace="com.example.demo.mapper.coin.AuditMapper">
<update id="updateOrder"> <update id="updateOrder">
update user_gold_record update user_gold_record
set audit_id = #{auditId},
<set>
audit_id = #{auditId},
audit_status = #{auditStatus}, audit_status = #{auditStatus},
red_diff = #{redDiff},
<if test="redDiff != null">red_diff = #{redDiff},</if>
reject_reason = #{rejectReason}, reject_reason = #{rejectReason},
audit_time = #{auditTime} audit_time = #{auditTime}
</set>
where order_code = #{orderCode} and audit_status in (0,4) where order_code = #{orderCode} and audit_status in (0,4)
order by create_time DESC order by create_time DESC
limit 1 limit 1

Loading…
Cancel
Save