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.2 KiB

8 months ago
8 months ago
8 months ago
8 months ago
6 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
6 months ago
6 months ago
8 months ago
8 months ago
8 months ago
  1. package com.example.demo.serviceImpl.coin;
  2. import com.example.demo.Util.GoldTistV2;
  3. import com.example.demo.Util.SimpleIdGenerator;
  4. import com.example.demo.domain.entity.UserGoldRecord;
  5. import com.example.demo.domain.vo.bean.BeanUserCard;
  6. import com.example.demo.exception.SystemException;
  7. import com.example.demo.mapper.bean.BeanUserMapper;
  8. import com.example.demo.mapper.coin.MarketMapper;
  9. import com.example.demo.mapper.coin.RechargeMapper;
  10. import com.example.demo.mapper.coin.UserMapper;
  11. import com.example.demo.service.coin.MarketService;
  12. import com.example.demo.service.coin.RechargeService;
  13. import com.github.pagehelper.PageHelper;
  14. import com.github.pagehelper.PageInfo;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import com.example.demo.domain.vo.coin.*;
  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.UUID;
  26. /**
  27. * @program: gold-java
  28. * @ClassName RechrageServceImpl
  29. * @description:
  30. * @author: Double
  31. * @create: 202506-29 13:40
  32. * @Version 1.0
  33. **/
  34. @Service
  35. public class RechargeServiceImpl implements RechargeService {
  36. @Autowired
  37. private RechargeMapper rechargeMapper;
  38. @Autowired
  39. private UserMapper userMapper;
  40. @Autowired
  41. private MarketMapper marketMapper;
  42. @Autowired
  43. private BeanUserMapper beanUserMapper;
  44. //查询所有充值
  45. @Override
  46. public PageInfo<RechargeUser> selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) throws Exception{
  47. //获取市场id
  48. List<String> markets = marketMapper.getMarketIds(rechargeUser.getMarkets());
  49. rechargeUser.setMarkets(markets);
  50. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  51. List<RechargeUser> rechargeUsers = rechargeMapper.selectAll(rechargeUser);
  52. return new PageInfo<>(rechargeUsers);
  53. }
  54. //查询筛选充值
  55. @Override
  56. public PageInfo<RechargeUser> selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) throws Exception{
  57. List<String> markets = marketMapper.getMarketIds(rechargeUser.getMarkets());
  58. if (markets.contains("9") || markets.contains("9999")){
  59. markets=null;
  60. }
  61. rechargeUser.setMarkets(markets);
  62. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  63. List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser);
  64. return new PageInfo<>(rechargeUsers);
  65. }
  66. //统计金币记录
  67. @Override
  68. public Gold statsGold(RechargeUser rechargeUser) {
  69. List<String> markets = marketMapper.getMarketIds(rechargeUser.getMarkets());
  70. if (markets.contains("9") || markets.contains("9999")){
  71. markets=null;
  72. }
  73. rechargeUser.setMarkets(markets);
  74. Gold gold = rechargeMapper.sumGold(rechargeUser);
  75. return gold;
  76. }
  77. //添加充值记录
  78. @Override
  79. public Result add(RechargeUser rechargeUser) {
  80. if(rechargeUser.getFreeGold()==null||rechargeUser.getPermanentGold()==null||rechargeUser.getMoney()==null){
  81. return Result.error("金币和金额不能为空");
  82. }
  83. if(rechargeUser.getFreeGold().compareTo(BigDecimal.ZERO)<0||rechargeUser.getPermanentGold().compareTo(BigDecimal.ZERO)<0||rechargeUser.getMoney().compareTo(BigDecimal.ZERO)<0){
  84. return Result.error("充值不能为0");
  85. }
  86. if(rechargeUser.getJwcode()<10000000||rechargeUser.getJwcode()>99999999)
  87. {
  88. return Result.error("精网号位数小于8位或大于8位");
  89. }
  90. // 验证免费金币和永久金币是否均为0
  91. if (rechargeUser.getFreeGold().compareTo(BigDecimal.ZERO) == 0 && rechargeUser.getPermanentGold().compareTo(BigDecimal.ZERO) == 0) {
  92. return Result.error("免费金币和永久金币不能同时为0");
  93. }
  94. GoldUser goldUser = userMapper.selectUser(rechargeUser.getJwcode().toString());
  95. if(goldUser==null){
  96. return Result.error("用户不存在");
  97. }
  98. UserGoldRecord userGoldRecord = new UserGoldRecord();
  99. String orderNumber = UUID.randomUUID().toString().replaceAll("-", "");
  100. //订单号生成
  101. userGoldRecord.setOrderCode("CZ_" + orderNumber);
  102. userGoldRecord.setJwcode(rechargeUser.getJwcode());
  103. userGoldRecord.setActivity(rechargeUser.getActivity());
  104. userGoldRecord.setPermanentGold(rechargeUser.getPermanentGold().intValue());
  105. // 获取当前月份(1-12)
  106. int currentMonth = LocalDate.now().getMonthValue();
  107. // 根据当前月份设置对应字段
  108. if (currentMonth >= 1 && currentMonth <= 6) {
  109. // 1-6月:设置6月额度,12月保持默认值
  110. userGoldRecord.setFreeJune(0);
  111. userGoldRecord.setFreeDecember(rechargeUser.getFreeGold().intValue());
  112. } else {
  113. // 7-12月:设置12月额度,6月保持默认值
  114. userGoldRecord.setFreeJune(rechargeUser.getFreeGold().intValue());
  115. userGoldRecord.setFreeDecember(0);
  116. }
  117. //数据输入
  118. userGoldRecord.setSumGold(rechargeUser.getFreeGold().intValue()+rechargeUser.getPermanentGold().intValue());
  119. userGoldRecord.setRateId(rechargeUser.getRateId());
  120. userGoldRecord.setMoney(rechargeUser.getMoney().intValue());
  121. userGoldRecord.setVoucher(rechargeUser.getVoucher());
  122. userGoldRecord.setPayPlatform("金币系统");
  123. userGoldRecord.setPayModel(rechargeUser.getPayModel());
  124. userGoldRecord.setPayTime(rechargeUser.getPayTime());
  125. userGoldRecord.setRemark(rechargeUser.getRemark());
  126. userGoldRecord.setAdminId(rechargeUser.getAdminId());
  127. userGoldRecord.setType((byte) 0);
  128. userGoldRecord.setAuditStatus(0);
  129. userGoldRecord.setCreateTime(new Date());
  130. userGoldRecord.setLinkId(SimpleIdGenerator.generateId());
  131. userGoldRecord.setPrice(rechargeUser.getPermanentGold());
  132. rechargeMapper.add(userGoldRecord);
  133. return Result.success();
  134. }
  135. @Override
  136. public Result addDC(RechargeUser rechargeUser) {
  137. if (rechargeUser.getJwcode()==null||rechargeUser.getJwcode()<10000000||rechargeUser.getJwcode()>99999999){
  138. throw new SystemException("精网号位数小于8位或大于8位");
  139. }
  140. if (rechargeUser.getFreeGold()==null||rechargeUser.getFreeGold().compareTo(BigDecimal.ZERO)<0){
  141. throw new SystemException("免费金币不能小于0");
  142. }
  143. String result = GoldTistV2.addDCCoinNew(rechargeUser.getJwcode().toString(),63,rechargeUser.getFreeGold().doubleValue(),"","DC免费金币赠送",0,"DC","DC免费金币赠送");
  144. // 只关注 -1, -6, -7
  145. if ("-6".equals(result)) {
  146. throw new SystemException(String.format("金币发放失败:类型错误(-6),jwcode=%s", rechargeUser.getJwcode()));
  147. // 检查 lx=63 是否被支持
  148. } else if ("-7".equals(result)) {
  149. throw new SystemException(String.format("金币发放失败:签名错误(-7),jwcode=%s", rechargeUser.getJwcode()));
  150. // 检查签名逻辑或密钥
  151. }
  152. return Result.success();
  153. }
  154. }