package com.example.demo.serviceImpl.coin; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.mapper.coin.ConsumeMapper; import com.example.demo.mapper.coin.MarketMapper; import com.example.demo.mapper.coin.RefundMapper; import com.example.demo.mapper.coin.UserMapper; import com.example.demo.service.coin.MarketService; import com.example.demo.service.coin.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 com.example.demo.domain.vo.coin.*; import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; 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; @Autowired private MarketMapper marketMapper; //查找全部退款 @Override public PageInfo selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception { List markets = marketMapper.getMarketIds(refundUser.getMarkets()); refundUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); List refundUsers = refundMapper.selectAll(refundUser); return new PageInfo<>(refundUsers); } //统计退款金额 @Override public Gold statsGold(RefundUser refundUser) { List markets = marketMapper.getMarketIds(refundUser.getMarkets()); if (markets.contains("9") || markets.contains("9999")) { markets = null; } refundUser.setMarkets(markets); Gold gold = refundMapper.sumGold(refundUser); return gold; } //查找筛选退款 @Override public PageInfo selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception { List markets = marketMapper.getMarketIds(refundUser.getMarkets()); if (markets.contains("9") || markets.contains("9999")) { markets = null; } refundUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); List 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().compareTo(BigDecimal.ZERO) < 0 || refundUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || refundUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) { return Result.error("金币不能为负数"); } if (refundUser.getJwcode() < 10000000 || refundUser.getJwcode() > 99999999) { return Result.error("精网号位数小于8位或大于8位"); } GoldUser goldUser = userMapper.selectUser(refundUser.getJwcode().toString()); if (goldUser == null) { return Result.error("用户不存在"); } UserGoldRecord userGoldRecord = new UserGoldRecord(); if(refundUser.getGoodsName()==null|| refundUser.getGoodsName().isEmpty()){ return Result.error("商品名称不能为空"); } if(refundUser.getOrderCode()==null|| refundUser.getOrderCode().isEmpty()){ return Result.error("订单号不能为空"); } String goodsName = refundUser.getGoodsName(); String orderCode = refundUser.getOrderCode(); userGoldRecord.setGoodsName(goodsName); // 商品A userGoldRecord.setOrderCode("TK_" + orderCode); // TKXF202506281545524400006580 userGoldRecord.setJwcode(refundUser.getJwcode()); userGoldRecord.setRefundType(refundUser.getRefundType()); userGoldRecord.setRefundModel(refundUser.getRefundModel()); userGoldRecord.setPermanentGold(refundUser.getPermanentGold().intValue()); // 获取当前月份(1-12) int currentMonth = LocalDate.now().getMonthValue(); // 根据当前月份设置对应字段 if (currentMonth >= 1 && currentMonth <= 6) { // 1-6月:设置6月额度,12月保持默认值 userGoldRecord.setFreeJune(0); userGoldRecord.setFreeDecember(refundUser.getFreeGold().intValue()); } else { // 7-12月:设置12月额度,6月保持默认值 userGoldRecord.setFreeJune(refundUser.getFreeGold().intValue()); userGoldRecord.setFreeDecember(0); } //信息输入 userGoldRecord.setTaskGold(refundUser.getTaskGold().intValue()); userGoldRecord.setSumGold(refundUser.getSumGold().intValue()); userGoldRecord.setPayPlatform("金币系统"); userGoldRecord.setRemark(refundUser.getRemark()); userGoldRecord.setAdminId(refundUser.getAdminId()); userGoldRecord.setType((byte) 2); userGoldRecord.setAuditStatus(0); userGoldRecord.setCreateTime(new Date()); List 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 getRefundType() { List list = refundMapper.getRefundType(); List filteredList = list.stream() .filter(Objects::nonNull) // 过滤掉 null 值 .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串 .collect(Collectors.toList()); return filteredList; } //查找退款商品 @Override public List selectGoods(Integer jwcode) { List refundUsers = refundMapper.selectGoods(jwcode); List 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.setOrderCode(orderCode); refundUser.setGoodsName(goodsName); refundUser.setSumGold(record.getPermanentGold().add(record.getFreeGold()).add(record.getTaskGold())); refundUser.setPermanentGold(record.getPermanentGold()); refundUser.setFreeGold(record.getFreeGold()); refundUser.setTaskGold(record.getTaskGold()); list.add(refundUser); } return list; } }