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.
|
|
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<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { PageHelper.startPage(pageNum, pageSize); List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser); return new PageInfo<>(consumeUsers); }
//消耗金币统计
@Override public Gold statsGold(ConsumeUser consumeUser) { Gold gold = new Gold(); List<ConsumeUser> 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<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { PageHelper.startPage(pageNum, pageSize); List<ConsumeUser> 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(); } }
|