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.

188 lines
7.3 KiB

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
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
2 months ago
2 months ago
2 months ago
2 months 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.ConsumeUser;
  4. import com.example.demo.domain.vo.Gold;
  5. import com.example.demo.domain.vo.RefundUser;
  6. import com.example.demo.domain.vo.Result;
  7. import com.example.demo.mapper.ConsumeMapper;
  8. import com.example.demo.mapper.RefundMapper;
  9. import com.example.demo.mapper.UserMapper;
  10. import com.example.demo.service.RefundService;
  11. import com.github.pagehelper.PageHelper;
  12. import com.github.pagehelper.PageInfo;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.transaction.annotation.Transactional;
  16. import java.time.LocalDate;
  17. import java.time.LocalDateTime;
  18. import java.time.format.DateTimeFormatter;
  19. import java.util.ArrayList;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.Objects;
  23. import java.util.concurrent.atomic.AtomicInteger;
  24. import java.util.stream.Collectors;
  25. /**
  26. * @program: gold-java
  27. * @ClassName RefundServiceImpl
  28. * @description:
  29. * @author: Double
  30. * @create: 202506-27 11:50
  31. * @Version 1.0
  32. **/
  33. @Service
  34. public class RefundServiceImpl implements RefundService {
  35. @Autowired
  36. private RefundMapper refundMapper;
  37. @Autowired
  38. private ConsumeMapper consumeMapper;
  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. if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) {
  84. return Result.error("金币不能为空");
  85. }
  86. if (refundUser.getTaskGold() < 0 || refundUser.getFreeGold() < 0 || refundUser.getPermanentGold() < 0) {
  87. return Result.error("金币不能为负数");
  88. }
  89. UserGoldRecord userGoldRecord = new UserGoldRecord();
  90. String goodsNameWithOrder = refundUser.getGoodsName();
  91. String orderCode = "";
  92. //订单号生成
  93. if (goodsNameWithOrder != null && goodsNameWithOrder.contains("_")) {
  94. String[] parts = goodsNameWithOrder.split("_", 2);
  95. if (parts.length >= 2) {
  96. // 提取订单号(保留原始前缀)
  97. orderCode = parts[0]; // XF202506281545524400006580
  98. // 提取商品名(处理可能包含下划线的情况)
  99. String goodsName = parts[1]; // 商品A
  100. // 设置属性(添加退款前缀)
  101. userGoldRecord.setOrderCode("TK" + orderCode); // TKXF202506281545524400006580
  102. userGoldRecord.setGoodsName(goodsName); // 商品A
  103. }
  104. }
  105. userGoldRecord.setJwcode(refundUser.getJwcode());
  106. userGoldRecord.setRefundType(refundUser.getRefundType());
  107. userGoldRecord.setRefundModel(refundUser.getRefundModel());
  108. userGoldRecord.setPermanentGold(refundUser.getPermanentGold());
  109. // 获取当前月份(1-12)
  110. int currentMonth = LocalDate.now().getMonthValue();
  111. // 根据当前月份设置对应字段
  112. if (currentMonth >= 1 && currentMonth <= 6) {
  113. // 1-6月:设置6月额度,12月保持默认值
  114. userGoldRecord.setFreeJune(0);
  115. userGoldRecord.setFreeDecember(refundUser.getFreeGold());
  116. } else {
  117. // 7-12月:设置12月额度,6月保持默认值
  118. userGoldRecord.setFreeJune(refundUser.getFreeGold());
  119. userGoldRecord.setFreeDecember(0);
  120. }
  121. userGoldRecord.setTaskGold(refundUser.getTaskGold());
  122. userGoldRecord.setSumGold(refundUser.getSumGold());
  123. userGoldRecord.setPayPlatform("金币系统");
  124. userGoldRecord.setRemark(refundUser.getRemark());
  125. userGoldRecord.setAdminId(refundUser.getAdminId());
  126. userGoldRecord.setType((byte) 2);
  127. userGoldRecord.setAuditStatus(0);
  128. userGoldRecord.setCreateTime(new Date());
  129. List<ConsumeUser> list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode);
  130. if (list == null || list.isEmpty()) {
  131. return Result.error("该用户没有该订单号");
  132. }
  133. refundMapper.add(userGoldRecord);
  134. consumeMapper.updateIsRefund(orderCode);
  135. return Result.success();
  136. }
  137. @Override
  138. public List<String> getRefundType() {
  139. List<String> list = refundMapper.getRefundType();
  140. List<String> filteredList = list.stream()
  141. .filter(Objects::nonNull) // 过滤掉 null 值
  142. .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
  143. .collect(Collectors.toList());
  144. return filteredList;
  145. }
  146. @Override
  147. public List<RefundUser> selectGoods(Integer jwcode) {
  148. List<RefundUser> refundUsers = refundMapper.selectGoods(jwcode);
  149. List<RefundUser> list = new ArrayList<>();
  150. for (RefundUser record : refundUsers) {
  151. if (record == null) {
  152. continue;
  153. }
  154. String orderCode = record.getOrderCode() != null ? record.getOrderCode() : "无订单号";
  155. String goodsName = record.getGoodsName() != null ? record.getGoodsName() : "无商品名";
  156. // 拼接格式:订单号_商品名(例如:XF20250629_商品BC)
  157. String combined = orderCode + "_" + goodsName;
  158. RefundUser refundUser = new RefundUser();
  159. refundUser.setGoodsName(combined);
  160. refundUser.setSumGold(record.getPermanentGold() + record.getFreeGold() + record.getTaskGold());
  161. refundUser.setPermanentGold(record.getPermanentGold());
  162. refundUser.setFreeGold(record.getFreeGold());
  163. refundUser.setTaskGold(record.getTaskGold());
  164. list.add(refundUser);
  165. }
  166. return list;
  167. }
  168. }