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.

272 lines
13 KiB

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