From 3be5c88fbc583d17a932ca937d8e293d28b5c974 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期六, 12 四月 2025 15:11:25 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java          |   16 +
 src/main/java/com/zy/core/thread/LiftThread.java                        |    2 
 src/main/resources/mapper/WrkMastLogMapper.xml                          |    1 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java             |  397 +++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/zy/core/cache/MessageQueue.java                       |    4 
 src/main/resources/mapper/WrkMastMapper.xml                             |    1 
 src/main/java/com/zy/asrs/entity/WrkMastLog.java                        |    3 
 src/main/java/com/zy/asrs/task/WrkMastScheduler.java                    |    4 
 src/main/resources/sql/20250412151056.nb3                               |    0 
 src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java |    4 
 src/main/java/com/zy/core/thread/impl/FyDevpThread.java                 |   51 +----
 src/main/java/com/zy/core/ServerBootstrap.java                          |    4 
 src/main/java/com/zy/core/action/LiftAction.java                        |   31 +--
 src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java           |    2 
 src/main/java/com/zy/core/MainProcess.java                              |   14 +
 src/main/java/com/zy/common/service/CommonService.java                  |    1 
 src/main/java/com/zy/core/thread/impl/NyLiftThread.java                 |    5 
 17 files changed, 460 insertions(+), 80 deletions(-)

diff --git a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
index b1fadc2..bef55f7 100644
--- a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
@@ -17,4 +17,6 @@
     //鐩爣搴撲綅
     private String locNo;
 
+    private String barcode;
+
 }
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index b84f77c..b65aa29 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -174,6 +174,9 @@
     @TableField(value = "system_msg")
     private String systemMsg;
 
+    @ApiModelProperty(value= "")
+    private Integer mainWrkNo;
+
     public WrkMastLog() {}
 
     public String getWrkSts$(){
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index c60f1f9..448f885 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -13,6 +13,7 @@
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.*;
 import com.zy.core.News;
+import com.zy.core.action.LiftAction;
 import com.zy.core.action.ShuttleAction;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
@@ -22,11 +23,14 @@
 import com.zy.core.model.LiftSlave;
 import com.zy.core.model.ShuttleSlave;
 import com.zy.core.model.Task;
+import com.zy.core.model.command.LiftAssignCommand;
+import com.zy.core.model.command.LiftCommand;
 import com.zy.core.model.command.ShuttleAssignCommand;
 import com.zy.core.model.command.ShuttleCommand;
 import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.*;
+import com.zy.core.thread.impl.FyDevpThread;
 import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
@@ -36,6 +40,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -87,6 +92,8 @@
     private NoLiftInServiceImpl noLiftInService;
     @Autowired
     private NoLiftOutServiceImpl noLiftOutService;
+    @Autowired
+    private LiftAction liftAction;
 
 
     public static List<Integer> staNosIn = new ArrayList<Integer>() {{
@@ -449,7 +456,7 @@
             }
 
             if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
-                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), liftSta.getLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+                boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, liftSta.getLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
                 return false;
             }
@@ -628,7 +635,7 @@
                         return false;
                     }
                 }
-                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+                boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓��", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
                 return false;
             }
@@ -697,6 +704,390 @@
             }
             return false;
         }
