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

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;
}
}