From 50435a81915932eda06b7f1afd48f9ff1ae84f19 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期四, 10 四月 2025 17:50:28 +0800
Subject: [PATCH] 1

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java |  281 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 169 insertions(+), 112 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 cbc2831..e5efb23 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
@@ -28,13 +28,17 @@
 import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
 import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
 import com.zy.asrs.wcs.rcs.service.DeviceService;
-import com.zy.asrs.wcs.rcs.thread.*;
+import com.zy.asrs.wcs.rcs.thread.DevpThread;
+import com.zy.asrs.wcs.rcs.thread.LedThread;
+import com.zy.asrs.wcs.rcs.thread.LiftThread;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
 import com.zy.asrs.wcs.system.entity.Dict;
 import com.zy.asrs.wcs.system.service.DictService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
 import java.util.*;
 
 /**
@@ -89,6 +93,71 @@
     @Autowired
     private ShuttleStandbyService shuttleStandbyService;
 
+
+    private boolean isInEnable(DevpThread devpThread, Integer staNo) {
+        if (staNo == null) {
+            return false;
+        }
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        switch (staNo) {
+            case 1011:
+            case 1012:
+                devpThread.getStation().get(1012).isInEnable();
+                break;
+            case 1021:
+            case 1022:
+            case 1023:
+                devpThread.getStation().get(1022).isInEnable();
+                break;
+            case 1031:
+            case 1032:
+                devpThread.getStation().get(1032).isInEnable();
+                break;
+            case 1025:
+            case 1026:
+                devpThread.getStation().get(1025).isInEnable();
+                break;
+            case 1013:
+            case 1014:
+            case 1015:
+                devpThread.getStation().get(1014).isInEnable();
+                break;
+        }
+        return false;
+    }
+
+    private boolean isOutEnable(DevpThread devpThread, Integer staNo) {
+        if (staNo == null) {
+            return false;
+        }
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        switch (staNo) {
+            case 1011:
+            case 1012:
+                devpThread.getStation().get(1012).isOutEnable();
+                break;
+            case 1021:
+            case 1022:
+            case 1023:
+                devpThread.getStation().get(1022).isOutEnable();
+                break;
+            case 1031:
+            case 1032:
+                devpThread.getStation().get(1032).isOutEnable();
+                break;
+            case 1025:
+            case 1026:
+                devpThread.getStation().get(1025).isOutEnable();
+                break;
+            case 1013:
+            case 1014:
+            case 1015:
+                devpThread.getStation().get(1014).isOutEnable();
+                break;
+        }
+        return false;
+    }
+
     /**
      * 缁勬墭
      * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
@@ -104,7 +173,7 @@
                 // 閬嶅巻鍏ュ簱鍙�
                 for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) {
                     BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
-                    if(basConveyorSta == null) {
+                    if (basConveyorSta == null) {
                         continue;
                     }
 
@@ -160,7 +229,7 @@
 
                     // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                     if (staProtocol.isAutoing() && staProtocol.isLoading()
-                            && staProtocol.isInEnable()
+                            && isInEnable(devpThread, inSta.getStaNo())
                             && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
                             && staProtocol.isPakMk()
                     ) {
@@ -197,7 +266,7 @@
                         if (task1 != null) {
                             News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", task1.getTaskNo());
                             if (staProtocol.getWorkNo().intValue() != Integer.parseInt(task1.getTaskNo())) {
-                                devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getOriginSite()));
+                                devpThread.writeWorkSta(staProtocol.getSiteId(), Short.parseShort(task1.getTaskNo()), Short.parseShort(task1.getDestSite()));
                                 devpThread.setPakMk(staProtocol.getSiteId(), false);
                                 News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(task1));
                             }
@@ -262,7 +331,7 @@
 //                                }
 
                                 redisUtil.set(DeviceRedisConstant.LIFT_PALLET_INBOUND + inSta.getStaNo(), "in", 10);
-                            }else {
+                            } else {
                                 String msg = jsonObject.getString("msg");
                                 HashMap<String, String> hashMap = new HashMap<>();
                                 hashMap.put("msg", msg);
@@ -339,10 +408,10 @@
                         mapNode.setXBase(object.getInteger("refx"));
                         mapNode.setYBase(object.getInteger("refy"));
 
-                        if(mapNode.getValue() == MapNodeType.CONVEYOR.id) {
+                        if (mapNode.getValue() == MapNodeType.CONVEYOR.id) {
                             //杈撻�佺嚎,鍒ゆ柇灏忚溅鏄惁鍙蛋
                             if (object.containsKey("conveyorHasGo")) {
-                                if(object.getBoolean("conveyorHasGo")) {
+                                if (object.getBoolean("conveyorHasGo")) {
                                     //灏忚溅鍙蛋
                                     mapNode.setValue(MapNodeType.CONVEYOR_CAR_GO.id);
                                 }
@@ -436,7 +505,7 @@
 
                 ArrayList<MapNode> headNodes = new ArrayList<>();
                 ArrayList<MapNode> footerNodes = new ArrayList<>();
-                for (int i = 0; i < row+2; i++) {
+                for (int i = 0; i < row + 2; i++) {
                     headNodes.add(mapNode.clone());
                     footerNodes.add(mapNode.clone());
                 }
@@ -473,7 +542,7 @@
                 // 閬嶅巻鍏ュ簱鍙�
                 for (StaDto inSta : JSON.parseArray(basConveyor.getDeviceInSta(), StaDto.class)) {
                     BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
-                    if(basConveyorSta == null) {
+                    if (basConveyorSta == null) {
                         continue;
                     }
 
@@ -485,93 +554,93 @@
                     } else {
                         staProtocol = staProtocol.clone();
                     }
-                    int workNo = staProtocol.getWorkNo().intValue();
-
+                    int workNo = 0;
                     // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
-                    if (staProtocol.isAutoing()
-                            && staProtocol.isInEnable()
-                            && (workNo >= 0)
-                            && staProtocol.isPakMk()
-                    ) {
+                    if ((staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1023 || staProtocol.getSiteId() == 1026 || staProtocol.getSiteId() == 1032) &&
+                            staProtocol.isAutoing() && staProtocol.isLoading()) {
+                        workNo = staProtocol.getFinishWorkNo().intValue();
+                    } else if ((staProtocol.getSiteId() == 1012) && staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) {
+                        workNo = staProtocol.getWorkNo().intValue();
+                    } else {
+                        continue;
+                    }
 
-                        Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
-                                .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
-                                .eq(Task::getTaskNo, workNo));
-                        if (task != null) {
-                            if (!Cools.isEmpty(task.getLiftNo())) {
-                                if (task.getLiftNo() > 0) {
-                                    task.setLiftNo(0);
-                                    task.setUpdateTime(new Date());
-                                    if (!taskService.updateById(task)) {
-                                        News.info("{}浠诲姟鏇存柊閲婃斁鎻愬崌鏈哄け璐�", task.getTaskNo());
-                                    }
-                                }
-                            }
-
-                            //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑鍙崲灞傛彁鍗囨満(鍙兘涓嶇┖闂�)
-                            LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true);
-                            if (liftThread == null) {
-                                continue;
-                            }
-                            Device transferLiftDevice = liftThread.getDevice();
-                            //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満
-                            ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
-                                    .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId())
-                                    .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc()))
-                                    .eq(ShuttleStandby::getStatus, 1));
-                            //绌挎杞﹁繘鎻愬崌鏈哄簱浣嶅彿
-                            String liftLocNoTo = shuttleStandbyTo.getDeviceLoc();
-                            //绌挎杞﹁繘鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙�  杈撻�佺嚎浣嶇疆
-                            String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc();
-
-                            //涓嶈蛋鎻愬崌鏈�
-                            if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) {
-                                standbyLocNoTo = staProtocol.getLocNo();
-                            }
-
-                            if (Cools.isEmpty(task.getShuttleNo())) {
-                                //鍒嗛厤灏忚溅
-                                //璋冨害绌洪棽杞﹀幓鍙栬揣寰呮満浣�
-                                Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo);
-                                if (shuttleDevice == null) {
-                                    News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
-                                    continue;
-                                }
-
-                                task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+                    Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+                            .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
+                            .eq(Task::getTaskNo, workNo));
+                    if (task != null) {
+                        if (!Cools.isEmpty(task.getLiftNo())) {
+                            if (task.getLiftNo() > 0) {
+                                task.setLiftNo(0);
                                 task.setUpdateTime(new Date());
                                 if (!taskService.updateById(task)) {
-                                    News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+                                    News.info("{}浠诲姟鏇存柊閲婃斁鎻愬崌鏈哄け璐�", task.getTaskNo());
                                 }
-                                continue;
                             }
-
-                            //鍒ゆ柇灏忚溅鏄惁鍒拌揪鍙栬揣寰呮満浣嶇疆
-                            String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId());
-                            if (shuttleLocNo == null) {
-                                continue;
-                            }
-
-                            if (!standbyLocNoTo.equals(shuttleLocNo)) {
-                                continue;
-                            }
-
-                            // generate motion list
-                            List<Motion> motionList = analyzeService.generateMotion(task);
-                            if (motionList.isEmpty()) {
-                                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());
-                            }
-                            break;
                         }
 
+                        //鑾峰彇璺濈鐩爣浣嶇疆鏈�杩戠殑鍙崲灞傛彁鍗囨満(鍙兘涓嶇┖闂�)
+                        LiftThread liftThread = liftDispatcher.searchLift(task.getDestLoc(), task.getHostId(), true);
+                        if (liftThread == null) {
+                            continue;
+                        }
+                        Device transferLiftDevice = liftThread.getDevice();
+                        //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満
+                        ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
+                                .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId())
+                                .eq(ShuttleStandby::getDeviceLev, Utils.getLev(task.getDestLoc()))
+                                .eq(ShuttleStandby::getStatus, 1));
+                        //绌挎杞﹁繘鎻愬崌鏈哄簱浣嶅彿
+                        String liftLocNoTo = shuttleStandbyTo.getDeviceLoc();
+                        //绌挎杞﹁繘鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙�  杈撻�佺嚎浣嶇疆
+                        String standbyLocNoTo = shuttleStandbyTo.getDeviceStandbyLoc();
+
+                        //涓嶈蛋鎻愬崌鏈�
+                        if (staProtocol.getSiteId() == 1015 || staProtocol.getSiteId() == 1026) {
+                            standbyLocNoTo = staProtocol.getLocNo();
+                        }
+
+                        if (Cools.isEmpty(task.getShuttleNo())) {
+                            //鍒嗛厤灏忚溅
+                            //璋冨害绌洪棽杞﹀幓鍙栬揣寰呮満浣�
+                            Device shuttleDevice = shuttleDispatcher.dispatchShuttle(task, standbyLocNoTo);
+                            if (shuttleDevice == null) {
+                                News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+                                continue;
+                            }
+
+                            task.setShuttleNo(Integer.valueOf(shuttleDevice.getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+                            task.setUpdateTime(new Date());
+                            if (!taskService.updateById(task)) {
+                                News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+                            }
+                            continue;
+                        }
+
+                        //鍒ゆ柇灏忚溅鏄惁鍒拌揪鍙栬揣寰呮満浣嶇疆
+                        String shuttleLocNo = shuttleDispatcher.findShuttleLocNo(task.getShuttleNo(), task.getHostId());
+                        if (shuttleLocNo == null) {
+                            continue;
+                        }
+
+                        if (!standbyLocNoTo.equals(shuttleLocNo)) {
+                            continue;
+                        }
+
+                        // generate motion list
+                        List<Motion> motionList = analyzeService.generateMotion(task);
+                        if (motionList.isEmpty()) {
+                            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());
+                        }
+                        break;
                     }
                 }
             }
@@ -671,40 +740,26 @@
         }
 
         for (Task task : tasks) {
-            BasConveyorSta originStaObj = basConveyorStaService.selectBySiteNo(task.getOriginSite());//鑾峰彇婧愮珯
-            if (originStaObj == null) {
+            BasConveyorSta destStaObj = basConveyorStaService.selectBySiteNo(task.getDestSite());//鑾峰彇鐩爣绔�
+            if (destStaObj == null) {
                 continue;
             }
 
-            BasConveyor basConveyor = basConveyorService.getById(originStaObj.getConveyorId());
-            if(basConveyor == null) {
+            BasConveyor basConveyor = basConveyorService.getById(destStaObj.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()));//鐩爣绔�
+            StaProtocol staProtocol = devpThread.getStation().get(Integer.parseInt(task.getDestSite()));//鐩爣绔�
             if (staProtocol == null) {
                 continue;
             } else {
                 staProtocol = staProtocol.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;
-//                }
-
-//                //鍚屽簱浣嶇粍鏍¢獙
-//                List<String> outerLoc = Utils.getGroupOuterLoc(wrkMast.getSourceLocNo());
-//                List<LocMast> outerLocMasts = locMastService.selectNotEmptyLocNos(outerLoc);
-//                if (!outerLocMasts.isEmpty()) {
-//                    News.info("{}浠诲姟锛屾祬搴撲綅瀛樺湪璐х墿锛岀郴缁熺瓑寰呬腑", wrkMast.getWrkNo());
-//                    continue;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟
-//                }
-
                 if (Cools.isEmpty(task.getShuttleNo())) {
                     //鍒嗛厤灏忚溅
                     //鎼滅储绌洪棽杞�
@@ -725,7 +780,7 @@
                 // generate motion list
                 List<Motion> motionList = analyzeService.generateMotion(task);
                 if (Cools.isEmpty(motionList)) {
-                    log.error("鍑哄簱 ===>> 鏆傛椂娌℃湁绌洪棽灏忚溅, 浠诲姟鍙�={}", task.getTaskNo());
+                    log.error("鍑哄簱 ===>> 浠诲姟瑙f瀽澶辫触, 浠诲姟鍙�={}", task.getTaskNo());
                     continue;
                 }
                 motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
@@ -1082,8 +1137,8 @@
                     staProtocol = staProtocol.clone();
                 }
                 String taskNo = "0";
-                if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001 ){
-                    if (0 != staProtocol.getWorkNo()){
+                if (staProtocol.isOutEnable() && staProtocol.getSiteId() == 31001) {
+                    if (0 != staProtocol.getWorkNo()) {
                         Motion motion = motionService.getOne(new LambdaQueryWrapper<Motion>().eq(Motion::getMotionCtg, 9).eq(Motion::getTemp, staProtocol.getWorkNo()));
                         // 鑾峰彇宸ヤ綔妗f暟鎹�
                         Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
@@ -1105,7 +1160,7 @@
 
                         HashMap<String, Object> param = new HashMap<>();
                         param.put("taskNo", taskNo);
-                        param.put("sta",staNo);
+                        param.put("sta", staNo);
                         String response = new HttpHandler.Builder()
                                 .setUri(wmsUrl)
                                 .setPath("/rpc/led/getTask")
@@ -1187,7 +1242,9 @@
             for (Integer staNo : staArr) {
                 // 鑾峰彇鍙夎溅绔欑偣
                 StaProtocol staProtocol = devpThread.getStation().get(staNo);
-                if (staProtocol == null) { continue; }
+                if (staProtocol == null) {
+                    continue;
+                }
                 if (staProtocol.getWorkNo() != 0) {
                     reset = false;
                     break;

--
Gitblit v1.9.1