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.

203 lines
9.0 KiB

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
4 weeks ago
2 months ago
2 months ago
  1. package com.example.demo.serviceImpl.coin;
  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.coin.ConsumeUser;
  6. import com.example.demo.domain.vo.coin.Gold;
  7. import com.example.demo.domain.vo.coin.GoldUser;
  8. import com.example.demo.domain.vo.coin.Result;
  9. import com.example.demo.mapper.coin.ConsumeMapper;
  10. import com.example.demo.mapper.coin.MarketMapper;
  11. import com.example.demo.mapper.coin.UserMapper;
  12. import com.example.demo.service.coin.ConsumeService;
  13. import com.example.demo.service.coin.MarketService;
  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. /**
  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 MarketMapper marketMapper;
  42. //消耗明细
  43. @Override
  44. public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser){
  45. //获取市场id
  46. List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
  47. consumeUser.setMarkets(markets);
  48. PageHelper.startPage(pageNum, pageSize);
  49. List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser);
  50. return new PageInfo<>(consumeUsers);
  51. }
  52. //消耗金币统计
  53. @Override
  54. public Gold statsGold(ConsumeUser consumeUser) {
  55. //获取市场id
  56. List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
  57. if (markets.contains("9") || markets.contains("9999")){
  58. markets=null;
  59. }
  60. consumeUser.setMarkets(markets);
  61. Gold gold = new Gold();
  62. List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
  63. // 初始化累加器
  64. BigDecimal permanentGoldSum = BigDecimal.valueOf(0);
  65. BigDecimal freeGoldSum = BigDecimal.valueOf(0);
  66. BigDecimal taskGoldSum = BigDecimal.valueOf(0);
  67. // 遍历消费记录并累加金币
  68. for (ConsumeUser user : consumeUsers) {
  69. // 累加永久金币
  70. if (user.getPermanentGold() != null) {
  71. permanentGoldSum = permanentGoldSum.add(user.getPermanentGold());
  72. }
  73. // 累加免费金币
  74. if (user.getFreeGold() != null) {
  75. freeGoldSum = freeGoldSum.add(user.getFreeGold());
  76. }
  77. // 累加任务金币
  78. if (user.getTaskGold() != null) {
  79. taskGoldSum = taskGoldSum.add(user.getTaskGold());
  80. }
  81. }
  82. // 将累加结果设置到Gold对象
  83. gold.setPermanentGolds(permanentGoldSum);
  84. gold.setFreeGolds(freeGoldSum);
  85. gold.setTaskGolds(taskGoldSum);
  86. return gold;
  87. }
  88. //消耗明细筛选
  89. @Override
  90. public PageInfo<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) {
  91. //获取市场id
  92. List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
  93. if (markets.contains("9") || markets.contains("9999")){
  94. markets=null;
  95. }
  96. consumeUser.setMarkets(markets);
  97. PageHelper.startPage(pageNum, pageSize);
  98. List<ConsumeUser> consumeUsers = consumeMapper.selectBy(consumeUser);
  99. return new PageInfo<>(consumeUsers);
  100. }
  101. //新增消耗
  102. @Transactional
  103. @Override
  104. public Result add(ConsumeUser consumeUser) {
  105. if (consumeUser.getTaskGold() == null || consumeUser.getFreeGold() == null || consumeUser.getPermanentGold() == null) {
  106. return Result.error("金币数量不能为空");
  107. }
  108. if (consumeUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) {
  109. return Result.error("金币不能为负数");
  110. }
  111. if(consumeUser.getJwcode()<10000000||consumeUser.getJwcode()>99999999)
  112. {
  113. return Result.error("精网号位数小于8位或大于8位");
  114. }
  115. GoldUser goldUser = userMapper.selectUser(consumeUser.getJwcode().toString());
  116. if (goldUser == null) {
  117. return Result.error("用户不存在");
  118. }
  119. UserGoldRecord userGoldRecord = new UserGoldRecord();
  120. // 获取当前时间戳部分
  121. String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
  122. // 获取自增计数器部分(三位数,不足补零)
  123. Random random = new Random();
  124. int randomNumber = random.nextInt(900) + 100;
  125. //订单号生成
  126. userGoldRecord.setOrderCode("XF" + timestampPart + randomNumber);
  127. userGoldRecord.setJwcode(consumeUser.getJwcode());
  128. userGoldRecord.setGoodsName(consumeUser.getGoodsName());
  129. userGoldRecord.setSumGold(-consumeUser.getSumGold().intValue());
  130. userGoldRecord.setPermanentGold(-consumeUser.getPermanentGold().intValue());
  131. // 获取当前月份(1-12)
  132. int currentMonth = LocalDate.now().getMonthValue();
  133. GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString());
  134. if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0
  135. || consumeUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0
  136. || consumeUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) {
  137. return Result.error("金币数量不足");
  138. }
  139. // 根据当前月份设置对应字段
  140. if (currentMonth >= 1 && currentMonth <= 6) {
  141. // 1-6月:设置6月额度,12月保持默认值
  142. if (consumeUser.getFreeGold().compareTo(gold.getNowFreeJune()) > 0) {
  143. userGoldRecord.setFreeJune(-gold.getNowFreeJune().intValue());
  144. userGoldRecord.setFreeDecember(-(consumeUser.getFreeGold().subtract(gold.getNowFreeJune())).intValue());
  145. } else {
  146. userGoldRecord.setFreeJune(-consumeUser.getFreeGold().intValue());
  147. userGoldRecord.setFreeDecember(0);
  148. }
  149. } else {
  150. // 7-12月:设置12月额度,6月保持默认值
  151. if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember()) > 0) {
  152. userGoldRecord.setFreeDecember(-gold.getNowFreeDecember().intValue());
  153. userGoldRecord.setFreeJune(-(consumeUser.getFreeGold().subtract(gold.getNowFreeDecember())).intValue());
  154. } else {
  155. userGoldRecord.setFreeDecember(-consumeUser.getFreeGold().intValue());
  156. userGoldRecord.setFreeJune(0);
  157. }
  158. }
  159. //信息输入
  160. userGoldRecord.setTaskGold(-consumeUser.getTaskGold().intValue());
  161. userGoldRecord.setRemark(consumeUser.getRemark());
  162. userGoldRecord.setType((byte) 1);
  163. userGoldRecord.setIsRefund((byte) 0);
  164. userGoldRecord.setPayPlatform("金币系统");
  165. userGoldRecord.setAdminId(consumeUser.getAdminId());
  166. userGoldRecord.setAuditStatus(1);
  167. userGoldRecord.setCreateTime(new Date());
  168. userGoldRecord.setPayTime(new Date());
  169. consumeMapper.add(userGoldRecord);
  170. consumeMapper.updateUserGold(userGoldRecord);
  171. User user = new User();
  172. user.setJwcode(userGoldRecord.getJwcode());
  173. user.setCurrentPermanentGold(gold.getNowPermanentGold().intValue() - consumeUser.getPermanentGold().intValue());
  174. user.setCurrentFreeJune(gold.getNowFreeJune().intValue() + userGoldRecord.getFreeJune());
  175. user.setCurrentFreeDecember(gold.getNowFreeDecember().intValue() + userGoldRecord.getFreeDecember());
  176. user.setCurrentTaskGold(gold.getNowTaskGold().intValue() - consumeUser.getTaskGold().intValue());
  177. user.setConsumeNum(gold.getConsumeNum().intValue() + 1);
  178. user.setSumConsume(-(consumeUser.getPermanentGold().intValue() + consumeUser.getFreeGold().intValue() + consumeUser.getTaskGold().intValue()));
  179. userMapper.updateGold(user);
  180. // if(consumeUser.getJwcode().equals(94226013)){
  181. GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
  182. (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100,
  183. userGoldRecord.getRemark(), ((double) userGoldRecord.getPermanentGold() / 100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName());
  184. // }
  185. return Result.success();
  186. }
  187. }