From 701542ac0a90cf0e3a0a81ec2bb8066b5de68e75 Mon Sep 17 00:00:00 2001
From: zyh <zyh@123>
Date: 星期六, 28 三月 2026 11:21:17 +0800
Subject: [PATCH] 更新为正式部署许可证

---
 src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java |  251 ++++++++++++++++++++++++++++++++++---------------
 1 files changed, 172 insertions(+), 79 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
index 4ca46f5..8e8c95d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.excel.util.DateUtils;
 import com.alibaba.excel.util.StringUtils;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -14,6 +15,7 @@
 import com.zy.asrs.entity.param.EmptyPlateOutParam;
 import com.zy.asrs.entity.rcs.*;
 import com.zy.asrs.mapper.AgvInfoMapper;
+import com.zy.asrs.mapper.CanFinMapper;
 import com.zy.asrs.mapper.MatItemBarcodeMapper;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -26,8 +28,11 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.text.ParseException;
 import java.util.*;
 import java.util.concurrent.ExecutionException;
@@ -52,6 +57,14 @@
     public long defaultUserId;
     @Value("${wms.zpalletId}")
     public String WMS_ZPALLET_ID;
+
+    // 娴峰悍RCS鍦板潃
+    @Value("${hik.url}")
+    private String HIK_URL;
+
+    // 鍗庢檽RCS鍦板潃
+    @Value("${hx.url}")
+    private String HX_URL;
 
     @Resource
     private RcsService rcsService;
@@ -95,6 +108,8 @@
     private DocTypeService docTypeService;
     @Autowired
     private OrderService orderService;
+    @Autowired
+    private CanFinMapper canFinMapper;
 
 
     // region MES鎺ュ彛
@@ -239,7 +254,6 @@
             newMemo.put("itemdata", list);
 
 
-
             // 鐢熸垚璁㈠崟
             OrderPakin orderPakin = new OrderPakin();
             orderPakin.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
@@ -260,14 +274,14 @@
 
                     // 鐢熸垚鏄庣粏
                     Mat mat = matService.selectByMatnr(mesMatInfo.getItemNo());
