From 0d04bc5d8080b82338302fba0a59fccff2eaedfc Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 06 七月 2025 11:28:29 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java |  228 ++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 193 insertions(+), 35 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
index ed02346..3f68905 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -9,17 +9,13 @@
 import com.zy.asrs.common.utils.HttpHandler;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.SnowflakeIdWorker;
-import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.core.domain.dto.MatDto;
 import com.zy.asrs.wcs.core.domain.dto.RedisMapDto;
 import com.zy.asrs.wcs.core.domain.dto.StaDto;
 import com.zy.asrs.wcs.core.entity.*;
 import com.zy.asrs.wcs.core.kernel.AnalyzeService;
 import com.zy.asrs.wcs.core.model.MapNode;
-import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
-import com.zy.asrs.wcs.core.model.enums.MotionStsType;
-import com.zy.asrs.wcs.core.model.enums.TaskCtgType;
-import com.zy.asrs.wcs.core.model.enums.TaskStsType;
+import com.zy.asrs.wcs.core.model.enums.*;
 import com.zy.asrs.wcs.core.service.*;
 import com.zy.asrs.wcs.core.utils.RedisUtil;
 import com.zy.asrs.wcs.core.utils.ShuttleDispatcher;
@@ -83,7 +79,11 @@
     @Autowired
     private BasConveyorStaService basConveyorStaService;
     @Autowired
+    private BasConveyorPathService basConveyorPathService;
+    @Autowired
     private BasLedService basLedService;
