|
|
|
@ -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) { |
|
|
|
|