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.

134 lines
4.8 KiB

package com.example.demo.serviceImpl;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.*;
import com.example.demo.mapper.ConsumeMapper;
import com.example.demo.mapper.RechargeMapper;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.RechargeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @program: gold-java
* @ClassName RechrageServceImpl
* @description:
* @author: Double
* @create: 2025−06-29 13:40
* @Version 1.0
**/
@Service
public class RechargeServiceImpl implements RechargeService {
@Autowired
private RechargeMapper rechargeMapper;
@Autowired
private UserMapper userMapper;
@Override
public PageInfo<RechargeUser> selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) {
PageHelper.startPage(pageNum, pageSize);
List<RechargeUser> rechargeUsers = rechargeMapper.selectAll(rechargeUser);
return new PageInfo<>(rechargeUsers);
}
@Override
public PageInfo<RechargeUser> selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) {
PageHelper.startPage(pageNum, pageSize);
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser);
return new PageInfo<>(rechargeUsers);
}
@Override
public Gold statsGold(RechargeUser rechargeUser) {
Gold gold = new Gold();
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser);
// 初始化累加器
int permanentGoldSum = 0;
int freeGoldSum = 0;
// 遍历充值记录并累加金币
for (RechargeUser user : rechargeUsers) {
// 累加永久金币
if (user.getPermanentGold() != null) {
permanentGoldSum += user.getPermanentGold();
}
// 累加免费金币
if (user.getFreeGold() != null) {
freeGoldSum += user.getFreeGold();
}
}
// 将累加结果设置到Gold对象
gold.setPermanentGolds(permanentGoldSum);
gold.setFreeGolds(freeGoldSum);
return gold;
}
@Override
public Result add(RechargeUser rechargeUser) {
if(rechargeUser.getFreeGold()<0||rechargeUser.getPermanentGold()<=0||rechargeUser.getMoney()<=0){
return Result.error("充值不能为负数或0");
}
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("CZ" + timestampPart + counterPart);
userGoldRecord.setJwcode(rechargeUser.getJwcode());
userGoldRecord.setActivity(rechargeUser.getActivity());
userGoldRecord.setPermanentGold(rechargeUser.getPermanentGold());
// 获取当前月份(1-12)
int currentMonth = LocalDate.now().getMonthValue();
// 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) {
// 1-6月:设置6月额度,12月保持默认值
userGoldRecord.setFreeJune(0);
userGoldRecord.setFreeDecember(rechargeUser.getFreeGold());
} else {
// 7-12月:设置12月额度,6月保持默认值
userGoldRecord.setFreeJune(rechargeUser.getFreeGold());
userGoldRecord.setFreeDecember(0);
}
userGoldRecord.setSumGold(rechargeUser.getFreeGold()+rechargeUser.getPermanentGold());
userGoldRecord.setRateId(rechargeUser.getRateId());
userGoldRecord.setMoney(rechargeUser.getMoney());
userGoldRecord.setVoucher(rechargeUser.getVoucher());
userGoldRecord.setPayPlatform("金币系统");
userGoldRecord.setPayModel(rechargeUser.getPayModel());
userGoldRecord.setPayTime(rechargeUser.getPayTime());
userGoldRecord.setRemark(rechargeUser.getRemark());
userGoldRecord.setAdminId(rechargeUser.getAdminId());
userGoldRecord.setType((byte) 0);
userGoldRecord.setAuditStatus(0);
userGoldRecord.setCreateTime(new Date());
rechargeMapper.add(userGoldRecord);
return Result.success();
}
}