+    @Autowired
+    private DeviceBarcodeService deviceBarcodeService;
 
     /**
      * 缁勬墭
@@ -220,9 +220,18 @@
                             Integer code = jsonObject.getInteger("code");
                             if (code.equals(200)) {
                                 StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-                                devpThread.writeWorkSta(staProtocol.getSiteId(), dto.getWorkNo().shortValue(), dto.getStaNo().shortValue());
-                                devpThread.setPakMk(staProtocol.getSiteId(), false);
 
+                                //鑾峰彇杈撻�佽矾寰�
+                                BasConveyorPath conveyorPath = basConveyorPathService.getOne(new LambdaQueryWrapper<BasConveyorPath>()
+                                        .eq(BasConveyorPath::getTypeNo, TaskCtgType.IN.val())
+                                        .eq(BasConveyorPath::getDeviceId, devp.getId())
+                                        .eq(BasConveyorPath::getStnNo, staProtocol.getSiteId()));
+                                if (conveyorPath == null) {
+                                    News.error("杈撻�佽矾寰勪笉瀛樺湪");
+                                }else {
+                                    devpThread.writeWorkSta(staProtocol.getSiteId(), dto.getWorkNo().shortValue(), conveyorPath.getDeviceStn().shortValue());
+                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
+                                }
                             }else {
                                 if (ledThread != null) {
                                     String errorMsg = jsonObject.getString("msg");
@@ -411,6 +420,48 @@
     // 瑙f瀽鍏ュ簱宸ヤ綔妗�
     public synchronized void analyzeInBoundTask() {
         for (Task task : taskService.selectWaitAnalyzeInBoundTask()) {
+            BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, task.getDestSite()));
+            if (basConveyorSta == null) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝杈撻��");
+                continue;
+            }
+            BasConveyor basConveyor = basConveyorService.getById(basConveyorSta.getConveyorId());
+            if (basConveyor == null) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝杈撻��2");
+                continue;
+            }
+            DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId());
+            if (deviceBarcode == null) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝鏉$爜");
+                continue;
+            }
+            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId()));
+            if (barcodeThread == null) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝鏉$爜绾跨▼");
+                continue;
+            }
+            if (!barcodeThread.getBarcode().equals(task.getZpallet())) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝鏉$爜涓嶇鍚堬紝浠诲姟鏉$爜锛�"+task.getZpallet()+",绾跨▼鏉$爜:"+barcodeThread.getBarcode());
+                continue;
+            }
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
+            if (devpThread == null) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝杈撻�佺嚎绋�");
+                continue;
+            }
+            StaProtocol staProtocol = devpThread.getStation().get(basConveyorSta.getSiteNo());
+            if (staProtocol == null) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝杈撻�佺珯鐐�");
+                continue;
+            }
+            if (!(staProtocol.isAutoing()
+                    && staProtocol.isLoading()
+                    && staProtocol.isInEnable())) {
+                log.error("瑙f瀽鍏ュ簱浠诲姟閫�鍑猴紝杈撻�佷俊鍙蜂笉绗﹀悎锛�"+staProtocol.isAutoing()+","+staProtocol.isLoading()+","+staProtocol.isInEnable());
+                continue;
+            }
+
+
             if (Cools.isEmpty(task.getShuttleNo())) {
                 //鍒嗛厤灏忚溅
                 //鎼滅储绌洪棽杞�
@@ -429,17 +480,57 @@
             }
 
             // generate motion list
-            List<Motion> motionList = analyzeService.generateMotion(task);
-            if (motionList.isEmpty()) {
+            List<Motion> motionList = null;
+            try {
+                motionList = analyzeService.generateMotion(task);
+            }catch (Exception e) {
+                log.error("motion瑙f瀽鍑洪敊锛�"+e.getMessage());
                 continue;
             }
-            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+
+            if (motionList.isEmpty()) {
+                log.error("motion涓虹┖閫�鍑�");
+                continue;
+            }
+            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
 
             // 鏇存柊宸ヤ綔涓绘。
             task.setTaskSts(TaskStsType.ANALYZE_INBOUND.sts); // 宸ヤ綔鐘舵��
             task.setUpdateTime(new Date());
             if (!taskService.updateById(task)) {
                 News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+            }else {
+                try {
+                    if ("0601".equals(task.getMemo().substring(0, 4))) {
+                        String response = "";
+                        Map<String, Object> headers = new HashMap<>();
+                        headers.put("Content-Type", "application/json;charset=UTF-8");
+                        headers.put("X-lr-request-id", task.getWmsTaskNo());
+                        headers.put("X-lr-version", 4.1);
+                        headers.put("X-lr-trace-id", "{{$guid}}");
+
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("carrierCode", task.getZpallet());
+                        map.put("siteCode", "06YZ0001");
+                        map.put("extra", null);
+                        try {
+                            response = new HttpHandler.Builder()
+                                    .setHeaders(headers)
+                                    .setUri("172.18.16.248:443")
+                                    .setHttps(true)
+                                    .setPath("/rcs/rtas/api/robot/controller/carrier/unbind")
+                                    .setJson(JSONObject.toJSONString(map))
+                                    .build()
+                                    .doPost();
+                            JSONObject jsonObject = JSON.parseObject(response);
+                            log.info("agv瑙g粦绠卞彿,璇锋眰浣�:" + JSONObject.toJSONString(map) + ",杩斿洖:" + response);
+                        } catch (Exception e) {
+                            log.info("agv瑙g粦绠卞彿璇锋眰鎶ラ敊" + e.getMessage());
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         }
     }
@@ -454,26 +545,36 @@
         }
 
         for (Task task : tasks) {
+            List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().in(Task::getTaskSts, TaskStsType.ANALYZE_OUTBOUND.sts, TaskStsType.EXECUTE_OUTBOUND.sts));
+            if (!list.isEmpty()) {
+                continue;//瀛樺湪姝e湪瑙f瀽锛屾鍦ㄦ墽琛屼换鍔�
+            }
+
             BasConveyorSta originStaObj = basConveyorStaService.selectBySiteNo(task.getOriginSite());//鑾峰彇婧愮珯
             if (originStaObj == null) {
                 continue;
             }
 
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, originStaObj.getConveyorId().intValue());
+            BasConveyor basConveyor = basConveyorService.getById(originStaObj.getConveyorId());
+            if(basConveyor == null) {
+                continue;
+            }
+
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
             StaProtocol staProtocol = devpThread.getStation().get(Integer.parseInt(task.getOriginSite()));//婧愮珯
-            StaProtocol staProtocol1 = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔�
-            if (staProtocol == null || staProtocol1 == null) {
+//            StaProtocol staProtocol1 = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔�
+            if (staProtocol == null) {
                 continue;
             } else {
                 staProtocol = staProtocol.clone();
-                staProtocol1 = staProtocol1.clone();
+//                staProtocol1 = staProtocol1.clone();
             }
 
             // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
             if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
-                if (!(staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0 && staProtocol1.isOutEnable())) {
-                    continue;
-                }
+//                if (!(staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0 && staProtocol1.isOutEnable())) {
+//                    continue;
+//                }
 
 //                //鍚屽簱浣嶇粍鏍¢獙
 //                List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
@@ -506,7 +607,7 @@
                     log.error("鍑哄簱 ===>> 鏆傛椂娌℃湁绌洪棽灏忚溅, 浠诲姟鍙�={}", task.getTaskNo());
                     continue;
                 }
-                motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+                motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
 
                 // 鏇存柊宸ヤ綔涓绘。
                 task.setTaskSts(TaskStsType.ANALYZE_OUTBOUND.sts); // 宸ヤ綔鐘舵��
@@ -540,14 +641,50 @@
             }
 
             // generate motion list
-            List<Motion> motionList = analyzeService.generateMotion(task);
+            List<Motion> motionList = analyzeService.generateShuttleMoveMotion(task);
             if (motionList.isEmpty()) {
                 continue;
             }
-            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
 
             // 鏇存柊宸ヤ綔涓绘。
             task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts); // 宸ヤ綔鐘舵��
+            task.setUpdateTime(new Date());
+            if (!taskService.updateById(task)) {
+                News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+            }
+        }
+    }
+
+    // 瑙f瀽灏忚溅杞借揣绉诲姩宸ヤ綔妗�
+    public synchronized void analyzeLadenMoveTask() {
+        for (Task task : taskService.selectWaitAnalyzeLadenMoveTask()) {
+            if (Cools.isEmpty(task.getShuttleNo())) {
+                //鍒嗛厤灏忚溅
+                //鎼滅储绌洪棽杞�
+                ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
+                if (shuttleThread == null) {
+                    News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+                    continue;
+                }
+
+                task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+                task.setUpdateTime(new Date());
+                if (!taskService.updateById(task)) {
+                    News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+                }
+                continue;
+            }
+
+            // generate motion list
+            List<Motion> motionList = analyzeService.generateShuttleLadenMoveMotion(task);
+            if (motionList.isEmpty()) {
+                continue;
+            }
+            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
+
+            // 鏇存柊宸ヤ綔涓绘。
+            task.setTaskSts(TaskStsType.ANALYZE_LADEN_MOVE.sts); // 宸ヤ綔鐘舵��
             task.setUpdateTime(new Date());
             if (!taskService.updateById(task)) {
                 News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
@@ -559,14 +696,6 @@
      * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
      */
     public synchronized void loopShuttleCharge() {
-        // 鑾峰彇鍏呯數妗╁簱浣嶇被鍨�
-        LocCtg locCtg = locCtgService.getOne(new LambdaQueryWrapper<LocCtg>()
-                .eq(LocCtg::getFlag, "CHARGE")
-                .eq(LocCtg::getStatus, 1));
-        if (locCtg == null) {
-            return;
-        }
-
         //鑾峰彇鍏呯數浠诲姟绫诲瀷
         TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
                 .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.CHARGE))
