From 4775feb2a95cb339d3b65ddbbad25374e012b2aa Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 12 十二月 2024 12:52:35 +0800
Subject: [PATCH] #入库逻辑优化

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java |  341 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 262 insertions(+), 79 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 87f2518..33e391f 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
@@ -10,6 +10,8 @@
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
 import com.zy.asrs.framework.common.SnowflakeIdWorker;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.action.LiftAction;
 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;
@@ -17,6 +19,8 @@
 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.command.LiftAssignCommand;
+import com.zy.asrs.wcs.core.model.command.LiftCommand;
 import com.zy.asrs.wcs.core.model.enums.*;
 import com.zy.asrs.wcs.core.service.*;
 import com.zy.asrs.wcs.core.utils.OpenUtils;
@@ -30,13 +34,11 @@
 import com.zy.asrs.wcs.rcs.model.command.LedCommand;
 import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
 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.BarcodeThread;
-import com.zy.asrs.wcs.rcs.thread.DevpThread;
-import com.zy.asrs.wcs.rcs.thread.LedThread;
-import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import com.zy.asrs.wcs.rcs.thread.*;
 import com.zy.asrs.wcs.system.entity.Dict;
 import com.zy.asrs.wcs.system.service.DictService;
 import lombok.extern.slf4j.Slf4j;
@@ -91,6 +93,8 @@
     private ShuttleChargeStaService shuttleChargeStaService;
     @Autowired
     private OpenUtils openUtils;
+    @Autowired
+    private LiftAction liftAction;
 
     /**
      * 缁勬墭
@@ -295,6 +299,109 @@
     }
 
     /**
+     * 鍏ュ簱-鎵樼洏杩涘簱
+     */
+    public synchronized void palletInbound() {
+        try {
+            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+            List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+                    .eq(Device::getDeviceType, DeviceCtgType.CONVEYOR.val())
+                    .eq(Device::getStatus, 1));
+            for (Device devp : list) {
+                BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getDeviceId, devp.getId()).eq(BasConveyor::getHostId, devp.getHostId()));
+                // 閬嶅巻鍏ュ簱鍙�
+                for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) {
+                    BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getDeviceStaNo().toString());
+                    if(basConveyorSta == null) {
+                        continue;
+                    }
+
+                    // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue());
+                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getDeviceStaNo());
+                    if (staProtocol == null) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    int workNo = staProtocol.getWorkNo().intValue();
+
+                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                    if (staProtocol.isAutoing()
+                            && staProtocol.isLoading()
+                            && staProtocol.isInEnable()
+                            && (workNo >= 0)
+                            && staProtocol.isPakMk()
+                    ) {
+                        Object object = redisUtil.get(DeviceRedisConstant.LIFT_PALLET_INBOUND + workNo);
+                        if (object != null) {
+                            continue;
+                        }
+
+                        Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+                                .eq(Task::getDestSite, inSta.getDeviceStaNo())
+                                .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
+                                .eq(Task::getTaskNo, workNo));
+                        if (task != null) {
+                            int lev = Utils.getLev(task.getDestLoc());
+                            Integer targetSite = null;
+                            if (lev == 1) {
+                                targetSite = 31006;
+                            }else if (lev == 2) {
+                                targetSite = 31007;
+                            }else if (lev == 3) {
+                                targetSite = 31008;
+                            }
+                            if(targetSite == null) {
+                                throw new CoolException(lev + "灞傜珯鐐逛俊鎭笉瀛樺湪");
+                            }
+
+                            StaProtocol staProtocol1 = devpThread.getStation().get(targetSite);
+                            if (staProtocol1 == null) {
+                                break;
+                            }
+                            if (!staProtocol1.isAutoing()) {
+                                break;
+                            }
+                            if (staProtocol1.isLoading()) {
+                                break;
+                            }
+                            if (staProtocol1.getWorkNo().intValue() != 0) {
+                                break;
+                            }
+
+                            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, inSta.getLiftNo());
+                            if (liftThread == null) {
+                                break;
+                            }
+
+                            LiftProtocol liftProtocol = liftThread.getStatus();
+                            if (liftProtocol == null) {
+                                break;
+                            }
+
+                            List<LiftCommand> command = liftThread.getPalletInOutCommand(workNo, 1, lev, inSta.getDeviceStaNo(), targetSite, LiftCommandModeType.PALLET_INOUT);
+
+                            LiftAssignCommand assignCommand = new LiftAssignCommand();
+                            assignCommand.setLiftNo(liftProtocol.getLiftNo());
+                            assignCommand.setTaskNo(workNo);
+                            assignCommand.setDeviceTaskNo(liftThread.generateDeviceTaskNo(workNo, MotionCtgType.LIFT_WITH_GOODS));
+                            assignCommand.setCommands(command);
+                            liftAction.assignWork(liftThread.getDevice(), assignCommand);
+
+                            redisUtil.set(DeviceRedisConstant.LIFT_PALLET_INBOUND + workNo, "send", 60 * 60 * 6);
+                            break;
+                        }
+
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
      * 鍒濆鍖栧疄鏃跺湴鍥�
      */
     public synchronized void initRealtimeBasMap() {
@@ -471,86 +578,162 @@
 
     // 瑙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) {
-                continue;
-            }
-            BasConveyor basConveyor = basConveyorService.getById(basConveyorSta.getConveyorId());
-            if (basConveyor == null) {
-                continue;
-            }
-//            DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId());
-//            if (deviceBarcode == null) {
-//                continue;
-//            }
-//            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId()));
-//            if (barcodeThread == null) {
-//                continue;
-//            }
-//            if (!barcodeThread.getBarcode().equals(task.getZpallet())) {
-//                continue;
-//            }
-            if (Cools.isEmpty(basConveyorSta.getTaskNo())){
-                continue;
-            }
-            if (!basConveyorSta.getTaskNo().toString().equals(task.getTaskNo())){
-                continue;
-            }
-            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
-            if (devpThread == null) {
-                continue;
-            }
-            StaProtocol staProtocol = devpThread.getStation().get(basConveyorSta.getSiteNo());
-            if (staProtocol == null) {
-                continue;
-            }
-            if (!(staProtocol.isAutoing()
-                    && staProtocol.isLoading()
-                    && staProtocol.isInEnable())) {
-                continue;
-            }
+        try {
+            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+            List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+                    .eq(Device::getDeviceType, DeviceCtgType.CONVEYOR.val())
+                    .eq(Device::getStatus, 1));
+            for (Device devp : list) {
+                BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getDeviceId, devp.getId()).eq(BasConveyor::getHostId, devp.getHostId()));
+                // 閬嶅巻鍏ュ簱鍙�
+                for (StaDto inSta : JSON.parseArray(basConveyor.getDeviceInSta(), StaDto.class)) {
+                    BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString());
+                    if(basConveyorSta == null) {
+                        continue;
+                    }
 