-                    if(Cools.isEmpty(mat)){
-                        log.error("璇ョ墿鏂欑紪鍙风珛搴撴病鏈�="+mesMatInfo.getItemNo());
+                    if (Cools.isEmpty(mat)) {
+                        log.error("璇ョ墿鏂欑紪鍙风珛搴撴病鏈�=" + mesMatInfo.getItemNo());
                         continue;
                     }
                     OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
                     orderDetlPakin.setOrderId(orderPakin.getId());
                     orderDetlPakin.setOrderNo(orderPakin.getOrderNo());
-                    orderDetlPakin.setAnfme(Double.valueOf(mesMatInfo.getQty()));
+                    orderDetlPakin.setAnfme(mesMatInfo.getQty());
                     orderDetlPakin.setQty(0.0);
                     orderDetlPakin.setMatnr(mat.getMatnr());
                     orderDetlPakin.setMaktx(mat.getMaktx());
@@ -938,6 +952,27 @@
         if (docType == null) {
             return 0;
         }
+
+/*
+        // 鏌ヨcan_fin琛ㄤ腑apply_time鏈�鏂扮殑璁板綍
+        List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<CanFin>()
+                .orderBy("apply_time", false)
+        );
+        if (!canFinList.isEmpty()) {
+            CanFin firstCanFin = canFinList.get(0);
+            if (firstCanFin.getAgvType().equals("agv-in-out")) {
+                // 鍙慨鏀归渶瑕佹洿鏂扮殑瀛楁
+                firstCanFin.setOutType("waiting");
+                firstCanFin.setOutNo(mesCallOutApply.getOrderNo());
+                // 纭繚鍏朵粬瀛楁淇濇寔涓嶅彉
+                canFinMapper.updateById(firstCanFin);
+
+                log.info("宸叉洿鏂癱an_fin琛ㄦ渶鏃╄褰曠殑out_no锛孖D锛歿}锛屽嚭搴撳崟鍙凤細{}",
+                        firstCanFin.getId(), mesCallOutApply.getOrderNo());
+            }
+        }
+*/
+
         //鐢熸垚鍑哄簱鍗�
         if (docType.getPakout() == 1) {
             long settle = 1;
@@ -972,6 +1007,22 @@
                 log.error("MES淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
                 throw new CoolException("淇濆瓨鍑哄簱璁㈠崟锛堝彨鏂欙級涓绘。澶辫触");
             }
+
+            if (mesCallOutApply.getTransType().equals("瑁呴厤鍑哄簱鍗�")){
+                CanFin canFin = new CanFin();
+                Date time = now;
+                canFin.setAgvType("agv-out");
+                canFin.setOutNo(mesCallOutApply.getOrderNo());
+                List<CanFin> canFinList = canFinMapper.selectList(new EntityWrapper<>());
+                if (canFinList.isEmpty()){
+                    canFin.setTaskStatus("canout");
+                }else {
+                    canFin.setTaskStatus("waiting");
+                }
+                canFin.setApplyTime(time);
+                canFinMapper.insert(canFin);
+            }
+
             Set<String> set = new HashSet<>();
             // 鐢熸垚鏄庣粏
             if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) {
@@ -979,6 +1030,10 @@
 
                     set.add(mesOutApplyItem.getTrayid());
                     Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno());
+                    if (Cools.isEmpty(mat)) {
+                        log.error("鐗╂枡缂栧彿涓嶅瓨鍦�: {}", mesOutApplyItem.getItemno());
+                        throw new CoolException("鐗╂枡缂栧彿涓嶅瓨鍦�: " + mesOutApplyItem.getItemno());
+                    }
                     OrderDetlPakout orderDetlPakout = new OrderDetlPakout();
                     orderDetlPakout.setOrderId(orderPakout.getId());
                     orderDetlPakout.setOrderNo(orderPakout.getOrderNo());
@@ -1004,9 +1059,9 @@
             }
 
             //鏈夊灏戠涓嶅悓鐨勯厤鐩樺彿   鍙湁閰嶇洏鍑哄簱鍗曢渶瑕佺煡閬�
-            if (mesCallOutApply.getTransType().equals("閰嶇洏鍑哄簱鍗�")){
+            if (mesCallOutApply.getTransType().equals("閰嶇洏鍑哄簱鍗�")) {
                 orderPakout.setPayType(set.size());
-                String shipCode =mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2];
+                String shipCode = mesCallOutApply.getItemdata().get(0).getTrayid().split("-")[2];
                 orderPakout.setShipCode(shipCode);//鍖哄煙  鏄惁鏄壒娈婃墭鐩�
                 orderPakoutService.updateById(orderPakout);
             }
