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.

194 lines
7.8 KiB

3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
2 months ago
3 months ago
  1. package com.example.demo.serviceImpl.coin;
  2. import com.example.demo.domain.entity.UserGoldRecord;
  3. import com.example.demo.mapper.coin.ConsumeMapper;
  4. import com.example.demo.mapper.coin.MarketMapper;
  5. import com.example.demo.mapper.coin.RefundMapper;
  6. import com.example.demo.mapper.coin.UserMapper;
  7. import com.example.demo.service.coin.MarketService;
  8. import com.example.demo.service.coin.RefundService;
  9. import com.github.pagehelper.PageHelper;
  10. import com.github.pagehelper.PageInfo;
  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. //查找全部退款
  41. @Override
  42. public PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception {
  43. List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
  44. refundUser.setMarkets(markets);
  45. PageHelper.startPage(pageNum, pageSize);
  46. List<RefundUser> refundUsers = refundMapper.selectAll(refundUser);
  47. return new PageInfo<>(refundUsers);
  48. }
  49. //统计退款金额
  50. @Override
  51. public Gold statsGold(RefundUser refundUser) {
  52. List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
  53. if (markets.contains("9") || markets.contains("9999")) {
  54. markets = null;
  55. }
  56. refundUser.setMarkets(markets);
  57. Gold gold = refundMapper.sumGold(refundUser);
  58. return gold;
  59. }
  60. //查找筛选退款
  61. @Override
  62. public PageInfo<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception {
  63. List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets());
  64. if (markets.contains("9") || markets.contains("9999")) {
  65. markets = null;
  66. }
  67. refundUser.setMarkets(markets);
  68. PageHelper.startPage(pageNum, pageSize);
  69. List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
  70. return new PageInfo<>(refundUsers);
  71. }
  72. //添加退款记录
  73. @Transactional
  74. @Override
  75. public Result add(RefundUser refundUser) {
  76. if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) {
  77. return Result.error("金币不能为空");
  78. }
  79. if (refundUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 ||
  80. refundUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 ||
  81. refundUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) {
  82. return Result.error("金币不能为负数");
  83. }
  84. if (refundUser.getJwcode() < 10000000 || refundUser.getJwcode() > 99999999) {
  85. return Result.error("精网号位数小于8位或大于8位");
  86. }
  87. GoldUser goldUser = userMapper.selectUser(refundUser.getJwcode().toString());
  88. if (goldUser == null) {
  89. return Result.error("用户不存在");
  90. }
  91. UserGoldRecord userGoldRecord = new UserGoldRecord();
  92. if(refundUser.getGoodsName()==null|| refundUser.getGoodsName().isEmpty()){
  93. return Result.error("商品名称不能为空");
  94. }
  95. if(refundUser.getOrderCode()==null|| refundUser.getOrderCode().isEmpty()){
  96. return Result.error("订单号不能为空");
  97. }
  98. String goodsName = refundUser.getGoodsName();
  99. String orderCode = refundUser.getOrderCode();
  100. userGoldRecord.setGoodsName(goodsName); // 商品A
  101. userGoldRecord.setOrderCode("TK_" + orderCode); // TKXF202506281545524400006580
  102. userGoldRecord.setJwcode(refundUser.getJwcode());
  103. userGoldRecord.setRefundType(refundUser.getRefundType());
  104. userGoldRecord.setRefundModel(refundUser.getRefundModel());
  105. userGoldRecord.setPermanentGold(refundUser.getPermanentGold().intValue());
  106. // 获取当前月份(1-12)
  107. int currentMonth = LocalDate.now().getMonthValue();
  108. // 根据当前月份设置对应字段
  109. if (currentMonth >= 1 && currentMonth <= 6) {
  110. // 1-6月:设置6月额度,12月保持默认值
  111. userGoldRecord.setFreeJune(0);
  112. userGoldRecord.setFreeDecember(refundUser.getFreeGold().intValue());
  113. } else {
  114. // 7-12月:设置12月额度,6月保持默认值
  115. userGoldRecord.setFreeJune(refundUser.getFreeGold().intValue());
  116. userGoldRecord.setFreeDecember(0);
  117. }
  118. //信息输入
  119. userGoldRecord.setTaskGold(refundUser.getTaskGold().intValue());
  120. userGoldRecord.setSumGold(refundUser.getSumGold().intValue());
  121. userGoldRecord.setPayPlatform("金币系统");
  122. userGoldRecord.setRemark(refundUser.getRemark());
  123. userGoldRecord.setAdminId(refundUser.getAdminId());
  124. userGoldRecord.setType((byte) 2);
  125. userGoldRecord.setAuditStatus(0);
  126. userGoldRecord.setCreateTime(new Date());
  127. List<ConsumeUser> list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode);
  128. //消费订单号校验
  129. if (list == null || list.isEmpty()) {
  130. return Result.error("该用户没有该订单号");
  131. } else if (list.size() == 1) {
  132. ConsumeUser consumeUser = list.getFirst();
  133. if (consumeUser.getIsRefund().equals(1)) {
  134. return Result.error("该订单已被退款");
  135. }
  136. } else {
  137. return Result.error("消费订单重复");
  138. }
  139. refundMapper.add(userGoldRecord);
  140. consumeMapper.updateIsRefund(orderCode);
  141. return Result.success();
  142. }
  143. //获取退款类型
  144. @Override
  145. public List<String> getRefundType() {
  146. List<String> list = refundMapper.getRefundType();
  147. List<String> filteredList = list.stream()
  148. .filter(Objects::nonNull) // 过滤掉 null 值
  149. .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
  150. .collect(Collectors.toList());
  151. return filteredList;
  152. }
  153. //查找退款商品
  154. @Override
  155. public List<RefundUser> selectGoods(Integer jwcode) {
  156. List<RefundUser> refundUsers = refundMapper.selectGoods(jwcode);
  157. List<RefundUser> list = new ArrayList<>();
  158. for (RefundUser record : refundUsers) {
  159. if (record == null) {
  160. continue;
  161. }
  162. String orderCode = record.getOrderCode() != null ? record.getOrderCode() : "无订单号";
  163. String goodsName = record.getGoodsName() != null ? record.getGoodsName() : "无商品名";
  164. // 拼接格式:订单号_商品名(例如:XF20250629_商品BC)
  165. String combined = orderCode + "_" + goodsName;
  166. RefundUser refundUser = new RefundUser();
  167. refundUser.setOrderCode(orderCode);
  168. refundUser.setGoodsName(goodsName);
  169. refundUser.setSumGold(record.getPermanentGold().add(record.getFreeGold()).add(record.getTaskGold()));
  170. refundUser.setPermanentGold(record.getPermanentGold());
  171. refundUser.setFreeGold(record.getFreeGold());
  172. refundUser.setTaskGold(record.getTaskGold());
  173. list.add(refundUser);
  174. }
  175. return list;
  176. }
  177. }