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

168 lines
6.8 KiB

package com.example.demo.serviceImpl;
import com.example.demo.Util.GoldTistV2;
import com.example.demo.domain.entity.*;
import com.example.demo.domain.vo.ConsumeDetail;
import com.example.demo.domain.vo.SumConsume;
import com.example.demo.mapper.ConsumeMapper;
import com.example.demo.mapper.UserMapper;
import com.example.demo.sevice.ConsumeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.Month;
import java.util.List;
import java.util.UUID;
@Service
@Transactional
@RequiredArgsConstructor
@CacheConfig(cacheNames = "consume")
public class ConsumeServiceImpl implements ConsumeService {
@Autowired
ConsumeMapper consumeMapper;
private final UserMapper userMapper;
private final UserServiceImpl userService;
@CacheEvict(value = {"consume", "detailY"}, allEntries = true)
@Override
//新增消费记录
public int insert(DetailY detailY) throws Exception {
User sUser = userMapper.select(detailY.getJwcode());
if(ObjectUtils.isEmpty(sUser)){
throw new Exception("无此精网号");
} else if (detailY.getJwcode()==null||detailY.getJwcode().equals("")) {
throw new Exception("精网号不能为空");
} else if (detailY.getAllGold()==null||detailY.getAllGold().compareTo(BigDecimal.ZERO) < 0) {
throw new Exception("消费金币总数不能为空或小于等于0");
}
// 生成UUID作为订单编号
String uuid = UUID.randomUUID().toString().replace("-", ""); // 去掉UUID中的'-'
detailY.setOrderCode(uuid);
int result =consumeMapper.insert(detailY);
System.out.println(detailY+"----------------------------------------");
if (result != 1) {
throw new Exception("Failed to insert another entity");
}
BigDecimal paidGold1 =detailY.getRechargeCoin();
BigDecimal freeGold1 =detailY.getFreeCoin();
BigDecimal taskGold1 =detailY.getTaskCoin();
String name = detailY.getName();
String username =detailY.getUsername();
String area = detailY.getArea();
String jwcode = detailY.getJwcode();
String product = detailY.getProductName();
UserGold userGold = userMapper.selectGold(jwcode);
BigDecimal buyJb =userGold.getBuyJb();
BigDecimal coreJb=userGold.getCoreJb();
buyJb = buyJb.add(paidGold1);
coreJb = coreJb.add(taskGold1);
// 设置更新后的Sumgold回到user对象
userGold.setBuyJb(buyJb);
userGold.setCoreJb(coreJb);
LocalDate now = LocalDate.now();
// 判断当前日期是在六月之前还是之后
Month currentMonth = now.getMonth();
boolean isBeforeJune = currentMonth.getValue() < Month.JUNE.getValue();
boolean isJune = currentMonth.getValue() == Month.JUNE.getValue();
boolean isAfterJune = currentMonth.getValue() > Month.JUNE.getValue();
// 根据月份更新 free6 或 free12
if (isBeforeJune || isJune) {
// 如果是六月前,优先扣减 free6
BigDecimal free6 = userGold.getFree6();
if (free6.add(freeGold1).compareTo(BigDecimal.ZERO) >= 0) {
// 如果 free6 足够扣减,直接扣减
userGold.setFree6(free6.add(freeGold1));
} else {
// 如果 free6 不足,扣减 free6 到 0,剩余部分从 free12 扣减
BigDecimal remaining = free6.add(freeGold1); // 剩余需要扣减的金币
userGold.setFree6(BigDecimal.ZERO); // 将 free6 归零
userGold.setFree12(userGold.getFree12().add(remaining)); // 从 free12 扣减剩余部分
}
} else if (isAfterJune) {
// 如果是六月后,优先扣减 free12
BigDecimal free12 = userGold.getFree12();
if (free12.add(freeGold1).compareTo(BigDecimal.ZERO) >= 0) {
// 如果 free12 足够扣减,直接扣减
userGold.setFree12(free12.add(freeGold1));
} else {
// 如果 free12 不足,扣减 free12 到 0,剩余部分从 free6 扣减
BigDecimal remaining = free12.add(freeGold1); // 剩余需要扣减的金币
userGold.setFree12(BigDecimal.ZERO); // 将 free12 归零
userGold.setFree6(userGold.getFree6().add(remaining)); // 从 free6 扣减剩余部分
}
}
// 设置更新后的Sumgold回到user对象
System.out.println(userGold+"----------------------------------------------------------");
result = userMapper.updateGold(userGold);
if (result != 1) {
throw new Exception("Failed to insert another entity");
}
//添加表单数据
// 更新用户对象以反映新的余额
result = userMapper.updateGold(userGold);
GoldTistV2.addCoinNew(jwcode, 65, (paidGold1.add(freeGold1).add(taskGold1).divide(new BigDecimal("100"))).doubleValue(), "购买商品", paidGold1.doubleValue(),name,product);
return result;
}
@Cacheable(key="#root.method.name")
@Override
public User getByUserId(Integer userId) {
return consumeMapper.getByUserId(userId);
}
@Cacheable(key="#root.method.name")
@Override
public Admin getByadminId(Integer adminId) {
return consumeMapper.getByadminId(adminId);
}
@Cacheable(key="#root.method.name")
@Override
public List<ConsumeDetail> search(ConsumeDetail consumeDetail) {
return consumeMapper.select(consumeDetail);
}
@Cacheable(key = "#root.method.name + ':' + #pageNum + '-' + #pageSize + '-' + T(java.util.Objects).hashCode(#consumeDetail)")
@Override
public PageInfo<ConsumeDetail> searchForPage(Integer pageNum, Integer pageSize, ConsumeDetail consumeDetail) {
PageHelper.startPage(pageNum, pageSize);
List<ConsumeDetail> list = consumeMapper.select(consumeDetail);
return new PageInfo<>(list);
}
@Override
public SumConsume getSumConsume(SumConsume sumConsume) {
return consumeMapper.getSumConsume(sumConsume);
}
@Override
public List<String> getConsume() {
return consumeMapper.getConsume();
}
public List<Detail> getDeatil(String jwcode){
return consumeMapper.getDeatil(jwcode);
}
public List<Product> getProduct(String name){
return consumeMapper.getProduct(name);
}
}