商标筛查包含以下维度,后续将开放更
多维度的筛查条件与自定义条件组合功
diff --git a/erp_client_sb/src/main/java/com/tashow/erp/service/impl/BrandTrademarkCacheServiceImpl.java b/erp_client_sb/src/main/java/com/tashow/erp/service/impl/BrandTrademarkCacheServiceImpl.java
index c4ffa2f..624c329 100644
--- a/erp_client_sb/src/main/java/com/tashow/erp/service/impl/BrandTrademarkCacheServiceImpl.java
+++ b/erp_client_sb/src/main/java/com/tashow/erp/service/impl/BrandTrademarkCacheServiceImpl.java
@@ -30,11 +30,22 @@ public class BrandTrademarkCacheServiceImpl implements BrandTrademarkCacheServic
@Override
public void saveResults(Map 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);
+ }
+ );
});
}
diff --git a/erp_client_sb/src/main/java/com/tashow/erp/service/impl/FangzhouApiServiceImpl.java b/erp_client_sb/src/main/java/com/tashow/erp/service/impl/FangzhouApiServiceImpl.java
index 9811d40..c9afaa8 100644
--- a/erp_client_sb/src/main/java/com/tashow/erp/service/impl/FangzhouApiServiceImpl.java
+++ b/erp_client_sb/src/main/java/com/tashow/erp/service/impl/FangzhouApiServiceImpl.java
@@ -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 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> 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 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> 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());
diff --git a/erp_client_sb/src/main/java/com/tashow/erp/utils/ProxyPool.java b/erp_client_sb/src/main/java/com/tashow/erp/utils/ProxyPool.java
index ba05d75..af810a5 100644
--- a/erp_client_sb/src/main/java/com/tashow/erp/utils/ProxyPool.java
+++ b/erp_client_sb/src/main/java/com/tashow/erp/utils/ProxyPool.java
@@ -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
diff --git a/erp_client_sb/src/main/resources/application.yml b/erp_client_sb/src/main/resources/application.yml
index af643bb..9360247 100644
--- a/erp_client_sb/src/main/resources/application.yml
+++ b/erp_client_sb/src/main/resources/application.yml
@@ -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"
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/MarkController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/MarkController.java
index ec9422f..d8edb4c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/MarkController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/MarkController.java
@@ -27,7 +27,7 @@ public class MarkController {
/**
* 获取 Token
- * 如果 Redis 中不存在 Token,自动注册新账号
+ * 如果 Redis 中不存在 Token 或 Token 不可用,自动注册新账号
*
* @return Token 字符串
*/
@@ -37,11 +37,12 @@ public class MarkController {
// 先尝试从 Redis 获取现有 Token
String token = redisCache.getCacheMapValue(CacheConstants.MARK_ACCOUNT_KEY, "token");
- if (token != null && !token.isEmpty()) {
+ // 验证 Token 是否可用
+ if (token != null && !token.isEmpty() && markService.validateToken(token)) {
return AjaxResult.success("获取成功", token);
}
- // Token 不存在,自动注册新账号
+ // Token 不存在或不可用,重新注册新账号
token = markService.reg();
return AjaxResult.success("注册成功", token);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IMarkService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMarkService.java
index ab78991..0f82237 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IMarkService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMarkService.java
@@ -21,5 +21,12 @@ public interface IMarkService {
* 登录
*/
String login();
+
+ /**
+ * 验证Token是否可用
+ * @param token 待验证的Token
+ * @return true=可用, false=不可用
+ */
+ boolean validateToken(String token);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MarkServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MarkServiceImpl.java
index 63d1ce7..831ef15 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MarkServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MarkServiceImpl.java
@@ -124,5 +124,29 @@ public class MarkServiceImpl implements IMarkService {
throw new RuntimeException("MD5加密失败", e);
}
}
+
+ @Override
+ public boolean validateToken(String token) {
+ try {
+ String data = "{\"name\":\"\",\"page_size\":1,\"current_page\":1}";
+ long ts = System.currentTimeMillis();
+ MultiValueMap formData = new LinkedMultiValueMap<>();
+ formData.add("c", "TaskPageList");
+ formData.add("d", data);
+ formData.add("t", token);
+ 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> requestEntity = new HttpEntity<>(formData, headers);
+ String result = restTemplate.postForObject("https://api.fangzhoujingxuan.com/Task", requestEntity, String.class);
+ JsonNode json = objectMapper.readTree(result);
+ int statusCode = json.get("S").asInt();
+ return statusCode == 1;
+ } catch (Exception e) {
+ return false;
+ }
+ }
}