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

139 lines
5.7 KiB

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