Browse Source

Merge branch 'milestone-20251203-冲刺计划' into sunjiabei/feature-20251202094523-银行接口同步

sunjiabei/feature-20251202094523-银行接口同步
sunjiabei 1 month ago
parent
commit
cb058642a9
  1. 2
      src/main/java/com/example/demo/config/RedTimeRuleConfig.java
  2. 3
      src/main/java/com/example/demo/controller/coin/ConsumeController.java
  3. 2
      src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java
  4. 2
      src/main/java/com/example/demo/domain/vo/coin/GoldUser.java
  5. 6
      src/main/java/com/example/demo/service/Temporary/RedService.java
  6. 76
      src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java
  7. 2
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  8. 13
      src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java
  9. 15
      src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java
  10. 8
      src/main/java/com/example/demo/serviceImpl/coin/UserServiceImpl.java
  11. 2
      src/main/resources/application-dev.yml
  12. 3
      src/main/resources/application-prod.yml
  13. 3
      src/main/resources/application-test.yml
  14. 4
      src/main/resources/mapper/RedMapper.xml

2
src/main/java/com/example/demo/config/RedTimeRuleConfig.java

@ -13,7 +13,7 @@ import java.time.ZoneId;
@Component
public class RedTimeRuleConfig {
// 充值开放时间2025-12-04 20:00:00北京时间
private LocalDateTime rechargeStartTime = LocalDateTime.of(2025, 12, 4, 20, 0, 0);
private LocalDateTime rechargeStartTime = LocalDateTime.of(2025, 12, 4, 16, 0, 0);
// 消费开放时间2025-12-06 10:00:00北京时间
private LocalDateTime consumeStartTime = LocalDateTime.of(2025, 12, 6, 10, 0, 0);

3
src/main/java/com/example/demo/controller/coin/ConsumeController.java

@ -190,8 +190,7 @@ public class ConsumeController {
//
} catch (Exception e) {
e.printStackTrace();
String translatedErrorMsg = languageTranslationUtil.translate("请查看后端报错信息", lang);
return Result.error(translatedErrorMsg);
return Result.error(e.getMessage());
}
}

2
src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java

@ -81,4 +81,6 @@ public class ConsumeUser implements Serializable {
private List<String> markets; // 地区列表
@ExcelIgnore
private Integer flag; //是否为员工号
@ExcelProperty("折扣金币")
private BigDecimal price; // 折扣金币
}

2
src/main/java/com/example/demo/domain/vo/coin/GoldUser.java

@ -59,4 +59,6 @@ public class GoldUser {
private Date firstRecharge; // 首充日期
@ExcelIgnore
private List<String> markets; // 地区列表
@ExcelIgnore
private BigDecimal red;
}

6
src/main/java/com/example/demo/service/Temporary/RedService.java

@ -14,6 +14,10 @@ import java.math.BigDecimal;
**/
public interface RedService {
BigDecimal selectSum(Integer jwcode, Integer type);
void addAmount(Integer jwcode,BigDecimal sum, Integer type);
void addAmount(Integer jwcode,BigDecimal sum, Integer type);
String sendJwcode(Integer jwcode);
BigDecimal selectRedSum(Integer jwcode);
String sendConsumeJwcode(Integer jwcode, BigDecimal price);
}

76
src/main/java/com/example/demo/serviceImpl/Temporary/RedServiceImpl.java

@ -7,9 +7,13 @@ import com.example.demo.domain.vo.Red;
import com.example.demo.exception.SystemException;
import com.example.demo.mapper.Temporary.RedMapper;
import com.example.demo.service.Temporary.RedService;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
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 java.io.IOException;
@ -33,10 +37,13 @@ import java.time.format.DateTimeFormatter;
@Slf4j
@Service
public class RedServiceImpl implements RedService {
private static final String BASE_URLProd = "http://39.101.133.168:8828/scms";
@Value("${red.url}")
private String BASE_URLProd ;
private static final String BASE_URLDev = "http://gf977328.natappfree.cc";
private static final String PATH = "/api/coupon/IssueRechargeRedPacket";
private static final String PATHRED = "/api/coupon/getTotalDiscount";
private static final String CONSUME_PATH = "/api/coupon/updateCostRedPacket";
private static final HttpClient CLIENT = HttpClient.newHttpClient();
@Autowired
@ -49,9 +56,9 @@ public class RedServiceImpl implements RedService {
throw new BusinessException("未接受到精网号");
}
if (redMapper.selectJwcode(jwcode)==false){
throw new BusinessException("未找到该精网号");
return BigDecimal.valueOf(0);
}
if(redMapper.selectJwcode(jwcode))
if (type == null){
throw new BusinessException("未接受到类型");
}
@ -62,7 +69,8 @@ public class RedServiceImpl implements RedService {
}
@Override
@Transactional(rollbackFor = Exception.class)
// @Transactional(rollbackFor = Exception.class)
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void addAmount(Integer jwcode, BigDecimal sum, Integer type) {
// 1. 基础参数校验
validateParams(jwcode, type, sum);
@ -88,7 +96,7 @@ public class RedServiceImpl implements RedService {
String body = JSON.toJSONString(java.util.Map.of("jwcode", jwcode));
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(BASE_URLDev + PATH)) //URL记得换
.uri(URI.create(BASE_URLProd + PATH)) //URL记得换
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
@ -104,6 +112,61 @@ public class RedServiceImpl implements RedService {
return "{\"success\":false,\"msg\":\"网络异常\"}";
}
}
@Override
public String sendConsumeJwcode(Integer jwcode, BigDecimal price) {
try {
String body = JSON.toJSONString(java.util.Map.of("jwcode", jwcode,"discount",price));
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(BASE_URLProd + CONSUME_PATH)) //URL记得换
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> resp = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
if (resp.statusCode() != 200) {
log.warn("红包接口异常,status:{},body:{}", resp.statusCode(), resp.body());
}
return resp.body();
} catch (IOException | InterruptedException e) {
log.error("调用红包接口失败,jwcode:{}", jwcode, e);
return "{\"success\":false,\"msg\":\"网络异常\"}";
}
}
@Override
public BigDecimal selectRedSum(Integer jwcode) {
try {
String body = JSON.toJSONString(java.util.Map.of("jwcode", jwcode));
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://sb29dfa2.natappfree.cc" + PATHRED)) //URL记得换
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> resp = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
// 解析 JSON
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(resp.body());
// 提取 data 字段
if (rootNode.has("data")) {
JsonNode dataNode = rootNode.get("data");
System.out.println("Data: " + dataNode);
return dataNode.decimalValue();
}
if (resp.statusCode() != 200) {
log.warn("网络异常", resp.statusCode(), resp.body());
}
return BigDecimal.valueOf(0);
} catch (IOException | InterruptedException e) {
log.error("网络异常", jwcode, e);
return BigDecimal.valueOf(0);
}
}
// --- 校验方法 ---
@ -135,9 +198,6 @@ public class RedServiceImpl implements RedService {
}
else if (type == 2) {
// 消费必须 delta < 0或你设计为正数+方向此处按负数扣款
if (delta.compareTo(BigDecimal.ZERO) > 0) {
throw new BusinessException("消费金额应为负数(表示扣款)");
}
if (now.isBefore(timeRuleConfig.getConsumeStartTime())) {
String openTime = timeRuleConfig.getConsumeStartTime()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));

