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.

176 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
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
  1. package com.example.demo.serviceImpl;
  2. import com.example.demo.Util.GoldTistV2;
  3. import com.example.demo.domain.entity.User;
  4. import com.example.demo.domain.entity.UserGoldRecord;
  5. import com.example.demo.domain.vo.ConsumeUser;
  6. import com.example.demo.domain.vo.Gold;
  7. import com.example.demo.domain.vo.GoldUser;
  8. import com.example.demo.domain.vo.Result;
  9. import com.example.demo.mapper.ConsumeMapper;
  10. import com.example.demo.mapper.UserMapper;
  11. import com.example.demo.service.ConsumeService;
  12. import com.github.pagehelper.PageHelper;
  13. import com.github.pagehelper.PageInfo;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.math.BigDecimal;
  17. import java.time.LocalDate;
  18. import java.time.LocalDateTime;
  19. import java.time.format.DateTimeFormatter;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.Random;
  23. import java.util.concurrent.atomic.AtomicInteger;
  24. /**
  25. * @program: gold-java
  26. * @ClassName ConsumeServiceImpl
  27. * @description: 消费模块
  28. * @author: Double
  29. * @create: 202506-23 13:58
  30. * @Version 1.0
  31. **/
  32. @Service
  33. public class ConsumeServiceImpl implements ConsumeService {
  34. @Autowired
  35. private ConsumeMapper consumeMapper;
  36. @Autowired
  37. private UserMapper userMapper;
  38. //消耗明细
  39. @Override
  40. public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) {
  41. PageHelper.startPage(pageNum, pageSize);
  42. List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser);
  43. return new PageInfo<>(consumeUsers);
  44. }
  45. //消耗金币统计
  46. @Override
  47. public Gold statsGold(ConsumeUser consumeUser) {
  48. Gold gold = new Gold();
  49. List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
  50. // 初始化累加器
  51. int permanentGoldSum = 0;
  52. int freeGoldSum = 0;
  53. int taskGoldSum = 0;
  54. // 遍历消费记录并累加金币
  55. for (ConsumeUser user : consumeUsers) {
  56. // 累加永久金币
  57. if (user.getPermanentGold() != null) {
  58. permanentGoldSum += user.getPermanentGold();
  59. }
  60. // 累加免费金币
  61. if (user.getFreeGold() != null) {
  62. freeGoldSum += user.getFreeGold();
  63. }
  64. // 累加任务金币
  65. if (user.getTaskGold() != null) {
  66. taskGoldSum += user.getTaskGold();
  67. }
  68. }
  69. // 将累加结果设置到Gold对象
  70. gold.setPermanentGolds(permanentGoldSum);
  71. gold.setFreeGolds(freeGoldSum);
  72. gold.setTaskGolds(taskGoldSum);
  73. return gold;
  74. }
  75. //消耗明细筛选
  76. @Override
  77. public PageInfo<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) {
  78. PageHelper.startPage(pageNum, pageSize);
  79. List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
  80. return new PageInfo<>(consumeUsers);
  81. }
  82. //新增消耗
  83. @Override
  84. public Result add(ConsumeUser consumeUser) {
  85. if(consumeUser.getTaskGold()==null||consumeUser.getFreeGold()==null||consumeUser.getPermanentGold()==null){
  86. return Result.error("金币数量不能为空");
  87. }
  88. if(consumeUser.getTaskGold()<0||consumeUser.getFreeGold()<0||consumeUser.getPermanentGold()<0){
  89. return Result.error("金币不能为负数");
  90. }
  91. UserGoldRecord userGoldRecord = new UserGoldRecord();
  92. // 获取当前时间戳部分
  93. String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
  94. // 获取自增计数器部分(三位数,不足补零)
  95. AtomicInteger atomicInteger = new AtomicInteger(0);
  96. int count = atomicInteger.getAndUpdate(c -> (c >= 999) ? 0 : c + 1);
  97. String counterPart = String.format("%03d", count);
  98. //订单号生成
  99. userGoldRecord.setOrderCode("XF" + timestampPart + counterPart);
  100. userGoldRecord.setJwcode(consumeUser.getJwcode());
  101. userGoldRecord.setGoodsName(consumeUser.getGoodsName());
  102. userGoldRecord.setSumGold(-consumeUser.getSumGold());
  103. userGoldRecord.setPermanentGold(-consumeUser.getPermanentGold());
  104. // 获取当前月份(1-12)
  105. int currentMonth = LocalDate.now().getMonthValue();
  106. GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString());
  107. if (consumeUser.getFreeGold() > (gold.getNowFreeDecember() + gold.getNowFreeJune()) || consumeUser.getPermanentGold() > gold.getNowPermanentGold()
  108. || consumeUser.getTaskGold() > gold.getNowTaskGold()) {
  109. return Result.error("金币数量不足");
  110. }
  111. // 根据当前月份设置对应字段
  112. if (currentMonth >= 1 && currentMonth <= 6) {
  113. // 1-6月:设置6月额度,12月保持默认值
  114. if (consumeUser.getFreeGold() > gold.getNowFreeJune()) {
  115. userGoldRecord.setFreeJune(-gold.getNowFreeJune());
  116. userGoldRecord.setFreeDecember(-(consumeUser.getFreeGold() - gold.getNowFreeJune()));
  117. } else {
  118. userGoldRecord.setFreeJune(-consumeUser.getFreeGold());
  119. userGoldRecord.setFreeDecember(0);
  120. }
  121. } else {
  122. // 7-12月:设置12月额度,6月保持默认值
  123. if (consumeUser.getFreeGold() > gold.getNowFreeDecember()) {
  124. userGoldRecord.setFreeDecember(-gold.getNowFreeDecember());
  125. userGoldRecord.setFreeJune(-(consumeUser.getFreeGold() - gold.getNowFreeDecember()));
  126. } else {
  127. userGoldRecord.setFreeDecember(-consumeUser.getFreeGold());
  128. userGoldRecord.setFreeJune(0);
  129. }
  130. }
  131. userGoldRecord.setTaskGold(-consumeUser.getTaskGold());
  132. userGoldRecord.setRemark(consumeUser.getRemark());
  133. userGoldRecord.setType((byte) 1);
  134. userGoldRecord.setIsRefund((byte) 0);
  135. userGoldRecord.setPayPlatform("金币系统");
  136. userGoldRecord.setAdminId(consumeUser.getAdminId());
  137. userGoldRecord.setAuditStatus(1);
  138. userGoldRecord.setCreateTime(new Date());
  139. userGoldRecord.setPayTime(new Date());
  140. consumeMapper.add(userGoldRecord);
  141. User user = new User();
  142. user.setJwcode(userGoldRecord.getJwcode());
  143. user.setCurrentPermanentGold(gold.getNowPermanentGold() - consumeUser.getPermanentGold());
  144. user.setCurrentFreeJune(gold.getNowFreeJune() - userGoldRecord.getFreeJune());
  145. user.setCurrentFreeDecember(gold.getNowFreeDecember() - userGoldRecord.getFreeDecember());
  146. user.setCurrentTaskGold(gold.getNowTaskGold() - consumeUser.getTaskGold());
  147. user.setConsumeNum(gold.getConsumeNum() + 1);
  148. user.setSumConsume(consumeUser.getPermanentGold() + consumeUser.getFreeGold() + consumeUser.getTaskGold());
  149. userMapper.updateGold(user);
  150. if(consumeUser.getJwcode().equals(94226013)){
  151. GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
  152. (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) /100,
  153. userGoldRecord.getRemark(),((double) userGoldRecord.getPermanentGold() /100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName());
  154. }
  155. return Result.success();
  156. }
  157. }