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.

203 lines
7.8 KiB

2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
1 month ago
2 months ago
2 months ago
2 months ago
1 month ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
1 month ago
1 month ago
1 month ago
2 months ago
2 months ago
1 month ago
2 months ago
1 month ago
2 months ago
  1. package com.example.demo.serviceImpl;
  2. import com.example.demo.domain.entity.UserGoldRecord;
  3. import com.example.demo.domain.vo.*;
  4. import com.example.demo.mapper.ConsumeMapper;
  5. import com.example.demo.mapper.RefundMapper;
  6. import com.example.demo.mapper.UserMapper;
  7. import com.example.demo.service.RefundService;
  8. import com.github.pagehelper.PageHelper;
  9. import com.github.pagehelper.PageInfo;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import java.io.Console;
  14. import java.time.LocalDate;
  15. import java.time.LocalDateTime;
  16. import java.time.format.DateTimeFormatter;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.List;
  20. import java.util.Objects;
  21. import java.util.concurrent.atomic.AtomicInteger;
  22. import java.util.stream.Collectors;
  23. /**
  24. * @program: gold-java
  25. * @ClassName RefundServiceImpl
  26. * @description:
  27. * @author: Double
  28. * @create: 202506-27 11:50
  29. * @Version 1.0
  30. **/
  31. @Service
  32. public class RefundServiceImpl implements RefundService {
  33. @Autowired
  34. private RefundMapper refundMapper;
  35. @Autowired
  36. private ConsumeMapper consumeMapper;
  37. @Autowired
  38. private UserMapper userMapper;
  39. @Override
  40. public PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) {
  41. PageHelper.startPage(pageNum, pageSize);
  42. List<RefundUser> refundUsers = refundMapper.selectAll(refundUser);
  43. return new PageInfo<>(refundUsers);
  44. }
  45. @Override
  46. public Gold statsGold(RefundUser refundUser) {
  47. Gold gold = new Gold();
  48. List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
  49. // 初始化累加器
  50. int permanentGoldSum = 0;
  51. int freeGoldSum = 0;
  52. int taskGoldSum = 0;
  53. // 遍历推开记录并累加金币
  54. for (RefundUser user : refundUsers) {
  55. // 累加永久金币
  56. if (user.getPermanentGold() != null) {
  57. permanentGoldSum += user.getPermanentGold();
  58. }
  59. // 累加免费金币
  60. if (user.getFreeGold() != null) {
  61. freeGoldSum += user.getFreeGold();
  62. }
  63. // 累加任务金币
  64. if (user.getTaskGold() != null) {
  65. taskGoldSum += user.getTaskGold();
  66. }
  67. }
  68. // 将累加结果设置到Gold对象
  69. gold.setPermanentGolds(permanentGoldSum);
  70. gold.setFreeGolds(freeGoldSum);
  71. gold.setTaskGolds(taskGoldSum);
  72. return gold;
  73. }
  74. @Override
  75. public PageInfo<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser) {
  76. PageHelper.startPage(pageNum, pageSize);
  77. List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
  78. return new PageInfo<>(refundUsers);
  79. }
  80. @Transactional
  81. @Override
  82. public Result add(RefundUser refundUser) {
  83. System.out.println("11111111111111111111");
  84. if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) {
  85. return Result.error("金币不能为空");
  86. }
  87. if (refundUser.getTaskGold() < 0 || refundUser.getFreeGold() < 0 || refundUser.getPermanentGold() < 0) {
  88. return Result.error("金币不能为负数");
  89. }
  90. GoldUser goldUser = userMapper.selectUser(refundUser.getJwcode().toString());
  91. if(goldUser==null){
  92. return Result.error("用户不存在");
  93. }
  94. UserGoldRecord userGoldRecord = new UserGoldRecord();
  95. String goodsNameWithOrder = refundUser.getGoodsName();
  96. String orderCode = "";
  97. //订单号生成
  98. if (goodsNameWithOrder != null && goodsNameWithOrder.contains("_")) {
  99. String[] parts = goodsNameWithOrder.split("_", 2);
  100. if (parts.length >= 2) {
  101. // 提取订单号(保留原始前缀)
  102. orderCode = parts[0]; // XF202506281545524400006580
  103. // 提取商品名(处理可能包含下划线的情况)
  104. String goodsName = parts[1]; // 商品A
  105. // 设置属性(添加退款前缀)
  106. userGoldRecord.setOrderCode("TK" + orderCode); // TKXF202506281545524400006580
  107. userGoldRecord.setGoodsName(goodsName); // 商品A
  108. }
  109. }
  110. userGoldRecord.setJwcode(refundUser.getJwcode());
  111. userGoldRecord.setRefundType(refundUser.getRefundType());
  112. userGoldRecord.setRefundModel(refundUser.getRefundModel());
  113. userGoldRecord.setPermanentGold(refundUser.getPermanentGold());
  114. // 获取当前月份(1-12)
  115. int currentMonth = LocalDate.now().getMonthValue();
  116. // 根据当前月份设置对应字段
  117. if (currentMonth >= 1 && currentMonth <= 6) {
  118. // 1-6月:设置6月额度,12月保持默认值
  119. userGoldRecord.setFreeJune(0);
  120. userGoldRecord.setFreeDecember(refundUser.getFreeGold());
  121. } else {
  122. // 7-12月:设置12月额度,6月保持默认值
  123. userGoldRecord.setFreeJune(refundUser.getFreeGold());
  124. userGoldRecord.setFreeDecember(0);
  125. }
  126. userGoldRecord.setTaskGold(refundUser.getTaskGold());
  127. userGoldRecord.setSumGold(refundUser.getSumGold());
  128. userGoldRecord.setPayPlatform("金币系统");
  129. userGoldRecord.setRemark(refundUser.getRemark());
  130. userGoldRecord.setAdminId(refundUser.getAdminId());
  131. userGoldRecord.setType((byte) 2);
  132. userGoldRecord.setAuditStatus(0);
  133. userGoldRecord.setCreateTime(new Date());
  134. List<ConsumeUser> list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode);
  135. if (list == null || list.isEmpty()) {
  136. return Result.error("该用户没有该订单号");
  137. }else if(list.size()==1){
  138. ConsumeUser consumeUser = list.getFirst();
  139. if(consumeUser.getIsRefund().equals(1))
  140. {
  141. return Result.error("该订单已被退款");
  142. }
  143. }else {
  144. return Result.error("消费订单重复");
  145. }
  146. refundMapper.add(userGoldRecord);
  147. consumeMapper.updateIsRefund(orderCode);
  148. return Result.success();
  149. }
  150. @Override
  151. public List<String> getRefundType() {
  152. List<String> list = refundMapper.getRefundType();
  153. List<String> filteredList = list.stream()
  154. .filter(Objects::nonNull) // 过滤掉 null 值
  155. .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
  156. .collect(Collectors.toList());
  157. return filteredList;
  158. }
  159. @Override
  160. public List<RefundUser> selectGoods(Integer jwcode) {
  161. List<RefundUser> refundUsers = refundMapper.selectGoods(jwcode);
  162. List<RefundUser> list = new ArrayList<>();
  163. for (RefundUser record : refundUsers) {
  164. if (record == null) {
  165. continue;
  166. }
  167. String orderCode = record.getOrderCode() != null ? record.getOrderCode() : "无订单号";
  168. String goodsName = record.getGoodsName() != null ? record.getGoodsName() : "无商品名";
  169. // 拼接格式:订单号_商品名(例如:XF20250629_商品BC)
  170. String combined = orderCode + "_" + goodsName;
  171. RefundUser refundUser = new RefundUser();
  172. refundUser.setGoodsName(combined);
  173. refundUser.setSumGold(record.getPermanentGold() + record.getFreeGold() + record.getTaskGold());
  174. refundUser.setPermanentGold(record.getPermanentGold());
  175. refundUser.setFreeGold(record.getFreeGold());
  176. refundUser.setTaskGold(record.getTaskGold());
  177. list.add(refundUser);
  178. }
  179. return list;
  180. }
  181. }