配置迁移到表

This commit is contained in:
2026-05-30 22:03:52 +08:00
parent 1b596e10a7
commit bf685417e7
7 changed files with 194 additions and 12 deletions

View File

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.rj.config.HxrAdminProperties;
import com.rj.dto.hxr.HxrGoodsApiContext;
import com.rj.dto.hxr.HxrLbGoodsSelectResponse;
import com.rj.util.HxrGoodsSignUtil;
import lombok.RequiredArgsConstructor;
@@ -49,7 +50,7 @@ public class HxrAdminGoodsService {
private final HxrAdminProperties properties;
/**
* 分页拉取货品列表。
* 分页拉取货品列表(使用 {@code hxr.admin} 配置文件,兼容旧调用)
*
* @param page 页码,从 1 开始
* @param token 可选;非空时作为请求头 token否则使用 {@code hxr.admin.goods-api-token}
@@ -65,11 +66,45 @@ public class HxrAdminGoodsService {
log.warn("hxr.admin 未配置 goods-api-app-str跳过 /api/order/goods");
return Optional.empty();
}
HxrGoodsApiContext ctx = new HxrGoodsApiContext(
stripQuery(properties.getGoodsApiUrl()),
GOODS_PAGE_SIZE,
properties.getGoodsApiOrigin(),
properties.getGoodsApiReferer(),
resolvedToken,
appStr.trim());
return fetchGoodsPage(page, ctx);
}
/**
* 分页拉取货品列表(使用租户 {@code lb_third_integration_config} 解析出的运行时配置)。
*/
public Optional<HxrLbGoodsSelectResponse> fetchGoodsPage(int page, HxrGoodsApiContext ctx) throws Exception {
if (ctx == null) {
log.warn("货品 API 配置为空,跳过 /api/order/goods");
return Optional.empty();
}
String resolvedToken = ctx.token();
if (resolvedToken == null || resolvedToken.isBlank()) {
log.warn("未提供 token跳过 /api/order/goods");
return Optional.empty();
}
String appStr = ctx.appStr();
if (appStr == null || appStr.isBlank()) {
log.warn("未配置 goodsApiAppStr跳过 /api/order/goods");
return Optional.empty();
}
String goodsApiBaseUrl = ctx.goodsApiBaseUrl();
if (goodsApiBaseUrl == null || goodsApiBaseUrl.isBlank()) {
log.warn("未配置 goodsApiBaseUrl跳过 /api/order/goods");
return Optional.empty();
}
int pageLimit = ctx.pageLimit() > 0 ? ctx.pageLimit() : GOODS_PAGE_SIZE;
int safePage = Math.max(1, page);
String uri = UriComponentsBuilder.fromUriString(properties.getGoodsApiUrl())
String uri = UriComponentsBuilder.fromUriString(goodsApiBaseUrl)
.replaceQueryParam("page", safePage)
.replaceQueryParam("limit", GOODS_PAGE_SIZE)
.replaceQueryParam("limit", pageLimit)
.build()
.encode()
.toUriString();
@@ -78,7 +113,7 @@ public class HxrAdminGoodsService {
String noncestr = randomNoncestr();
Map<String, Object> signParams = new LinkedHashMap<>();
signParams.put("page", safePage);
signParams.put("limit", GOODS_PAGE_SIZE);
signParams.put("limit", pageLimit);
signParams.put("timestamp", timestamp);
signParams.put("noncestr", noncestr);
String sign = HxrGoodsSignUtil.computeSign(signParams, appStr.trim());
@@ -93,8 +128,8 @@ public class HxrAdminGoodsService {
.timeout(Duration.ofSeconds(120))
.header("Accept", "application/json,*/*")
.header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
.header("Origin", properties.getGoodsApiOrigin())
.header("Referer", properties.getGoodsApiReferer())
.header("Origin", ctx.origin())
.header("Referer", ctx.referer())
.header("User-Agent", USER_AGENT)
.header("token", resolvedToken)
.header("S", sign)
@@ -136,6 +171,15 @@ public class HxrAdminGoodsService {
return Optional.of(body);
}
/** 从完整 URL 中去掉 query供配置文件回退路径使用。 */
private static String stripQuery(String url) {
if (url == null || url.isBlank()) {
return url;
}
int q = url.indexOf('?');
return q >= 0 ? url.substring(0, q) : url;
}
/** 优先使用入参 token否则回退到配置 {@code goods-api-token}。 */
private String resolveToken(String token) {
if (token != null && !token.isBlank()) {