@@ -598,12 +727,26 @@
                 continue;
             }
 
+            List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>()
+                    .in(Task::getTaskSts
+                            , TaskStsType.NEW_INBOUND.sts
+                            , TaskStsType.ANALYZE_INBOUND.sts
+                            , TaskStsType.EXECUTE_INBOUND.sts
+                            , TaskStsType.NEW_OUTBOUND.sts
+                            , TaskStsType.ANALYZE_OUTBOUND.sts
+                            , TaskStsType.EXECUTE_OUTBOUND.sts)
+            );
+            if (!taskList.isEmpty()) {
+                News.info("{}鍙峰皬杞︼紝绯荤粺瀛樺湪姝e湪鎵ц浠诲姟锛屾殏鍋滃厖鐢典换鍔�", shuttleProtocol.getShuttleNo());
+                continue;//姝e湪鎵ц浠诲姟锛屼笉鎵ц鍏呯數
+            }
+
             String currentLocNo = shuttleProtocol.getCurrentLocNo();
             int lev = Utils.getLev(currentLocNo);//鑾峰彇灏忚溅妤煎眰
             //鎼滅储灏忚溅褰撳墠妤煎眰鍏呯數妗�
             ArrayList<Loc> allChargeLoc = new ArrayList<>();
             List<Loc> list1 = locService.list(new LambdaQueryWrapper<Loc>()
-                    .eq(Loc::getLocCtg, locCtg.getId())
+                    .eq(Loc::getLocSts, LocStsType.C.val())
                     .eq(Loc::getStatus, 1)
                     .eq(Loc::getLev, lev));
             if (!list1.isEmpty()) {
@@ -612,7 +755,7 @@
 
             //鎼滅储鍏朵粬妤煎眰鍏呯數妗�
             List<Loc> list2 = locService.list(new LambdaQueryWrapper<Loc>()
-                    .eq(Loc::getLocCtg, locCtg.getId())
+                    .eq(Loc::getLocSts, LocStsType.C.val())
                     .eq(Loc::getStatus, 1)
                     .notIn(Loc::getLev, lev));
             if (!list2.isEmpty()) {
@@ -687,7 +830,7 @@
                 News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
                 continue;
             }
-            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
 
             task.setTaskSts(TaskStsType.ANALYZE_CHARGE.sts);
             if (!taskService.save(task)) {
@@ -782,7 +925,7 @@
                 News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo());
                 continue;
             }
-            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+            motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
 
             task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts);
 
@@ -811,8 +954,13 @@
                     .eq(BasLed::getDeviceId, ledDevice.getId()));
             List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
 
+            BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId().intValue());
+            if (basConveyor == null) {
+                continue;
+            }
+
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue());
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
             // 鍛戒护闆嗗悎
             List<LedCommand> commands = new ArrayList<>();
             // 宸ヤ綔妗i泦鍚�
@@ -892,8 +1040,13 @@
                     .eq(BasLed::getDeviceId, ledDevice.getId()));
             List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
 
+            BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId().intValue());
+            if (basConveyor == null) {
+                continue;
+            }
+
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue());
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
             // 鍛戒护闆嗗悎
             boolean reset = true;
             for (Integer staNo : staArr) {
@@ -922,8 +1075,13 @@
                     .eq(BasLed::getDeviceId, ledDevice.getId()));
             List<Integer> staArr = JSON.parseArray(led.getSta(), Integer.class);
 
+            BasConveyor basConveyor = basConveyorService.getById(led.getConveyorId());
+            if (basConveyor == null) {
+                continue;
+            }
+
             // 鑾峰彇杈撻�佺嚎plc绾跨▼
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, led.getConveyorId().intValue());
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
             // 鍛戒护闆嗗悎
             boolean reset = true;
             for (Integer staNo : staArr) {

--
Gitblit v1.9.1