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
162 lines
6.4 KiB
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<User> searchForPage(Integer pageNum, Integer pageSize, User user) {
|
|
PageHelper.startPage(pageNum,pageSize);
|
|
List<User> list= userMapper.selectAll(user);
|
|
return new PageInfo<>(list);
|
|
}
|
|
|
|
@Override
|
|
public List<String> area() {
|
|
return userMapper.selectArea();
|
|
}
|
|
|
|
@Override
|
|
public List<String> 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;
|
|
}
|
|
|
|
|
|
}
|