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.

212 lines
8.0 KiB

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