You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
7.7 KiB

  1. package com.example.demo.serviceImpl.cash;
  2. import com.example.demo.Util.GoldTistV2;
  3. import com.example.demo.config.RabbitMQConfig;
  4. import com.example.demo.domain.entity.CashRecord;
  5. import com.example.demo.domain.entity.User;
  6. import com.example.demo.domain.entity.UserGoldRecord;
  7. import com.example.demo.domain.vo.cash.CashCollectionMessage;
  8. import com.example.demo.domain.vo.coin.Messages;
  9. import com.example.demo.mapper.cash.CashAuditMapper;
  10. import com.example.demo.mapper.cash.CashCollectionMapper;
  11. import com.example.demo.mapper.coin.AuditMapper;
  12. import com.example.demo.mapper.coin.RechargeMapper;
  13. import com.example.demo.service.cash.CashAuditService;
  14. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.math.BigDecimal;
  19. import java.time.LocalDate;
  20. import java.time.LocalDateTime;
  21. import java.time.ZoneOffset;
  22. import java.util.Date;
  23. import static net.sf.jsqlparser.parser.feature.Feature.update;
  24. /**
  25. * @program: gold-java
  26. * @ClassName CashAuditServiceImpl
  27. * @description: 处理收款订单的审核业务逻辑
  28. * @author: Ethan
  29. * @create: 202510-08 10:09
  30. * @Version 1.0
  31. **/
  32. @Service
  33. public class CashAuditServiceImpl implements CashAuditService {
  34. @Autowired
  35. private AuditMapper auditMapper;
  36. @Autowired
  37. private RechargeMapper rechargeMapper;
  38. @Autowired
  39. private CashCollectionMapper cashCollectionMapper;
  40. @Autowired
  41. private CashAuditMapper cashAuditMapper;
  42. @Autowired
  43. private RabbitTemplate rabbitTemplate;
  44. @Transactional
  45. @Override
  46. public boolean auditCollection(String token, Integer auditId, String orderCode, Integer action, String rejectReason) {
  47. CashRecord order = cashCollectionMapper.selectAuditByOrderCode(orderCode);
  48. if (order == null || order.getStatus() != 0
  49. ) {
  50. throw new IllegalArgumentException("订单不存在或已被审核");
  51. }
  52. CashRecord updateOrder = new CashRecord();
  53. //设置审核人
  54. updateOrder.setAuditId(auditId);
  55. //判断是通过还是驳回,更新审核状态
  56. updateOrder.setOrderCode(orderCode);
  57. String auditName = cashAuditMapper.getAuditName(auditId);
  58. if (action == 1) { //通过
  59. updateOrder.setStatus(1);
  60. if (order.getGoodsName().equals("金币充值")) {
  61. //往金币订单表加一条充值记录
  62. UserGoldRecord rechargeOrder = new UserGoldRecord();
  63. rechargeOrder.setOrderCode(orderCode.replaceFirst("^XJ_", "XJCZ_"));
  64. rechargeOrder.setJwcode(order.getJwcode());
  65. rechargeOrder.setActivity(order.getActivity());
  66. rechargeOrder.setPermanentGold(order.getPermanentGold());
  67. // 获取当前月份(1-12)
  68. int currentMonth = LocalDate.now().getMonthValue();
  69. // 根据当前月份设置对应字段
  70. if (currentMonth >= 1 && currentMonth <= 6) {
  71. // 1-6月:设置12月额度,6月保持默认值
  72. rechargeOrder.setFreeJune(0);
  73. rechargeOrder.setFreeDecember(order.getFreeGold());
  74. } else {
  75. // 7-12月:设置6月额度,12月保持默认值
  76. rechargeOrder.setFreeJune(order.getFreeGold());
  77. rechargeOrder.setFreeDecember(0);
  78. }
  79. rechargeOrder.setSumGold(order.getPermanentGold() + order.getFreeGold());
  80. rechargeOrder.setRateId(Integer.valueOf(order.getPaymentCurrency()));
  81. rechargeOrder.setMoney(order.getPaymentAmount().intValue());
  82. rechargeOrder.setRemark(order.getRemark());
  83. rechargeOrder.setVoucher(order.getVoucher());
  84. rechargeOrder.setPayPlatform("金币系统");
  85. rechargeOrder.setPayModel(order.getPayType());
  86. //把时间转换成Date
  87. Date date = Date.from(order.getPayTime().toInstant(ZoneOffset.ofHours(8)));
  88. rechargeOrder.setPayTime(date);
  89. rechargeOrder.setAdminId(order.getSubmitterId());
  90. rechargeOrder.setAuditId(auditId);
  91. rechargeOrder.setType((byte) 0);
  92. rechargeOrder.setAuditStatus(1);
  93. rechargeOrder.setCreateTime(new Date());
  94. rechargeMapper.add(rechargeOrder);
  95. //往ERP加一条充值数据
  96. GoldTistV2.addCoinNew(order.getJwcode().toString(), 64, //充值永久金币
  97. (double) (order.getPermanentGold()) / 100,
  98. order.getRemark(), (double) (order.getPermanentGold()) / 100, auditName, "金币充值");
  99. GoldTistV2.addCoinNew(order.getJwcode().toString(), 63, //充值免费
  100. (double) (order.getFreeGold()) / 100,
  101. order.getRemark(), 0, auditName, "金币充值");
  102. //修改用户余额,添加金币
  103. User user = new User();
  104. user.setJwcode(order.getJwcode());
  105. user.setSumConsumePermanent(BigDecimal.valueOf(order.getPermanentGold()));
  106. // 根据当前月份设置对应字段
  107. if (currentMonth >= 1 && currentMonth <= 6) {
  108. // 1-6月:设置12月额度,6月保持默认值
  109. user.setSumFreeJune(BigDecimal.valueOf(0));
  110. user.setSumFreeDecember(BigDecimal.valueOf(order.getFreeGold()));
  111. user.setCurrentFreeDecember(BigDecimal.valueOf(order.getFreeGold()));
  112. } else {
  113. // 7-12月:设置6月额度,12月保持默认值
  114. user.setSumFreeJune(BigDecimal.valueOf(order.getFreeGold()));
  115. user.setCurrentFreeJune(BigDecimal.valueOf(order.getFreeGold()));
  116. user.setSumFreeDecember(BigDecimal.valueOf(0));
  117. }
  118. user.setCurrentPermanentGold(BigDecimal.valueOf(order.getPermanentGold()));
  119. user.setRechargeNum(1); //充值次数加一
  120. auditMapper.updateUserGold(user);
  121. }
  122. } else if (action == 2) { //驳回
  123. updateOrder.setStatus(2);
  124. updateOrder.setRejectReason(rejectReason);
  125. }
  126. //更新订单
  127. cashAuditMapper.updateOrder(updateOrder);
  128. // 创建消息队列,用于发送审核结果通知
  129. Messages message = new Messages();
  130. message.setJwcode(order.getJwcode());
  131. message.setName(order.getName());
  132. message.setStatus(updateOrder.getStatus());
  133. message.setDesc(order.getJwcode() + action==1?"收款记录需补充手续费,前往填写":"现金收款申请已被驳回,前往查看驳回理");
  134. message.setTitle(action==1?"收款订单审核通过":"收款订单审核驳回");
  135. message.setType(1);
  136. message.setTypeId(order.getId());
  137. message.setMarket(Integer.valueOf(order.getMarket()));
  138. rabbitTemplate.convertAndSend(RabbitMQConfig.CASH_COLLECTION_EXCHANGE, "cash.collection.save", message);
  139. // 根据审核结果发送不同的消息
  140. if (action == 1) {
  141. // 发送审核通过消息
  142. rabbitTemplate.convertAndSend(
  143. RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
  144. "collection.audited",
  145. message
  146. );
  147. } else {
  148. // 发送审核驳回消息
  149. rabbitTemplate.convertAndSend(
  150. RabbitMQConfig.CASH_COLLECTION_EXCHANGE,
  151. "collection.rejected",
  152. message
  153. );
  154. }
  155. return true;
  156. }
  157. }