@@ -1040,11 +1095,11 @@
             orderPakin.setPakinPakoutStatus(1);
             orderPakinService.insert(orderPakin);
             if (mesCallOutApply.getItemdata() != null && !mesCallOutApply.getItemdata().isEmpty()) {
-                for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()){
+                for (MesCallOutApply.MesOutApplyItem mesOutApplyItem : mesCallOutApply.getItemdata()) {
                     // 鐢熸垚鏄庣粏
                     Mat mat = matService.selectByMatnr(mesOutApplyItem.getItemno());
-                    if(Cools.isEmpty(mat)){
-                        log.error("璇ョ墿鏂欑紪鍙风珛搴撴病鏈�="+mesOutApplyItem.getItemno());
+                    if (Cools.isEmpty(mat)) {
+                        log.error("璇ョ墿鏂欑紪鍙风珛搴撴病鏈�=" + mesOutApplyItem.getItemno());
                         continue;
                     }
                     OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
@@ -1105,73 +1160,57 @@
             return result;
         }
 
-        // 涓嬪彂缁橰CS
-        RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
-        rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
-        rcsTaskSubmit.setInitPriority(10);  //榛樿10
-        List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
-        RcsTaskTargetRoute startRoute = new RcsTaskTargetRoute();
-        startRoute.setSeq(0);
-        startRoute.setCode(transTask.getCurStationId());
-        startRoute.setOperation("COLLECT");
-        targetRouteList.add(startRoute);
-        RcsTaskTargetRoute endRoute = new RcsTaskTargetRoute();
-        endRoute.setSeq(1);
-        endRoute.setCode(transTask.getNextStationId());
-        endRoute.setOperation("DELIVERY");
-        targetRouteList.add(endRoute);
-        rcsTaskSubmit.setTargetRoute(targetRouteList);
+        int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);
+        Date now = new Date();
+        Task task = new Task();
+        task.setWrkNo(workNo);
+        task.setTaskType("ZX-AGV");
+        if (transTask.getTransType()!= null){
+            if (transTask.getTransType().equals("08-1")){
+                task.setTaskType("ZX-AGV-08-1");
+            }else if (transTask.getTransType().equals("08-2")){
+                task.setTaskType("ZX-AGV-08-2");
+            }else if (transTask.getTransType().equals("11")){
+                task.setTaskType("ZP-AGV");
+            }
+        }
+        task.setWrkSts(301L);//301.AGV浠诲姟鍒涘缓
+        task.setIoType(3);//3.绔欏埌绔�
+        task.setIoPri(10.00);
+        task.setWrkDate(now);
+        task.setBarcode(transTask.getBarcode());
+        task.setSourceStaNo(transTask.getCurStationId());
+        task.setStaNo(transTask.getNextStationId());
+        task.setBarcode(transTask.getTuoPanId());
+        task.setModiUser(defaultUserId);
+        task.setModiTime(now);
+        task.setAppeUser(defaultUserId);
+        task.setAppeTime(now);
+        task.setTaskNo(transTask.getTaskno());
+        task.setMemo(JSONObject.toJSONString(transTask));
+        task.setPltType(transTask.getAgvFactory());//鍗庢檽AGV
+        task.setPacked(transTask.getRackNumber());//鏂欐灦鍙�
+        task.setCtnType(1);
+        task.setIsPda(transTask.getIsPDA());
 
-        // 杞彂缁欐捣搴锋垨鍗庢檽RCS
-        int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
-        if (success == 1) {
-            int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);
-            Date now = new Date();
-            Task task = new Task();
-            task.setWrkNo(workNo);
-            task.setTaskType("ZX-AGV");
-            task.setWrkSts(302L);//302.AGV浠诲姟鎵ц涓�
-            task.setIoType(3);//3.绔欏埌绔�
-            task.setIoPri(10.00);
-            task.setWrkDate(now);
-            task.setBarcode(transTask.getBarcode());
-            task.setSourceStaNo(transTask.getCurStationId());
-            task.setStaNo(transTask.getNextStationId());
-            task.setBarcode(transTask.getTuoPanId());
-            task.setModiUser(defaultUserId);
-            task.setModiTime(now);
-            task.setAppeUser(defaultUserId);
-            task.setAppeTime(now);
-            task.setTaskNo(transTask.getTaskno());
-            task.setMemo(JSONObject.toJSONString(transTask));
-            task.setPltType(transTask.getAgvFactory());//鍗庢檽AGV
-            task.setPacked(transTask.getRackNumber());//鏂欐灦鍙�
-
-            taskService.insert(task);
-//            Mat mat = matService.selectByMatnr(transTask.getItemno());
-//            TaskDetl taskDetl = new TaskDetl();
-//            taskDetl.setWrkNo(task.getWrkNo());
-//            taskDetl.setIoTime(task.getIoTime());
-//            taskDetl.setMatnr(transTask.getItemno());
-//            taskDetl.setAnfme(0.0);
-//            taskDetl.setStandby1(String.valueOf(transTask.getQty()));
-//            taskDetl.setMaktx(mat.getMaktx());
-//            taskDetl.setSpecs(mat.getSpecs());
-//            taskDetl.setOrderNo(transTask.getOrderNo());
-//            taskDetl.setZpallet(transTask.getTuoPanId());
-//            taskDetl.setMemo(JSONObject.toJSONString(transTask.getItemBarcode()));
-//            taskDetl.setModiUser(defaultUserId);
-//            taskDetl.setModiTime(now);
-//            taskDetl.setAppeUser(defaultUserId);
-//            taskDetl.setAppeTime(now);
-//            taskDetlService.insert(taskDetl);
+        if (taskService.insert(task)) {
+            if (transTask.getNextStationId().equals("402") || transTask.getNextStationId().equals("401")){
+                CanFin canFin = new CanFin();
+//            canFin.setAgvType("agv-in-out");
+                canFin.setAgvType("agv-in");
+                canFin.setTaskStatus("waiting");
+                canFin.setInNo(transTask.getTaskno());
+                canFin.setApplyTime(now);
+                canFinMapper.insert(canFin);
+                result.put("Success", "1");
+                result.put("Message", "浠诲姟涓嬪彂缁橰CS鎴愬姛");
+            }
             result.put("Success", "1");
-            result.put("Message", "浠诲姟鎺ユ敹鎴愬姛");
-        } else {
+            result.put("Message", "浠诲姟涓嬪彂缁橰CS鎴愬姛");
+        }else {
             result.put("Success", "2");
             result.put("Message", "浠诲姟涓嬪彂缁橰CS澶辫触");
         }
-
         return result;
     }
 
