From f99e3966686d3891b814ff28d200b001fcdc8e1e Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期四, 05 二月 2026 12:54:26 +0800
Subject: [PATCH] 组托优化
---
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java | 233 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 225 insertions(+), 8 deletions(-)
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java
index d5d2cf5..4cc19fe 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java
@@ -16,8 +16,10 @@
import com.vincent.rsf.openApi.entity.constant.RcsConstant;
import com.vincent.rsf.openApi.entity.dto.SyncLocsDto;
import com.vincent.rsf.openApi.entity.params.ExMsgCallbackParams;
+import com.vincent.rsf.openApi.entity.params.LocSiteParams;
import com.vincent.rsf.openApi.entity.params.RcsPubTaskParams;
import com.vincent.rsf.openApi.entity.params.SyncRcsLocsParam;
+import com.vincent.rsf.openApi.entity.params.TaskReportParams;
import com.vincent.rsf.openApi.mapper.LocMapper;
import com.vincent.rsf.openApi.service.WmsRcsService;
import lombok.extern.slf4j.Slf4j;
@@ -41,12 +43,11 @@
@Autowired
private PlatformProperties rcsApi;
-
@Autowired
private PlatformProperties.WmsApi wmsApi;
-
@Autowired
private RestTemplate restTemplate;
+
/**
@@ -60,28 +61,57 @@
public CommonResponse pubTasks(RcsPubTaskParams params) {
/**RCS鍩虹閰嶇疆閾炬帴*/
String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.pubTask;
- log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl , JSONObject.toJSONString(params));
+ log.info("========== 寮�濮嬩笅鍙戜换鍔″埌RCS ==========");
+ log.info("RCS璇锋眰鍦板潃锛歿}", rcsUrl);
+ if (params != null) {
+ log.info("鎵规缂栧彿锛歿}", params.getBatchNo());
+ if (params.getTasks() != null) {
+ log.info("浠诲姟鏁伴噺锛歿}", params.getTasks().size());
+ }
+ }
+ log.info("璇锋眰鍙傛暟锛歿}", JSONObject.toJSONString(params));
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("api-version", "v2.0");
HttpEntity httpEntity = new HttpEntity(params, headers);
+ long startTime = System.currentTimeMillis();
ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class);
- log.info("浠诲姟涓嬪彂鍚庯紝鍝嶅簲缁撴灉锛� {}", exchange);
+ long endTime = System.currentTimeMillis();
+ log.info("RCS鍝嶅簲鑰楁椂锛歿}ms", (endTime - startTime));
+ log.info("RCS鍝嶅簲鐘舵�佺爜锛歿}", exchange.getStatusCode());
+ log.info("RCS鍝嶅簲澶达細{}", exchange.getHeaders());
+ log.info("RCS鍝嶅簲浣擄細{}", exchange.getBody());
if (Objects.isNull(exchange.getBody())) {
- throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
+ log.error("========== RCS浠诲姟涓嬪彂澶辫触 ==========");
+ log.error("RCS鍝嶅簲浣撲负绌猴紝鏃犳硶瑙f瀽鍝嶅簲缁撴灉");
+ log.error("璇锋眰鍦板潃锛歿}", rcsUrl);
+ log.error("璇锋眰鍙傛暟锛歿}", JSONObject.toJSONString(params));
+ throw new CoolException("浠诲姟涓嬪彂澶辫触锛孯CS鍝嶅簲浣撲负绌猴紒锛�");
} else {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.coercionConfigDefaults()
.setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
try {
CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+ log.info("RCS鍝嶅簲瑙f瀽缁撴灉 - code锛歿}锛宮sg锛歿}锛宒ata锛歿}",
+ result.getCode(), result.getMsg(), result.getData());
if (result.getCode() == 200) {
+ log.info("========== RCS浠诲姟涓嬪彂鎴愬姛 ==========");
return result;
} else {
+ log.error("========== RCS浠诲姟涓嬪彂澶辫触 ==========");
+ log.error("RCS杩斿洖閿欒 - code锛歿}锛宮sg锛歿}锛宒ata锛歿}",
+ result.getCode(), result.getMsg(), result.getData());
return result;
}
} catch (JsonProcessingException e) {
- throw new CoolException(e.getMessage());
+ log.error("========== RCS浠诲姟涓嬪彂寮傚父 ==========");
+ log.error("瑙f瀽RCS鍝嶅簲澶辫触锛屽搷搴斾綋锛歿}", exchange.getBody(), e);
+ throw new CoolException("瑙f瀽RCS鍝嶅簲澶辫触锛�" + e.getMessage());
+ } catch (Exception e) {
+ log.error("========== RCS浠诲姟涓嬪彂寮傚父 ==========");
+ log.error("浠诲姟涓嬪彂杩囩▼涓彂鐢熷紓甯�", e);
+ throw e;
}
}
}
@@ -93,8 +123,66 @@
* @version 1.0
*/
@Override
+ @Transactional(rollbackFor = Exception.class)
public CommonResponse cancelTasks(Map<String, Object> params) {
- return new CommonResponse();
+ /**RCS鍩虹閰嶇疆閾炬帴*/
+ String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.cancelTask;
+ log.info("========== 寮�濮嬪彇娑圧CS浠诲姟锛坥pen-rcs鎺ュ彛锛� ==========");
+ log.info("RCS鍙栨秷浠诲姟璇锋眰鍦板潃锛歿}", rcsUrl);
+ log.info("RCS鍙栨秷浠诲姟璇锋眰鍙傛暟锛歿}", JSONObject.toJSONString(params));
+
+ // 鎵撳嵃璇︾粏鐨勮姹傚弬鏁颁俊鎭�
+ if (params != null) {
+ Object batchNo = params.get("batchNo");
+ Object tasks = params.get("tasks");
+ if (batchNo != null) {
+ log.info("鎵规缂栧彿锛歿}", batchNo);
+ }
+ if (tasks != null) {
+ if (tasks instanceof List) {
+ log.info("浠诲姟鏁伴噺锛歿}", ((List<?>) tasks).size());
+ log.info("浠诲姟缂栧彿鍒楄〃锛歿}", tasks);
+ } else {
+ log.info("浠诲姟鍙傛暟锛歿}", tasks);
+ }
+ }
+ }
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Type", "application/json");
+ headers.add("api-version", "v2.0");
+ HttpEntity httpEntity = new HttpEntity(params, headers);
+
+ long startTime = System.currentTimeMillis();
+ ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class);
+ long endTime = System.currentTimeMillis();
+
+ log.info("RCS鍙栨秷浠诲姟鍝嶅簲鑰楁椂锛歿}ms", (endTime - startTime));
+ log.info("RCS鍙栨秷浠诲姟鍝嶅簲鐘舵�佺爜锛歿}", exchange.getStatusCode());
+ log.info("RCS鍙栨秷浠诲姟鍝嶅簲澶达細{}", exchange.getHeaders());
+ log.info("RCS鍙栨秷浠诲姟鍝嶅簲浣擄細{}", exchange.getBody());
+ if (Objects.isNull(exchange.getBody())) {
+ throw new CoolException("鍙栨秷浠诲姟澶辫触锛侊紒");
+ } else {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.coercionConfigDefaults()
+ .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+ try {
+ CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+ if (result.getCode() == 200) {
+ log.info("========== RCS浠诲姟鍙栨秷鎴愬姛锛坥pen-rcs鎺ュ彛锛� ==========");
+ log.info("鎴愬姛鍙栨秷鐨勪换鍔$紪鍙凤細{}", params.get("tasks"));
+ return result;
+ } else {
+ log.error("========== RCS浠诲姟鍙栨秷澶辫触锛坥pen-rcs鎺ュ彛锛� ==========");
+ log.error("RCS杩斿洖閿欒鐮侊細{}锛岄敊璇俊鎭細{}", result.getCode(), result.getMsg());
+ throw new CoolException("鍙栨秷浠诲姟澶辫触锛侊紒" + (result.getMsg() != null ? "锛�" + result.getMsg() : ""));
+ }
+ } catch (JsonProcessingException e) {
+ log.error("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛歿}", e.getMessage(), e);
+ throw new CoolException("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛�" + e.getMessage());
+ }
+ }
}
/**
@@ -105,6 +193,24 @@
*/
@Override
public CommonResponse callBackEvent(ExMsgCallbackParams params) {
+ // 鍙傛暟鏍¢獙
+ if (Objects.isNull(params)) {
+ log.error("RCS鍥炶皟浜嬩欢鍙傛暟涓虹┖锛�");
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+
+ // 璇︾粏璁板綍鎺ユ敹鍒扮殑鍙傛暟
+ log.info("RCS鍥炶皟浜嬩欢鎺ユ敹鍙傛暟 - seqNum: {}, eventType: {}, robotCode: {}, zpallet: {}",
+ params.getSeqNum(), params.getEventType(), params.getRobotCode(), params.getZpallet());
+
+ // 妫�鏌ュ叧閿瓧娈垫槸鍚︿负绌�
+ if (Objects.isNull(params.getSeqNum()) || params.getSeqNum().isEmpty()) {
+ log.warn("RCS鍥炶皟浜嬩欢鍙傛暟seqNum涓虹┖锛佸畬鏁村弬鏁帮細{}", JSONObject.toJSONString(params));
+ }
+ if (Objects.isNull(params.getEventType()) || params.getEventType().isEmpty()) {
+ log.warn("RCS鍥炶皟浜嬩欢鍙傛暟eventType涓虹┖锛佸畬鏁村弬鏁帮細{}", JSONObject.toJSONString(params));
+ }
+
String callUrl = wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.callBack;
/**WMS鍩虹閰嶇疆閾炬帴*/
log.info("浠诲姟鎵ц鐘舵�佷笂鎶ワ紝璇锋眰鍦板潃锛� {}锛� 璇锋眰鍙傛暟锛� {}", callUrl , JSONObject.toJSONString(params));
@@ -145,6 +251,43 @@
return syncRcsLocs(params);
}
+
+ /**
+ * @author Ryan
+ * @date 2025/11/10
+ * @description: 淇敼搴撲綅鎴栫珯鐐圭姸鎬�
+ * @version 1.0
+ */
+ @Override
+ public R modifyLocOrSite(LocSiteParams params) {
+ /**RCS鍩虹閰嶇疆閾炬帴*/
+ String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.modifystatus;
+ log.info("搴撲綅鎴栫珯鐐圭姸鎬佷慨鏀癸紝璇锋眰鍦板潃锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl , JSONObject.toJSONString(params));
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Type", "application/json");
+ headers.add("api-version", "v2.0");
+ HttpEntity httpEntity = new HttpEntity(params, headers);
+ ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class);
+ log.info("搴撲綅鎴栫珯鐐圭姸鎬佷慨鏀癸紝鍝嶅簲缁撴灉锛� {}", exchange);
+ if (Objects.isNull(exchange.getBody())) {
+ throw new CoolException("鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ } else {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.coercionConfigDefaults()
+ .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+ try {
+ CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+ if (result.getCode() == 200) {
+ return R.ok();
+ } else {
+ throw new CoolException("鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ } catch (JsonProcessingException e) {
+ throw new CoolException(e.getMessage());
+ }
+ }
+ }
+
/**
* @author Ryan
* @date 2025/8/28
@@ -155,7 +298,7 @@
public List<SyncLocsDto> syncRcsLocs(SyncRcsLocsParam params) {
/**RCS鍩虹閰嶇疆閾炬帴*/
String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.syncLocs;
- log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl , JSONObject.toJSONString(params));
+ log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�2锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl , JSONObject.toJSONString(params));
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
headers.add("api-version", "v2.0");
@@ -183,4 +326,78 @@
}
}
}
+
+ /**
+ * @author Ryan
+ * @date 2026/2/3
+ * @description: 浠诲姟鎵ц閫氱煡涓婃姤锛圧CS鍥炶皟鎺ュ彛锛�
+ * @version 1.0
+ */
+ @Override
+ public CommonResponse reportTask(TaskReportParams params) {
+ log.info("浠诲姟鎵ц閫氱煡涓婃姤锛岃姹傚弬鏁帮細 {}", JSONObject.toJSONString(params));
+
+ // 鍙傛暟鏍¢獙
+ if (Objects.isNull(params)) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(params.getBatchNo()) || params.getBatchNo().isEmpty()) {
+ throw new CoolException("浠诲姟鎵规涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(params.getTaskNo()) || params.getTaskNo().isEmpty()) {
+ throw new CoolException("浠诲姟缂栧彿涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(params.getTimestamp()) || params.getTimestamp().isEmpty()) {
+ throw new CoolException("鏃堕棿鎴充笉鑳戒负绌猴紒锛�");
+ }
+
+ // 灏員askReportParams杞崲涓篍xMsgParams鏍煎紡锛坱askNo -> seqNum锛�
+ // 鏍规嵁RCS鏂版帴鍙h鑼冿紝taskNo瀵瑰簲鏃ф帴鍙g殑seqNum
+ JSONObject exMsgParams = new JSONObject();
+ exMsgParams.put("seqNum", params.getTaskNo()); // taskNo鏄犲皠鍒皊eqNum
+ // eventType璁剧疆涓篍ND锛岃〃绀轰换鍔″畬鎴愶紙鏍规嵁涓氬姟闇�姹傚彲鑳介渶瑕佽皟鏁达級
+ exMsgParams.put("eventType", "END");
+ exMsgParams.put("robotCode", null);
+ exMsgParams.put("zpallet", null);
+
+ // 灏嗕换鍔′笂鎶ュ洖璋冭浆鍙戝埌WMS绯荤粺
+ String callUrl = wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.callBack;
+ log.info("浠诲姟鎵ц閫氱煡涓婃姤锛岃姹傚湴鍧�锛� {}锛� 杞崲鍚庡弬鏁帮細 {}", callUrl, exMsgParams.toJSONString());
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Type", "application/json");
+ headers.add("api-version", "v2.0");
+ HttpEntity httpEntity = new HttpEntity(exMsgParams, headers);
+ ResponseEntity<String> exchange = restTemplate.exchange(callUrl, HttpMethod.POST, httpEntity, String.class);
+ log.info("浠诲姟鎵ц閫氱煡涓婃姤锛屽搷搴旂粨鏋滐細 {}", exchange);
+
+ if (Objects.isNull(exchange.getBody())) {
+ // 濡傛灉鍥炶皟澶辫触锛岃繑鍥炴垚鍔熷搷搴旓紙閬垮厤RCS閲嶅鍥炶皟锛�
+ CommonResponse response = new CommonResponse();
+ response.setCode(200);
+ response.setMsg("鎺ユ敹鎴愬姛");
+ log.warn("浠诲姟鎵ц閫氱煡涓婃姤鍥炶皟澶辫触锛屼絾杩斿洖鎴愬姛鍝嶅簲锛屼换鍔$紪鍙凤細{}锛屾壒娆★細{}", params.getTaskNo(), params.getBatchNo());
+ return response;
+ } else {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.coercionConfigDefaults()
+ .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+ try {
+ CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+ if (result.getCode() == 200) {
+ log.info("浠诲姟鎵ц閫氱煡涓婃姤鎴愬姛锛屼换鍔$紪鍙凤細{}锛屾壒娆★細{}", params.getTaskNo(), params.getBatchNo());
+ return result;
+ } else {
+ log.warn("浠诲姟鎵ц閫氱煡涓婃姤鍥炶皟杩斿洖闈�200鐘舵�侊紝浠诲姟缂栧彿锛歿}锛屾壒娆★細{}锛屽搷搴旓細{}", params.getTaskNo(), params.getBatchNo(), exchange.getBody());
+ return result;
+ }
+ } catch (JsonProcessingException e) {
+ log.error("浠诲姟鎵ц閫氱煡涓婃姤鍥炶皟鍝嶅簲瑙f瀽澶辫触锛屼换鍔$紪鍙凤細{}锛屾壒娆★細{}锛岄敊璇細{}", params.getTaskNo(), params.getBatchNo(), e.getMessage());
+ // 瑙f瀽澶辫触鏃惰繑鍥炴垚鍔熷搷搴旓紝閬垮厤RCS閲嶅鍥炶皟
+ CommonResponse response = new CommonResponse();
+ response.setCode(200);
+ response.setMsg("鎺ユ敹鎴愬姛");
+ return response;
+ }
+ }
+ }
}
--
Gitblit v1.9.1