diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java index 2bd7573..4825b9a 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -140,13 +140,14 @@ public class CashCollectionServiceImpl implements CashCollectionService { message.setJwcode(cashRecord.getJwcode()); message.setName(cashRecord.getName()); message.setStatus(cashRecord.getStatus()); - message.setDesc(cashRecord.getJwcode()+"用户的现金收款申请待审核,请前往审核"); - message.setTitle("现金收款--新增收款"); - message.setType(1); + message.setDesc(cashRecord.getJwcode()+"的现金收款申请待审核,请前往审核"); + message.setTitle("现金管理--收款处理"); + message.setType(0); message.setTypeId(cashRecord.getId()); message.setMarket(Integer.valueOf(cashRecord.getMarket())); String marketName = marketMapper.getMarketNameById(String.valueOf(message.getMarket())); message.setMarketName(marketName); + message.setQueryId(67); rabbitTemplate.convertAndSend(RabbitMQConfig.CASH_COLLECTION_EXCHANGE, "cash.collection.save", message); return "添加成功"; } 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 2c313c7..69f3c16 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java @@ -3,6 +3,7 @@ package com.example.demo.serviceImpl.coin; import com.example.demo.Util.GoldTistV2; import com.example.demo.Util.SimpleIdGenerator; import com.example.demo.config.GlobalExceptionHandler; +import com.example.demo.config.RabbitMQConfig; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.coin.*; @@ -18,6 +19,7 @@ import com.example.demo.service.coin.GeneralService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,55 +57,60 @@ public class AuditServiceImpl implements AuditService { private MarketMapper marketMapper; @Autowired private RedService redService; + @Autowired + private RabbitTemplate rabbitTemplate; + /* 审核订单并修改用户余额等 */ @Transactional(rollbackFor = Exception.class) @Override - public boolean auditOrder(String token, String orderCode, Integer auditId, Integer action,String rejectReason,BigDecimal price,String linkId) throws Exception { + 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 (linkId == null) { + linkId = orderCode; + } + UserGoldRecord order = auditMapper.selectOrderByOrderCode(orderCode); - if (price== null){ - price= BigDecimal.valueOf(order.getPermanentGold()); - } - Date date =new Date(); - //状态为0待审核或4第一次红包退款失败的订单才能审核 - 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); - updateOrder.setAuditId(auditId); - String auditName = auditMapper.getName(auditId); - //判断是通过还是驳回 - if (action==2){ //驳回 - - if (order.getType()==2) { //退款 - //2.获取对应的订单(退款订单号去掉开头"TK"即为对应原始订单) - String oldOrderCode = order.getOrderCode().replaceFirst("TK_", ""); - //3.更新消费订单是否已退款状态为0 - UserGoldRecord oldOrder = auditMapper.selectAllOrderByOrderCode(oldOrderCode); - if (oldOrderCode != null&&(oldOrder.getType()==1||oldOrder.getType()==0)){ //确保是消费或充值订单 - auditMapper.updateOrderRefund(oldOrderCode,(byte)0); - }else { + if (price == null) { + price = BigDecimal.valueOf(order.getPermanentGold()); + } + Date date = new Date(); + //状态为0待审核或4第一次红包退款失败的订单才能审核 + 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); + updateOrder.setAuditId(auditId); + String auditName = auditMapper.getName(auditId); + //判断是通过还是驳回 + if (action == 2) { //驳回 + + if (order.getType() == 2) { //退款 + //2.获取对应的订单(退款订单号去掉开头"TK"即为对应原始订单) + String oldOrderCode = order.getOrderCode().replaceFirst("TK_", ""); + //3.更新消费订单是否已退款状态为0 + UserGoldRecord oldOrder = auditMapper.selectAllOrderByOrderCode(oldOrderCode); + if (oldOrderCode != null && (oldOrder.getType() == 1 || oldOrder.getType() == 0)) { //确保是消费或充值订单 + auditMapper.updateOrderRefund(oldOrderCode, (byte) 0); + } else { throw new IllegalArgumentException("找不到对应的订单或不是有效订单"); - } } - updateOrder.setAuditStatus(2); - updateOrder.setRejectReason(rejectReason); - updateOrder.setAuditTime(new Date()); - // 执行审核更新 - auditMapper.updateOrder(updateOrder); + } + } + updateOrder.setAuditStatus(2); + updateOrder.setRejectReason(rejectReason); + updateOrder.setAuditTime(new Date()); - }else if (action==1) { //通过 + // 执行审核更新 + auditMapper.updateOrder(updateOrder); + + } else if (action == 1) { //通过 - //判断是充值还是退款 - if (order.getType()==0){ //充值 + //判断是充值还是退款 + if (order.getType() == 0) { //充值 //更新用户余额 User update = new User(); Date oldFirstRecharge = userMapper.getFirstRecharge(order.getJwcode().toString()); @@ -126,40 +133,40 @@ public class AuditServiceImpl implements AuditService { */ // 构造 2020-01-01 00:00:00 Date placeholder = new GregorianCalendar(2020, Calendar.JANUARY, 1, 0, 0).getTime(); - if(oldFirstRecharge== null||oldFirstRecharge.after(date)||placeholder.equals(oldFirstRecharge)){ + if (oldFirstRecharge == null || oldFirstRecharge.after(date) || placeholder.equals(oldFirstRecharge)) { auditMapper.updateFirstRecharge(order.getJwcode());//设置首充时间为当前时间 } auditMapper.updateUserGold(update); //累充 try { BigDecimal sum = BigDecimal.valueOf( - order.getPermanentGold()) - .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP) ; + order.getPermanentGold()) + .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); redService.addAmount(order.getJwcode(), sum, 1); // ← 直接调你写好的方法! } catch (Exception e) { log.warn("红包累加失败,主流程继续 | jwcode={}", order.getJwcode(), e); } try { - redService.sendJwcode(order.getJwcode(),order.getLinkId()); + redService.sendJwcode(order.getJwcode(), order.getLinkId()); log.info("精网号发送成功 | jwcode={}", order.getJwcode()); - }catch (Exception e){ + } catch (Exception e) { log.warn("精网号发送失败,主流程继续 | jwcode={}", order.getJwcode(), e); } //erp增加充值数据 - GoldTistV2.addCoinNew(order.getJwcode().toString(), 64, //充值永久金币 - (double) (order.getPermanentGold() ) /100, order.getLinkId() - ,order.getRemark(),(double) (order.getPermanentGold() ) /100, auditName, "金币充值"); - GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费 - (double) (order.getFreeDecember()+order.getFreeJune() ) /100, order.getLinkId(), - order.getRemark(),0, auditName, "金币充值"); + GoldTistV2.addCoinNew(order.getJwcode().toString(), 64, //充值永久金币 + (double) (order.getPermanentGold()) / 100, order.getLinkId() + , order.getRemark(), (double) (order.getPermanentGold()) / 100, auditName, "金币充值"); + GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费 + (double) (order.getFreeDecember() + order.getFreeJune()) / 100, order.getLinkId(), + order.getRemark(), 0, auditName, "金币充值"); - }else if (order.getType()==2) { //退款 + } else if (order.getType() == 2) { //退款 //对非强制退款订单进行退红包校验 - if (order.getAuditStatus()!=4){ + if (order.getAuditStatus() != 4) { try { String result = redService.checkRed(price, linkId); // 设置到全局上下文 @@ -173,7 +180,7 @@ public class AuditServiceImpl implements AuditService { ); log.error(logMsg); updateOrder.setAuditStatus(4); - updateOrder.setRedDiff(BigDecimal.valueOf(num* 100L)); + updateOrder.setRedDiff(BigDecimal.valueOf(num * 100L)); auditMapper.updateOrder(updateOrder); AuditContext.setFailMsg(logMsg); return false; @@ -181,7 +188,8 @@ public class AuditServiceImpl implements AuditService { // 网络异常 / 系统异常 log.error("红包接口调用异常", e); throw new RuntimeException(e); - }} + } + } //2.获取对应的订单(退款订单号去掉开头"TK"即为对应原始订单) String oldOrderCode = order.getOrderCode().replaceFirst("TK_", ""); UserGoldRecord oldOrder = auditMapper.selectAllOrderByOrderCode(oldOrderCode); @@ -196,10 +204,10 @@ public class AuditServiceImpl implements AuditService { //商品消费退款 //erp增加退款数据 - if(oldOrder.getType()==1){ - int type = 2; + if (oldOrder.getType() == 1) { + int type = 2; //额外扣金币抵扣红包 - if (order.getAuditStatus()==4){ + if (order.getAuditStatus() == 4) { // 检查用户余额是否足够抵扣红包差额 @@ -248,49 +256,48 @@ public class AuditServiceImpl implements AuditService { redService.consumeRed(linkId); } //link扣除已有红包 - else if (AuditContext.getRedCheckResult()!=null &&!AuditContext.getRedCheckResult().equals("old")){ + else if (AuditContext.getRedCheckResult() != null && !AuditContext.getRedCheckResult().equals("old")) { redService.consumeRed(linkId); - } - else { + } 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(); + 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){ - GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费-商品 - (double) (order.getFreeDecember()+order.getFreeJune()) /100,SimpleIdGenerator.generateId(), - order.getRemark(),0, auditName, "退款商品"+order.getGoodsName()); - GoldTistV2.addCoinNew(order.getJwcode().toString(), 56, //退款永久-商品 - (double) (order.getPermanentGold()) /100,SimpleIdGenerator.generateId(), - order.getRemark(),order.getPermanentGold(), auditName, "退款商品"+order.getGoodsName()); - GoldTistV2.addCoinNew(order.getJwcode().toString(), 57, //退款任务-商品 - (double) (order.getTaskGold() ) /100,SimpleIdGenerator.generateId(), - order.getRemark(),0, auditName, "退款商品"+order.getGoodsName());} - else { + 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) { + GoldTistV2.addCoinNew(order.getJwcode().toString(), 55, //退款免费-商品 + (double) (order.getFreeDecember() + order.getFreeJune()) / 100, SimpleIdGenerator.generateId(), + order.getRemark(), 0, auditName, "退款商品" + order.getGoodsName()); + GoldTistV2.addCoinNew(order.getJwcode().toString(), 56, //退款永久-商品 + (double) (order.getPermanentGold()) / 100, SimpleIdGenerator.generateId(), + order.getRemark(), order.getPermanentGold(), auditName, "退款商品" + order.getGoodsName()); + GoldTistV2.addCoinNew(order.getJwcode().toString(), 57, //退款任务-商品 + (double) (order.getTaskGold()) / 100, SimpleIdGenerator.generateId(), + order.getRemark(), 0, auditName, "退款商品" + order.getGoodsName()); + } else { //0金币消耗,往erp传一条金币为空的记录 - GoldTistV2.addCoinRecordNew(String.valueOf(order.getJwcode()), order.getRemark(),auditName,order.getGoodsName()); + GoldTistV2.addCoinRecordNew(String.valueOf(order.getJwcode()), order.getRemark(), auditName, order.getGoodsName()); - } + } }//金币充值退款 - else if (oldOrder.getType()==0){ + else if (oldOrder.getType() == 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.getNowTaskGold().compareTo(BigDecimal.valueOf(Math.abs(order.getTaskGold()))) < 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.getNowTaskGold().compareTo(BigDecimal.valueOf(Math.abs(order.getTaskGold()))) < 0) { log.error("用户余额不足,无法退款"); throw new IllegalArgumentException("用户余额不足,无法退款"); } - int type = 1; //红包充值累计 + int type = 1; //红包充值累计 //额外扣金币抵扣红包 - if (order.getAuditStatus()==4){ + if (order.getAuditStatus() == 4) { // 检查用户余额是否足够抵扣红包差额 @@ -337,30 +344,31 @@ public class AuditServiceImpl implements AuditService { redService.updateRed(consumeUser); //link扣除已有红包 redService.consumeRed(linkId); - } - //link扣除已有红包 - else if (AuditContext.getRedCheckResult()!=null &&!AuditContext.getRedCheckResult().equals("old")){ - redService.consumeRed(linkId); } - else { + //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(); + 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)); + redMapper.update(order.getJwcode(), type, price.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); - if(order.getTaskGold()==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){ + (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, "退款金币充值");} + (double) (order.getTaskGold() + order.getPermanentGold()) / 100, SimpleIdGenerator.generateId(), + order.getRemark(), (double) order.getPermanentGold() / 100, auditName, "退款金币充值"); + } } @@ -374,7 +382,8 @@ public class AuditServiceImpl implements AuditService { } return true; - } + } + /* * 多条件查询充值订单列表 */ @@ -382,15 +391,16 @@ public class AuditServiceImpl implements AuditService { public PageInfo selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) { List markets = marketMapper.getMarketIds(rechargeAudit.getMarkets()); - if (markets.contains("9") || markets.contains("9999")){ - markets=null; + if (markets.contains("9") || markets.contains("9999")) { + markets = null; } rechargeAudit.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper List rechargeAudits = auditMapper.selectRechargeBy(pageNum, pageSize, rechargeAudit); - // rechargeAudit.setFreeGold(rechargeAudit.getFreeJune()+rechargeAudit.getFreeDecember()); + // rechargeAudit.setFreeGold(rechargeAudit.getFreeJune()+rechargeAudit.getFreeDecember()); return new PageInfo<>(rechargeAudits); } + /* 多条件查询退款订单 */ @@ -399,8 +409,8 @@ public class AuditServiceImpl implements AuditService { List markets = marketMapper.getMarketIds(refundAudit.getMarkets()); - if (markets.contains("9") || markets.contains("9999")){ - markets=null; + if (markets.contains("9") || markets.contains("9999")) { + markets = null; } refundAudit.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper @@ -409,6 +419,7 @@ public class AuditServiceImpl implements AuditService { //refundAudit.setFreeGold(refundAudit.getFreeJune()+refundAudit.getFreeDecember()); return new PageInfo<>(refundAudits); } + /* 充值审核金币合计数 */ @@ -419,13 +430,13 @@ public class AuditServiceImpl implements AuditService { //获取充值审核订单列表 List markets = marketMapper.getMarketIds(rechargeAudit.getMarkets()); - if (markets.contains("9") || markets.contains("9999")){ - markets=null; + if (markets.contains("9") || markets.contains("9999")) { + markets = null; } rechargeAudit.setMarkets(markets); List rechargeAudits = auditMapper.selectRechargeBy(1, 500000, rechargeAudit); // 初始化累加器 - int totalNum=0; + int totalNum = 0; int permanentGoldSum = 0; int freeGoldSum = 0; // 遍历消费记录并累加金币 @@ -435,8 +446,8 @@ public class AuditServiceImpl implements AuditService { permanentGoldSum += recharge.getPermanentGold(); } // 累加免费金币 - if (recharge.getFreeJune() != null||recharge.getFreeDecember() != null) { - freeGoldSum = freeGoldSum+recharge.getFreeJune()+recharge.getFreeDecember(); + if (recharge.getFreeJune() != null || recharge.getFreeDecember() != null) { + freeGoldSum = freeGoldSum + recharge.getFreeJune() + recharge.getFreeDecember(); } // 每遍历一条记录,总条数加1 @@ -458,13 +469,13 @@ public class AuditServiceImpl implements AuditService { //获取充值审核订单列表 List markets = marketMapper.getMarketIds(refundAudit.getMarkets()); - if (markets.contains("9") || markets.contains("9999")){ - markets=null; + if (markets.contains("9") || markets.contains("9999")) { + markets = null; } refundAudit.setMarkets(markets); List refundAudits = auditMapper.selectRefundBy(1, 500000, refundAudit); // 初始化累加器 - int totalNum=0; + int totalNum = 0; int permanentGoldSum = 0; int freeGoldSum = 0; int taskGoldSum = 0; @@ -475,12 +486,12 @@ public class AuditServiceImpl implements AuditService { permanentGoldSum += refund.getPermanentGold(); } // 累加免费金币 - if (refund.getFreeJune() != null||refund.getFreeDecember()!=null) { - freeGoldSum += refund.getFreeJune()+refund.getFreeDecember(); + if (refund.getFreeJune() != null || refund.getFreeDecember() != null) { + freeGoldSum += refund.getFreeJune() + refund.getFreeDecember(); } //累加任务金币 - if(refund.getTaskGold()!=null) - taskGoldSum+=refund.getTaskGold(); + if (refund.getTaskGold() != null) + taskGoldSum += refund.getTaskGold(); // 每遍历一条记录,总条数加1 totalNum++; @@ -492,6 +503,7 @@ public class AuditServiceImpl implements AuditService { gold.setTaskGolds(BigDecimal.valueOf(taskGoldSum)); return gold; } + public class AuditContext { private static final ThreadLocal FAIL_MSG = new ThreadLocal<>(); @@ -504,6 +516,7 @@ public class AuditServiceImpl implements AuditService { public static String getFailMsg() { return FAIL_MSG.get(); } + public static void setRedCheckResult(String result) { RED_CHECK_RESULT.set(result); } @@ -511,6 +524,7 @@ public class AuditServiceImpl implements AuditService { public static String getRedCheckResult() { return RED_CHECK_RESULT.get(); } + public static void clear() { FAIL_MSG.remove(); RED_CHECK_RESULT.remove();