@@ -1267,9 +1306,14 @@
         mesReturn.setSuccess("2");
 
         if ("Y".equals(allow.getStatus())) {
-            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", allow.getTaskno()));
+            String taskNo = allow.getTaskno();
+            if (taskNo.contains("-")) {
+                taskNo = allow.getTaskno().substring(0, taskNo.lastIndexOf("-"));
+            }
+            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", taskNo));
             if (Cools.isEmpty(task)) {
-                mesReturn.setMessage("娌℃湁鎵句釜璇ヤ换鍔$紪鍙�=" + allow.getTaskno() + "鐨凙GV绉诲姩浠诲姟");
+
+                mesReturn.setMessage("娌℃湁鎵惧埌璇ヤ换鍔$紪鍙�=" + allow.getTaskno() + "鐨凙GV绉诲姩浠诲姟");
             } else {
                 //鏌ョ湅鐢宠绔欑偣鐨勬槸娴峰悍杩樻槸鍗庢檽
                 //娴峰悍
@@ -1285,13 +1329,23 @@
                     mesReturn.setSuccess(success == 1 ? "1" : "2");
                     mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
                 } else {
+                    JSONObject params = new JSONObject();
+                    params.put("EqptCode", allow.getStationId());
+                    params.put("TaskCode", allow.getTaskno());
+                    params.put("ActionStatus", "1");
                     allow.setMethod("APPLY_IN_STATION");
                     int success = rcsService.continueTask(allow, 2);
-                    mesReturn.setSuccess(success == 1 ? "1" : "2");
-                    mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
+                    int success1 = rcsService.applyIn(params, 2);
+                    if (success1 == 1 || success == 1){
+                        mesReturn.setSuccess("1");
+                        mesReturn.setMessage("");
+                    }else {
+                        mesReturn.setSuccess(success1 == 1 ? "1" : "2");
+                        mesReturn.setMessage(success1 == 1 ? "" : "杞彂缁橰CS澶辫触");
+                    }
                 }
-
             }
+
         }
 
         return mesReturn;
