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.

303 lines
15 KiB

7 months ago
6 months ago
7 months ago
7 months ago
5 months ago
7 months ago
7 months ago
7 months ago
6 months ago
6 months ago
6 months ago
6 months ago
7 months ago
5 months ago
5 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 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.exception.SystemException;
  10. import com.example.demo.mapper.coin.ConsumeMapper;
  11. import com.example.demo.mapper.coin.MarketMapper;
  12. import com.example.demo.mapper.coin.UserMapper;
  13. import com.example.demo.service.Temporary.RedService;
  14. import com.example.demo.service.coin.ConsumeService;
  15. import com.example.demo.service.coin.MarketService;
  16. import com.github.pagehelper.PageHelper;
  17. import com.github.pagehelper.PageInfo;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import java.math.BigDecimal;
  23. import java.math.RoundingMode;
  24. import java.time.LocalDate;
  25. import java.time.LocalDateTime;
  26. import java.time.format.DateTimeFormatter;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.Random;
  30. import java.util.UUID;
  31. /**
  32. * @program: gold-java
  33. * @ClassName ConsumeServiceImpl
  34. * @description: 消费模块
  35. * @author: Double
  36. * @create: 202506-23 13:58
  37. * @Version 1.0
  38. **/
  39. @Slf4j
  40. @Service
  41. public class ConsumeServiceImpl implements ConsumeService {
  42. @Autowired
  43. private ConsumeMapper consumeMapper;
  44. @Autowired
  45. private UserMapper userMapper;
  46. @Autowired
  47. private MarketMapper marketMapper;
  48. @Autowired
  49. private RedService redService;
  50. //消耗明细
  51. @Override
  52. public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser){
  53. //获取市场id
  54. List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
  55. consumeUser.setMarkets(markets);
  56. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  57. List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser);
  58. return new PageInfo<>(consumeUsers);
  59. }
  60. //消耗金币统计
  61. @Override
  62. public Gold statsGold(ConsumeUser consumeUser) {
  63. //获取市场id
  64. List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
  65. if (markets.contains("9") || markets.contains("9999")){
  66. markets=null;
  67. }
  68. consumeUser.setMarkets(markets);
  69. Gold gold = consumeMapper.sumGold(consumeUser);
  70. return gold;
  71. }
  72. //消耗明细筛选
  73. @Override
  74. public PageInfo<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) {
  75. //获取市场id
  76. List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets());
  77. if (markets.contains("9") || markets.contains("9999")){
  78. markets=null;
  79. }
  80. consumeUser.setMarkets(markets);
  81. PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
  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().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) {
  93. return Result.error("金币不能为负数");
  94. }
  95. if(consumeUser.getJwcode()<10000000||consumeUser.getJwcode()>99999999)
  96. {
  97. return Result.error("精网号位数小于8位或大于8位");
  98. }
  99. if(consumeUser.getAdminName()==null){
  100. return Result.error("管理员不能为空");
  101. }
  102. GoldUser goldUser = userMapper.selectUser(consumeUser.getJwcode().toString());
  103. if (goldUser == null) {
  104. return Result.error("用户不存在");
  105. }
  106. UserGoldRecord userGoldRecord = new UserGoldRecord();
  107. String orderNumber = UUID.randomUUID().toString().replaceAll("-", "");
  108. //订单号生成
  109. userGoldRecord.setOrderCode("XF_" + orderNumber);
  110. userGoldRecord.setJwcode(consumeUser.getJwcode());
  111. userGoldRecord.setGoodsName(consumeUser.getGoodsName());
  112. userGoldRecord.setSumGold(-consumeUser.getSumGold().intValue());
  113. userGoldRecord.setPermanentGold(-consumeUser.getPermanentGold().intValue());
  114. // 获取当前月份(1-12)
  115. int currentMonth = LocalDate.now().getMonthValue();
  116. GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString());
  117. if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0
  118. || consumeUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0
  119. || consumeUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) {
  120. return Result.error("金币数量不足");
  121. }
  122. // 根据当前月份设置对应字段
  123. if (currentMonth >= 1 && currentMonth <= 6) {
  124. // 1-6月:设置6月额度,12月保持默认值
  125. if (consumeUser.getFreeGold().compareTo(gold.getNowFreeJune()) > 0) {
  126. userGoldRecord.setFreeJune(-gold.getNowFreeJune().intValue());
  127. userGoldRecord.setFreeDecember(-(consumeUser.getFreeGold().subtract(gold.getNowFreeJune())).intValue());
  128. } else {
  129. userGoldRecord.setFreeJune(-consumeUser.getFreeGold().intValue());
  130. userGoldRecord.setFreeDecember(0);
  131. }
  132. } else {
  133. // 7-12月:设置12月额度,6月保持默认值
  134. if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember()) > 0) {
  135. userGoldRecord.setFreeDecember(-gold.getNowFreeDecember().intValue());
  136. userGoldRecord.setFreeJune(-(consumeUser.getFreeGold().subtract(gold.getNowFreeDecember())).intValue());
  137. } else {
  138. userGoldRecord.setFreeDecember(-consumeUser.getFreeGold().intValue());
  139. userGoldRecord.setFreeJune(0);
  140. }
  141. }
  142. //信息输入
  143. userGoldRecord.setTaskGold(-consumeUser.getTaskGold().intValue());
  144. userGoldRecord.setRemark(consumeUser.getRemark());
  145. userGoldRecord.setType((byte) 1);
  146. userGoldRecord.setIsRefund((byte) 0);
  147. userGoldRecord.setPayPlatform("金币系统");
  148. userGoldRecord.setAdminId(consumeUser.getAdminId());
  149. userGoldRecord.setAuditStatus(1);
  150. userGoldRecord.setCreateTime(new Date());
  151. userGoldRecord.setPayTime(new Date());
  152. // if(consumeUser.getJwcode().equals(94226013)){
  153. String result= GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
  154. (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100,
  155. userGoldRecord.getRemark(),0, consumeUser.getAdminName(), userGoldRecord.getGoodsName());
  156. // System.out.println("9"+result+"9");
  157. result = result.replaceAll("[\r\n]", "");
  158. //返回状态1加成功2减成功其他失败 -5 金币不足 -6 类型错误 -7签名错误
  159. if(!result.equals("2")){
  160. result= GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
  161. (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100,
  162. userGoldRecord.getRemark(), 0, consumeUser.getAdminName(), userGoldRecord.getGoodsName());
  163. //返回状态1加成功2减成功其他失败 -5 金币不足 -6 类型错误 -7签名错误
  164. if(!result.equals("2")){
  165. String errorMsg = "减金币失败,数据未进erp,返回状态:" + result;
  166. log.error(errorMsg); // 保留日志记录,便于问题排查
  167. throw new SystemException(errorMsg); // 抛出系统异常,中断流程并传递错误信息
  168. }
  169. }
  170. consumeMapper.add(userGoldRecord);
  171. consumeMapper.updateUserGold(userGoldRecord);
  172. User user = new User();
  173. user.setJwcode(userGoldRecord.getJwcode());
  174. user.setCurrentPermanentGold(BigDecimal.valueOf(gold.getNowPermanentGold().intValue() - consumeUser.getPermanentGold().intValue()));
  175. user.setCurrentFreeJune(BigDecimal.valueOf(gold.getNowFreeJune().intValue() + userGoldRecord.getFreeJune()));
  176. user.setCurrentFreeDecember(BigDecimal.valueOf(gold.getNowFreeDecember().intValue() + userGoldRecord.getFreeDecember()));
  177. user.setCurrentTaskGold(BigDecimal.valueOf(gold.getNowTaskGold().intValue() - consumeUser.getTaskGold().intValue()));
  178. user.setConsumeNum(gold.getConsumeNum().intValue() + 1);
  179. user.setSumConsumePermanent(BigDecimal.valueOf(-consumeUser.getPermanentGold().intValue()));
  180. user.setSumConsumeFree(BigDecimal.valueOf(-consumeUser.getFreeGold().intValue()));
  181. user.setSumConsumeTask(BigDecimal.valueOf(-consumeUser.getTaskGold().intValue()));
  182. userMapper.updateGold(user);
  183. //累消
  184. try {
  185. BigDecimal sum = (consumeUser.getSumGold()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP );
  186. redService.addAmount(consumeUser.getJwcode(),sum, 2);
  187. }catch (Exception e){
  188. log.warn("消耗累加失败,主流程继续 | jwcode={}", consumeUser.getJwcode(), e);
  189. }
  190. redService.sendConsumeJwcode(consumeUser.getJwcode(),(consumeUser.getPrice().subtract(consumeUser.getSumGold())).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
  191. // }
  192. return Result.success();
  193. }
  194. //
  195. // @Transactional
  196. // @Override
  197. // public Result addRefund(ConsumeUser consumeUser) {
  198. // if (consumeUser.getTaskGold() == null || consumeUser.getFreeGold() == null || consumeUser.getPermanentGold() == null) {
  199. // return Result.error("金币数量不能为空");
  200. // }
  201. // if (consumeUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) {
  202. // return Result.error("金币不能为负数");
  203. // }
  204. // if(consumeUser.getJwcode()<10000000||consumeUser.getJwcode()>99999999)
  205. // {
  206. // return Result.error("精网号位数小于8位或大于8位");
  207. // }
  208. // if(consumeUser.getAdminName()==null){
  209. // return Result.error("管理员不能为空");
  210. // }
  211. // GoldUser goldUser = userMapper.selectUser(consumeUser.getJwcode().toString());
  212. // if (goldUser == null) {
  213. // return Result.error("用户不存在");
  214. // }
  215. // UserGoldRecord userGoldRecord = new UserGoldRecord();
  216. //
  217. // String orderNumber = UUID.randomUUID().toString().replaceAll("-", "");
  218. // //订单号生成
  219. // userGoldRecord.setOrderCode("TKCZ_" + orderNumber);
  220. // userGoldRecord.setJwcode(consumeUser.getJwcode());
  221. // userGoldRecord.setGoodsName(consumeUser.getGoodsName());
  222. // userGoldRecord.setSumGold(-consumeUser.getSumGold().intValue());
  223. // userGoldRecord.setPermanentGold(-consumeUser.getPermanentGold().intValue());
  224. // // 获取当前月份(1-12)
  225. // int currentMonth = LocalDate.now().getMonthValue();
  226. // GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString());
  227. // if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0
  228. // || consumeUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0
  229. // || consumeUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) {
  230. // return Result.error("金币数量不足");
  231. // }
  232. // // 根据当前月份设置对应字段
  233. // if (currentMonth >= 1 && currentMonth <= 6) {
  234. // // 1-6月:设置6月额度,12月保持默认值
  235. // if (consumeUser.getFreeGold().compareTo(gold.getNowFreeJune()) > 0) {
  236. // userGoldRecord.setFreeJune(-gold.getNowFreeJune().intValue());
  237. // userGoldRecord.setFreeDecember(-(consumeUser.getFreeGold().subtract(gold.getNowFreeJune())).intValue());
  238. // } else {
  239. // userGoldRecord.setFreeJune(-consumeUser.getFreeGold().intValue());
  240. // userGoldRecord.setFreeDecember(0);
  241. // }
  242. // } else {
  243. // // 7-12月:设置12月额度,6月保持默认值
  244. // if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember()) > 0) {
  245. // userGoldRecord.setFreeDecember(-gold.getNowFreeDecember().intValue());
  246. // userGoldRecord.setFreeJune(-(consumeUser.getFreeGold().subtract(gold.getNowFreeDecember())).intValue());
  247. // } else {
  248. // userGoldRecord.setFreeDecember(-consumeUser.getFreeGold().intValue());
  249. // userGoldRecord.setFreeJune(0);
  250. // }
  251. // }
  252. // //信息输入
  253. // userGoldRecord.setTaskGold(-consumeUser.getTaskGold().intValue());
  254. // userGoldRecord.setRemark(consumeUser.getRemark());
  255. // userGoldRecord.setType((byte) 2);
  256. // userGoldRecord.setAuditStatus(0);
  257. // userGoldRecord.setPayPlatform("金币系统");
  258. // userGoldRecord.setRefundType("金币退款");
  259. // userGoldRecord.setGoodsName("金币退款");
  260. // userGoldRecord.setRefundModel((byte) 0);
  261. // userGoldRecord.setAdminId(consumeUser.getAdminId());
  262. // userGoldRecord.setCreateTime(new Date());
  263. // userGoldRecord.setPayTime(new Date());
  264. // consumeMapper.addRefund(userGoldRecord);
  265. // consumeMapper.updateUserGold(userGoldRecord);
  266. // User user = new User();
  267. // user.setJwcode(userGoldRecord.getJwcode());
  268. // user.setCurrentPermanentGold(BigDecimal.valueOf(gold.getNowPermanentGold().intValue() - consumeUser.getPermanentGold().intValue()));
  269. // user.setCurrentFreeJune(BigDecimal.valueOf(gold.getNowFreeJune().intValue() + userGoldRecord.getFreeJune()));
  270. // user.setCurrentFreeDecember(BigDecimal.valueOf(gold.getNowFreeDecember().intValue() + userGoldRecord.getFreeDecember()));
  271. // user.setCurrentTaskGold(BigDecimal.valueOf(gold.getNowTaskGold().intValue() - consumeUser.getTaskGold().intValue()));
  272. // user.setConsumeNum(gold.getConsumeNum().intValue() + 1);
  273. // user.setSumConsumePermanent(BigDecimal.valueOf(-consumeUser.getPermanentGold().intValue()));
  274. // user.setSumConsumeFree(BigDecimal.valueOf(-consumeUser.getFreeGold().intValue()));
  275. // user.setSumConsumeTask(BigDecimal.valueOf(-consumeUser.getTaskGold().intValue()));
  276. // userMapper.updateGold(user);
  277. // // if(consumeUser.getJwcode().equals(94226013)){
  278. // GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
  279. // (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100,
  280. // userGoldRecord.getRemark(), ((double) userGoldRecord.getPermanentGold() / 100), consumeUser.getAdminName(), userGoldRecord.getGoodsName());
  281. // // }
  282. // return Result.success();
  283. // }
  284. }