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.

231 lines
12 KiB

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