|
|
|
@ -3,10 +3,9 @@ package com.example.demo.serviceImpl.coin; |
|
|
|
import com.example.demo.Util.GoldTistV2; |
|
|
|
import com.example.demo.domain.entity.User; |
|
|
|
import com.example.demo.domain.entity.UserGoldRecord; |
|
|
|
import com.example.demo.domain.vo.coin.Gold; |
|
|
|
import com.example.demo.domain.vo.coin.GoldUser; |
|
|
|
import com.example.demo.domain.vo.coin.RechargeAudit; |
|
|
|
import com.example.demo.domain.vo.coin.RefundAudit; |
|
|
|
import com.example.demo.domain.vo.coin.*; |
|
|
|
import com.example.demo.exception.RedCheckException; |
|
|
|
import com.example.demo.mapper.Temporary.RedMapper; |
|
|
|
import com.example.demo.mapper.coin.AuditMapper; |
|
|
|
import com.example.demo.mapper.coin.MarketMapper; |
|
|
|
import com.example.demo.mapper.coin.UserMapper; |
|
|
|
@ -45,6 +44,8 @@ public class AuditServiceImpl implements AuditService { |
|
|
|
@Autowired |
|
|
|
private UserMapper userMapper; |
|
|
|
@Autowired |
|
|
|
private RedMapper redMapper; |
|
|
|
@Autowired |
|
|
|
private AdminService adminService; |
|
|
|
@Autowired |
|
|
|
private GeneralService generalService; |
|
|
|
@ -60,7 +61,8 @@ public class AuditServiceImpl implements AuditService { |
|
|
|
public boolean auditOrder(String token, String orderCode, Integer auditId, Integer action,String rejectReason,BigDecimal price,String linkId) { |
|
|
|
UserGoldRecord order=auditMapper.selectOrderByOrderCode(orderCode); |
|
|
|
Date date =new Date(); |
|
|
|
if (order == null || order.getAuditStatus() != 0) { |
|
|
|
//状态为0待审核或4第一次红包退款失败的订单才能审核 |
|
|
|
if (order == null || (order.getAuditStatus() != 0 && order.getAuditStatus() !=4)) { |
|
|
|
throw new IllegalArgumentException("订单不存在或已被审核"); |
|
|
|
} |
|
|
|
//更新订单的审核状态和审核人 |
|
|
|
@ -147,15 +149,23 @@ public class AuditServiceImpl implements AuditService { |
|
|
|
order.getRemark(),0, auditName, "金币充值"); |
|
|
|
|
|
|
|
}else if (order.getType()==2) { //退款 |
|
|
|
//退红包校验 |
|
|
|
try { |
|
|
|
redService.checkRed(price,linkId); |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("红包退票失败"); |
|
|
|
updateOrder.setAuditStatus(4); |
|
|
|
auditMapper.updateOrder(updateOrder); |
|
|
|
throw new RuntimeException(e); |
|
|
|
} |
|
|
|
//对非强制退款订单进行退红包校验 |
|
|
|
if (order.getAuditStatus()!=4){ |
|
|
|
try { |
|
|
|
redService.checkRed(price, linkId); |
|
|
|
} catch (RedCheckException e) { |
|
|
|
// 业务失败(flag=false) |
|
|
|
int num = e.getNum(); |
|
|
|
log.error("红包退票失败,还需扣除金币数: {}", num); |
|
|
|
updateOrder.setAuditStatus(4); |
|
|
|
updateOrder.setRedDiff(BigDecimal.valueOf(num)); |
|
|
|
auditMapper.updateOrder(updateOrder); |
|
|
|
throw e; // 或者包装后再抛 |
|
|
|
} catch (Exception e) { |
|
|
|
// 网络异常 / 系统异常 |
|
|
|
log.error("红包接口调用异常", e); |
|
|
|
throw new RuntimeException(e); |
|
|
|
}} |
|
|
|
//2.获取对应的订单(退款订单号去掉开头"TK"即为对应原始订单) |
|
|
|
String oldOrderCode = order.getOrderCode().replaceFirst("TK_", ""); |
|
|
|
UserGoldRecord oldOrder = auditMapper.selectAllOrderByOrderCode(oldOrderCode); |
|
|
|
@ -167,8 +177,11 @@ public class AuditServiceImpl implements AuditService { |
|
|
|
update.setCurrentFreeDecember(BigDecimal.valueOf(order.getFreeDecember())); //当前十二月免费金币 |
|
|
|
update.setCurrentTaskGold(BigDecimal.valueOf(order.getTaskGold())); //当前任务金币 |
|
|
|
auditMapper.updateUserGold(update); |
|
|
|
|
|
|
|
//商品消费退款 |
|
|
|
//erp增加退款数据 |
|
|
|
if(oldOrder.getType()==1){ //消费 |
|
|
|
if(oldOrder.getType()==1){ |
|
|
|
int type = 2; |
|
|
|
GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费-商品 |
|
|
|
(double) (order.getFreeDecember()+order.getFreeJune()) /100, |
|
|
|
order.getRemark(),0, auditName, "退款商品"+order.getGoodsName()); |
|
|
|
@ -178,21 +191,72 @@ public class AuditServiceImpl implements AuditService { |
|
|
|
GoldTistV2.addCoinNew(order.getJwcode().toString(), 57, //退款任务-商品 |
|
|
|
(double) (order.getTaskGold() ) /100, |
|
|
|
order.getRemark(),0, auditName, "退款商品"+order.getGoodsName()); |
|
|
|
} else if (oldOrder.getType()==0){//充值金币 |
|
|
|
// 执行审核更新 |
|
|
|
redMapper.update(order.getJwcode(),type,order.getPrice()); |
|
|
|
}//金币充值退款 |
|
|
|
else if (oldOrder.getType()==0){ |
|
|
|
int type = 1; |
|
|
|
if(order.getTaskGold()==0){ //无任务金币统一走免费+永久 |
|
|
|
GoldTistV2.addCoinNew(order.getJwcode().toString(), 58, //退款免费+永久金币-充值 |
|
|
|
(double) (order.getFreeDecember()+order.getFreeJune()+order.getPermanentGold() ) /100, |
|
|
|
order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");} |
|
|
|
if (order.getTaskGold()!=0) |
|
|
|
if (order.getTaskGold()!=0){ |
|
|
|
GoldTistV2.addCoinNew(order.getJwcode().toString(), 59, //退款任务+永久金币-充值 |
|
|
|
(double) (order.getTaskGold()+order.getPermanentGold() ) /100, |
|
|
|
order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值"); |
|
|
|
order.getRemark(),(double) order.getPermanentGold() / 100, auditName, "退款金币充值");} |
|
|
|
//额外扣金币抵扣红包 |
|
|
|
if (order.getAuditStatus()==4){ |
|
|
|
GoldUser user = userMapper.selectUser(order.getJwcode().toString()); |
|
|
|
// 检查用户余额是否足够抵扣红包差额 |
|
|
|
if (order.getRedDiff().compareTo(user.getNowSumGold()) > 0) { |
|
|
|
log.error("用户余额不足,无法抵扣红包 - 红包差额: {}, 用户余额: {}", |
|
|
|
order.getRedDiff(), user.getNowSumGold()); |
|
|
|
throw new IllegalArgumentException("用户余额不足,无法抵扣红包"); |
|
|
|
} |
|
|
|
ConsumeUser consumeUser = new ConsumeUser(); |
|
|
|
// 1. 先扣除免费金币 |
|
|
|
if (order.getRedDiff().compareTo(user.getNowFreeGold()) <= 0) { |
|
|
|
// 红包差额小于等于总免费金币,只扣免费金币 |
|
|
|
consumeUser.setJwcode(order.getJwcode()); |
|
|
|
consumeUser.setFreeGold(order.getRedDiff()); |
|
|
|
consumeUser.setPermanentGold(BigDecimal.ZERO); |
|
|
|
consumeUser.setTaskGold(BigDecimal.ZERO); |
|
|
|
} else { |
|
|
|
// 2. 免费金币不足,扣除免费+永久金币 |
|
|
|
BigDecimal remainingAfterFree = order.getRedDiff().subtract(user.getNowFreeGold()); |
|
|
|
if (remainingAfterFree.compareTo(user.getNowPermanentGold()) <= 0) { |
|
|
|
consumeUser.setJwcode(order.getJwcode()); |
|
|
|
consumeUser.setFreeGold(user.getNowFreeGold()); |
|
|
|
consumeUser.setPermanentGold(user.getNowPermanentGold().subtract(remainingAfterFree)); |
|
|
|
consumeUser.setTaskGold(BigDecimal.ZERO); |
|
|
|
} else { |
|
|
|
// 3. 免费+永久金币仍不足,扣除全部免费+永久+部分任务金币 |
|
|
|
BigDecimal remainingAfterPermanent = remainingAfterFree.subtract(user.getNowPermanentGold()); |
|
|
|
if (remainingAfterPermanent.compareTo(user.getNowTaskGold()) <= 0) { |
|
|
|
consumeUser.setJwcode(order.getJwcode()); |
|
|
|
consumeUser.setFreeGold(user.getNowFreeGold()); |
|
|
|
consumeUser.setPermanentGold(user.getNowPermanentGold()); |
|
|
|
consumeUser.setTaskGold(user.getNowTaskGold().subtract(remainingAfterPermanent)); |
|
|
|
} else { |
|
|
|
throw new IllegalArgumentException("用户金币不足,无法抵扣红包"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
consumeUser.setSumGold(order.getRedDiff()); |
|
|
|
consumeUser.setAdminId(order.getAdminId()); |
|
|
|
consumeUser.setRemark(order.getRemark()); |
|
|
|
consumeUser.setPrice(order.getPrice()); |
|
|
|
|
|
|
|
} // 执行审核更新 |
|
|
|
redMapper.update(order.getJwcode(),type,order.getPrice()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
updateOrder.setAuditStatus(1); |
|
|
|
updateOrder.setAuditTime(new Date()); |
|
|
|
// 执行审核更新 |
|
|
|
|
|
|
|
|
|
|
|
auditMapper.updateOrder(updateOrder); |
|
|
|
} |
|
|
|
|
|
|
|
|