2
src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java

@ -373,7 +373,7 @@ public User getNameAndMarket(Integer jwcode) {
case 3:
cashRecord.setPayType("IOS内购");
cashRecord.setBankCode(gOrder.getIosTransactionId());
cashRecord.setReceivedMarket("3");
cashRecord.setReceivedMarket("4");
cashRecord.setPayload("IOS");
break;
case 5:

13
src/main/java/com/example/demo/serviceImpl/coin/AuditServiceImpl.java

@ -120,16 +120,21 @@ public class AuditServiceImpl implements AuditService {
//累充
/* try {
try {
BigDecimal sum = BigDecimal.valueOf(
order.getPermanentGold())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP) ;
redService.addAmount(order.getJwcode(), sum, 1); // 直接调你写好的方法
} catch (Exception e) {
log.warn("红包累加失败,主流程继续 | jwcode={}", order.getJwcode(), e);
}*/
redService.sendJwcode(order.getJwcode());
}
try {
redService.sendJwcode(order.getJwcode());
log.info("精网号发送成功 | jwcode={}", order.getJwcode());
}catch (Exception e){
log.warn("精网号发送失败,主流程继续 | jwcode={}", order.getJwcode(), e);
}
//erp增加充值数据

15
src/main/java/com/example/demo/serviceImpl/coin/ConsumeServiceImpl.java

@ -11,6 +11,7 @@ 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;
@ -21,6 +22,7 @@ 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;
@ -50,6 +52,9 @@ public class ConsumeServiceImpl implements ConsumeService {
@Autowired
private MarketMapper marketMapper;
@Autowired
private RedService redService;
//消耗明细
@Override
public PageInfo<ConsumeUser> selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser){
@ -191,7 +196,17 @@ public class ConsumeServiceImpl implements ConsumeService {
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.getPrice().subtract(consumeUser.getSumGold())).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP));
// }
return Result.success();
}

8
src/main/java/com/example/demo/serviceImpl/coin/UserServiceImpl.java

@ -8,6 +8,7 @@ import com.example.demo.domain.vo.coin.GoldUser;
import com.example.demo.domain.vo.coin.Result;
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.UserService;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@ -37,6 +39,8 @@ public class UserServiceImpl implements UserService {
@Autowired
private MarketMapper marketMapper;
@Autowired
private RedService redService;
//查找用户部分信息
@Override
@ -52,7 +56,11 @@ public class UserServiceImpl implements UserService {
if (markets.contains("9") || markets.contains("9999")){
markets=null;
}
BigDecimal redSum = redService.selectRedSum(Integer.parseInt(jwcode));
GoldUser user = userMapper.selectUserCard(jwcode,markets);
user.setRed(redSum);
return Result.success(user);
}
else{

2
src/main/resources/application-dev.yml

@ -100,5 +100,7 @@ bean:
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
consume:
url: http://39.101.133.168:8828/hljwgo/api/wallet/pay
red:
url: http://39.101.133.168:8828/scms
server:
port: 10704

3
src/main/resources/application-prod.yml

@ -103,6 +103,7 @@ bean:
url: http://api.homilychart.com/hljwgo/api/wallet/recharge
consume:
url: http://api.homilychart.com/hljwgo/api/wallet/pay
red:
url: https://api.homilychart.com/scms
server:
port: 10705

3
src/main/resources/application-test.yml

@ -100,6 +100,9 @@ bean:
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
consume:
url: http://39.101.133.168:8828/hljwgo/api/wallet/pay
red:
url: http://39.101.133.168:8828/scms
server:
port: 8081

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

@ -4,11 +4,11 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.Temporary.RedMapper">
<insert id="upsertAndAdd" parameterType="map">
INSERT INTO red_account (jwcode, type, sum)
INSERT INTO red (jwcode, type, sum)
VALUES (
#{jwcode},
#{type},
#{sum},
#{sum}
)
ON DUPLICATE KEY UPDATE
sum = sum + #{sum}

Loading…
Cancel
Save