From 43d6ae86bc229a1a75637fae33be378e105016e3 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期日, 29 三月 2026 20:47:11 +0800
Subject: [PATCH] RCS通知

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java |  128 ++++++++++++++++++++++--------------------
 1 files changed, 68 insertions(+), 60 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index a7197d7..6423c9f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -13,6 +13,7 @@
 import com.vincent.rsf.server.api.config.RemotesInfoProperties;
 import com.vincent.rsf.server.api.controller.erp.params.InOutResultReportParam;
 import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
+import com.vincent.rsf.server.api.service.RcsBusTaskNoticeService;
 import com.vincent.rsf.server.api.entity.CommonResponse;
 import com.vincent.rsf.server.api.entity.constant.RcsConstant;
 import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
@@ -131,6 +132,8 @@
     private CloudWmsNotifyLogService cloudWmsNotifyLogService;
     @Autowired
     private WarehouseService warehouseService;
+    @Autowired
+    private RcsBusTaskNoticeService rcsBusTaskNoticeService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -509,7 +512,7 @@
     }
 
     /**
-     * 鎵嬪姩瀹屾垚浠诲姟
+     * 鎵嬪姩瀹屾垚浠诲姟锛氬叆搴撶被缃� 98銆佸嚭搴撶被缃� 198锛屽簱浣�/鍗曟嵁鎵e噺涓庝笂鎶ョ敱瀵瑰簲瀹氭椂浠诲姟鎵ц
      *
      * @param id
      * @param loginUserId
@@ -549,13 +552,22 @@
         }
 
         modiftyTaskSort(task, loginUserId);
-        
-        // 濡傛灉浠诲姟鐘舵�佸凡缁忔槸AWAIT (196)锛屽啀娆$偣鍑诲畬缁撴椂锛岀洿鎺ュ畬鎴�
-        if (task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
-            // AWAIT鐘舵�佺殑浠诲姟鍐嶆瀹岀粨锛岀洿鎺ヨ缃负鍑哄簱瀹屾垚
+
+        // 鍏ュ簱锛�->98锛屽嚭搴擄細-> 198锛岀敱 complateOutStock 瀹氭椂浠诲姟 鏇存柊搴撳瓨
+        if (task.getTaskType() < 100) {
+            task.setTaskStatus(TaskStsType.COMPLETE_IN.id);
+            if (StringUtils.isNotBlank(task.getOrgSite())) {
+                BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+                        .eq(BasStation::getStationName, task.getOrgSite()));
+                if (Objects.nonNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+                    station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+                    if (!basStationService.updateById(station)) {
+                        throw new CoolException("鍏ュ簱绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                    }
+                }
+            }
+        } else {
             task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
-            
-            // 鏇存柊鍑哄簱绔欑偣鐘舵�侊紙涓嶳CS閫氱煡瀹岀粨淇濇寔涓�鑷达級
             if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type && StringUtils.isNotBlank(task.getTargSite())) {
                 BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
                         .eq(BasStation::getStationName, task.getTargSite()));
@@ -566,28 +578,17 @@
                     }
                 }
             }
-        } else {
-            // 鍏朵粬鎯呭喌鎸夊師鏈夐�昏緫澶勭悊
-            // 鍏ュ簱浠诲姟锛坱askType < 100锛夛細璁剧疆涓哄叆搴撳畬鎴�
-            // 鍑哄簱浠诲姟锛坱askType >= 100锛夛細璁剧疆涓虹瓑寰呯‘璁�
-            Integer newStatus = task.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id;
-            task.setTaskStatus(newStatus);
-            
-            // 濡傛灉鏄叆搴撲换鍔″畬鎴愶紝鏇存柊鍏ュ簱绔欑偣鐘舵�侊紙涓嶳CS閫氱煡瀹岀粨淇濇寔涓�鑷达級
-            if (newStatus.equals(TaskStsType.COMPLETE_IN.id) && StringUtils.isNotBlank(task.getOrgSite())) {
-                BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
-                        .eq(BasStation::getStationName, task.getOrgSite()));
-                if (Objects.nonNull(station) && station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
-                    station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
-                    if (!basStationService.updateById(station)) {
-                        throw new CoolException("鍏ュ簱绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-                    }
-                }
-            }
         }
+        // 鍘燂細196 鏃跺啀鐐逛竴娆℃墠缃� 198锛涘嚭搴撻娆$偣鍑绘浘缃� 196(AWAIT)
+        // if (task.getTaskStatus().equals(TaskStsType.AWAIT.id)) { task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); ... }
+        // else { Integer newStatus = task.getTaskType() < 100 ? COMPLETE_IN.id : AWAIT.id; ... }
         
         if (!this.updateById(task)) {
             throw new CoolException("瀹屾垚浠诲姟澶辫触");
+        }
+        // 绠$悊鍚庡彴銆屽畬鎴愪换鍔°�嶉�氱煡 RCS
+        if (StringUtils.isNotBlank(task.getTaskCode())) {
+            rcsBusTaskNoticeService.notifyTaskStatus(task.getTaskCode(), task.getTaskStatus());
         }
         return task;
     }
@@ -597,11 +598,12 @@
      *
      * @param id 浠诲姟ID
      * @param loginUserId 鐧诲綍鐢ㄦ埛ID
+     * @param notifyRcsFromAdmin 绠$悊鍚庡彴鍏ㄧ増鍑哄簱瀹岀粨鎺ュ彛涓� true 鏃堕�氱煡 RCS锛涘畾鏃�/PDA 绛変负 false
      * @return 浠诲姟瀵硅薄
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Task completeFullOutStock(Long id, Long loginUserId) {
+    public Task completeFullOutStock(Long id, Long loginUserId, boolean notifyRcsFromAdmin) {
         // 鏌ヨ浠诲姟
         Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
                 .eq(Task::getId, id));
@@ -667,6 +669,9 @@
 
         if (!this.updateById(task)) {
             throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐ワ紒锛�");
+        }
+        if (notifyRcsFromAdmin && StringUtils.isNotBlank(task.getTaskCode())) {
+            rcsBusTaskNoticeService.notifyTaskStatus(task.getTaskCode(), TaskStsType.UPDATED_OUT.id);
         }
 
         return task;
@@ -984,59 +989,56 @@
             }
         }
         
-        // 濡傛灉鏈変换鍔″凡涓嬪彂鍒癛CS锛屽厛璋冪敤RCS鍙栨秷鎺ュ彛
+        // 宸蹭笅鍙� RCS 鐨勫伐浣滄。锛氬繀椤诲厛璋� RCS 鍙栨秷鎺ュ彛鎴愬姛锛屽惁鍒欎笉鍏佽鍙栨秷宸ヤ綔妗�
         boolean rcsCancelSuccess = false;
         if (!rcsTaskCodes.isEmpty()) {
-            // 妫�鏌� RCS API 閰嶇疆鏄惁鏈夋晥
             if (rcsApi == null || StringUtils.isBlank(rcsApi.getHost()) || StringUtils.isBlank(rcsApi.getPort())) {
-                log.error("========== RCS浠诲姟鍙栨秷澶辫触 ==========");
-                log.error("RCS API 閰嶇疆鏃犳晥锛乭ost: {}, port: {}", 
-                        rcsApi != null ? rcsApi.getHost() : "null", 
-                        rcsApi != null ? rcsApi.getPort() : "null");
-                // 鍗充娇閰嶇疆鏃犳晥锛屼篃缁х画鎵ц浠诲姟鍒犻櫎鎿嶄綔
-            } else {
-                try {
-                    log.info("========== 寮�濮嬪彇娑圧CS浠诲姟 ==========");
-                    log.info("闇�瑕佸彇娑堢殑RCS浠诲姟缂栧彿锛歿}", rcsTaskCodes);
-                    String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.cancelTask;
-                    log.info("RCS鍙栨秷浠诲姟璇锋眰鍦板潃锛歿}", rcsUrl);
-                
-                // 濡傛灉娌℃湁鎵规缂栧彿锛屼娇鐢ㄧ涓�涓换鍔$紪鍙蜂綔涓烘壒娆$紪鍙�
-                if (StringUtils.isBlank(batchNo) && !rcsTaskCodes.isEmpty()) {
+                throw new CoolException("浠诲姟宸蹭笅鍙慠CS锛屼絾鏈厤缃甊CS鍦板潃锛屾棤娉曞彇娑堬紒锛�");
+            }
+            if (restTemplate == null) {
+                throw new CoolException("浠诲姟宸蹭笅鍙慠CS锛屼絾鏃犳硶璋冪敤RCS鍙栨秷鎺ュ彛锛屾棤娉曞彇娑堬紒锛�");
+            }
+            try {
+                log.info("========== 寮�濮嬪彇娑圧CS浠诲姟 ==========");
+                log.info("闇�瑕佸彇娑堢殑RCS浠诲姟缂栧彿锛歿}", rcsTaskCodes);
+                String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.cancelTask;
+                log.info("RCS鍙栨秷浠诲姟璇锋眰鍦板潃锛歿}", rcsUrl);
+
+                if (StringUtils.isBlank(batchNo)) {
                     batchNo = rcsTaskCodes.get(0);
                 }
-                
+
                 Map<String, Object> cancelParams = new HashMap<>();
                 cancelParams.put("tasks", rcsTaskCodes);
                 if (StringUtils.isNotBlank(batchNo)) {
                     cancelParams.put("batchNo", batchNo);
                 }
-                
+
                 log.info("RCS鍙栨秷浠诲姟璇锋眰鍙傛暟锛歿}", JSONObject.toJSONString(cancelParams));
-                
+
                 HttpHeaders headers = new HttpHeaders();
                 headers.add("Content-Type", "application/json");
                 headers.add("api-version", "v2.0");
                 HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(cancelParams, 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.getBody());
-                
+
                 if (Objects.isNull(exchange.getBody())) {
                     log.error("RCS鍙栨秷浠诲姟澶辫触锛氬搷搴斾綋涓虹┖");
                     throw new CoolException("RCS鍙栨秷浠诲姟澶辫触锛氬搷搴斾綋涓虹┖");
                 }
-                
+
                 ObjectMapper objectMapper = new ObjectMapper();
                 objectMapper.coercionConfigDefaults()
                         .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
                 CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
-                
+
                 if (result.getCode() == 200) {
                     log.info("========== RCS浠诲姟鍙栨秷鎴愬姛 ==========");
                     log.info("鎴愬姛鍙栨秷鐨凴CS浠诲姟缂栧彿锛歿}", rcsTaskCodes);
@@ -1045,22 +1047,28 @@
                     log.error("RCS鍙栨秷浠诲姟澶辫触锛歿}", result.getMsg());
                     throw new CoolException("RCS鍙栨秷浠诲姟澶辫触锛�" + result.getMsg());
                 }
-                } catch (JsonProcessingException e) {
-                    log.error("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛歿}", e.getMessage(), e);
-                    throw new CoolException("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛�" + e.getMessage());
-                } catch (Exception e) {
-                    log.error("RCS鍙栨秷浠诲姟寮傚父锛歿}", e.getMessage(), e);
-                    throw new CoolException("RCS鍙栨秷浠诲姟寮傚父锛�" + e.getMessage());
-                }
+            } catch (CoolException e) {
+                throw e;
+            } catch (JsonProcessingException e) {
+                log.error("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛歿}", e.getMessage(), e);
+                throw new CoolException("RCS鍙栨秷浠诲姟鍝嶅簲瑙f瀽澶辫触锛�" + e.getMessage());
+            } catch (Exception e) {
+                log.error("RCS鍙栨秷浠诲姟寮傚父锛歿}", e.getMessage(), e);
+                throw new CoolException("RCS鍙栨秷浠诲姟寮傚父锛�" + e.getMessage());
             }
         }
         
-        // 鏌ヨ绗﹀悎鍙栨秷鏉′欢鐨勪换鍔★紙鐘舵�佷负1銆�101銆�199锛�
-        List<Integer> allowedStatuses = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id, TaskStsType.WAVE_SEED.id);
+        // 鍙彇娑堢姸鎬侊細鍘� 1/101锛堜笉鍚� 199锛夛紱鎷f枡/鐩樼偣鍑哄簱 RCS 鎵ц涓�(<198)锛涙嫞鏂�/鐩樼偣鍐嶅叆搴�(53/57)涓嶆敮鎸佸彇娑�
         List<Task> tasks = this.list(new LambdaQueryWrapper<Task>()
                 .in(Task::getTaskType, list)
                 .in(Task::getId, (Object[]) ids)
-                .in(Task::getTaskStatus, allowedStatuses));
+                .and(w -> w
+                        .in(Task::getTaskStatus, Arrays.asList(
+                                TaskStsType.GENERATE_IN.id,
+                                TaskStsType.GENERATE_OUT.id))
+                        .or(w2 -> w2
+                                .in(Task::getTaskType, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, TaskType.TASK_TYPE_CHECK_OUT.type)
+                                .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))));
         
         // 濡傛灉绗﹀悎鍙栨秷鏉′欢鐨勪换鍔′负绌猴紝浣哛CS鍙栨秷鎴愬姛锛屽厑璁哥户缁紙鍙兘鏄换鍔$姸鎬佸凡鍙樻洿锛�
         if (tasks.isEmpty() && !rcsCancelSuccess) {

--
Gitblit v1.9.1