feat(erp):优化品牌商标缓存与方舟API调用逻辑
- 品牌商标缓存服务增加一天内去重保存逻辑- 方舟API调用支持TOKEN失效自动重新注册 - 增加证书验证失败重试机制 - 修复代理池API签名密钥 -优化商标检查面板完成状态计算逻辑- 更新应用配置注释格式
This commit is contained in:
@@ -30,11 +30,22 @@ public class BrandTrademarkCacheServiceImpl implements BrandTrademarkCacheServic
|
||||
|
||||
@Override
|
||||
public void saveResults(Map<String, Boolean> results) {
|
||||
LocalDateTime cutoffTime = LocalDateTime.now().minusDays(1);
|
||||
results.forEach((brand, registered) -> {
|
||||
BrandTrademarkCacheEntity entity = new BrandTrademarkCacheEntity();
|
||||
entity.setBrand(brand);
|
||||
entity.setRegistered(registered);
|
||||
repository.save(entity);
|
||||
repository.findByBrandAndCreatedAtAfter(brand, cutoffTime)
|
||||
.ifPresentOrElse(
|
||||
existing -> {
|
||||
existing.setRegistered(registered);
|
||||
existing.setCreatedAt(LocalDateTime.now());
|
||||
repository.save(existing);
|
||||
},
|
||||
() -> {
|
||||
BrandTrademarkCacheEntity entity = new BrandTrademarkCacheEntity();
|
||||
entity.setBrand(brand);
|
||||
entity.setRegistered(registered);
|
||||
repository.save(entity);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.client.ResourceAccessException;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@@ -97,10 +98,11 @@ public class FangzhouApiServiceImpl implements IFangzhouApiService {
|
||||
String result = restTemplate.postForObject(FANGZHOU_API_URL, requestEntity, String.class);
|
||||
JsonNode json = objectMapper.readTree(result);
|
||||
|
||||
// 处理 Token 过期,自动刷新重试
|
||||
if (json.get("S").asInt() == TOKEN_EXPIRED_CODE) {
|
||||
logger.info("Token 过期,刷新后重试");
|
||||
String newToken = refreshToken();
|
||||
// 处理 Token 失效
|
||||
int statusCode = json.get("S").asInt();
|
||||
if (statusCode == TOKEN_EXPIRED_CODE || statusCode == -1002) {
|
||||
String newToken = statusCode == -1002 ? getToken() : refreshToken();
|
||||
logger.info("Token 失效({}), {}后重试", statusCode, statusCode == -1002 ? "重新注册" : "刷新");
|
||||
formData.set("t", newToken);
|
||||
formData.set("s", md5(ts + data + API_SECRET));
|
||||
requestEntity = new HttpEntity<>(formData, headers);
|
||||
@@ -109,6 +111,27 @@ public class FangzhouApiServiceImpl implements IFangzhouApiService {
|
||||
}
|
||||
|
||||
return json;
|
||||
} catch (ResourceAccessException e) {
|
||||
logger.warn("证书验证失败,尝试重新注册: {}", e.getMessage());
|
||||
String newToken = refreshToken();
|
||||
long ts = System.currentTimeMillis();
|
||||
MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
|
||||
formData.add("c", command);
|
||||
formData.add("d", data);
|
||||
formData.add("t", newToken);
|
||||
formData.add("s", md5(ts + data + API_SECRET));
|
||||
formData.add("ts", String.valueOf(ts));
|
||||
formData.add("website", "1");
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
||||
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(formData, headers);
|
||||
try {
|
||||
String result = restTemplate.postForObject(FANGZHOU_API_URL, requestEntity, String.class);
|
||||
return objectMapper.readTree(result);
|
||||
} catch (Exception ex) {
|
||||
logger.error("重试失败", ex);
|
||||
throw new RuntimeException("调用 API 失败: " + ex.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("调用方舟精选 API 失败", e);
|
||||
throw new RuntimeException("调用 API 失败: " + e.getMessage());
|
||||
@@ -137,10 +160,11 @@ public class FangzhouApiServiceImpl implements IFangzhouApiService {
|
||||
String result = restTemplate.postForObject(FANGZHOU_API_URL, requestEntity, String.class);
|
||||
JsonNode json = objectMapper.readTree(result);
|
||||
|
||||
// 处理 Token 过期
|
||||
if (json.get("S").asInt() == TOKEN_EXPIRED_CODE) {
|
||||
logger.info("Token 过期,刷新后重试");
|
||||
String newToken = refreshToken();
|
||||
// 处理 Token 失效
|
||||
int statusCode = json.get("S").asInt();
|
||||
if (statusCode == TOKEN_EXPIRED_CODE || statusCode == -1002) {
|
||||
String newToken = statusCode == -1002 ? getToken() : refreshToken();
|
||||
logger.info("Token 失效({}), {}后重试", statusCode, statusCode == -1002 ? "重新注册" : "刷新");
|
||||
formData.set("t", newToken);
|
||||
formData.set("s", md5(ts + data + API_SECRET));
|
||||
requestEntity = new HttpEntity<>(formData, headers);
|
||||
@@ -149,6 +173,29 @@ public class FangzhouApiServiceImpl implements IFangzhouApiService {
|
||||
}
|
||||
|
||||
return json;
|
||||
} catch (ResourceAccessException e) {
|
||||
logger.warn("证书验证失败,尝试重新注册: {}", e.getMessage());
|
||||
String newToken = refreshToken();
|
||||
String data = String.format("{\"name\":\"%s\",\"type\":1}", file.getOriginalFilename());
|
||||
long ts = System.currentTimeMillis();
|
||||
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
|
||||
formData.add("c", "Create");
|
||||
formData.add("t", newToken);
|
||||
formData.add("ts", ts);
|
||||
formData.add("d", data);
|
||||
formData.add("s", md5(ts + data + API_SECRET));
|
||||
formData.add("website", "1");
|
||||
formData.add("files", file.getResource());
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(formData, headers);
|
||||
try {
|
||||
String result = restTemplate.postForObject(FANGZHOU_API_URL, requestEntity, String.class);
|
||||
return objectMapper.readTree(result);
|
||||
} catch (Exception ex) {
|
||||
logger.error("重试失败", ex);
|
||||
throw new RuntimeException("上传文件失败: " + ex.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("上传文件失败", e);
|
||||
throw new RuntimeException("上传文件失败: " + e.getMessage());
|
||||
|
||||
@@ -11,7 +11,7 @@ import java.util.List;
|
||||
@Component
|
||||
public class ProxyPool {
|
||||
|
||||
private static final String API_URL = "http://api.tianqiip.com/getip?secret=y0thbcco1rgxn9e9&num=%d&type=txt&port=2&time=3&mr=1&sign=a8a42f3cd3f22a7fbf84530deb91c1d8";
|
||||
private static final String API_URL = "http://api.tianqiip.com/getip?secret=y0thbcco1rgxn9e9&num=%d&type=txt&port=2&time=3&mr=1&sign=9be780c7e27aea815f1e0874446b9e35";
|
||||
|
||||
/**
|
||||
* 获取一个代理IP
|
||||
|
||||
@@ -48,7 +48,7 @@ api:
|
||||
server:
|
||||
# 主服务器API配置
|
||||
base-url: "http://8.138.23.49:8085"
|
||||
# base-url: "http://192.168.1.89:8085"
|
||||
#base-url: "http://192.168.1.89:8085"
|
||||
paths:
|
||||
monitor: "/monitor/client/api"
|
||||
login: "/monitor/account/login"
|
||||
|
||||
Reference in New Issue
Block a user