From e9543f18fbe81fb492df941fdc6fce59424f8f49 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期四, 05 二月 2026 08:39:36 +0800
Subject: [PATCH] RCS对接

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsRcsServiceImpl.java |  250 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 234 insertions(+), 16 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 b630ed3..7429bb9 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;
+
 
 
     /**
@@ -57,31 +58,60 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R pubTasks(RcsPubTaskParams params)  {
+    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) {
-                    return R.ok();
+                    log.info("========== RCS浠诲姟涓嬪彂鎴愬姛 ==========");
+                    return result;
                 } else {
-                    throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
+                    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
-    public R cancelTasks(Map<String, Object> params) {
-        return  R.ok();
+    @Transactional(rollbackFor = Exception.class)
+    public CommonResponse cancelTasks(Map<String, Object> params) {
+        /**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());
+            }
+        }
     }
 
     /**
@@ -104,7 +192,25 @@
      * @version 1.0
      */
     @Override
-    public R callBackEvent(ExMsgCallbackParams params) {
+    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));
@@ -115,7 +221,7 @@
         ResponseEntity<String> exchange = restTemplate.exchange(callUrl, HttpMethod.POST, httpEntity, String.class);
         log.info("浠诲姟鎵ц鐘舵�佷笂鎶ワ紝鍝嶅簲缁撴灉锛� {}", exchange);
         if (Objects.isNull(exchange.getBody())) {
-            throw new CoolException("浠诲姟鎵ц鐘舵�佷笂鎶ュけ璐ワ紒锛�");
+            return new CommonResponse();
         } else {
             ObjectMapper objectMapper = new ObjectMapper();
             objectMapper.coercionConfigDefaults()
@@ -123,9 +229,10 @@
             try {
                 CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
                 if (result.getCode() == 200) {
-                    return R.ok();
+                    return result;
                 } else {
-                    throw new CoolException("浠诲姟鎵ц鐘舵�佷笂鎶ュけ璐ワ紒锛�");
+                    return result;
+//                    throw new CoolException("浠诲姟鎵ц鐘舵�佷笂鎶ュけ璐ワ紒锛�");
                 }
             } catch (JsonProcessingException e) {
                 throw new CoolException(e.getMessage());
@@ -144,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
@@ -154,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");
@@ -182,4 +326,78 @@
             }
         }
     }
+
+    /**
+     * @author Ryan
+     * @date 2026/2/3
+     * @description: 浠诲姟鎵ц閫氱煡涓婃姤锛圧CS鍥炶皟鎺ュ彛锛�
+     * @version 1.0
+     */
+    @Override
+    public CommonResponse reportTask(TaskReportParams params) {
+        log.info("RCS鍥炶皟锛岃姹傚弬鏁帮細 {}", 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("RCS鍥炶皟锛岃姹傚湴鍧�锛� {}锛� 杞崲鍚庡弬鏁帮細 {}", 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("RCS鍥炶皟锛屽搷搴旂粨鏋滐細 {}", exchange);
+        
+        if (Objects.isNull(exchange.getBody())) {
+            // 濡傛灉鍥炶皟澶辫触锛岃繑鍥炴垚鍔熷搷搴旓紙閬垮厤RCS閲嶅鍥炶皟锛�
+            CommonResponse response = new CommonResponse();
+            response.setCode(200);
+            response.setMsg("鎺ユ敹鎴愬姛");
+            log.warn("RCS鍥炶皟澶辫触锛屼絾杩斿洖鎴愬姛鍝嶅簲锛屼换鍔$紪鍙凤細{}锛屾壒娆★細{}", 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("RCS鍥炶皟涓婃姤鎴愬姛锛屼换鍔$紪鍙凤細{}锛屾壒娆★細{}", params.getTaskNo(), params.getBatchNo());
+                    return result;
+                } else {
+                    log.warn("RCS鍥炶皟涓婃姤鍥炶皟杩斿洖闈�200鐘舵�侊紝浠诲姟缂栧彿锛歿}锛屾壒娆★細{}锛屽搷搴旓細{}", params.getTaskNo(), params.getBatchNo(), exchange.getBody());
+                    return result;
+                }
+            } catch (JsonProcessingException e) {
+                log.error("RCS鍥炶皟涓婃姤鍥炶皟鍝嶅簲瑙f瀽澶辫触锛屼换鍔$紪鍙凤細{}锛屾壒娆★細{}锛岄敊璇細{}", params.getTaskNo(), params.getBatchNo(), e.getMessage());
+                // 瑙f瀽澶辫触鏃惰繑鍥炴垚鍔熷搷搴旓紝閬垮厤RCS閲嶅鍥炶皟
+                CommonResponse response = new CommonResponse();
+                response.setCode(200);
+                response.setMsg("鎺ユ敹鎴愬姛");
+                return response;
+            }
+        }
+    }
 }

--
Gitblit v1.9.1