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.

294 lines
14 KiB

8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
6 months ago
8 months ago
8 months ago
  1. package com.example.demo.serviceImpl.coin;
  2. import com.example.demo.config.RabbitMQConfig;
  3. import com.example.demo.domain.entity.UserGoldRecord;
  4. import com.example.demo.mapper.coin.*;
  5. import com.example.demo.service.coin.MarketService;
  6. import com.example.demo.service.coin.RefundService;
  7. import com.example.demo.Util.LanguageTranslationUtil;
  8. import com.github.pagehelper.PageHelper;
  9. import com.github.pagehelper.PageInfo;
  10. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import com.example.demo.domain.vo.coin.*;
  15. import java.math.BigDecimal;
  16. import java.time.LocalDate;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.List;
  20. import java.util.Objects;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @program: gold-java
  24. * @ClassName RefundServiceImpl
  25. * @description:
  26. * @author: Double
  27. * @create: 202506-27 11:50
  28. * @Version 1.0
  29. **/
  30. @Service
  31. public class RefundServiceImpl implements RefundService {
  32. @Autowired
  33. private RefundMapper refundMapper;
  34. @Autowired
  35. private ConsumeMapper consumeMapper;
  36. @Autowired
  37. private UserMapper userMapper;
  38. @Autowired
  39. private MarketMapper marketMapper;
  40. @Autowired
  41. private RechargeMapper rechargeMapper;
  42. @Autowired
  43. private LanguageTranslationUtil languageTranslationUtil;
  44. @Autowired
  45. private RabbitTemplate rabbitTemplate;
  46. //查找全部退款
  47. @Override
  48. public PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception {
  49. List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
  50. refundUser.setMarkets(markets);
  51. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  52. List<RefundUser> refundUsers = refundMapper.selectAll(refundUser);
  53. return new PageInfo<>(refundUsers);
  54. }
  55. //统计退款金额
  56. @Override
  57. public Gold statsGold(RefundUser refundUser) {
  58. List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
  59. if (markets.contains("9") || markets.contains("9999")) {
  60. markets = null;
  61. }
  62. refundUser.setMarkets(markets);
  63. Gold gold = refundMapper.sumGold(refundUser);
  64. return gold;
  65. }
  66. //查找筛选退款
  67. @Override
  68. public PageInfo<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception {
  69. List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
  70. if (markets.contains("9") || markets.contains("9999")) {
  71. markets = null;
  72. }
  73. refundUser.setMarkets(markets);
  74. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  75. List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
  76. return new PageInfo<>(refundUsers);
  77. }
  78. //添加退款记录
  79. @Transactional
  80. @Override
  81. public Result add(RefundUser refundUser, String lang) {
  82. if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) {
  83. String errorMsg = languageTranslationUtil.translate("金币不能为空", lang);
  84. return Result.error(errorMsg);
  85. }
  86. if (refundUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 ||
  87. refundUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 ||
  88. refundUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) {
  89. String errorMsg = languageTranslationUtil.translate("金币不能为负数", lang);
  90. return Result.error(errorMsg);
  91. }
  92. if (refundUser.getJwcode() < 10000000 || refundUser.getJwcode() > 99999999) {
  93. String errorMsg = languageTranslationUtil.translate("精网号位数小于8位或大于8位", lang);
  94. return Result.error(errorMsg);
  95. }
  96. GoldUser goldUser = userMapper.selectUser(refundUser.getJwcode().toString());
  97. if (goldUser == null) {
  98. String errorMsg = languageTranslationUtil.translate("用户不存在", lang);
  99. return Result.error(errorMsg);
  100. }
  101. UserGoldRecord userGoldRecord = new UserGoldRecord();
  102. if(refundUser.getOrderCode()==null|| refundUser.getOrderCode().isEmpty()){
  103. String errorMsg = languageTranslationUtil.translate("订单号不能为空", lang);
  104. return Result.error(errorMsg);
  105. }
  106. String goodsName = "";
  107. if(refundUser.getGoodsName()==null|| refundUser.getGoodsName().isEmpty()){
  108. goodsName = languageTranslationUtil.translate("空", lang);
  109. }else {
  110. goodsName = refundUser.getGoodsName();
  111. }
  112. String orderCode = refundUser.getOrderCode();
  113. userGoldRecord.setGoodsName(goodsName); // 商品A
  114. userGoldRecord.setOrderCode("TK_" + orderCode); // TKXF202506281545524400006580
  115. userGoldRecord.setJwcode(refundUser.getJwcode());
  116. userGoldRecord.setRefundType(refundUser.getRefundType());
  117. userGoldRecord.setRefundModel(refundUser.getRefundModel());
  118. // 获取当前月份(1-12)
  119. int currentMonth = LocalDate.now().getMonthValue();
  120. // 根据当前月份设置对应字段
  121. if(Objects.equals(refundUser.getRefundType(), "商品退款")){
  122. if (currentMonth >= 1 && currentMonth <= 6) {
  123. // 1-6月:设置6月额度,12月保持默认值
  124. userGoldRecord.setFreeJune(0);
  125. userGoldRecord.setFreeDecember(refundUser.getFreeGold().intValue());
  126. } else {
  127. // 7-12月:设置12月额度,6月保持默认值
  128. userGoldRecord.setFreeJune(refundUser.getFreeGold().intValue());
  129. userGoldRecord.setFreeDecember(0);
  130. }
  131. //信息输入
  132. userGoldRecord.setPermanentGold(refundUser.getPermanentGold().intValue());
  133. userGoldRecord.setTaskGold(refundUser.getTaskGold().intValue());
  134. userGoldRecord.setSumGold(refundUser.getSumGold().intValue());
  135. }else{
  136. GoldUser gold = userMapper.selectGold(refundUser.getJwcode().toString());
  137. if (refundUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0
  138. || refundUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0
  139. || refundUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) {
  140. String errorMsg = languageTranslationUtil.translate("金币数量不足", lang);
  141. return Result.error(errorMsg);
  142. }
  143. // 根据当前月份设置对应字段
  144. if (currentMonth >= 1 && currentMonth <= 6) {
  145. // 1-6月:设置6月额度,12月保持默认值
  146. if (refundUser.getFreeGold().compareTo(gold.getNowFreeJune()) > 0) {
  147. userGoldRecord.setFreeJune(-gold.getNowFreeJune().intValue());
  148. userGoldRecord.setFreeDecember(-(refundUser.getFreeGold().subtract(gold.getNowFreeJune())).intValue());
  149. } else {
  150. userGoldRecord.setFreeJune(-refundUser.getFreeGold().intValue());
  151. userGoldRecord.setFreeDecember(0);
  152. }
  153. } else {
  154. // 7-12月:设置12月额度,6月保持默认值
  155. if (refundUser.getFreeGold().compareTo(gold.getNowFreeDecember()) > 0) {
  156. userGoldRecord.setFreeDecember(-gold.getNowFreeDecember().intValue());
  157. userGoldRecord.setFreeJune(-(refundUser.getFreeGold().subtract(gold.getNowFreeDecember())).intValue());
  158. } else {
  159. userGoldRecord.setFreeDecember(-refundUser.getFreeGold().intValue());
  160. userGoldRecord.setFreeJune(0);
  161. }
  162. }
  163. //信息输入
  164. userGoldRecord.setPermanentGold(-refundUser.getPermanentGold().intValue());
  165. userGoldRecord.setTaskGold(-refundUser.getTaskGold().intValue());
  166. userGoldRecord.setSumGold(-refundUser.getSumGold().intValue());
  167. }
  168. userGoldRecord.setPayPlatform("金币系统");
  169. userGoldRecord.setRemark(refundUser.getRemark());
  170. if (refundUser.getLinkId() != null&&refundUser.getPrice()!=null){
  171. userGoldRecord.setPrice(refundUser.getPrice());
  172. userGoldRecord.setLinkId((refundUser.getLinkId()));}
  173. userGoldRecord.setAdminId(refundUser.getAdminId());
  174. userGoldRecord.setType((byte) 2);
  175. userGoldRecord.setAuditStatus(0);
  176. userGoldRecord.setCreateTime(new Date());
  177. userGoldRecord.setUpdateTime(new Date());
  178. List<ConsumeUser> list1 = consumeMapper.selectOrderCodeByJwcode(refundUser);
  179. List<RechargeUser> list2 = rechargeMapper.selectOrderCodeByJwcode(refundUser);
  180. if(Objects.equals(refundUser.getRefundType(), "商品退款")){
  181. //消费订单号校验
  182. if (list1 == null || list1.isEmpty()) {
  183. String errorMsg = languageTranslationUtil.translate("该用户没有该订单号", lang);
  184. return Result.error(errorMsg);
  185. } else if (list1.size() == 1) {
  186. ConsumeUser consumeUser = list1.getFirst();
  187. if (consumeUser.getIsRefund().equals(1)) {
  188. String errorMsg = languageTranslationUtil.translate("该订单已被退款或待审核", lang);
  189. return Result.error(errorMsg);
  190. }
  191. } else {
  192. String errorMsg = languageTranslationUtil.translate("订单重复", lang);
  193. return Result.error(errorMsg);
  194. }
  195. }else{
  196. //充值订单号校验
  197. if (list2 == null || list2.isEmpty()) {
  198. String errorMsg = languageTranslationUtil.translate("该用户没有该订单号", lang);
  199. return Result.error(errorMsg);
  200. } else if (list2.size() == 1) {
  201. RechargeUser rechargeUser = list2.getFirst();
  202. if (rechargeUser.getIsRefund().equals(1)) {
  203. String errorMsg = languageTranslationUtil.translate("该订单已被退款或待审核", lang);
  204. return Result.error(errorMsg);
  205. }
  206. } else {
  207. String errorMsg = languageTranslationUtil.translate("订单重复", lang);
  208. return Result.error(errorMsg);
  209. }
  210. }
  211. refundMapper.add(userGoldRecord);
  212. consumeMapper.updateIsRefund(orderCode);
  213. // 发送金币退款创建消息
  214. Messages message = new Messages();
  215. message.setJwcode(refundUser.getJwcode());
  216. message.setName(goldUser.getName());
  217. message.setStatus(10);
  218. message.setDesc("的金币退款申请待审核,前往确认");
  219. message.setTitle("金币管理--金币审核--退款审核");
  220. message.setType(1);
  221. message.setTypeId(userGoldRecord.getId());
  222. message.setMarket(Integer.valueOf(goldUser.getMarket()));
  223. String marketName = marketMapper.getMarketNameById(String.valueOf(message.getMarket()));
  224. message.setMarketName(marketName);
  225. message.setQueryId(13);
  226. // 发送到RabbitMQ
  227. rabbitTemplate.convertAndSend(RabbitMQConfig.COIN_REFUND_EXCHANGE, "coin.refund.save", message);
  228. String successMsg = languageTranslationUtil.translate("操作成功", lang);
  229. return Result.success(successMsg);
  230. }
  231. //获取退款类型
  232. @Override
  233. public List<String> getRefundType(String lang) {
  234. List<String> list = refundMapper.getRefundType();
  235. List<String> filteredList = list.stream()
  236. .filter(Objects::nonNull) // 过滤掉 null 值
  237. .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
  238. .map(type -> languageTranslationUtil.translate(type, lang)) // 翻译每个类型
  239. .collect(Collectors.toList());
  240. return filteredList;
  241. }
  242. //查找退款商品
  243. @Override
  244. public List<RefundUser> selectGoods(RefundUser refundUser, String lang) {
  245. List<RefundUser> refundUsers = refundMapper.selectGoods(refundUser);
  246. List<RefundUser> list = new ArrayList<>();
  247. for (RefundUser record : refundUsers) {
  248. if (record == null) {
  249. continue;
  250. }
  251. String orderCode = record.getOrderCode() != null ? record.getOrderCode() : languageTranslationUtil.translate("无订单号", lang);
  252. String goodsName = record.getGoodsName() != null ? record.getGoodsName() : languageTranslationUtil.translate("无商品名", lang);
  253. BigDecimal permanentGold = record.getPermanentGold() != null ? record.getPermanentGold() : BigDecimal.ZERO;
  254. BigDecimal freeGold = record.getFreeGold() != null ? record.getFreeGold() : BigDecimal.ZERO;
  255. BigDecimal taskGold = record.getTaskGold() != null ? record.getTaskGold() : BigDecimal.ZERO;
  256. RefundUser newRefundUser = new RefundUser();
  257. newRefundUser.setOrderCode(orderCode);
  258. newRefundUser.setGoodsName(goodsName);
  259. newRefundUser.setSumGold(permanentGold.add(freeGold).add(taskGold));
  260. newRefundUser.setPermanentGold(record.getPermanentGold());
  261. newRefundUser.setFreeGold(record.getFreeGold());
  262. newRefundUser.setTaskGold(record.getTaskGold());
  263. newRefundUser.setIsRefund(record.getIsRefund());
  264. newRefundUser.setType(record.getType());
  265. list.add(newRefundUser);
  266. }
  267. return list;
  268. }
  269. }