Browse Source

1.2 红包退款

milestone-20251215-红包修改
huangqizhen 1 week ago
parent
commit
e92ee19f4b
  1. 3
      src/main/java/com/example/demo/mapper/Temporary/RedMapper.java
  2. 4
      src/main/java/com/example/demo/service/Temporary/RedService.java
  3. 133
      src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java
  4. 2
      src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
  5. 3
      src/main/resources/mapper/RedMapper.xml

3
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);
}

4
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;
}

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

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

3
src/main/resources/mapper/RedMapper.xml

@ -13,6 +13,9 @@
ON DUPLICATE KEY UPDATE
sum = sum + #{sum}
</insert>
<update id="update">
update red set sum = sum - #{sum} where jwcode = #{jwcode} and type = #{type}
</update>
<select id="selectSum" resultType="java.math.BigDecimal">
select sum from red where jwcode=#{jwcode} and type=#{type}
</select>

Loading…
Cancel
Save