From e92ee19f4b7eebf0186e133709e9e27c77a4af89 Mon Sep 17 00:00:00 2001
From: huangqizhen <15552608129@163.com>
Date: Fri, 2 Jan 2026 11:46:20 +0800
Subject: [PATCH] =?UTF-8?q?1.2=20=E7=BA=A2=E5=8C=85=E9=80=80=E6=AC=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../example/demo/mapper/Temporary/RedMapper.java | 3 +
.../example/demo/service/Temporary/RedService.java | 4 +
.../demo/serviceImpl/Temporary/RedServiceImpl.java | 133 ++++++++++++++++++---
.../demo/serviceImpl/coin/ConsumeServiceImpl.java | 2 +-
src/main/resources/mapper/RedMapper.xml | 3 +
5 files changed, 129 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/example/demo/mapper/Temporary/RedMapper.java b/src/main/java/com/example/demo/mapper/Temporary/RedMapper.java
index 9dd1af7..909da10 100644
--- a/src/main/java/com/example/demo/mapper/Temporary/RedMapper.java
+++ b/src/main/java/com/example/demo/mapper/Temporary/RedMapper.java
@@ -22,4 +22,7 @@ public interface RedMapper {
int upsertAndAdd(@Param("jwcode") Integer jwcode,
@Param("type") Integer type,
@Param("sum") BigDecimal sum);
+ int update(@Param("jwcode") Integer jwcode,
+ @Param("type") Integer type,
+ @Param("sum") BigDecimal sum);
}
diff --git a/src/main/java/com/example/demo/service/Temporary/RedService.java b/src/main/java/com/example/demo/service/Temporary/RedService.java
index 462886a..98a3d88 100644
--- a/src/main/java/com/example/demo/service/Temporary/RedService.java
+++ b/src/main/java/com/example/demo/service/Temporary/RedService.java
@@ -2,6 +2,8 @@ package com.example.demo.service.Temporary;
import com.example.demo.domain.vo.Red;
import com.example.demo.domain.vo.RedList;
+import com.example.demo.domain.vo.coin.ConsumeUser;
+import com.example.demo.domain.vo.coin.Result;
import java.math.BigDecimal;
import java.util.List;
@@ -29,4 +31,6 @@ public interface RedService {
String checkRed(BigDecimal price,String linkId) throws Exception;
//修改订单状态
void updateOrderStatus(String linkId) throws Exception;
+ //红包不足抵扣金额
+ Result updateRed(ConsumeUser consumeUser) throws Exception;
}
diff --git a/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java
index 2229cb5..7c68626 100644
--- a/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java
@@ -3,34 +3,31 @@ package com.example.demo.serviceImpl.Temporary;
import com.alibaba.fastjson.JSON;
import com.example.demo.Util.BaseDES3;
import com.example.demo.Util.BusinessException;
+import com.example.demo.Util.GoldTistV2;
import com.example.demo.config.RedTimeRuleConfig;
-import com.example.demo.domain.vo.Red;
+import com.example.demo.domain.entity.User;
+import com.example.demo.domain.entity.UserGoldRecord;
import com.example.demo.domain.vo.RedList;
+import com.example.demo.domain.vo.coin.ConsumeUser;
+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.Temporary.RedMapper;
+import com.example.demo.mapper.coin.ConsumeMapper;
+import com.example.demo.mapper.coin.UserMapper;
import com.example.demo.service.Temporary.RedService;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.http.*;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
import java.io.IOException;
import java.math.BigDecimal;
-import java.net.ConnectException;
-import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
@@ -38,12 +35,10 @@ import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeoutException;
+import java.util.*;
/**
* @program: GOLD
@@ -77,6 +72,10 @@ public class RedServiceImpl implements RedService {
private RedMapper redMapper;
@Autowired
private RedTimeRuleConfig timeRuleConfig;
+ @Autowired
+ private ConsumeMapper consumeMapper;
+ @Autowired
+ private UserMapper userMapper;
@Override
public BigDecimal selectSum(Integer jwcode,Integer type) {
if (jwcode == null){
@@ -294,6 +293,110 @@ public class RedServiceImpl implements RedService {
throw new Exception("系统异常");
}
}
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public Result updateRed(ConsumeUser consumeUser) throws Exception {
+ 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("红包不足金币抵扣");
+ 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) 1);
+ userGoldRecord.setPayPlatform("金币系统");
+ userGoldRecord.setAdminId(consumeUser.getAdminId());
+ userGoldRecord.setAuditStatus(1);
+ userGoldRecord.setCreateTime(new Date());
+ userGoldRecord.setPrice(consumeUser.getPrice());
+ userGoldRecord.setPayTime(new Date());
+ 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.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());
+ user.setSumConsumePermanent(BigDecimal.valueOf(consumeUser.getPermanentGold().intValue()));
+ user.setSumConsumeFree(BigDecimal.valueOf(consumeUser.getFreeGold().intValue()));
+ user.setSumConsumeTask(BigDecimal.valueOf(consumeUser.getTaskGold().intValue()));
+ userMapper.updateGold(user);
+ redMapper.update(userGoldRecord.getJwcode(),consumeUser.getFlag(),userGoldRecord.getPrice());
+ return Result.success();
+ }
@Override
public BigDecimal selectRedSum(Integer jwcode) {
diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
index 944af60..2456bff 100644
--- a/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
@@ -94,7 +94,7 @@ public class ConsumeServiceImpl implements ConsumeService {
}
//新增消耗
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public Result add(ConsumeUser consumeUser) {
if (consumeUser.getTaskGold() == null || consumeUser.getFreeGold() == null || consumeUser.getPermanentGold() == null) {
diff --git a/src/main/resources/mapper/RedMapper.xml b/src/main/resources/mapper/RedMapper.xml
index 82d355c..160dd3e 100644
--- a/src/main/resources/mapper/RedMapper.xml
+++ b/src/main/resources/mapper/RedMapper.xml
@@ -13,6 +13,9 @@
ON DUPLICATE KEY UPDATE
sum = sum + #{sum}
+
+ update red set sum = sum - #{sum} where jwcode = #{jwcode} and type = #{type}
+