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.

182 lines
7.7 KiB

2 months ago
2 months ago
2 months ago
4 weeks 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
4 weeks ago
1 month ago
1 month ago
1 month ago
2 months ago
1 month 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
4 weeks 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.AdminService;
  12. import com.example.demo.service.ConsumeService;
  13. import com.example.demo.service.GeneralService;
  14. import com.github.pagehelper.PageHelper;
  15. import com.github.pagehelper.PageInfo;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import java.math.BigDecimal;
  20. import java.time.LocalDate;
  21. import java.time.LocalDateTime;
  22. import java.time.format.DateTimeFormatter;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.Random;
  26. import java.util.concurrent.atomic.AtomicInteger;
  27. /**
  28. * @program: gold-java
  29. * @ClassName ConsumeServiceImpl
  30. * @description: 消费模块
  31. * @author: Double
  32. * @create: 202506-23 13:58
  33. * @Version 1.0
  34. **/
  35. @Service
  36. public class ConsumeServiceImpl implements ConsumeService {
  37. @Autowired
  38. private ConsumeMapper consumeMapper;
  39. @Autowired
  40. private UserMapper userMapper;
  41. //消耗明细
  42. @Override
  43. public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser){
  44. PageHelper.startPage(pageNum, pageSize);
  45. List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser);
  46. return new PageInfo<>(consumeUsers);
  47. }
  48. //消耗金币统计
  49. @Override
  50. public Gold statsGold(ConsumeUser consumeUser) {
  51. Gold gold = new Gold();
  52. List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
  53. // 初始化累加器
  54. int permanentGoldSum = 0;
  55. int freeGoldSum = 0;
  56. int taskGoldSum = 0;
  57. // 遍历消费记录并累加金币
  58. for (ConsumeUser user : consumeUsers) {
  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<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) {
  81. PageHelper.startPage(pageNum, pageSize);
  82. List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
  83. return new PageInfo<>(consumeUsers);
  84. }
  85. //新增消耗
  86. @Transactional
  87. @Override
  88. public Result add(ConsumeUser consumeUser) {
  89. if (consumeUser.getTaskGold() == null || consumeUser.getFreeGold() == null || consumeUser.getPermanentGold() == null) {
  90. return Result.error("金币数量不能为空");
  91. }
  92. if (consumeUser.getTaskGold() < 0 || consumeUser.getFreeGold() < 0 || consumeUser.getPermanentGold() < 0) {
  93. return Result.error("金币不能为负数");
  94. }
  95. GoldUser goldUser = userMapper.selectUser(consumeUser.getJwcode().toString());
  96. if (goldUser == null) {
  97. return Result.error("用户不存在");
  98. }
  99. UserGoldRecord userGoldRecord = new UserGoldRecord();
  100. // 获取当前时间戳部分
  101. String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
  102. // 获取自增计数器部分(三位数,不足补零)
  103. Random random = new Random();
  104. int randomNumber = random.nextInt(900) + 100;
  105. //订单号生成
  106. userGoldRecord.setOrderCode("XF" + timestampPart + randomNumber);
  107. userGoldRecord.setJwcode(consumeUser.getJwcode());
  108. userGoldRecord.setGoodsName(consumeUser.getGoodsName());
  109. userGoldRecord.setSumGold(-consumeUser.getSumGold());
  110. userGoldRecord.setPermanentGold(-consumeUser.getPermanentGold());
  111. // 获取当前月份(1-12)
  112. int currentMonth = LocalDate.now().getMonthValue();
  113. GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString());
  114. if (consumeUser.getFreeGold() > (gold.getNowFreeDecember() + gold.getNowFreeJune()) || consumeUser.getPermanentGold() > gold.getNowPermanentGold()
  115. || consumeUser.getTaskGold() > gold.getNowTaskGold()) {
  116. return Result.error("金币数量不足");
  117. }
  118. // 根据当前月份设置对应字段
  119. if (currentMonth >= 1 && currentMonth <= 6) {
  120. // 1-6月:设置6月额度,12月保持默认值
  121. if (consumeUser.getFreeGold() > gold.getNowFreeJune()) {
  122. userGoldRecord.setFreeJune(-gold.getNowFreeJune());
  123. userGoldRecord.setFreeDecember(-(consumeUser.getFreeGold() - gold.getNowFreeJune()));
  124. } else {
  125. userGoldRecord.setFreeJune(-consumeUser.getFreeGold());
  126. userGoldRecord.setFreeDecember(0);
  127. }
  128. } else {
  129. // 7-12月:设置12月额度,6月保持默认值
  130. if (consumeUser.getFreeGold() > gold.getNowFreeDecember()) {
  131. userGoldRecord.setFreeDecember(-gold.getNowFreeDecember());
  132. userGoldRecord.setFreeJune(-(consumeUser.getFreeGold() - gold.getNowFreeDecember()));
  133. } else {
  134. userGoldRecord.setFreeDecember(-consumeUser.getFreeGold());
  135. userGoldRecord.setFreeJune(0);
  136. }
  137. }
  138. //信息输入
  139. userGoldRecord.setTaskGold(-consumeUser.getTaskGold());
  140. userGoldRecord.setRemark(consumeUser.getRemark());
  141. userGoldRecord.setType((byte) 1);
  142. userGoldRecord.setIsRefund((byte) 0);
  143. userGoldRecord.setPayPlatform("金币系统");
  144. userGoldRecord.setAdminId(consumeUser.getAdminId());
  145. userGoldRecord.setAuditStatus(1);
  146. userGoldRecord.setCreateTime(new Date());
  147. userGoldRecord.setPayTime(new Date());
  148. consumeMapper.add(userGoldRecord);
  149. consumeMapper.updateUserGold(userGoldRecord);
  150. User user = new User();
  151. user.setJwcode(userGoldRecord.getJwcode());
  152. user.setCurrentPermanentGold(gold.getNowPermanentGold() - consumeUser.getPermanentGold());
  153. user.setCurrentFreeJune(gold.getNowFreeJune() + userGoldRecord.getFreeJune());
  154. user.setCurrentFreeDecember(gold.getNowFreeDecember() + userGoldRecord.getFreeDecember());
  155. user.setCurrentTaskGold(gold.getNowTaskGold() - consumeUser.getTaskGold());
  156. user.setConsumeNum(gold.getConsumeNum() + 1);
  157. user.setSumConsume(-(consumeUser.getPermanentGold() + consumeUser.getFreeGold() + consumeUser.getTaskGold()));
  158. userMapper.updateGold(user);
  159. // if(consumeUser.getJwcode().equals(94226013)){
  160. GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
  161. (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100,
  162. userGoldRecord.getRemark(), ((double) userGoldRecord.getPermanentGold() / 100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName());
  163. // }
  164. return Result.success();
  165. }
  166. }