package com.example.demo.serviceImpl.coin; 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.coin.ConsumeUser; import com.example.demo.domain.vo.coin.Gold; import com.example.demo.domain.vo.coin.GoldUser; import com.example.demo.domain.vo.coin.Result; import com.example.demo.exception.SystemException; import com.example.demo.mapper.coin.ConsumeMapper; import com.example.demo.mapper.coin.MarketMapper; import com.example.demo.mapper.coin.UserMapper; import com.example.demo.service.Temporary.RedService; import com.example.demo.service.coin.ConsumeService; import com.example.demo.service.coin.MarketService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; 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.UUID; /** * @program: gold-java * @ClassName ConsumeServiceImpl * @description: 消费模块 * @author: Double * @create: 2025−06-23 13:58 * @Version 1.0 **/ @Slf4j @Service public class ConsumeServiceImpl implements ConsumeService { @Autowired private ConsumeMapper consumeMapper; @Autowired private UserMapper userMapper; @Autowired private MarketMapper marketMapper; @Autowired private RedService redService; //消耗明细 @Override public PageInfo selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser){ //获取市场id List markets = marketMapper.getMarketIds(consumeUser.getMarkets()); consumeUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper List consumeUsers = consumeMapper.selectAll(consumeUser); return new PageInfo<>(consumeUsers); } //消耗金币统计 @Override public Gold statsGold(ConsumeUser consumeUser) { //获取市场id List markets = marketMapper.getMarketIds(consumeUser.getMarkets()); if (markets.contains("9") || markets.contains("9999")){ markets=null; } consumeUser.setMarkets(markets); Gold gold = consumeMapper.sumGold(consumeUser); return gold; } //消耗明细筛选 @Override public PageInfo selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { //获取市场id List markets = marketMapper.getMarketIds(consumeUser.getMarkets()); if (markets.contains("9") || markets.contains("9999")){ markets=null; } consumeUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper List consumeUsers = consumeMapper.selectBy(consumeUser); return new PageInfo<>(consumeUsers); } //新增消耗 @Transactional @Override public Result add(ConsumeUser consumeUser) { if (consumeUser.getTaskGold() == null || consumeUser.getFreeGold() == null || consumeUser.getPermanentGold() == null) { return Result.error("金币数量不能为空"); } if (consumeUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) { return Result.error("金币不能为负数"); } if(consumeUser.getJwcode()<10000000||consumeUser.getJwcode()>99999999) { return Result.error("精网号位数小于8位或大于8位"); } if(consumeUser.getAdminName()==null){ return Result.error("管理员不能为空"); } GoldUser goldUser = userMapper.selectUser(consumeUser.getJwcode().toString()); if (goldUser == null) { return Result.error("用户不存在"); } UserGoldRecord userGoldRecord = new UserGoldRecord(); String orderNumber = UUID.randomUUID().toString().replaceAll("-", ""); //订单号生成 userGoldRecord.setOrderCode("XF_" + orderNumber); userGoldRecord.setJwcode(consumeUser.getJwcode()); userGoldRecord.setGoodsName(consumeUser.getGoodsName()); userGoldRecord.setSumGold(-consumeUser.getSumGold().intValue()); userGoldRecord.setPermanentGold(-consumeUser.getPermanentGold().intValue()); // 获取当前月份(1-12) int currentMonth = LocalDate.now().getMonthValue(); GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString()); if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0 || consumeUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0 || consumeUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) { return Result.error("金币数量不足"); } // 根据当前月份设置对应字段 if (currentMonth >= 1 && currentMonth <= 6) { // 1-6月:设置6月额度,12月保持默认值 if (consumeUser.getFreeGold().compareTo(gold.getNowFreeJune()) > 0) { userGoldRecord.setFreeJune(-gold.getNowFreeJune().intValue()); userGoldRecord.setFreeDecember(-(consumeUser.getFreeGold().subtract(gold.getNowFreeJune())).intValue()); } else { userGoldRecord.setFreeJune(-consumeUser.getFreeGold().intValue()); userGoldRecord.setFreeDecember(0); } } else { // 7-12月:设置12月额度,6月保持默认值 if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember()) > 0) { userGoldRecord.setFreeDecember(-gold.getNowFreeDecember().intValue()); userGoldRecord.setFreeJune(-(consumeUser.getFreeGold().subtract(gold.getNowFreeDecember())).intValue()); } else { userGoldRecord.setFreeDecember(-consumeUser.getFreeGold().intValue()); userGoldRecord.setFreeJune(0); } } //信息输入 userGoldRecord.setTaskGold(-consumeUser.getTaskGold().intValue()); 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()); // if(consumeUser.getJwcode().equals(94226013)){ String result= GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100, userGoldRecord.getRemark(),0, consumeUser.getAdminName(), userGoldRecord.getGoodsName()); // System.out.println("9"+result+"9"); result = result.replaceAll("[\r\n]", ""); //返回状态1加成功2减成功其他失败 -5 金币不足 -6 类型错误 -7签名错误 if(!result.equals("2")){ result= GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100, userGoldRecord.getRemark(), 0, consumeUser.getAdminName(), userGoldRecord.getGoodsName()); //返回状态1加成功2减成功其他失败 -5 金币不足 -6 类型错误 -7签名错误 if(!result.equals("2")){ String errorMsg = "减金币失败,数据未进erp,返回状态:" + result; log.error(errorMsg); // 保留日志记录,便于问题排查 throw new SystemException(errorMsg); // 抛出系统异常,中断流程并传递错误信息 } } consumeMapper.add(userGoldRecord); consumeMapper.updateUserGold(userGoldRecord); User user = new User(); user.setJwcode(userGoldRecord.getJwcode()); user.setCurrentPermanentGold(BigDecimal.valueOf(gold.getNowPermanentGold().intValue() - consumeUser.getPermanentGold().intValue())); user.setCurrentFreeJune(BigDecimal.valueOf(gold.getNowFreeJune().intValue() + userGoldRecord.getFreeJune())); user.setCurrentFreeDecember(BigDecimal.valueOf(gold.getNowFreeDecember().intValue() + userGoldRecord.getFreeDecember())); user.setCurrentTaskGold(BigDecimal.valueOf(gold.getNowTaskGold().intValue() - consumeUser.getTaskGold().intValue())); user.setConsumeNum(gold.getConsumeNum().intValue() + 1); user.setSumConsumePermanent(BigDecimal.valueOf(-consumeUser.getPermanentGold().intValue())); user.setSumConsumeFree(BigDecimal.valueOf(-consumeUser.getFreeGold().intValue())); user.setSumConsumeTask(BigDecimal.valueOf(-consumeUser.getTaskGold().intValue())); userMapper.updateGold(user); //累消 try { BigDecimal sum = (consumeUser.getSumGold()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP ); redService.addAmount(consumeUser.getJwcode(),sum, 2); }catch (Exception e){ log.warn("消耗累加失败,主流程继续 | jwcode={}", consumeUser.getJwcode(), e); } redService.sendConsumeJwcode(consumeUser.getJwcode(),(consumeUser.getPrice().subtract(consumeUser.getSumGold())).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)); // } return Result.success(); } // // @Transactional // @Override // public Result addRefund(ConsumeUser consumeUser) { // if (consumeUser.getTaskGold() == null || consumeUser.getFreeGold() == null || consumeUser.getPermanentGold() == null) { // return Result.error("金币数量不能为空"); // } // if (consumeUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) { // return Result.error("金币不能为负数"); // } // if(consumeUser.getJwcode()<10000000||consumeUser.getJwcode()>99999999) // { // return Result.error("精网号位数小于8位或大于8位"); // } // if(consumeUser.getAdminName()==null){ // return Result.error("管理员不能为空"); // } // GoldUser goldUser = userMapper.selectUser(consumeUser.getJwcode().toString()); // if (goldUser == null) { // return Result.error("用户不存在"); // } // UserGoldRecord userGoldRecord = new UserGoldRecord(); // // String orderNumber = UUID.randomUUID().toString().replaceAll("-", ""); // //订单号生成 // userGoldRecord.setOrderCode("TKCZ_" + orderNumber); // userGoldRecord.setJwcode(consumeUser.getJwcode()); // userGoldRecord.setGoodsName(consumeUser.getGoodsName()); // userGoldRecord.setSumGold(-consumeUser.getSumGold().intValue()); // userGoldRecord.setPermanentGold(-consumeUser.getPermanentGold().intValue()); // // 获取当前月份(1-12) // int currentMonth = LocalDate.now().getMonthValue(); // GoldUser gold = userMapper.selectGold(consumeUser.getJwcode().toString()); // if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0 // || consumeUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0 // || consumeUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) { // return Result.error("金币数量不足"); // } // // 根据当前月份设置对应字段 // if (currentMonth >= 1 && currentMonth <= 6) { // // 1-6月:设置6月额度,12月保持默认值 // if (consumeUser.getFreeGold().compareTo(gold.getNowFreeJune()) > 0) { // userGoldRecord.setFreeJune(-gold.getNowFreeJune().intValue()); // userGoldRecord.setFreeDecember(-(consumeUser.getFreeGold().subtract(gold.getNowFreeJune())).intValue()); // } else { // userGoldRecord.setFreeJune(-consumeUser.getFreeGold().intValue()); // userGoldRecord.setFreeDecember(0); // } // } else { // // 7-12月:设置12月额度,6月保持默认值 // if (consumeUser.getFreeGold().compareTo(gold.getNowFreeDecember()) > 0) { // userGoldRecord.setFreeDecember(-gold.getNowFreeDecember().intValue()); // userGoldRecord.setFreeJune(-(consumeUser.getFreeGold().subtract(gold.getNowFreeDecember())).intValue()); // } else { // userGoldRecord.setFreeDecember(-consumeUser.getFreeGold().intValue()); // userGoldRecord.setFreeJune(0); // } // } // //信息输入 // userGoldRecord.setTaskGold(-consumeUser.getTaskGold().intValue()); // userGoldRecord.setRemark(consumeUser.getRemark()); // userGoldRecord.setType((byte) 2); // userGoldRecord.setAuditStatus(0); // userGoldRecord.setPayPlatform("金币系统"); // userGoldRecord.setRefundType("金币退款"); // userGoldRecord.setGoodsName("金币退款"); // userGoldRecord.setRefundModel((byte) 0); // userGoldRecord.setAdminId(consumeUser.getAdminId()); // userGoldRecord.setCreateTime(new Date()); // userGoldRecord.setPayTime(new Date()); // consumeMapper.addRefund(userGoldRecord); // consumeMapper.updateUserGold(userGoldRecord); // User user = new User(); // user.setJwcode(userGoldRecord.getJwcode()); // user.setCurrentPermanentGold(BigDecimal.valueOf(gold.getNowPermanentGold().intValue() - consumeUser.getPermanentGold().intValue())); // user.setCurrentFreeJune(BigDecimal.valueOf(gold.getNowFreeJune().intValue() + userGoldRecord.getFreeJune())); // user.setCurrentFreeDecember(BigDecimal.valueOf(gold.getNowFreeDecember().intValue() + userGoldRecord.getFreeDecember())); // user.setCurrentTaskGold(BigDecimal.valueOf(gold.getNowTaskGold().intValue() - consumeUser.getTaskGold().intValue())); // user.setConsumeNum(gold.getConsumeNum().intValue() + 1); // user.setSumConsumePermanent(BigDecimal.valueOf(-consumeUser.getPermanentGold().intValue())); // user.setSumConsumeFree(BigDecimal.valueOf(-consumeUser.getFreeGold().intValue())); // user.setSumConsumeTask(BigDecimal.valueOf(-consumeUser.getTaskGold().intValue())); // userMapper.updateGold(user); // // if(consumeUser.getJwcode().equals(94226013)){ // GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, // (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100, // userGoldRecord.getRemark(), ((double) userGoldRecord.getPermanentGold() / 100), consumeUser.getAdminName(), userGoldRecord.getGoodsName()); // // } // return Result.success(); // } }