@@ -1355,23 +1409,27 @@
         mesReturn.setSuccess("2");
 
         if ("Y".equals(allow.getStatus())) {
-            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", allow.getTaskno()));
+            String taskNo = allow.getTaskno();
+            if (taskNo.contains("-")) {
+                taskNo = allow.getTaskno().substring(0, taskNo.lastIndexOf("-"));
+            }
+            Task task = taskService.selectOne(new EntityWrapper<Task>().eq("task_no", taskNo));
             if (Cools.isEmpty(task)) {
                 mesReturn.setMessage("娌℃湁鎵句釜璇ヤ换鍔$紪鍙�=" + allow.getTaskno() + "鐨凙GV绉诲姩浠诲姟");
             } else {
                 //鏌ョ湅鐢宠绔欑偣鐨勬槸娴峰悍杩樻槸鍗庢檽
                 //娴峰悍
-                if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1) {
+                if (Cools.isEmpty(task.getPltType()) || task.getPltType() == 1 || task.getPltType() == 0) {
                     RcsTaskContinue rcsTaskContinue = new RcsTaskContinue();
                     rcsTaskContinue.setRobotTaskCode(allow.getTaskno());
                     rcsTaskContinue.setTriggerType("TASK");
                     rcsTaskContinue.setTriggerCode(allow.getTaskno());
 //            rcsTaskContinue.setTriggerType("ROBOT");
 //            rcsTaskContinue.setTriggerCode(allow.getAgvCode());
-
                     int success = rcsService.continueTask(rcsTaskContinue, 1);
                     mesReturn.setSuccess(success == 1 ? "1" : "2");
                     mesReturn.setMessage(success == 1 ? "" : "杞彂缁橰CS澶辫触");
+
                 } else {
                     allow.setMethod("APPLY_OFF_STATION");
                     int success = rcsService.continueTask(allow, 2);
@@ -1419,6 +1477,7 @@
         return mesReturn;
     }
 
+
     // endregion
 
     /**
@@ -1432,5 +1491,39 @@
         AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
         return agvInfo.getAgvFactory();
     }
+    @Override
+    public int AGVPause(JSONObject params, int AGVType){
+        MesReturn mesReturn = new MesReturn();
 
+        String hik_blockUrl = "api/robot/controller/zone/blockade";
+        String hik_pauseUrl = "api/robot/controller/zone/pause";
+        String hx_url = "robot/controller/notify/isstop";
+
+        if (AGVType == 1){
+            String BLOCK_URL = HIK_URL + hik_blockUrl;
+            String PAUSE_URL = HIK_URL + hik_pauseUrl;
+
+            String blockResponse = RcsServiceImpl.sendPost(BLOCK_URL, JSONObject.toJSONString(params));
+            JSONObject jsonObject = JSON.parseObject(blockResponse);
+            if (!StringUtils.isEmpty(blockResponse) && (jsonObject.getString("code").equals("SUCCESS") || jsonObject.getInteger("code") == 200)) {
+                String PauseResponse = RcsServiceImpl.sendPost(PAUSE_URL, JSONObject.toJSONString(params));
+                JSONObject pauseJsonObject = JSON.parseObject(PauseResponse);
+                if (!StringUtils.isEmpty(PauseResponse) && (jsonObject.getString("code").equals("SUCCESS") || jsonObject.getInteger("code") == 200)) {
+                    return 1;
+                }else
+                    return 2;
+            }else
+                return 2;
+        }else {
+            String URL = "";
+            URL = HX_URL + hx_url;
+            String PauseResponse = RcsServiceImpl.sendPost(URL, JSONObject.toJSONString(params));
+            JSONObject jsonObject = JSON.parseObject(PauseResponse);
+            if (!StringUtils.isEmpty(PauseResponse) && (jsonObject.getString("code").equals("SUCCESS") || jsonObject.getInteger("code") == 200)) {
+                return 1;
+            }else
+                return 2;
+        }
+
+    }
 }

--
Gitblit v1.9.1