|
|
package com.example.demo.serviceImpl.coin;
import com.example.demo.Util.GoldTistV2;import com.example.demo.Util.SimpleIdGenerator;import com.example.demo.domain.entity.User;import com.example.demo.domain.entity.UserGoldRecord;import com.example.demo.domain.vo.coin.*;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.*;import java.util.function.Function;import java.util.stream.Collectors;
/** * @program: gold-java * @ClassName ConsumeServiceImpl * @description: 消费模块 * @author: Double * @create: 2025−06-23 13:58 * @Version 1.0 **/@Slf4j@Servicepublic class ConsumeServiceImpl implements ConsumeService {
@Autowired private ConsumeMapper consumeMapper;
@Autowired private UserMapper userMapper;
@Autowired private MarketMapper marketMapper;
@Autowired private RedService redService;
//消耗明细
@Override public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser){ //获取市场id
List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets()); consumeUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
List<ConsumeUser> consumeUsers = consumeMapper.selectAll(consumeUser); return new PageInfo<>(consumeUsers); }
//消耗金币统计
@Override public Gold statsGold(ConsumeUser consumeUser) { //获取市场id
List<String> 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<ConsumeUser> selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser) { //获取市场id
List<String> markets = marketMapper.getMarketIds(consumeUser.getMarkets()); if (markets.contains("9") || markets.contains("9999")){ markets=null; } consumeUser.setMarkets(markets); PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
List<ConsumeUser> list = consumeMapper.selectBy(consumeUser); // 构造退款订单号
List<String> refundOrderCodes = list.stream() .filter(v -> v.getIsRefund() != null && v.getIsRefund() == 1) .map(v -> "TK_" + v.getOrderCode()) .collect(Collectors.toList());
// 查询退款订单
List<ConsumeUser> refundList = consumeMapper.selectRefund(refundOrderCodes);
// 退款订单转 Map(order_code → refund)
Map<String, ConsumeUser> refundMap = refundList.stream() .collect(Collectors.toMap( ConsumeUser::getOrderCode, Function.identity(), (a, b) -> a ));
// 组装退款信息
for (ConsumeUser vo : list) { ConsumeUser refund = refundMap.get("TK_" + vo.getOrderCode()); if (refund != null) { vo.setRefundSumGold(refund.getSumGold()); vo.setRefundPermanentGold(refund.getPermanentGold()); BigDecimal refundFree = (refund.getFreeGold() == null ? BigDecimal.ZERO : refund.getFreeGold()); vo.setRefundFreeGold(refundFree);
vo.setRefundTaskGold(refund.getTaskGold()); vo.setRefundModel(refund.getRefundModel()); } else { // 当没有退款数据时,设置默认值为0
vo.setRefundSumGold(BigDecimal.ZERO); vo.setRefundPermanentGold(BigDecimal.ZERO); vo.setRefundFreeGold(BigDecimal.ZERO); vo.setRefundTaskGold(BigDecimal.ZERO); vo.setRefundModel(null); } }
return new PageInfo<>(list); }
//新增消耗
@Transactional(rollbackFor = Exception.class) @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.setPrice( consumeUser.getPrice()); userGoldRecord.setPayTime(new Date()); userGoldRecord.setLinkId(SimpleIdGenerator.generateId());
if (consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO)!=0||consumeUser.getFreeGold().compareTo(BigDecimal.ZERO)!=0||consumeUser.getTaskGold().compareTo(BigDecimal.ZERO)!=0){ // if(consumeUser.getJwcode().equals(94226013)){
String result = GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) / 100, userGoldRecord.getLinkId(), 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.getLinkId(), 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); // 抛出系统异常,中断流程并传递错误信息
} } } //0金币消耗,往erp传一条金币为空的记录
else if (consumeUser.getPermanentGold().compareTo(BigDecimal.ZERO)==0&&consumeUser.getFreeGold().compareTo(BigDecimal.ZERO)==0&&consumeUser.getTaskGold().compareTo(BigDecimal.ZERO)==0){ GoldTistV2.addCoinRecordNew(String.valueOf(consumeUser.getJwcode()), consumeUser.getRemark(),consumeUser.getAdminName(),consumeUser.getGoodsName()); } 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.getPrice()).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.getRedIds(),userGoldRecord.getLinkId()); // }
//data返回订单号和创建时间
OrderResultVO resultVO = OrderResultVO.build("XF_" + orderNumber,userGoldRecord.getCreateTime()); return Result.success(resultVO); }
@Override public Result addDC(ConsumeUser consumeUser) { if (consumeUser.getJwcode()==null||consumeUser.getJwcode()<10000000||consumeUser.getJwcode()>99999999){ throw new SystemException("精网号位数小于8位或大于8位"); } if (consumeUser.getSumGold()==null||consumeUser.getSumGold().compareTo(BigDecimal.ZERO)<0){ throw new SystemException("消费金币不能小于0"); } String result = GoldTistV2.addDCCoinNew(consumeUser.getJwcode().toString(),68,-consumeUser.getSumGold().doubleValue(),"","DC金币消耗",0,"DC","DC金币消耗");
String cleanResult = result.replaceAll("\\s+", ""); if ("2".equals(cleanResult)) { return Result.success(); } else { throw new SystemException(String.format("金币发放失败:类型错误(%S),jwcode=%s", result,consumeUser.getJwcode())); }
}//
// @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();
// }
}
|