-            //瑙f瀽鍓嶅垽鏂唴閮ㄧ洰鏍囧�兼槸鍚︽湁鐗� 鏈夊伐浣滃彿
-            StaProtocol staProtocolInside = devpThread.getStation().get(Utils.getStaByLev(Utils.getLev(task.getDestLoc())));
-            if (staProtocolInside == null) {
-                continue;
-            }
-            if (staProtocolInside.isLoading() || staProtocolInside.getWorkNo() !=0) {
-                continue;
-            }
+                    // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                    DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue());
+                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                    if (staProtocol == null) {
+                        continue;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    int workNo = staProtocol.getWorkNo().intValue();
 
-            if (Cools.isEmpty(task.getShuttleNo())) {
-                //鍒嗛厤灏忚溅
-                //鎼滅储绌洪棽杞�
-                ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
-                if (shuttleThread == null) {
-                    News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
-                    continue;
+                    // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                    if (staProtocol.isAutoing()
+                            && staProtocol.isInEnable()
+                            && (workNo >= 0)
+                            && staProtocol.isPakMk()
+                    ) {
+
+                        Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+                                .eq(Task::getDestSite, inSta.getDeviceStaNo())
+                                .in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts)
+                                .eq(Task::getTaskNo, workNo));
+                        if (task != null) {
+                            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.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;
+                        }
+
+                    }
                 }
-
-                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.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());
-            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
+
+//        for (Task task : taskService.selectWaitAnalyzeInBoundTask()) {
+//            BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, task.getDestSite()));
+//            if (basConveyorSta == null) {
+//                continue;
+//            }
+//            BasConveyor basConveyor = basConveyorService.getById(basConveyorSta.getConveyorId());
+//            if (basConveyor == null) {
+//                continue;
+//            }
+////            DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId());
+////            if (deviceBarcode == null) {
+////                continue;
+////            }
+////            BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId()));
+////            if (barcodeThread == null) {
+////                continue;
+////            }
+////            if (!barcodeThread.getBarcode().equals(task.getZpallet())) {
+////                continue;
+////            }
+//            if (Cools.isEmpty(basConveyorSta.getTaskNo())){
+//                continue;
+//            }
+//            if (!basConveyorSta.getTaskNo().toString().equals(task.getTaskNo())){
+//                continue;
+//            }
+//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
+//            if (devpThread == null) {
+//                continue;
+//            }
+//            StaProtocol staProtocol = devpThread.getStation().get(basConveyorSta.getSiteNo());
+//            if (staProtocol == null) {
+//                continue;
+//            }
+//            if (!(staProtocol.isAutoing()
+//                    && staProtocol.isLoading()
+//                    && staProtocol.isInEnable())) {
+//                continue;
+//            }
+//
+//            //瑙f瀽鍓嶅垽鏂唴閮ㄧ洰鏍囧�兼槸鍚︽湁鐗� 鏈夊伐浣滃彿
+//            StaProtocol staProtocolInside = devpThread.getStation().get(Utils.getStaByLev(Utils.getLev(task.getDestLoc())));
+//            if (staProtocolInside == null) {
+//                continue;
+//            }
+//            if (staProtocolInside.isLoading() || staProtocolInside.getWorkNo() !=0) {
+//                continue;
+//            }
+//
+//            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.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());
+//            }
+//        }
     }
 
     /**

--
Gitblit v1.9.1