|
|
|
@ -149,7 +149,14 @@ public class AuditServiceImpl implements AuditService { |
|
|
|
|
|
|
|
}else if (order.getType()==2) { //退款 |
|
|
|
//对非强制退款订单进行退红包校验 |
|
|
|
if (order.getAuditStatus()!=4&&price!= null&&linkId!= null){ |
|
|
|
if (price== null&&linkId== null) |
|
|
|
{ |
|
|
|
String logMsg="旧版订单暂不支持退款,请联系工作人员进行操作"; |
|
|
|
log.error(logMsg); |
|
|
|
AuditContext.setFailMsg(logMsg); |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (order.getAuditStatus()!=4){ |
|
|
|
try { |
|
|
|
redService.checkRed(price, linkId); |
|
|
|
} catch (RedCheckException e) { |
|
|
|
@ -222,29 +229,29 @@ public class AuditServiceImpl implements AuditService { |
|
|
|
throw new IllegalArgumentException("用户余额不足,无法抵扣红包"); |
|
|
|
} |
|
|
|
ConsumeUser consumeUser = new ConsumeUser(); |
|
|
|
// 1. 先扣除免费金币 |
|
|
|
if (order.getRedDiff().compareTo(user.getNowFreeGold()) <= 0) { |
|
|
|
// 红包差额小于等于总免费金币,只扣免费金币 |
|
|
|
// 1. 先扣除任务金币 |
|
|
|
if (order.getRedDiff().compareTo(user.getNowTaskGold()) <= 0) { |
|
|
|
// 红包差额小于等于任务金币,只扣任务金币 |
|
|
|
consumeUser.setJwcode(order.getJwcode()); |
|
|
|
consumeUser.setFreeGold(order.getRedDiff()); |
|
|
|
consumeUser.setTaskGold(order.getRedDiff()); |
|
|
|
consumeUser.setFreeGold(BigDecimal.ZERO); |
|
|
|
consumeUser.setPermanentGold(BigDecimal.ZERO); |
|
|
|
consumeUser.setTaskGold(BigDecimal.ZERO); |
|
|
|
} else { |
|
|
|
// 2. 免费金币不足,扣除免费+永久金币 |
|
|
|
BigDecimal remainingAfterFree = order.getRedDiff().subtract(user.getNowFreeGold()); |
|
|
|
if (remainingAfterFree.compareTo(user.getNowPermanentGold()) <= 0) { |
|
|
|
// 2. 任务金币不足,扣除任务+免费金币 |
|
|
|
BigDecimal remainingAfterTask = order.getRedDiff().subtract(user.getNowTaskGold()); |
|
|
|
if (remainingAfterTask.compareTo(user.getNowFreeGold()) <= 0) { |
|
|
|
consumeUser.setJwcode(order.getJwcode()); |
|
|
|
consumeUser.setFreeGold(user.getNowFreeGold()); |
|
|
|
consumeUser.setPermanentGold(user.getNowPermanentGold().subtract(remainingAfterFree)); |
|
|
|
consumeUser.setTaskGold(BigDecimal.ZERO); |
|
|
|
consumeUser.setTaskGold(user.getNowTaskGold()); |
|
|
|
consumeUser.setFreeGold(user.getNowFreeGold().subtract(remainingAfterTask)); |
|
|
|
consumeUser.setPermanentGold(BigDecimal.ZERO); |
|
|
|
} else { |
|
|
|
// 3. 免费+永久金币仍不足,扣除全部免费+永久+部分任务金币 |
|
|
|
BigDecimal remainingAfterPermanent = remainingAfterFree.subtract(user.getNowPermanentGold()); |
|
|
|
if (remainingAfterPermanent.compareTo(user.getNowTaskGold()) <= 0) { |
|
|
|
// 3. 任务+免费金币仍不足,扣除全部任务+免费+部分永久金币 |
|
|
|
BigDecimal remainingAfterFree = remainingAfterTask.subtract(user.getNowFreeGold()); |
|
|
|
if (remainingAfterFree.compareTo(user.getNowPermanentGold()) <= 0) { |
|
|
|
consumeUser.setJwcode(order.getJwcode()); |
|
|
|
consumeUser.setTaskGold(user.getNowTaskGold()); |
|
|
|
consumeUser.setFreeGold(user.getNowFreeGold()); |
|
|
|
consumeUser.setPermanentGold(user.getNowPermanentGold()); |
|
|
|
consumeUser.setTaskGold(user.getNowTaskGold().subtract(remainingAfterPermanent)); |
|
|
|
consumeUser.setPermanentGold(user.getNowPermanentGold().subtract(remainingAfterFree)); |
|
|
|
} else { |
|
|
|
throw new IllegalArgumentException("用户金币不足,无法抵扣红包"); |
|
|
|
} |
|
|
|
|