From b51e3b3d5bb721cec65952498d1c2c882d1a01d6 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期一, 15 十二月 2025 17:14:22 +0800
Subject: [PATCH] wms功能完善

---
 src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java |  240 ++++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 168 insertions(+), 72 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
index baffd2c..66ed864 100644
--- a/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.service.impl;
 
 import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.zy.asrs.entity.*;
@@ -39,6 +40,8 @@
     @Value("${mes.defaultUserId}")
     public long defaultUserId;
 
+    @Resource
+    private BasStationService basStationService;
 
     @Resource
     private MesService mesService;
@@ -155,6 +158,9 @@
 
     // region 娴峰悍RCS锛孉GV
 
+    @Resource
+    private ApiLogService apiLogService;
+
     /**
      * 2.1.2浠诲姟涓嬪彂鎺ュ彛
      * 鍘傚锛氭捣閲忋�佸崕鏅�
@@ -163,23 +169,47 @@
      * @param rcsFactory 1 娴峰悍锛�2 鍗庢檽锛�
      * @return
      */
-    public int submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){
-        return 1;
+    public RcsReturn submitTask(RcsTaskSubmit rcsTaskSubmit, int rcsFactory){
+        RcsReturn rcsReturn = new RcsReturn();
+        boolean success = false;
+        String url = rcsFactory == 2 ? HX_URL : HIK_URL + "api/robot/controller/task/submit";
+        String response = "";
+        try {
+            response = sendPost(url, JSONObject.toJSONString(rcsTaskSubmit));
+            if (!StringUtils.isEmpty(response) && response.contains("code")) {
+                rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
+                if ("SUCCESS".equals(rcsReturn.getCode())) {
+                    // 妯℃嫙杩斿洖
+//            rcsReturn.setCode("SUCCESS");
+//            JSONObject jsonObject = new JSONObject();
+//            jsonObject.put("robotTaskCode","2025121301");
+//            rcsReturn.setData(jsonObject);
+                    success = true;
 
-//        String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/submit";
-//        String response = sendPost(url, rcsTaskSubmit.toString());
-//        if (!StringUtils.isEmpty(response) && response.contains("code")){
-//            RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
-//            if("SUCCESS".equals(rcsReturn.getCode())) {
-//                JSONObject data = rcsReturn.getData();
-//                String robotTaskCode = data.getString("robotTaskCode");
-//                if (robotTaskCode.equals(rcsTaskSubmit.getRobotTaskCode())){
-//                    return 1;
-//                }
-//            }
-//        }
-//
-//        return 0;
+                    log.info("鍛煎彨agv鎼繍鎴愬姛锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
+                } else {
+                    log.error("鍛煎彨agv鎼繍澶辫触锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, JSON.toJSONString(rcsTaskSubmit), response);
+                }
+            }
+        } catch (Exception e) {
+            log.error("鍛煎彨agv鎼繍寮傚父", e);
+        } finally {
+            try {
+                // 淇濆瓨鎺ュ彛鏃ュ織
+                apiLogService.save(
+                        "鍛煎彨agv鎼繍",
+                        url,
+                        null,
+                        "127.0.0.1",
+                        JSON.toJSONString(rcsTaskSubmit),
+                        response,
+                        success
+                );
+            } catch (Exception e) {
+                log.error("鍛煎彨agv鎼繍淇濆瓨鎺ュ彛鏃ュ織寮傚父", e);
+            }
+        }
+        return rcsReturn;
     }
 
     /**
@@ -192,7 +222,7 @@
     public int continueTask(RcsTaskContinue rcsTaskContinue, int rcsFactory){
 
         String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/robot/controller/task/extend/continue";
-        String response = sendPost(url, rcsTaskContinue.toString());
+        String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue));
         if (!StringUtils.isEmpty(response) && response.contains("code")){
             RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
             if("SUCCESS".equals(rcsReturn.getCode())) {
@@ -217,7 +247,7 @@
     public int cancelTask(RcsTaskCancel rcsTaskCancel, int rcsFactory){
 
         String url = rcsFactory == 2 ? HX_URL :HIK_URL  + "api/robot/controller/task/cancel";
-        String response = sendPost(url, rcsTaskCancel.toString());
+        String response = sendPost(url, JSONObject.toJSONString(rcsTaskCancel));
         if (!StringUtils.isEmpty(response) && response.contains("code")){
             RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
             if("SUCCESS".equals(rcsReturn.getCode())) {
@@ -242,7 +272,7 @@
     private int notifyEqpt(RcsEqptNotify rcsEqptNotify, int rcsFactory){
 
         String url = rcsFactory == 2 ? HX_URL :HIK_URL + "api/wcs/robot/eqpt/notify";
-        String response = sendPost(url, rcsEqptNotify.toString());
+        String response = sendPost(url, JSONObject.toJSONString(rcsEqptNotify));
         if (!StringUtils.isEmpty(response) && response.contains("code")){
             RcsReturn rcsReturn = JSONObject.parseObject(response, RcsReturn.class);
             if("SUCCESS".equals(rcsReturn.getCode())) {
@@ -274,9 +304,43 @@
         // start : 浠诲姟寮�濮嬶紱outbin : 璧板嚭鍌ㄤ綅锛沞nd : 浠诲姟瀹屾垚
         String method = values.getString("method");
         String carrierType = values.getString("carrierType");
+        Date now = new Date();
 
         try {
-            if ("Q3".equals(carrierType) || "Q8".equals(carrierType)) {    //AGV
+            if (singleRobotCode.equals("14") || singleRobotCode.equals("15")) { // 涓ゅ彴CTU搴撴満鍣ㄤ汉缂栧彿
+                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("task_no", robotTaskCode));
+                if(wrkMast != null) {
+                    Integer ioType = wrkMast.getIoType();
+                    switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
+                        case TASK_START: {
+                            if (ioType == 1 || ioType == 10 || ioType == 53) {
+                                wrkMast.setCrnStrTime(now);
+                                wrkMast.setModiTime(now);
+                                wrkMastService.updateById(wrkMast);
+                            } else if (ioType == 101 || ioType == 110 || ioType == 103) {
+
+                            } else {
+                                log.error("{}ioType{}涓嶅湪end鍙嶉澶勭悊涓�", wrkMast.getWrkNo(), ioType);
+                            }
+                        }
+                        break;
+                        case TASK_END: {
+                            if (ioType == 1 || ioType == 10 || ioType == 53) {
+                                wrkMast.setWrkSts(4L);
+                                wrkMast.setCrnEndTime(now);
+                                wrkMast.setModiTime(now);
+                                wrkMastService.updateById(wrkMast);
+                            } else if (ioType == 101 || ioType == 110 || ioType == 103) {
+
+                            } else {
+                                log.error("{}ioType{}涓嶅湪end鍙嶉澶勭悊涓�", wrkMast.getWrkNo(), ioType);
+                            }
+                        }
+                        break;
+                        default:
+                    }
+                }
+            } else { //AGV
                 EntityWrapper<Task> wrapper = new EntityWrapper<>();
                 wrapper.eq("task_no", robotTaskCode);
                 Task task = taskService.selectOne(wrapper);
@@ -292,6 +356,17 @@
 
                 switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
                     case TASK_START: {
+                        if(memo.getString("TransType").equals("05") || memo.getString("TransType").equals("01")) {
+                            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getSourceStaNo()));
+                            if(station.getLocSts().equals("R")) {
+                                station.setLocSts("O");
+                                station.setBarcode("");
+                                station.setModiTime(new Date());
+                                basStationService.updateById(station);
+                            } else {
+                                log.error("agv鍥炶皟start,鎺ラ┏鐐圭姸鎬佷笉涓篟,agv浠诲姟鍙凤細{},鐘舵�侊細{}",task.getTaskNo(),task.getWrkSts());
+                            }
+                        }
                         task.setWrkSts(302L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
                         task.setModiTime(new Date());
                         task.setModiUser(defaultUserId);
@@ -300,12 +375,28 @@
 //                    case TASK_OUT_BIN: {} break;
                     case TASK_END: {
                         // 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
-                        task.setWrkSts(304L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+                        if(memo.getString("TransType").equals("06") || memo.getString("TransType").equals("02")) {
+                            // 06涓嬪垁鏉ョ殑绌哄垁鏋堕渶瑕佸洖鍘伙紝02鏉ョ殑瑕佷笂鍒�05鐨勭┖鍒�鏋朵笂婊″悗闇�瑕佸洖鍘伙紝pda涓婂仛浠诲姟杞崲
+                            task.setWrkSts(305L); // 305.浠诲姟杞崲
+                            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>().eq("dev_no", task.getStaNo()));
+                            if(station.getLocSts().equals("S")) {
+                                station.setLocSts("F");
+                                station.setModiTime(new Date());
+                                basStationService.updateById(station);
+                            } else {
+                                log.error("agv鍥炶皟end,鎺ラ┏鐐圭姸鎬佷笉涓篠,agv浠诲姟鍙凤細{},鐘舵�侊細{}",task.getTaskNo(),task.getWrkSts());
+                            }
+                        } else {
+                            task.setWrkSts(304L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+                        }
                         task.setModiTime(new Date());
                         task.setModiUser(defaultUserId);
                         taskService.updateById(task);
                         // 浠诲姟瀹屾垚
                         mesService.reporterTask(rcsReporterTask);
+
+                        // 鏇存柊鎺ラ┏浣嶇疆鐘舵��
+
 
 //                    EntityWrapper<TaskDetl> wapper2 = new EntityWrapper<>();
 //                    wapper2.eq("wrk_no", task.getWrkNo())
@@ -353,7 +444,7 @@
                         TransArrivalStation arrivalStation = new TransArrivalStation();
                         arrivalStation.setTaskno(robotTaskCode);
                         arrivalStation.setTaskname(memo.getString("taskName"));
-                        arrivalStation.setTuoPanId(taskDetl == null || taskDetl.getZpallet() == null ? "" : taskDetl.getZpallet());
+//                        arrivalStation.setTuoPanId(taskDetl == null || taskDetl.getZpallet() == null ? "" : taskDetl.getZpallet());
                         arrivalStation.setDaotype(memo.getString("TransType"));
                         arrivalStation.setProductLineId(memo.getString("ProductLineId"));
 //                        arrivalStation.setStationId(task.getStaNo());
@@ -379,53 +470,54 @@
                     } break;
                     default: {} break;
                 }
-            } else if ("CTU".equals(carrierType)) { //CTU
-                EntityWrapper<WrkMast> wrapper = new EntityWrapper<>();
-                wrapper.eq("task_no", robotTaskCode);
-                WrkMast task = wrkMastService.selectOne(wrapper);
-                if (task == null || !task.getTaskNo().equals(robotTaskCode)) {
-                    rcsReturn.setCode("Err_RobotCodeNotMatch");
-                    rcsReturn.setMessage("");
-                    JSONObject data = new JSONObject();
-                    data.put("robotTaskCode", robotTaskCode);
-                    rcsReturn.setData(data);
-                    return rcsReturn;
-                }
-//                JSONObject memo = JSONObject.parseObject(task.getMemo());
-
-                switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
-                    case TASK_START: {
-//                        task.setWrkSts(302L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+            }
+//            else if ("CTU".equals(carrierType)) { //CTU
+//                EntityWrapper<WrkMast> wrapper = new EntityWrapper<>();
+//                wrapper.eq("task_no", robotTaskCode);
+//                WrkMast task = wrkMastService.selectOne(wrapper);
+//                if (task == null || !task.getTaskNo().equals(robotTaskCode)) {
+//                    rcsReturn.setCode("Err_RobotCodeNotMatch");
+//                    rcsReturn.setMessage("");
+//                    JSONObject data = new JSONObject();
+//                    data.put("robotTaskCode", robotTaskCode);
+//                    rcsReturn.setData(data);
+//                    return rcsReturn;
+//                }
+////                JSONObject memo = JSONObject.parseObject(task.getMemo());
+//
+//                switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) {
+//                    case TASK_START: {
+////                        task.setWrkSts(302L);   // 301 浠诲姟涓嬪彂銆�302 浠诲姟鎵ц銆�303 浠诲姟涓柇銆�304 浠诲姟缁撴潫
+////                        task.setModiTime(new Date());
+////                        task.setModiUser(defaultUserId);
+////                        taskService.updateById(task);
+//                    } break;
+////                    case TASK_OUT_BIN: {} break;
+//                    case TASK_END: {
+//                        // 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
+//                        long wrkSts = task.getWrkSts(); // 1.鍏ュ簱锛�101.鍑哄簱锛�
+//                        if (task.getIoType() == 1) {
+//                            wrkSts = 4L;
+//                        } else if (task.getIoType() == 101) {
+//                            wrkSts = 14L;
+//                        }
+//
+//                        task.setWrkSts(wrkSts); // 4.鍏ュ簱瀹屾垚锛�14.宸插嚭搴撴湭纭锛�
 //                        task.setModiTime(new Date());
 //                        task.setModiUser(defaultUserId);
-//                        taskService.updateById(task);
-                    } break;
-//                    case TASK_OUT_BIN: {} break;
-                    case TASK_END: {
-                        // 鏇存柊浠诲姟鐘舵�佺瓑鍐呴儴閫昏緫
-                        long wrkSts = task.getWrkSts(); // 1.鍏ュ簱锛�101.鍑哄簱锛�
-                        if (task.getIoType() == 1) {
-                            wrkSts = 4L;
-                        } else if (task.getIoType() == 101) {
-                            wrkSts = 14L;
-                        }
-
-                        task.setWrkSts(wrkSts); // 4.鍏ュ簱瀹屾垚锛�14.宸插嚭搴撴湭纭锛�
-                        task.setModiTime(new Date());
-                        task.setModiUser(defaultUserId);
-                        wrkMastService.updateById(task);
-
-                        // TODO锛氫换鍔″畬鎴愯Е鍙戝嚭鍏ュ簱鍙樻洿鎿嶄綔
-
-
-//                        // 鍏ュ簱瀹屾垚
-//                        mesService.inFeedback(memo.getString("OrderNo"));
-//                        // 鍑哄簱瀹屾垚
-//                        mesService.outFeedback(memo.getString("OrderNo"));
-                    } break;
-                    default: {} break;
-                }
-            }
+//                        wrkMastService.updateById(task);
+//
+//                        // TODO锛氫换鍔″畬鎴愯Е鍙戝嚭鍏ュ簱鍙樻洿鎿嶄綔
+//
+//
+////                        // 鍏ュ簱瀹屾垚
+////                        mesService.inFeedback(memo.getString("OrderNo"));
+////                        // 鍑哄簱瀹屾垚
+////                        mesService.outFeedback(memo.getString("OrderNo"));
+//                    } break;
+//                    default: {} break;
+//                }
+//            }
 
             // 杩斿洖RCS
             rcsReturn.setCode("SUCCESS");
@@ -553,11 +645,15 @@
             log.info("sendPost - {} - {}", url, param);
             URL realUrl = new URL(url);
             URLConnection conn = realUrl.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
+            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);

--
Gitblit v1.9.1