From 0fdc564dfcc46dcf50f1c3cc916b5cf17bae92e6 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期四, 25 十二月 2025 18:34:36 +0800
Subject: [PATCH] 1.rcs请求wcs放货申请 2.wcs反馈rcs继续执行 3.rcs放货完成,已退出输送线,反馈end到wcs 4.rcs请求wcs取货申请 5.wcs反馈rcs继续执行 6.rcs取货完成,已退出输送线,重置站点工作号和目标站

---
 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java |  317 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 317 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
new file mode 100644
index 0000000..ec9d0e7
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -0,0 +1,317 @@
+package com.zy.asrs.service.impl;
+
+import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.enums.RcsRetMethodEnum;
+import com.zy.asrs.service.RcsService;
+import com.zy.asrs.service.TaskService;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.thread.SiemensDevpThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Slf4j
+@Service
+public class RcsServiceImpl implements RcsService {
+    // 娴峰悍RCS鍦板潃
+    @Value("${hik.url}")
+    private String HIK_URL;
+
+    @Autowired
+    private TaskService taskService;
+
+
+    /**
+     * 2.2.1浠诲姟鎵ц鍥為
+     * 鍘傚锛氭捣閲忋�佸崕鏅�
+     *
+     * @param rcsReporterTask
+     * @return
+     */
+    @Override
+    public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) {
+
+        RcsReturn rcsReturn = new RcsReturn();
+
+        String robotTaskCode = rcsReporterTask.getRobotTaskCode();
+        String singleRobotCode = rcsReporterTask.getSingleRobotCode();
+        String[] split = robotTaskCode.split("-");
+        robotTaskCode = split[0];
+        JSONObject values = rcsReporterTask.getExtra().getJSONObject("values");
+        // start : 浠诲姟寮�濮嬶紱outbin : 璧板嚭鍌ㄤ綅锛沞nd : 浠诲姟瀹屾垚
+        String method = values.getString("method");
+        String carrierType = values.getString("carrierType");
+        String slotCategory = values.getString("slotCategory");
+        String slotCode = values.getString("slotCode");
+        EntityWrapper<Task> wrapper = new EntityWrapper<>();
+        wrapper.eq("task_no", robotTaskCode);
+        Task task = taskService.selectOne(wrapper);
+        if(!Cools.isEmpty(task)){
+            try {
+                // q3,q8=1
+                if ("1".equals(carrierType)) {    //AGV
+
+                    switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
+                        //鏀捐揣鐢宠
+                        case APPLY_PUT: {
+                            Integer sourceStaNo = Integer.valueOf(task.getStaNo());
+                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
+                            //wcs鍙嶉rcs缁х画鎵ц
+                            if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType()) {
+                                RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+                                rcsTaskContinue.setRobotTaskCode(task.getTaskNo());
+                                rcsTaskContinue.setTriggerType("TASK");
+                                rcsTaskContinue.setTriggerCode(task.getTaskNo());
+
+                                String url =HIK_URL + "api/robot/controller/task/extend/continue";
+                                String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
+                                if (!StringUtils.isEmpty(response) && response.contains("code")){
+                                    RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
+                                    if("200".equals(rcsReturn1.getCode())) {
+                                        //鍑哄彂PLC绔欑偣鐨勬壂鐮佸櫒鎵爜
+                                        boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(3, staProtocol));
+                                        log.info("AGV鏀捐揣瀹屾垚锛岀粰绔欑偣鍐�9991宸ヤ綔鍙�,涓嬪彂浠诲姟:{},绔欑偣:{},agv浠诲姟鍙�:{}",result,task.getStaNo(),task.getTaskNo());
+                                        if (result) {
+                                            // 杩斿洖RCS
+                                            rcsReturn.setCode("SUCCESS");
+                                            rcsReturn.setMessage("");
+                                            JSONObject data = new JSONObject();
+                                            data.put("robotTaskCode", robotTaskCode);
+                                            rcsReturn.setData(data);
+                                        }else {
+                                            // 杩斿洖RCS
+                                            rcsReturn.setCode("Err_Internal");
+                                            rcsReturn.setMessage("");
+                                            JSONObject data = new JSONObject();
+                                            data.put("robotTaskCode", robotTaskCode);
+                                            rcsReturn.setData(data);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        break;
+
+                        //鏀捐揣瀹屾垚 --銆媋gv宸茬粡绂诲紑
+                        case TASK_END: {
+                            Integer sourceStaNo = Integer.valueOf(task.getStaNo());
+                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
+                            //鏀捐揣瀹屾垚 --銆媋gv宸茬粡绂诲紑 --銆嬬粰PLC绔欑偣鍐�9991宸ヤ綔鍙�
+                            if (staProtocol != null && staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() ==0) {
+                                staProtocol.setWorkNo((short) 9991);
+                                staProtocol.setStaNo(Short.valueOf(task.getStaNo()));
+                                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol));
+                                log.info("AGV鏀捐揣瀹屾垚锛岀粰绔欑偣鍐�9991宸ヤ綔鍙�,涓嬪彂浠诲姟:{},绔欑偣:{},agv浠诲姟鍙�:{}",result,task.getStaNo(),task.getTaskNo());
+                                if(result){
+                                    // 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
+                                    task.setWrkSts(304L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+                                    task.setModiTime(new Date());
+                                    taskService.updateById(task);
+                                    // 杩斿洖RCS
+                                    rcsReturn.setCode("SUCCESS");
+                                    rcsReturn.setMessage("");
+                                    JSONObject data = new JSONObject();
+                                    data.put("robotTaskCode", robotTaskCode);
+                                    rcsReturn.setData(data);
+                                }else {
+                                    // 杩斿洖RCS
+                                    rcsReturn.setCode("Err_Internal");
+                                    rcsReturn.setMessage("");
+                                    JSONObject data = new JSONObject();
+                                    data.put("robotTaskCode", robotTaskCode);
+                                    rcsReturn.setData(data);
+                                }
+                            }
+                        }
+                        break;
+                        //rcs璇锋眰wms鍙栬揣鐢宠
+                        case APPLY_PICK: {
+                            Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo());
+                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
+                            //鍒ゆ柇绔欑偣鏄惁鏈夋枡鏋跺拰鎵樼洏
+                            if (staProtocol != null && staProtocol.isLoading()
+                                    && staProtocol.isEmptyOutType()
+                                    && staProtocol.getWorkNo() >0 && staProtocol.getWorkNo() <9990) {
+                                RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
+                                rcsTaskContinue.setRobotTaskCode(task.getTaskNo());
+                                rcsTaskContinue.setTriggerType("TASK");
+                                rcsTaskContinue.setTriggerCode(task.getTaskNo());
+
+                                String url =HIK_URL + "api/robot/controller/task/extend/continue";
+                                String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
+                                if (!StringUtils.isEmpty(response) && response.contains("code")){
+                                    RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class);
+                                    if("200".equals(rcsReturn1.getCode())) {
+                                        // 杩斿洖RCS
+                                        rcsReturn.setCode("SUCCESS");
+                                        rcsReturn.setMessage("");
+                                        JSONObject data = new JSONObject();
+                                        data.put("robotTaskCode", robotTaskCode);
+                                        rcsReturn.setData(data);
+                                    }else {
+                                        // 杩斿洖RCS
+                                        rcsReturn.setCode("Err_Internal");
+                                        rcsReturn.setMessage("");
+                                        JSONObject data = new JSONObject();
+                                        data.put("robotTaskCode", robotTaskCode);
+                                        rcsReturn.setData(data);
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                        //rcs鍙栬揣瀹屾垚锛屽凡閫�鍑鸿緭閫佺嚎
+                        case PICK_COMPLETE: {
+                            Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo());
+                            SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+                            StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone();
+                            //鏀捐揣瀹屾垚 --銆媋gv宸茬粡绂诲紑 --銆嬬粰PLC绔欑偣鍐�9991宸ヤ綔鍙�
+                            if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType() && staProtocol.getWorkNo() >0 && staProtocol.getWorkNo() <9990) {
+                                staProtocol.setWorkNo((short) 0);
+                                staProtocol.setStaNo((short) 0);
+                                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol));
+                                log.info("AGV鍙栬揣瀹屾垚锛岀粰绔欑偣鍐�0宸ヤ綔鍙�,涓嬪彂浠诲姟:{},绔欑偣:{},agv浠诲姟鍙�:{}",result,task.getStaNo(),task.getTaskNo());
+                                if(result){
+                                    // 杩斿洖RCS
+                                    rcsReturn.setCode("SUCCESS");
+                                    rcsReturn.setMessage("");
+                                    JSONObject data = new JSONObject();
+                                    data.put("robotTaskCode", robotTaskCode);
+                                    rcsReturn.setData(data);
+                                }else {
+                                    // 杩斿洖RCS
+                                    rcsReturn.setCode("Err_Internal");
+                                    rcsReturn.setMessage("");
+                                    JSONObject data = new JSONObject();
+                                    data.put("robotTaskCode", robotTaskCode);
+                                    rcsReturn.setData(data);
+                                }
+
+                            }
+                        }
+                        break;
+
+                        default: {
+                        }
+                        break;
+                    }
+                }
+
+            } catch (Exception e) {
+                log.error("RCS鍙嶉浠诲姟杩涘害澶勭悊寮傚父 - {}", rcsReporterTask, e);
+                rcsReturn.setCode("Err_Internal");
+                rcsReturn.setMessage("鍐呴儴澶勭悊寮傚父");
+                JSONObject data = new JSONObject();
+                data.put("robotTaskCode", robotTaskCode);
+                rcsReturn.setData(data);
+            }
+        }
+        return rcsReturn;
+    }
+
+    /**
+     * 鍚戞寚瀹� URL 鍙戦�丳OST鏂规硶鐨勮姹�
+     *
+     * @param url 鍙戦�佽姹傜殑 URL
+     * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋��
+     * @return 鎵�浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋�
+     */
+    public static String sendPost(String url, String param) {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            log.info("sendPost - {} - {}", url, param);
+            URL realUrl = new URL(url);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("Content-Type", "application/json");
+            conn.setRequestProperty("Content-Length", "<calculated when request is sent>");
+            conn.setRequestProperty("Host", "<calculated when request is sent>");
+            conn.setRequestProperty("Accept", "*/*");
+            conn.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
+            conn.setRequestProperty("Connection", "keep-alive");
+
+            conn.setRequestProperty("X-lr-request-id", String.valueOf(new Date().getTime()));
+            conn.setRequestProperty("X-lr-version", "4.3");
+
+            conn.setConnectTimeout(5000);
+            conn.setReadTimeout(5000);
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("璋冪敤HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("璋冪敤HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+}

--
Gitblit v1.9.1