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.
212 lines
8.0 KiB
212 lines
8.0 KiB
package com.example.demo.serviceImpl;
|
|
|
|
import com.example.demo.domain.entity.UserGoldRecord;
|
|
import com.example.demo.domain.vo.*;
|
|
import com.example.demo.mapper.ConsumeMapper;
|
|
import com.example.demo.mapper.RefundMapper;
|
|
import com.example.demo.mapper.UserMapper;
|
|
import com.example.demo.service.AdminService;
|
|
import com.example.demo.service.GeneralService;
|
|
import com.example.demo.service.RefundService;
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageInfo;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.io.Console;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* @program: gold-java
|
|
* @ClassName RefundServiceImpl
|
|
* @description:
|
|
* @author: Double
|
|
* @create: 2025−06-27 11:50
|
|
* @Version 1.0
|
|
**/
|
|
|
|
@Service
|
|
public class RefundServiceImpl implements RefundService {
|
|
|
|
@Autowired
|
|
private RefundMapper refundMapper;
|
|
|
|
@Autowired
|
|
private ConsumeMapper consumeMapper;
|
|
|
|
@Autowired
|
|
private UserMapper userMapper;
|
|
|
|
|
|
//查找全部退款
|
|
@Override
|
|
public PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception{
|
|
PageHelper.startPage(pageNum, pageSize);
|
|
List<RefundUser> refundUsers = refundMapper.selectAll(refundUser);
|
|
return new PageInfo<>(refundUsers);
|
|
}
|
|
|
|
//统计退款金额
|
|
@Override
|
|
public Gold statsGold(RefundUser refundUser) {
|
|
Gold gold = new Gold();
|
|
List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
|
|
|
|
// 初始化累加器
|
|
int permanentGoldSum = 0;
|
|
int freeGoldSum = 0;
|
|
int taskGoldSum = 0;
|
|
|
|
// 遍历推开记录并累加金币
|
|
for (RefundUser user : refundUsers) {
|
|
// 累加永久金币
|
|
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<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser)throws Exception {
|
|
PageHelper.startPage(pageNum, pageSize);
|
|
List<RefundUser> refundUsers = refundMapper.selectBy(refundUser);
|
|
return new PageInfo<>(refundUsers);
|
|
}
|
|
|
|
//添加退款记录
|
|
@Transactional
|
|
@Override
|
|
public Result add(RefundUser refundUser) {
|
|
if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) {
|
|
return Result.error("金币不能为空");
|
|
}
|
|
if (refundUser.getTaskGold() < 0 || refundUser.getFreeGold() < 0 || refundUser.getPermanentGold() < 0) {
|
|
return Result.error("金币不能为负数");
|
|
}
|
|
GoldUser goldUser = userMapper.selectUser(refundUser.getJwcode().toString());
|
|
if(goldUser==null){
|
|
return Result.error("用户不存在");
|
|
}
|
|
UserGoldRecord userGoldRecord = new UserGoldRecord();
|
|
String goodsNameWithOrder = refundUser.getGoodsName();
|
|
String orderCode = "";
|
|
//订单号生成
|
|
if (goodsNameWithOrder != null && goodsNameWithOrder.contains("_")) {
|
|
String[] parts = goodsNameWithOrder.split("_", 2);
|
|
if (parts.length >= 2) {
|
|
// 提取订单号(保留原始前缀)
|
|
orderCode = parts[0]; // XF202506281545524400006580
|
|
|
|
// 提取商品名(处理可能包含下划线的情况)
|
|
String goodsName = parts[1]; // 商品A
|
|
|
|
// 设置属性(添加退款前缀)
|
|
userGoldRecord.setOrderCode("TK" + orderCode); // TKXF202506281545524400006580
|
|
userGoldRecord.setGoodsName(goodsName); // 商品A
|
|
}
|
|
}
|
|
userGoldRecord.setJwcode(refundUser.getJwcode());
|
|
userGoldRecord.setRefundType(refundUser.getRefundType());
|
|
userGoldRecord.setRefundModel(refundUser.getRefundModel());
|
|
userGoldRecord.setPermanentGold(refundUser.getPermanentGold());
|
|
// 获取当前月份(1-12)
|
|
int currentMonth = LocalDate.now().getMonthValue();
|
|
// 根据当前月份设置对应字段
|
|
if (currentMonth >= 1 && currentMonth <= 6) {
|
|
// 1-6月:设置6月额度,12月保持默认值
|
|
userGoldRecord.setFreeJune(0);
|
|
userGoldRecord.setFreeDecember(refundUser.getFreeGold());
|
|
} else {
|
|
// 7-12月:设置12月额度,6月保持默认值
|
|
userGoldRecord.setFreeJune(refundUser.getFreeGold());
|
|
userGoldRecord.setFreeDecember(0);
|
|
}
|
|
//信息输入
|
|
userGoldRecord.setTaskGold(refundUser.getTaskGold());
|
|
userGoldRecord.setSumGold(refundUser.getSumGold());
|
|
userGoldRecord.setPayPlatform("金币系统");
|
|
userGoldRecord.setRemark(refundUser.getRemark());
|
|
userGoldRecord.setAdminId(refundUser.getAdminId());
|
|
userGoldRecord.setType((byte) 2);
|
|
userGoldRecord.setAuditStatus(0);
|
|
userGoldRecord.setCreateTime(new Date());
|
|
List<ConsumeUser> list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode);
|
|
//消费订单号校验
|
|
if (list == null || list.isEmpty()) {
|
|
return Result.error("该用户没有该订单号");
|
|
}else if(list.size()==1){
|
|
ConsumeUser consumeUser = list.getFirst();
|
|
if(consumeUser.getIsRefund().equals(1))
|
|
{
|
|
return Result.error("该订单已被退款");
|
|
}
|
|
}else {
|
|
return Result.error("消费订单重复");
|
|
}
|
|
refundMapper.add(userGoldRecord);
|
|
consumeMapper.updateIsRefund(orderCode);
|
|
return Result.success();
|
|
}
|
|
|
|
//获取退款类型
|
|
@Override
|
|
public List<String> getRefundType() {
|
|
List<String> list = refundMapper.getRefundType();
|
|
List<String> filteredList = list.stream()
|
|
.filter(Objects::nonNull) // 过滤掉 null 值
|
|
.filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
|
|
.collect(Collectors.toList());
|
|
return filteredList;
|
|
}
|
|
|
|
//查找退款商品
|
|
@Override
|
|
public List<RefundUser> selectGoods(Integer jwcode) {
|
|
List<RefundUser> refundUsers = refundMapper.selectGoods(jwcode);
|
|
List<RefundUser> list = new ArrayList<>();
|
|
for (RefundUser record : refundUsers) {
|
|
if (record == null) {
|
|
continue;
|
|
}
|
|
|
|
String orderCode = record.getOrderCode() != null ? record.getOrderCode() : "无订单号";
|
|
String goodsName = record.getGoodsName() != null ? record.getGoodsName() : "无商品名";
|
|
|
|
// 拼接格式:订单号_商品名(例如:XF20250629_商品BC)
|
|
String combined = orderCode + "_" + goodsName;
|
|
RefundUser refundUser = new RefundUser();
|
|
refundUser.setGoodsName(combined);
|
|
refundUser.setSumGold(record.getPermanentGold() + record.getFreeGold() + record.getTaskGold());
|
|
refundUser.setPermanentGold(record.getPermanentGold());
|
|
refundUser.setFreeGold(record.getFreeGold());
|
|
refundUser.setTaskGold(record.getTaskGold());
|
|
list.add(refundUser);
|
|
}
|
|
return list;
|
|
}
|
|
}
|