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