From f66b6a060100d8e117df8c01dc9416b37b474497 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期四, 16 四月 2026 18:15:49 +0800
Subject: [PATCH] 站点信号消失
---
rsf-open-api/src/main/java/com/vincent/rsf/openApi/tv/TvRcsStationPollService.java | 95 ++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 85 insertions(+), 10 deletions(-)
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/tv/TvRcsStationPollService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/tv/TvRcsStationPollService.java
index 1973e7d..a7493c3 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/tv/TvRcsStationPollService.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/tv/TvRcsStationPollService.java
@@ -19,6 +19,7 @@
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -28,6 +29,7 @@
@Slf4j
@Service
public class TvRcsStationPollService {
+ private static final int MAX_LOG_LEN = 2000;
@Resource
private RestTemplate restTemplate;
@@ -46,7 +48,7 @@
String stationId = pollProperties.getTaskNoStationId();
if (StringUtils.hasText(pollProperties.getTaskNoPollUrl())) {
try {
- String raw = restTemplate.getForObject(pollProperties.getTaskNoPollUrl(), String.class);
+ String raw = pollTaskNoRaw();
String taskNo = applyTaskNoResponse(raw, stationId);
enrichSnapshotFromWms(stationId, taskNo);
} catch (RestClientException e) {
@@ -83,24 +85,49 @@
try {
Map<String, Object> res = wmsServerFeignClient.openAsrsQueryTask(req);
if (res == null) {
- wcsStationStatusService.upsertFromRcsPoll(stationId, taskNo, null);
+// wcsStationStatusService.upsertFromRcsPoll(stationId, taskNo, null);
+ wcsStationStatusService.clearStationSnapshot(stationId);
return;
}
Object codeObj = res.get("code");
int code = parseCode(codeObj);
if (code != 200) {
log.debug("WMS queryTask 闈炴垚鍔� code={} msg={}", code, res.get("msg"));
- wcsStationStatusService.upsertFromRcsPoll(stationId, taskNo, null);
+// wcsStationStatusService.upsertFromRcsPoll(stationId, taskNo, null);
+ wcsStationStatusService.clearStationSnapshot(stationId);
return;
}
Object data = res.get("data");
@SuppressWarnings("unchecked")
Map<String, Object> dataMap = data instanceof Map ? (Map<String, Object>) data : null;
+ if (dataMap == null || !hasWrkDetls(dataMap)) {
+ // queryTask 绌烘暟鎹椂娓呯┖绔欑偣缂撳瓨锛岄伩鍏嶇數瑙嗘満鏄剧ず鍘嗗彶鐗╂枡
+ wcsStationStatusService.clearStationSnapshot(stationId);
+ return;
+ }
wcsStationStatusService.upsertFromRcsPoll(stationId, taskNo, dataMap);
} catch (Exception e) {
log.warn("WMS queryTask 璋冪敤澶辫触: {}", e.getMessage());
- wcsStationStatusService.upsertFromRcsPoll(stationId, taskNo, null);
+// wcsStationStatusService.upsertFromRcsPoll(stationId, taskNo, null);
+ wcsStationStatusService.clearStationSnapshot(stationId);
}
+ }
+
+ private static boolean hasWrkDetls(Map<String, Object> dataMap) {
+ if (dataMap == null) {
+ return false;
+ }
+ Object wrkDetls = dataMap.get("wrkDetls");
+ if (wrkDetls == null) {
+ return false;
+ }
+ if (wrkDetls instanceof Collection) {
+ return !((Collection<?>) wrkDetls).isEmpty();
+ }
+ if (wrkDetls.getClass().isArray()) {
+ return java.lang.reflect.Array.getLength(wrkDetls) > 0;
+ }
+ return true;
}
private static int parseCode(Object codeObj) {
@@ -118,17 +145,54 @@
}
private String pollErrorRaw() throws Exception {
+ String url = pollProperties.getErrorPollUrl();
if (pollProperties.isErrorPollUsePost()) {
- ObjectNode body = objectMapper.createObjectNode();
- body.put("staNo", pollProperties.getErrorStationId());
+ String reqBody = objectMapper.writeValueAsString(createStationBody(pollProperties.getErrorStationId()));
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
- HttpEntity<String> entity = new HttpEntity<>(objectMapper.writeValueAsString(body), headers);
+ HttpEntity<String> entity = new HttpEntity<>(reqBody, headers);
+ log.info("RCS绔欑偣杞璇锋眰 POST /cv/station/getError url={} body={}", url, trimForLog(reqBody));
ResponseEntity<String> resp = restTemplate.exchange(
- pollProperties.getErrorPollUrl(), HttpMethod.POST, entity, String.class);
- return resp.getBody();
+ url, HttpMethod.POST, entity, String.class);
+ String respBody = resp.getBody();
+ log.info("RCS绔欑偣杞鍝嶅簲 POST /cv/station/getError body={}", trimForLog(respBody));
+ return respBody;
}
- return restTemplate.getForObject(pollProperties.getErrorPollUrl(), String.class);
+ log.info("RCS绔欑偣杞璇锋眰 GET /cv/station/getError url={}", url);
+ String raw = restTemplate.getForObject(url, String.class);
+ log.info("RCS绔欑偣杞鍝嶅簲 GET /cv/station/getError body={}", trimForLog(raw));
+ return raw;
+ }
+
+ private String pollTaskNoRaw() throws Exception {
+ String url = pollProperties.getTaskNoPollUrl();
+ if (pollProperties.isTaskNoPollUsePost()) {
+ String reqBody = objectMapper.writeValueAsString(createStationBody(pollProperties.getTaskNoStationId()));
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ HttpEntity<String> entity = new HttpEntity<>(reqBody, headers);
+ // log.info("RCS绔欑偣杞璇锋眰 GET /cv/station/getTaskNo url={}", url);
+ log.info("RCS绔欑偣杞璇锋眰 POST /cv/station/getTaskNo url={} body={}", url, trimForLog(reqBody));
+ ResponseEntity<String> resp = restTemplate.exchange(
+ url, HttpMethod.POST, entity, String.class);
+ String respBody = resp.getBody();
+ // log.info("RCS绔欑偣杞鍝嶅簲 GET /cv/station/getTaskNo body={}", trimForLog(raw));
+ log.info("RCS绔欑偣杞鍝嶅簲 POST /cv/station/getTaskNo body={}", trimForLog(respBody));
+ return respBody;
+ }
+ log.info("RCS绔欑偣杞璇锋眰 GET /cv/station/getTaskNo url={}", url);
+ String raw = restTemplate.getForObject(url, String.class);
+ log.info("RCS绔欑偣杞鍝嶅簲 GET /cv/station/getTaskNo body={}", trimForLog(raw));
+ return raw;
+ }
+
+ private ObjectNode createStationBody(String stationId) {
+ ObjectNode body = objectMapper.createObjectNode();
+ if (StringUtils.hasText(stationId)) {
+ body.put("stationId", stationId);
+ body.put("staNo", stationId);
+ }
+ return body;
}
/** 鍐欏叆 tvRcs 浠诲姟鍙� Hash锛涜繑鍥炶В鏋愬嚭鐨� taskNo锛堢敤浜� WMS 鍚堝苟锛� */
@@ -291,4 +355,15 @@
}
return arr;
}
+
+ private static String trimForLog(String raw) {
+ if (raw == null) {
+ return "null";
+ }
+ String text = raw.trim();
+ if (text.length() <= MAX_LOG_LEN) {
+ return text;
+ }
+ return text.substring(0, MAX_LOG_LEN) + "...(truncated)";
+ }
}
--
Gitblit v1.9.1