package com.example.demo.serviceImpl; import com.example.demo.domain.entity.Detail; import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.UserVo; import com.example.demo.mapper.UserMapper; import com.example.demo.sevice.UserSevice; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.CacheConfig; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import java.math.BigDecimal; import java.util.List; @Transactional @Service @RequiredArgsConstructor @CacheConfig(cacheNames = "user") public class UserServiceImpl implements UserSevice { private final UserMapper userMapper; @Override public UserVo search(UserVo userVo) throws Exception{ User sUser = userMapper.select(userVo.getJwcode()); if(ObjectUtils.isEmpty(sUser)){ throw new Exception("无此精网号"); } if(!userVo.getArea().equals("总部")){ if(!sUser.getArea().equals(userVo.getArea())){ throw new Exception("该地区查无此号"); } } return userMapper.selectA(userVo); } @Override public PageInfo searchForPage(Integer pageNum, Integer pageSize, User user) { PageHelper.startPage(pageNum,pageSize); List list= userMapper.selectAll(user); return new PageInfo<>(list); } @Override public List area() { return userMapper.selectArea(); } @Override public List jwcode() { return userMapper.selectJwcode(); } @Override public int add(User user) throws Exception { User sUser = userMapper.select(user.getJwcode()); if (!ObjectUtils.isEmpty(sUser)){ throw new Exception("已存在此用户"); } BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); user.setPassword(passwordEncoder.encode("123")); return userMapper.add(user); } //设置免费金币 // public User updateFreecoin(Detail userConsumeCoin) { // // String jwcode = userConsumeCoin.getJwcode(); // User user = userMapper.get(jwcode); // // //前端三币之和:allGold // BigDecimal allGold = userConsumeCoin.getAllGold(); // //数据表 // BigDecimal sum = user.getFree6().add(user.getFree12()).add(user.getCoreJb()).add(user.getBuyJb()); // //前端提供免费金币,任务,充值金币 // BigDecimal freeSumCoin = userConsumeCoin.getFreeCoin().abs(); //// BigDecimal rechargeSumCoin = userConsumeCoin.getRechargeSumCoin(); //// BigDecimal taskSumCoin = userConsumeCoin.getTaskSumCoin(); // System.out.println(freeSumCoin+"---------freecoin"); // if(allGold.compareTo(sum)<=0 ){ // if (freeSumCoin == null) { // // 根据业务需求处理 null 值 // System.out.println("000000000000000000"); // return null; // 或者抛出异常,或者设置默认行为 // }else{ //// 如果返回 -1,则调用 compareTo 的 BigDecimal 小于参数。 //// 如果返回 0,则两者相等。 //// 如果返回 1,则调用 compareTo 的 BigDecimal 大于参数。 // if(user.getFree6().compareTo(freeSumCoin)==1){ // //rechargeSumCoin小,直接减 // BigDecimal newFree6 = user.getFree6().subtract(freeSumCoin); // System.out.println(newFree6+"_____newFree61---"); // System.out.println(user.getFree6()+"_____newFree6---"); // System.out.println(user.getFree12()+"_____newFree12---"); // user.setFree6(newFree6); // System.out.println("1111111111111"); // return user; // }else if(user.getFree6().compareTo(freeSumCoin)==-1){ // BigDecimal subtract = freeSumCoin.subtract(user.getFree6());//还差多少免费金币 // BigDecimal subtract1 = user.getFree12().subtract(subtract); // user.setFree12(subtract1); // user.setFree6(BigDecimal.ZERO); // System.out.println(user.getFree6()+"_____newFree6---"); // System.out.println(user.getFree12()+"_____newFree12---"); // System.out.println("22222222222222222"); // return user; // }else if(user.getFree6().compareTo(freeSumCoin)==0){ // user.setFree6(BigDecimal.ZERO); // System.out.println(user.getFree6()+"_____newFree6---"); // System.out.println(user.getFree12()+"_____newFree12---"); // System.out.println("33333333333333333333"); // return user; // } // // } // // // } // System.out.println("金币数不够,请前去去充值"); // // return null; // // } public User updateFreecoin(Detail userConsumeCoin) { // 获取用户消费的免费金币,并取绝对值确保为正数 BigDecimal newfree = userConsumeCoin.getFreeCoin().abs(); String jwcode = userConsumeCoin.getJwcode(); User user = userMapper.get(jwcode); BigDecimal free6 = user.getFree6(); BigDecimal free12 = user.getFree12(); // 先尝试从 free6 中扣除 if (free6.compareTo(newfree) >= 0) { // free6 足够支付新消费的免费金币 free6 = free6.subtract(newfree); user.setFree6(free6); System.out.println("只花了free6 "); } else { // free6 不足以支付,需要从 free12 中扣除剩余部分 BigDecimal remaining = newfree.subtract(free6); free6 = BigDecimal.ZERO; free12 = free12.subtract(remaining); user.setFree6(free6); user.setFree12(free12); System.out.println("花了free6 和free12."); } // 更新用户对象以反映新的余额 int result = userMapper.update(user); if (result != 1) { throw new RuntimeException("无法实现用户表金币更新"); } return user; } }