|
|
package com.example.demo.serviceImpl.coin;
import com.example.demo.domain.entity.UserGoldRecord;import com.example.demo.mapper.coin.*;import com.example.demo.service.coin.MarketService;import com.example.demo.service.coin.RefundService;import com.example.demo.Util.LanguageTranslationUtil;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 **/
@Servicepublic class RefundServiceImpl implements RefundService {
@Autowired private RefundMapper refundMapper;
@Autowired private ConsumeMapper consumeMapper;
@Autowired private UserMapper userMapper;
@Autowired private MarketMapper marketMapper;
@Autowired private RechargeMapper rechargeMapper;
// 注入多语言工具类
@Autowired private LanguageTranslationUtil languageTranslationUtil;
//查找全部退款
@Override public PageInfo<RefundUser> selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception { List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets()); refundUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
List<RefundUser> refundUsers = refundMapper.selectAll(refundUser); return new PageInfo<>(refundUsers); }
//统计退款金额
@Override public Gold statsGold(RefundUser refundUser) { List<String> 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<RefundUser> selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception { List<String> markets = marketMapper.getMarketIds(refundUser.getMarkets()); if (markets.contains("9") || markets.contains("9999")) { markets = null; } refundUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
List<RefundUser> refundUsers = refundMapper.selectBy(refundUser); return new PageInfo<>(refundUsers); }
//添加退款记录
@Transactional @Override public Result add(RefundUser refundUser, String lang) { if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) { String errorMsg = languageTranslationUtil.translate("金币不能为空", lang); return Result.error(errorMsg); } if (refundUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 || refundUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || refundUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) { String errorMsg = languageTranslationUtil.translate("金币不能为负数", lang); return Result.error(errorMsg); } if (refundUser.getJwcode() < 10000000 || refundUser.getJwcode() > 99999999) { String errorMsg = languageTranslationUtil.translate("精网号位数小于8位或大于8位", lang); return Result.error(errorMsg); } GoldUser goldUser = userMapper.selectUser(refundUser.getJwcode().toString()); if (goldUser == null) { String errorMsg = languageTranslationUtil.translate("用户不存在", lang); return Result.error(errorMsg); } UserGoldRecord userGoldRecord = new UserGoldRecord(); if(refundUser.getOrderCode()==null|| refundUser.getOrderCode().isEmpty()){ String errorMsg = languageTranslationUtil.translate("订单号不能为空", lang); return Result.error(errorMsg); } String goodsName = ""; if(refundUser.getGoodsName()==null|| refundUser.getGoodsName().isEmpty()){ goodsName = languageTranslationUtil.translate("空", lang); }else { 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()); // 获取当前月份(1-12)
int currentMonth = LocalDate.now().getMonthValue(); // 根据当前月份设置对应字段
if(Objects.equals(refundUser.getRefundType(), "商品退款")){ 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.setPermanentGold(refundUser.getPermanentGold().intValue()); userGoldRecord.setTaskGold(refundUser.getTaskGold().intValue()); userGoldRecord.setSumGold(refundUser.getSumGold().intValue()); }else{ GoldUser gold = userMapper.selectGold(refundUser.getJwcode().toString()); if (refundUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0 || refundUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0 || refundUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) { String errorMsg = languageTranslationUtil.translate("金币数量不足", lang); return Result.error(errorMsg); } // 根据当前月份设置对应字段
if (currentMonth >= 1 && currentMonth <= 6) { // 1-6月:设置6月额度,12月保持默认值
if (refundUser.getFreeGold().compareTo(gold.getNowFreeJune()) > 0) { userGoldRecord.setFreeJune(-gold.getNowFreeJune().intValue()); userGoldRecord.setFreeDecember(-(refundUser.getFreeGold().subtract(gold.getNowFreeJune())).intValue()); } else { userGoldRecord.setFreeJune(-refundUser.getFreeGold().intValue()); userGoldRecord.setFreeDecember(0); } } else { // 7-12月:设置12月额度,6月保持默认值
if (refundUser.getFreeGold().compareTo(gold.getNowFreeDecember()) > 0) { userGoldRecord.setFreeDecember(-gold.getNowFreeDecember().intValue()); userGoldRecord.setFreeJune(-(refundUser.getFreeGold().subtract(gold.getNowFreeDecember())).intValue()); } else { userGoldRecord.setFreeDecember(-refundUser.getFreeGold().intValue()); userGoldRecord.setFreeJune(0); } } //信息输入
userGoldRecord.setPermanentGold(-refundUser.getPermanentGold().intValue()); userGoldRecord.setTaskGold(-refundUser.getTaskGold().intValue()); userGoldRecord.setSumGold(-refundUser.getSumGold().intValue()); }
userGoldRecord.setPayPlatform("金币系统"); userGoldRecord.setRemark(refundUser.getRemark()); if (refundUser.getLinkId() != null&&refundUser.getPrice()!=null){ userGoldRecord.setPrice(refundUser.getPrice()); userGoldRecord.setLinkId((refundUser.getLinkId()));} userGoldRecord.setAdminId(refundUser.getAdminId()); userGoldRecord.setType((byte) 2); userGoldRecord.setAuditStatus(0); userGoldRecord.setCreateTime(new Date()); userGoldRecord.setUpdateTime(new Date()); List<ConsumeUser> list1 = consumeMapper.selectOrderCodeByJwcode(refundUser); List<RechargeUser> list2 = rechargeMapper.selectOrderCodeByJwcode(refundUser); if(Objects.equals(refundUser.getRefundType(), "商品退款")){ //消费订单号校验
if (list1 == null || list1.isEmpty()) { String errorMsg = languageTranslationUtil.translate("该用户没有该订单号", lang); return Result.error(errorMsg); } else if (list1.size() == 1) { ConsumeUser consumeUser = list1.getFirst(); if (consumeUser.getIsRefund().equals(1)) { String errorMsg = languageTranslationUtil.translate("该订单已被退款或待审核", lang); return Result.error(errorMsg); } } else { String errorMsg = languageTranslationUtil.translate("订单重复", lang); return Result.error(errorMsg); } }else{ //充值订单号校验
if (list2 == null || list2.isEmpty()) { String errorMsg = languageTranslationUtil.translate("该用户没有该订单号", lang); return Result.error(errorMsg); } else if (list2.size() == 1) { RechargeUser rechargeUser = list2.getFirst(); if (rechargeUser.getIsRefund().equals(1)) { String errorMsg = languageTranslationUtil.translate("该订单已被退款或待审核", lang); return Result.error(errorMsg); } } else { String errorMsg = languageTranslationUtil.translate("订单重复", lang); return Result.error(errorMsg); } } refundMapper.add(userGoldRecord); consumeMapper.updateIsRefund(orderCode); String successMsg = languageTranslationUtil.translate("操作成功", lang); return Result.success(successMsg); }
//获取退款类型
@Override public List<String> getRefundType(String lang) { List<String> list = refundMapper.getRefundType(); List<String> filteredList = list.stream() .filter(Objects::nonNull) // 过滤掉 null 值
.filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
.map(type -> languageTranslationUtil.translate(type, lang)) // 翻译每个类型
.collect(Collectors.toList()); return filteredList; }
//查找退款商品
@Override public List<RefundUser> selectGoods(RefundUser refundUser, String lang) { List<RefundUser> refundUsers = refundMapper.selectGoods(refundUser); List<RefundUser> list = new ArrayList<>(); for (RefundUser record : refundUsers) { if (record == null) { continue; }
String orderCode = record.getOrderCode() != null ? record.getOrderCode() : languageTranslationUtil.translate("无订单号", lang); String goodsName = record.getGoodsName() != null ? record.getGoodsName() : languageTranslationUtil.translate("无商品名", lang);
BigDecimal permanentGold = record.getPermanentGold() != null ? record.getPermanentGold() : BigDecimal.ZERO; BigDecimal freeGold = record.getFreeGold() != null ? record.getFreeGold() : BigDecimal.ZERO; BigDecimal taskGold = record.getTaskGold() != null ? record.getTaskGold() : BigDecimal.ZERO;
RefundUser newRefundUser = new RefundUser(); newRefundUser.setOrderCode(orderCode); newRefundUser.setGoodsName(goodsName); newRefundUser.setSumGold(permanentGold.add(freeGold).add(taskGold)); newRefundUser.setPermanentGold(record.getPermanentGold()); newRefundUser.setFreeGold(record.getFreeGold()); newRefundUser.setTaskGold(record.getTaskGold()); newRefundUser.setIsRefund(record.getIsRefund()); newRefundUser.setType(record.getType()); list.add(newRefundUser); } return list; }
}
|