+        return true;
+    }
+
+    public synchronized void liftInExecute() {
+        try {
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                    .in("wrk_sts", WrkStsType.NEW_INBOUND.sts, WrkStsType.INBOUND_DEVICE_RUN.sts, WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts)
+                    .in("source_sta_no", 1012, 1022)
+            );
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean step0 = this.liftInExecuteStep0(wrkMast);//璁惧涓婅蛋
+                if (!step0) {
+                    return;
+                }
+
+                boolean step1 = this.liftInExecuteStep1(wrkMast);//鎻愬崌鏈烘惉杩�
+                if (!step1) {
+                    return;
+                }
+
+                boolean step2 = this.liftInExecuteStep2(wrkMast);//瑙﹀彂鎼繍浠诲姟
+                if (!step2) {
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private boolean liftInExecuteStep0(WrkMast wrkMast) {
+        Date now = new Date();
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
+            FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            if(devpThread == null) {
+                return false;
+            }
+
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+            StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo());
+            if (staProtocol == null) {
+                return false;
+            }
+
+            if (!staProtocol.isAutoing()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+            if (!staProtocol.isLoading()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屾棤鎵樼洏", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+            if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
+                return false;
+            }
+
+            short staNo = 1012;
+            if (wrkMast.getSourceStaNo() == 1022) {
+                staNo = 1023;
+            }
+
+            staProtocol = staProtocol.clone();
+            staProtocol.setStaNo(staNo);
+            staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+
+            wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+            if (wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    private boolean liftInExecuteStep1(WrkMast wrkMast) {
+        Date now = new Date();
+        if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) {
+            //鑾峰彇鎻愬崌鏈轰俊鎭�
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+            if (liftThread == null) {
+                return false;
+            }
+
+            LiftProtocol liftProtocol = liftThread.getStatus();
+            if (liftProtocol == null) {
+                return false;
+            }
+
+            if (!liftThread.isIdle()) {
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
+            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
+            if (liftWrkMast != null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+            }
+
+            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
+            if (liftProtocol.getHasCar()) {
+                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
+            if (liftProtocol.getHasTray()) {
+                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;
+            }
+
+            FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            if(devpThread == null) {
+                return false;
+            }
+
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+
+            Integer sourceStaNo = wrkMast.getSourceStaNo();
+            if (wrkMast.getSourceStaNo() == 1022) {
+                sourceStaNo = 1023;
+            }
+
+            StaProtocol staProtocol = station.get(sourceStaNo);
+            if (staProtocol == null) {
+                return false;
+            }
+
+            if (!staProtocol.isAutoing()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+            if (!staProtocol.isLoading()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屾棤鎵樼洏", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+            if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屼换鍔″彿涓嶄竴鑷�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+            if (!staProtocol.getBarcode().equals(wrkMast.getBarcode())) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屾墭鐩樼爜涓嶅尮閰嶏紝绔欑偣鎵樼洏鐮侊細{}锛屼换鍔℃墭鐩樼爜锛歿}", wrkMast.getWrkNo(), staProtocol.getSiteId(), staProtocol.getBarcode(), wrkMast.getBarcode());
+                return false;
+            }
+
+            //鑾峰彇鎻愬崌鏈哄懡浠�
+            List<LiftCommand> liftCommands = liftThread.getPalletInCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), 101);
+            LiftCommand liftCommand = liftCommands.get(0);
+
+            int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿
+            liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙�
+
+            ArrayList<LiftCommand> commands = new ArrayList<>();
+            commands.add(liftCommand);
+
+            //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+            LiftAssignCommand assignCommand = new LiftAssignCommand();
+            assignCommand.setCommands(commands);
+            assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue());
+            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+            assignCommand.setTaskMode(LiftCommandModeType.PALLET_IN.id.shortValue());
+
+            wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);
+            wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+                return false;
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    private boolean liftInExecuteStep2(WrkMast wrkMast) {
+        Date now = new Date();
+        if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) {
+            //鑾峰彇鎻愬崌鏈轰俊鎭�
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+            if (liftThread == null) {
+                return false;
+            }
+
+            LiftProtocol liftProtocol = liftThread.getStatus();
+            if (liftProtocol == null) {
+                return false;
+            }
+
+            if (!liftThread.isIdle()) {
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
+            if (liftProtocol.getHasCar()) {
+                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
+            if (!liftProtocol.getHasTray()) {
+                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;
+            }
+
+            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), "0200301", wrkMast.getLocNo(), "TRANSPORT_LIFT");
+            if(!dispatchShuttle) {
+                News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo());
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN.sts);
+            wrkMast.setLiftNo(null);
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+            if (wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    public synchronized void liftOutExecute() {
+        try {
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                    .in("wrk_sts", WrkStsType.NEW_OUTBOUND.sts, WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts)
+                    .in("sta_no", 1011, 1021)
+            );
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean step1 = this.liftOutExecuteStep1(wrkMast);//瑙﹀彂鎼繍浠诲姟
+                if (!step1) {
+                    return;
+                }
+
+                boolean step2 = this.liftOutExecuteStep2(wrkMast);//鎻愬崌鏈烘惉杩�
+                if (!step2) {
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private boolean liftOutExecuteStep1(WrkMast wrkMast) {
+        Date now = new Date();
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) {
+            FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            if(devpThread == null) {
+                return false;
+            }
+
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+            StaProtocol staProtocol = station.get(wrkMast.getStaNo());
+            if (staProtocol == null) {
+                return false;
+            }
+
+            if (!staProtocol.isAutoing()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+            if (!staProtocol.isOutEnable()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屾病鏈夊彲鍑轰俊鍙�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+
+            boolean dispatchShuttle = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), "0200301", "TRANSPORT_LIFT");
+            if(!dispatchShuttle) {
+                News.info("{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo());
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+            if (wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
+
+    private boolean liftOutExecuteStep2(WrkMast wrkMast) {
+        Date now = new Date();
+        if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) {
+            //鑾峰彇鎻愬崌鏈轰俊鎭�
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+            if (liftThread == null) {
+                return false;
+            }
+
+            LiftProtocol liftProtocol = liftThread.getStatus();
+            if (liftProtocol == null) {
+                return false;
+            }
+
+            if (!liftThread.isIdle()) {
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
+            WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftProtocol.getLiftNo());
+            if (liftWrkMast != null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+            }
+
+            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夊皬杞�
+            if (liftProtocol.getHasCar()) {
+                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮湁灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈哄唴鏄惁鏈夋墭鐩�
+            if (!liftProtocol.getHasTray()) {
+                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満鍐呮棤鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftProtocol.getLiftNo());
+                return false;
+            }
+
+            FyDevpThread devpThread = (FyDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+            if(devpThread == null) {
+                return false;
+            }
+
+            Map<Integer, StaProtocol> station = devpThread.getStation();
+            StaProtocol staProtocol = station.get(wrkMast.getStaNo());
+            if (staProtocol == null) {
+                return false;
+            }
+
+            if (!staProtocol.isAutoing()) {
+                News.info("{}浠诲姟锛寋}绔欑偣锛屼笉鍦ㄨ嚜鍔ㄧ姸鎬�", wrkMast.getWrkNo(), staProtocol.getSiteId());
+                return false;
+            }
+
+            Integer sourceLev = liftThread.getLevToStaNo(Utils.getLev(wrkMast.getSourceLocNo()));
+
+            //鑾峰彇鎻愬崌鏈哄懡浠�
+            List<LiftCommand> liftCommands = liftThread.getPalletOutCommand(wrkMast.getWrkNo(), sourceLev, wrkMast.getStaNo());
+            LiftCommand liftCommand = liftCommands.get(0);
+
+            int deviceWrk = commonService.getWorkNo(8);//鐢熸垚鎻愬崌鏈鸿澶囧伐浣滃彿
+            liftCommand.setTaskNo(deviceWrk);//鏇存崲闅忔満浠诲姟鍙�
+
+            ArrayList<LiftCommand> commands = new ArrayList<>();
+            commands.add(liftCommand);
+
+            //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+            LiftAssignCommand assignCommand = new LiftAssignCommand();
+            assignCommand.setCommands(commands);
+            assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue());
+            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+            assignCommand.setTaskMode(LiftCommandModeType.PALLET_OUT.id.shortValue());
+
+            wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);
+            wrkMast.setLiftNo(liftProtocol.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+                return false;
+            }
+            return false;
+        }
+
         return true;
     }
 
@@ -900,7 +1291,7 @@
         //灏忚溅绉诲姩鑷崇珯鐐�  501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鍙栬揣涓�
         if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) {
             if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
-                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
+                boolean result = shuttleDispatchUtils.searchDispatchShuttle(wrkMast.getWrkNo(), null, wrkMast.getSourceLocNo(), null);//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
                 News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
 
                 if (result) {
diff --git a/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
index a55af16..30d926f 100644
--- a/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/TransportLiftOutServiceImpl.java
@@ -537,8 +537,10 @@
             //鑾峰彇鎻愬崌鏈哄緟鏈轰綅
             String liftStandByLocNo = liftThread.getLiftStandByLocNo(Utils.getLev(shuttleProtocol.getCurrentLocNo()), false);
 
+            //鍘诲緟鏈轰綅
+            String locNo = Utils.getLocNo(Utils.getRow(liftStandByLocNo) + 1, Utils.getBay(liftStandByLocNo) - 1, Utils.getLev(liftStandByLocNo));
             //鑾峰彇灏忚溅鍒版彁鍗囨満寰呮満琛岃蛋鍛戒护
-            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftStandByLocNo, NavigationMapType.DFX.id, assignCommand, shuttleThread);
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), locNo, NavigationMapType.DFX.id, assignCommand, shuttleThread);
             if (commands == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;
diff --git a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
index 5c4a431..b947c3e 100644
--- a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
@@ -203,9 +203,9 @@
             WrkMast main = wrkMastService.selectByWorkNo(wrkMast.getMainWrkNo());
             if (main != null) {
                 if (main.getIoType() == WrkIoType.IN.id) {
-                    main.setWrkSts(WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts);
+                    main.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
                 } else if (main.getIoType() == WrkIoType.OUT.id) {
-                    main.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts);
+                    main.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts);
                 }
                 main.setModiTime(new Date());
                 if (wrkMastService.updateById(main)) {
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 008db5a..467b794 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -193,6 +193,7 @@
         wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
         wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
         wrkMast.setWmsWrkNo(param.getTaskNo());
+        wrkMast.setBarcode(param.getBarcode());
         wrkMast.setAppeTime(now);
         wrkMast.setModiTime(now);
         boolean res = wrkMastService.insert(wrkMast);
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 084bd25..b83b885 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -44,16 +44,20 @@
                     //杈撻�佺嚎
                     // 鍏ュ簱
                     mainService.generateInboundWrk();
-                    mainService.generateInboundWrk2();
+//                    mainService.generateInboundWrk2();
                     // 鍑哄簱
                     mainService.stnToOutStn();
 
                     //鍒濆鍖栧疄鏃跺湴鍥�
                     mainService.initRealtimeBasMap();
-                    // 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
-                    mainService.shuttleInExecute();
-                    // 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
-                    mainService.shuttleOutExecute();
+//                    // 鍏ュ簱  ===>>  鍥涘悜绌挎杞﹀叆搴撲綔涓氫笅鍙�
+//                    mainService.shuttleInExecute();
+//                    // 鍑哄簱  ===>>  鍥涘悜绌挎杞﹀嚭搴撲綔涓氫笅鍙�
+//                    mainService.shuttleOutExecute();
+                    //鎻愬崌鏈哄叆搴撲换鍔�
+                    mainService.liftInExecute();
+                    //鎻愬崌鏈哄嚭搴撲换鍔�
+                    mainService.liftOutExecute();
                     //鍥涘悜绌挎杞︿换鍔″畬鎴�
                     mainService.shuttleFinished();
                     //鎵ц绉诲簱浠诲姟
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 5461319..c824e07 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -58,6 +58,10 @@
         for (Slave shuttle : slaveProperties.getShuttle()) {
             MessageQueue.init(SlaveType.Shuttle, shuttle);
         }
+        // 鍒濆鍖栬緭閫佺嚎mq
+        for (Slave devp : slaveProperties.getDevp()) {
+            MessageQueue.init(SlaveType.Devp, devp);
+        }
     }
 
     private void initThread() {
diff --git a/src/main/java/com/zy/core/action/LiftAction.java b/src/main/java/com/zy/core/action/LiftAction.java
index e0b7d2a..d4c177b 100644
--- a/src/main/java/com/zy/core/action/LiftAction.java
+++ b/src/main/java/com/zy/core/action/LiftAction.java
@@ -132,28 +132,17 @@
                     command.setComplete(true);
                 }
             } else if (command.getMode() == LiftCommandModeType.PALLET_IN.id) {
-//                //鎵樼洏鍏�
-//                Integer target = liftDispatcher.getLiftLevLogic(liftThread.getDevice().getId().intValue(), command.getTargetLev());
-//                if (liftProtocol.getLev() == target) {
-//                    command.setComplete(true);
-//                }
-//
-//                //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
-//                if (!liftProtocol.getHasTray()) {
-//                    return false;
-//                }
-
+                //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
+                if (!liftProtocol.getHasTray()) {
+                    return false;
+                }
+                command.setComplete(true);
             } else if (command.getMode() == LiftCommandModeType.PALLET_OUT.id) {
-//                //鎵樼洏鍑�
-//                Integer target = liftDispatcher.getLiftLevLogic(liftThread.getDevice().getId().intValue(), command.getTargetLev());
-//                if (liftProtocol.getLev() == target) {
-//                    command.setComplete(true);
-//                }
-//
-//                //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
-//                if (liftProtocol.getHasTray()) {
-//                    return false;
-//                }
+                //鍒ゆ柇鎻愬崌鏈烘墭鐩樻槸鍚﹀瓨鍦�
+                if (liftProtocol.getHasTray()) {
+                    return false;
+                }
+                command.setComplete(true);
             } else if (command.getMode() == LiftCommandModeType.RESET.id) {
                 //澶嶄綅
                 command.setComplete(true);
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index d5c4d08..0c6cf02 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -93,10 +93,6 @@
             case Lift:
                 return LIFT_EXCHANGE.get(id).poll();
             case Devp:
-                ConcurrentLinkedQueue<Task> tasks = DEVP_EXCHANGE.get(id);
-                if (tasks == null) {
-                    return null;
-                }
                 return DEVP_EXCHANGE.get(id).poll();
             case Led:
                 ConcurrentLinkedQueue<Task> task2 = LED_EXCHANGE.get(id);
diff --git a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
index c5e2346..34dcb90 100644
--- a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
+++ b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -68,7 +68,7 @@
     /**
      * 璋冨害杞﹁締
      */
-    public boolean dispatchShuttle(Integer wrkNo, String locNo) {
+    public boolean searchDispatchShuttle(Integer wrkNo, String sourceLocNo, String locNo, String flag) {
         ArrayList<ShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅
         ArrayList<ShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅
 
@@ -128,6 +128,11 @@
                 Integer shuttleNo = shuttleProtocol.getShuttleNo();
                 //褰撳墠绌挎杞﹀簱浣嶅彿
                 String currentLocNo = shuttleProtocol.getCurrentLocNo();
+                if (currentLocNo.equals(locNo)) {
+                    sameShuttles.put(-1, shuttleThread);
+                    continue;
+                }
+
                 //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
                 List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
                 if (currentShuttlePath == null) {
@@ -143,7 +148,7 @@
                 ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
                 Integer shuttleNo = shuttleProtocol.getShuttleNo();
                 //灏濊瘯璋冨害灏忚溅
-                boolean result = shuttleMoveGenerate(wrkNo, locNo, shuttleNo);
+                boolean result = shuttleMoveGenerate(wrkNo, sourceLocNo, locNo, shuttleNo, flag, false);
                 if (result) {
                     return true;//璋冨害鎴愬姛
                 }
@@ -190,7 +195,7 @@
                     ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
                     Integer shuttleNo = shuttleProtocol.getShuttleNo();
                     //灏濊瘯璋冨害灏忚溅
-                    boolean result = shuttleMoveGenerate(wrkNo, locNo, shuttleNo);
+                    boolean result = shuttleMoveGenerate(wrkNo, sourceLocNo, locNo, shuttleNo, flag, false);
                     if (result) {
                         return true;//璋冨害鎴愬姛
                     }
@@ -279,6 +284,11 @@
         wrkMast.setAppeTime(now);
         wrkMast.setModiTime(now);
         wrkMast.setMainWrkNo(mainWrkMast.getWrkNo());
+
+        if ("TRANSPORT_LIFT".equals(flag)) {
+            wrkMast.setMainWrkNo(wrkNo);
+        }
+
         boolean res = wrkMastService.insert(wrkMast);
         if (!res) {
             News.error("灏忚溅杩佺Щ --- 淇濆瓨宸ヤ綔妗eけ璐ワ紒 绌挎杞﹀彿锛�" + shuttleNo);
diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java
index cdfb73c..23f189c 100644
--- a/src/main/java/com/zy/core/thread/LiftThread.java
+++ b/src/main/java/com/zy/core/thread/LiftThread.java
@@ -51,6 +51,8 @@
 
     List<NavigateNode> getLiftStaNodes(int lev);
 
+    Integer getLevToStaNo(int lev);
+
     //***************鑾峰彇鍛戒护*****************
     List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode);//鎻愬崌鏈虹Щ鍔�
 
diff --git a/src/main/java/com/zy/core/thread/impl/FyDevpThread.java b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
index 6ec89a1..9c4ea1b 100644
--- a/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
+++ b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
@@ -227,50 +227,19 @@
         index += 1;
 
         short[] array = new short[2];
-        array[0] = staProtocol.getWorkNo();
-        array[1] = staProtocol.getStaNo();
+        array[0] = staProtocol.getStaNo();
+        array[1] = staProtocol.getWorkNo();
 
         String staNoAddress = "DB83." + (index * 8 + 4);
         String workNoAddress = "DB83." + (index * 8 + 6);
-        OperateResult write1 = null;    // 宸ヤ綔鍙�
-        OperateResult write2 = null;     // 鐩爣绔�
-
-        //浠诲姟涓嬪彂娆℃暟
-        int writeCount = 0;
-        do {
-            write1 = siemensS7Net.Write(workNoAddress, array[0]);    // 宸ヤ綔鍙�
-            write2 = siemensS7Net.Write(staNoAddress, array[1]);
-            if ((write1.IsSuccess && write2.IsSuccess)) {
-                log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", staProtocol.getSiteId(), JSON.toJSON(staProtocol.getWorkNo()), JSON.toJSON(staProtocol.getStaNo()), writeCount);
-//                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB82.14", (short) (staNos2.indexOf(siteId) * 26));
-//                //OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8);
-//                if (readResult.IsSuccess) {
-//                    int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);     // 宸ヤ綔鍙�
-//                    int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);   // 鐩爣绔�
-//                    // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
-//                    //int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
-//                    if (workNo == workNo2 && staNo == staNo2) {
-//                        //浠诲姟鍛戒护鍐欏叆鎴愬姛
-//                        log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
-//                        return true;
-//                    } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
-//                        writeCount++;
-//                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
-//                    }
-//                } else {
-//                    writeCount++;
-//                    log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},{},鍐欏叆娆℃暟={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
-//                }
-            } else {
-                writeCount++;
-            }
-        } while (writeCount < 5);
-//        StaProtocol staProtocol = station.get(siteId);
-//        if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
-//            staProtocol.setPakMk(true);
-//        }
-        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array)));
-        log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array));
+        OperateResult write1 = siemensS7Net.Write(staNoAddress, array);
+        if (!write1.IsSuccess) {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array)));
+            log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array));
+            return;
+        }
+        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁鎴愬姛銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array)));
+        log.info("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array));
     }
 
     /**
diff --git a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
index 24eac5e..845085e 100644
--- a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
@@ -460,6 +460,11 @@
     }
 
     @Override
+    public Integer getLevToStaNo(int lev) {
+        return liftLevMap.get(lev);
+    }
+
+    @Override
     public List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
         /**
          * 浠诲姟绫诲瀷
diff --git a/src/main/resources/mapper/WrkMastLogMapper.xml b/src/main/resources/mapper/WrkMastLogMapper.xml
index cdb4eb7..e6730fa 100644
--- a/src/main/resources/mapper/WrkMastLogMapper.xml
+++ b/src/main/resources/mapper/WrkMastLogMapper.xml
@@ -27,6 +27,7 @@
         <result column="shuttle_no" property="shuttleNo" />
         <result column="wms_wrk_no" property="wmsWrkNo" />
         <result column="system_msg" property="systemMsg" />
+        <result column="main_wrk_no" property="mainWrkNo" />
     </resultMap>
 
 </mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 4025668..6e38f40 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -26,6 +26,7 @@
         <result column="lift_no" property="liftNo" />
         <result column="wms_wrk_no" property="wmsWrkNo" />
         <result column="system_msg" property="systemMsg" />
+        <result column="main_wrk_no" property="mainWrkNo" />
 
     </resultMap>
 
diff --git a/src/main/resources/sql/20250412151056.nb3 b/src/main/resources/sql/20250412151056.nb3
new file mode 100644
index 0000000..1875780
--- /dev/null
+++ b/src/main/resources/sql/20250412151056.nb3
Binary files differ

--
Gitblit v1.9.1