package com.example.demo.serviceImpl; import com.example.demo.Util.GoldTistV2; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.ConsumeUser; import com.example.demo.domain.vo.Gold; import com.example.demo.domain.vo.GoldUser; import com.example.demo.domain.vo.Result; import com.example.demo.mapper.ConsumeMapper; import com.example.demo.mapper.UserMapper; import com.example.demo.service.ConsumeService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; /** * @program: gold-java * @ClassName ConsumeServiceImpl * @description: 消费模块 * @author: Double * @create: 2025−06-23 13:58 * @Version 1.0 **/ @Service public class ConsumeServiceImpl implements ConsumeService { @Autowired private ConsumeMapper consumeMapper; @Autowired private UserMapper userMapper; //消耗明细 @Override public PageInfo selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { PageHelper.startPage(pageNum, pageSize); List consumeUsers = consumeMapper.selectAll(consumeUser); return new PageInfo<>(consumeUsers); } //消耗金币统计 @Override public Gold statsGold(ConsumeUser consumeUser) { Gold gold = new Gold(); List consumeUsers = consumeMapper.selectBy(consumeUser); // 初始化累加器 int permanentGoldSum = 0; int freeGoldSum = 0; int taskGoldSum = 0; // 遍历消费记录并累加金币 for (ConsumeUser user : consumeUsers) { // 累加永久金币 if (user.getPermanentGold() != null) { permanentGoldSum += user.getPermanentGold(); } // 累加免费金币 if (user.getFreeGold() != null) { freeGoldSum += user.getFreeGold(); } // 累加任务金币 if (user.getTaskGold() != null) { taskGoldSum += user.getTaskGold(); } } // 将累加结果设置到Gold对象 gold.setPermanentGolds(permanentGoldSum); gold.setFreeGolds(freeGoldSum); gold.setTaskGolds(taskGoldSum); return gold; } //消耗明细筛选 @Override public PageInfo selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { PageHelper.startPage(pageNum, pageSize); List consumeUsers = consumeMapper.selectBy(consumeUser); return new PageInfo<>(consumeUsers); } //新增消耗 @Override public Result add(ConsumeUser consumeUser) { UserGoldRecord userGoldRecord = new UserGoldRecord(); // 获取当前时间戳部分 String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); // 获取自增计数器部分(三位数,不足补零) AtomicInteger atomicInteger = new AtomicInteger(0); int count = atomicInteger.getAndUpdate(c -> (c >= 999) ? 0 : c + 1); String counterPart = String.format("%03d", count); //订单号生成 userGoldRecord.setOrderCode("XF" + timestampPart + counterPart); userGoldRecord.setJwcode(consumeUser.getJwcode()); userGoldRecord.setGoodsName(consumeUser.getGoodsName()); userGoldRecord.setSumGold(consumeUser.getSumGold()); userGoldRecord.setPermanentGold(consumeUser.getPermanentGold()); // 获取当前月份(1-12) int currentMonth = LocalDate.now().getMonthValue(); GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString()); if (consumeUser.getFreeGold() > (gold.getNowFreeDecember() + gold.getNowFreeJune()) || consumeUser.getPermanentGold() > gold.getNowPermanentGold() || consumeUser.getTaskGold() > gold.getNowTaskGold()) { return Result.error("金币数量不足"); } // 根据当前月份设置对应字段 if (currentMonth >= 1 && currentMonth <= 6) { // 1-6月:设置6月额度,12月保持默认值 if (consumeUser.getFreeGold() > gold.getNowFreeJune()) { userGoldRecord.setFreeJune(gold.getNowFreeJune()); userGoldRecord.setFreeDecember(consumeUser.getFreeGold() - gold.getNowFreeJune()); } else { userGoldRecord.setFreeJune(consumeUser.getFreeGold()); userGoldRecord.setFreeDecember(0); } } else { // 7-12月:设置12月额度,6月保持默认值 if (consumeUser.getFreeGold() > gold.getNowFreeDecember()) { userGoldRecord.setFreeDecember(gold.getNowFreeDecember()); userGoldRecord.setFreeJune(consumeUser.getFreeGold() - gold.getNowFreeDecember()); } else { userGoldRecord.setFreeDecember(consumeUser.getFreeGold()); userGoldRecord.setFreeJune(0); } } userGoldRecord.setTaskGold(consumeUser.getTaskGold()); userGoldRecord.setRemark(consumeUser.getRemark()); userGoldRecord.setType((byte) 1); userGoldRecord.setIsRefund((byte) 0); userGoldRecord.setPayPlatform("金币系统"); userGoldRecord.setAdminId(consumeUser.getAdminId()); userGoldRecord.setAuditStatus(1); userGoldRecord.setCreateTime(new Date()); userGoldRecord.setPayTime(new Date()); consumeMapper.add(userGoldRecord); User user = new User(); user.setJwcode(userGoldRecord.getJwcode()); user.setCurrentPermanentGold(gold.getNowPermanentGold() - consumeUser.getPermanentGold()); user.setCurrentFreeJune(gold.getNowFreeJune() - userGoldRecord.getFreeJune()); user.setCurrentFreeDecember(gold.getNowFreeDecember() - userGoldRecord.getFreeDecember()); user.setCurrentTaskGold(gold.getNowTaskGold() - consumeUser.getTaskGold()); user.setConsumeNum(gold.getConsumeNum() + 1); user.setSumConsume(consumeUser.getPermanentGold() + consumeUser.getFreeGold() + consumeUser.getTaskGold()); userMapper.updateGold(user); //对接接口 // GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, // (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) /100, // userGoldRecord.getRemark(),((double) userGoldRecord.getPermanentGold() /100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName()); return Result.success(); } }