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

162 lines
6.4 KiB

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