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.
169 lines
6.9 KiB
169 lines
6.9 KiB
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();
|
|
}
|
|
}
|