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.

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