金币系统后端
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.

148 lines
5.8 KiB

6 months ago
6 months ago
  1. package com.example.demo.serviceImpl;
  2. import com.example.demo.domain.entity.Detail;
  3. import com.example.demo.domain.entity.User;
  4. import com.example.demo.domain.vo.UserVo;
  5. import com.example.demo.mapper.UserMapper;
  6. import com.example.demo.sevice.UserSevice;
  7. import com.github.pagehelper.PageHelper;
  8. import com.github.pagehelper.PageInfo;
  9. import lombok.RequiredArgsConstructor;
  10. import org.springframework.cache.annotation.CacheConfig;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import org.springframework.util.ObjectUtils;
  14. import java.math.BigDecimal;
  15. import java.util.List;
  16. @Transactional
  17. @Service
  18. @RequiredArgsConstructor
  19. @CacheConfig(cacheNames = "user")
  20. public class UserServiceImpl implements UserSevice {
  21. private final UserMapper userMapper;
  22. @Override
  23. public UserVo search(UserVo userVo) throws Exception{
  24. User sUser = userMapper.select(userVo.getJwcode());
  25. if(ObjectUtils.isEmpty(sUser)){
  26. throw new Exception("无此精网号");
  27. }
  28. // if(sUser.getArea()!=)
  29. return userMapper.selectA(userVo);
  30. }
  31. @Override
  32. public PageInfo<User> searchForPage(Integer pageNum, Integer pageSize, User user) {
  33. PageHelper.startPage(pageNum,pageSize);
  34. List<User> list= userMapper.selectAll(user);
  35. return new PageInfo<>(list);
  36. }
  37. @Override
  38. public List<String> area() {
  39. return userMapper.selectArea();
  40. }
  41. @Override
  42. public List<String> jwcode() {
  43. return userMapper.selectJwcode();
  44. }
  45. //设置免费金币
  46. // public User updateFreecoin(Detail userConsumeCoin) {
  47. //
  48. // String jwcode = userConsumeCoin.getJwcode();
  49. // User user = userMapper.get(jwcode);
  50. //
  51. // //前端三币之和:allGold
  52. // BigDecimal allGold = userConsumeCoin.getAllGold();
  53. // //数据表
  54. // BigDecimal sum = user.getFree6().add(user.getFree12()).add(user.getCoreJb()).add(user.getBuyJb());
  55. // //前端提供免费金币,任务,充值金币
  56. // BigDecimal freeSumCoin = userConsumeCoin.getFreeCoin().abs();
  57. //// BigDecimal rechargeSumCoin = userConsumeCoin.getRechargeSumCoin();
  58. //// BigDecimal taskSumCoin = userConsumeCoin.getTaskSumCoin();
  59. // System.out.println(freeSumCoin+"---------freecoin");
  60. // if(allGold.compareTo(sum)<=0 ){
  61. // if (freeSumCoin == null) {
  62. // // 根据业务需求处理 null 值
  63. // System.out.println("000000000000000000");
  64. // return null; // 或者抛出异常,或者设置默认行为
  65. // }else{
  66. //// 如果返回 -1,则调用 compareTo 的 BigDecimal 小于参数。
  67. //// 如果返回 0,则两者相等。
  68. //// 如果返回 1,则调用 compareTo 的 BigDecimal 大于参数。
  69. // if(user.getFree6().compareTo(freeSumCoin)==1){
  70. // //rechargeSumCoin小,直接减
  71. // BigDecimal newFree6 = user.getFree6().subtract(freeSumCoin);
  72. // System.out.println(newFree6+"_____newFree61---");
  73. // System.out.println(user.getFree6()+"_____newFree6---");
  74. // System.out.println(user.getFree12()+"_____newFree12---");
  75. // user.setFree6(newFree6);
  76. // System.out.println("1111111111111");
  77. // return user;
  78. // }else if(user.getFree6().compareTo(freeSumCoin)==-1){
  79. // BigDecimal subtract = freeSumCoin.subtract(user.getFree6());//还差多少免费金币
  80. // BigDecimal subtract1 = user.getFree12().subtract(subtract);
  81. // user.setFree12(subtract1);
  82. // user.setFree6(BigDecimal.ZERO);
  83. // System.out.println(user.getFree6()+"_____newFree6---");
  84. // System.out.println(user.getFree12()+"_____newFree12---");
  85. // System.out.println("22222222222222222");
  86. // return user;
  87. // }else if(user.getFree6().compareTo(freeSumCoin)==0){
  88. // user.setFree6(BigDecimal.ZERO);
  89. // System.out.println(user.getFree6()+"_____newFree6---");
  90. // System.out.println(user.getFree12()+"_____newFree12---");
  91. // System.out.println("33333333333333333333");
  92. // return user;
  93. // }
  94. //
  95. // }
  96. //
  97. //
  98. // }
  99. // System.out.println("金币数不够,请前去去充值");
  100. //
  101. // return null;
  102. //
  103. // }
  104. public User updateFreecoin(Detail userConsumeCoin) {
  105. // 获取用户消费的免费金币,并取绝对值确保为正数
  106. BigDecimal newfree = userConsumeCoin.getFreeCoin().abs();
  107. String jwcode = userConsumeCoin.getJwcode();
  108. User user = userMapper.get(jwcode);
  109. BigDecimal free6 = user.getFree6();
  110. BigDecimal free12 = user.getFree12();
  111. // 先尝试从 free6 中扣除
  112. if (free6.compareTo(newfree) >= 0) {
  113. // free6 足够支付新消费的免费金币
  114. free6 = free6.subtract(newfree);
  115. user.setFree6(free6);
  116. System.out.println("只花了free6 ");
  117. } else {
  118. // free6 不足以支付,需要从 free12 中扣除剩余部分
  119. BigDecimal remaining = newfree.subtract(free6);
  120. free6 = BigDecimal.ZERO;
  121. free12 = free12.subtract(remaining);
  122. user.setFree6(free6);
  123. user.setFree12(free12);
  124. System.out.println("花了free6 和free12.");
  125. }
  126. // 更新用户对象以反映新的余额
  127. int result = userMapper.update(user);
  128. if (result != 1) {
  129. throw new RuntimeException("无法实现用户表金币更新");
  130. }
  131. return user;
  132. }
  133. }