From 3c45d4f9f3aba5bc85a9577e43c0dffc71b93a22 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 10 七月 2025 15:54:27 +0800
Subject: [PATCH] #

---
 src/main/resources/mapper/BasLiftMapper.xml                          |   16 
 src/main/java/com/zy/core/thread/impl/NyShuttleThread.java           |  127 +-
 src/main/java/com/zy/core/thread/impl/ZyForkLiftThread2.java         |  451 +++++++++
 src/main/java/com/zy/core/utils/DeviceMsgUtils.java                  |    1 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java          |  153 +-
 src/main/java/com/zy/core/enums/ForkLiftTaskModeType.java            |    4 
 src/main/java/com/zy/core/model/DeviceMsgModel.java                  |    2 
 src/main/java/com/zy/asrs/controller/ForkLiftController.java         |   16 
 src/main/webapp/views/admin/basLift/basLift.html                     |  159 ---
 src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java  |  950 ++++++++++----------
 src/main/java/com/zy/asrs/entity/BasLift.java                        |   22 
 src/main/java/com/zy/core/ServerBootstrap.java                       |   63 
 /dev/null                                                            |  452 ---------
 src/main/webapp/static/js/basLift/basLift.js                         |   25 
 src/main/java/com/zy/core/model/DeviceCommandMsgModel.java           |    2 
 src/main/java/com/zy/core/model/command/ForkLiftCommand.java         |   10 
 src/main/java/com/zy/core/thread/ForkLiftThread.java                 |   14 
 src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java |  306 +++---
 src/main/resources/application.yml                                   |   22 
 19 files changed, 1,307 insertions(+), 1,488 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ForkLiftController.java b/src/main/java/com/zy/asrs/controller/ForkLiftController.java
index eb34bc6..3344deb 100644
--- a/src/main/java/com/zy/asrs/controller/ForkLiftController.java
+++ b/src/main/java/com/zy/asrs/controller/ForkLiftController.java
@@ -59,7 +59,7 @@
         for (DeviceConfig device : forkliftList) {
             // 琛ㄦ牸琛�
             JSONObject baseObj = new JSONObject();
-            baseObj.put("shuttleNo", device.getDeviceNo());
+            baseObj.put("liftNo", device.getDeviceNo());
             list.add(baseObj);
             // 鑾峰彇鎻愬崌鏈轰俊鎭�
             ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
@@ -112,7 +112,7 @@
         StringBuilder str = new StringBuilder();
         String s;
         int i = 0;
-        while((s = OutputQueue.LIFT.poll()) != null && i <=10) {
+        while((s = OutputQueue.FORKLIFT.poll()) != null && i <=10) {
             str.append("\n").append(s);
             i++;
         }
@@ -286,9 +286,9 @@
             Integer targetSta = param.getStaNo();
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
-            List<ForkLiftCommand> liftCommand = forkLiftThread.getShuttleSwitchCommand(workNo, startSta, targetSta);
+            ForkLiftCommand liftCommand = forkLiftThread.getShuttleSwitchCommand(workNo, startSta, targetSta);
             ArrayList<ForkLiftCommand> commands = new ArrayList<>();
-            commands.addAll(liftCommand);
+            commands.add(liftCommand);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
@@ -308,9 +308,9 @@
             Integer targetSta = param.getStaNo();
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
-            List<ForkLiftCommand> liftCommand = forkLiftThread.getPickAndPutCommand(workNo, startSta, targetSta);
+            ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(workNo, startSta, targetSta);
             ArrayList<ForkLiftCommand> commands = new ArrayList<>();
-            commands.addAll(liftCommand);
+            commands.add(liftCommand);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
@@ -330,9 +330,9 @@
             Integer targetSta = param.getStaNo();
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
-            List<ForkLiftCommand> liftCommand = forkLiftThread.getMoveCommand(workNo, startSta, targetSta);
+            ForkLiftCommand liftCommand = forkLiftThread.getMoveCommand(workNo, startSta, targetSta);
             ArrayList<ForkLiftCommand> commands = new ArrayList<>();
-            commands.addAll(liftCommand);
+            commands.add(liftCommand);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
diff --git a/src/main/java/com/zy/asrs/entity/BasLift.java b/src/main/java/com/zy/asrs/entity/BasLift.java
index 66b85e2..7f8317c 100644
--- a/src/main/java/com/zy/asrs/entity/BasLift.java
+++ b/src/main/java/com/zy/asrs/entity/BasLift.java
@@ -1,11 +1,14 @@
 package com.zy.asrs.entity;
 
+import com.alibaba.fastjson.JSON;
 import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.enums.IdType;
 import com.baomidou.mybatisplus.annotations.TableField;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 
+import com.zy.core.model.LiftStation;
 import org.springframework.format.annotation.DateTimeFormat;
 import com.core.common.SpringUtils;
 import com.zy.system.service.UserService;
@@ -15,6 +18,7 @@
 import lombok.Data;
 import com.baomidou.mybatisplus.annotations.TableName;
 import java.io.Serializable;
+import java.util.List;
 
 @Data
 @TableName("asr_bas_lift")
@@ -86,6 +90,13 @@
     @TableField("point")
     private String point;
 
+    /**
+     * 鎻愬崌鏈虹珯鐐�
+     */
+    @ApiModelProperty(value= "鎻愬崌鏈虹珯鐐�")
+    @TableField("station_list")
+    private String stationList;
+
     public BasLift() {}
 
     public BasLift(Integer liftNo, Integer status, Integer wrkNo, Date updateTime, Long updateBy, String memo, Boolean pakMk, String deviceStatus) {
@@ -115,4 +126,15 @@
         return null;
     }
 
+    public List<LiftStation> getStationList$(){
+        List<LiftStation> list = new ArrayList<>();
+        if (Cools.isEmpty(this.stationList)){
+            return list;
+        }
+
+        List<LiftStation> liftStations = JSON.parseArray(stationList, LiftStation.class);
+        list.addAll(liftStations);
+        return list;
+    }
+
 }
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 6811d6d..67ccf13 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -762,9 +762,9 @@
             }
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
-            List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev());
+            ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev());
             ArrayList<ForkLiftCommand> commands = new ArrayList<>();
-            commands.addAll(liftCommands);
+            commands.add(liftCommand);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
@@ -890,9 +890,9 @@
             }
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
-            List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo());
+            ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo());
             ArrayList<ForkLiftCommand> commands = new ArrayList<>();
-            commands.addAll(liftCommands);
+            commands.add(liftCommand);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
@@ -924,6 +924,9 @@
             for (DeviceConfig device : forkliftList) {
                 //鑾峰彇鎻愬崌鏈轰俊鎭�
                 ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
+                if(forkLiftThread == null) {
+                    continue;
+                }
                 ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
                 if (forkLiftProtocol == null) {
                     continue;
@@ -1775,9 +1778,9 @@
             }
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
-            List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev());
+            ForkLiftCommand liftCommand = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev());
             ArrayList<ForkLiftCommand> commands = new ArrayList<>();
-            commands.addAll(liftCommands);
+            commands.add(liftCommand);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
@@ -1919,73 +1922,73 @@
 
     //鑷姩鍒囨崲鍑哄叆搴撴ā寮�
     public void autoSwitchForkLiftIOMode() {
-        List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
-        for (DeviceConfig device : forkliftList) {
-            Integer liftNo = device.getDeviceNo();
-            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
-            if (forkLiftThread == null) {
-                continue;
-            }
-            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
-            if (forkLiftProtocol == null) {
-                continue;
-            }
-
-            List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo);
-            if (liftAllStaNo.isEmpty()) {
-                continue;
-            }
-
-            List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo);
-            if (conveyorBindLiftAllStaNo.isEmpty()) {
-                continue;
-            }
-
-            //鑾峰彇鍏ュ簱浠诲姟
-            List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
-                    .in("sta_no", liftAllStaNo)
-                    .in("wrk_sts"
-                            , WrkStsType.NEW_INBOUND.sts
-                            , WrkStsType.INBOUND_DEVICE_RUN.sts
-                            , WrkStsType.INBOUND_LIFT_RUN.sts
-                            , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
-                            , WrkStsType.INBOUND_SHUTTLE_RUN.sts
-                            , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts
-                    ));
-
-            //鑾峰彇鍑哄簱浠诲姟
-            List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
-                    .in("sta_no", conveyorBindLiftAllStaNo)
-                    .in("wrk_sts"
-                            , WrkStsType.NEW_OUTBOUND.sts
-                            , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
-                            , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
-                            , WrkStsType.OUTBOUND_LIFT_RUN.sts
-                            , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
-                    ));
-
-            if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) {
-                //鏈煡妯″紡
-                if (!inWrkMasts.isEmpty()) {
-                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-                } else if (!outWrkMasts.isEmpty()) {
-                    forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
-                }else {
-                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-                }
-            } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) {
-                //鍏ュ簱妯″紡
-                if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) {
-                    forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
-                }
-            } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
-                //鍑哄簱妯″紡
-                if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) {
-                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-                }
-            }
-        }
+//        List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+//                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
+//        for (DeviceConfig device : forkliftList) {
+//            Integer liftNo = device.getDeviceNo();
+//            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
+//            if (forkLiftThread == null) {
+//                continue;
+//            }
+//            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+//            if (forkLiftProtocol == null) {
+//                continue;
+//            }
+//
+//            List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo);
+//            if (liftAllStaNo.isEmpty()) {
+//                continue;
+//            }
+//
+//            List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo);
+//            if (conveyorBindLiftAllStaNo.isEmpty()) {
+//                continue;
+//            }
+//
+//            //鑾峰彇鍏ュ簱浠诲姟
+//            List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+//                    .in("sta_no", liftAllStaNo)
+//                    .in("wrk_sts"
+//                            , WrkStsType.NEW_INBOUND.sts
+//                            , WrkStsType.INBOUND_DEVICE_RUN.sts
+//                            , WrkStsType.INBOUND_LIFT_RUN.sts
+//                            , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
+//                            , WrkStsType.INBOUND_SHUTTLE_RUN.sts
+//                            , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts
+//                    ));
+//
+//            //鑾峰彇鍑哄簱浠诲姟
+//            List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+//                    .in("sta_no", conveyorBindLiftAllStaNo)
+//                    .in("wrk_sts"
+//                            , WrkStsType.NEW_OUTBOUND.sts
+//                            , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
+//                            , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
+//                            , WrkStsType.OUTBOUND_LIFT_RUN.sts
+//                            , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
+//                    ));
+//
+//            if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) {
+//                //鏈煡妯″紡
+//                if (!inWrkMasts.isEmpty()) {
+//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
+//                } else if (!outWrkMasts.isEmpty()) {
+//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
+//                }else {
+//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
+//                }
+//            } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) {
+//                //鍏ュ簱妯″紡
+//                if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) {
+//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
+//                }
+//            } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
+//                //鍑哄簱妯″紡
+//                if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) {
+//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
+//                }
+//            }
+//        }
     }
 
     //鍑哄簱浠诲姟棰勮皟搴︽彁鍗囨満
@@ -2056,9 +2059,9 @@
             int workNo = commonService.getWorkNo(WrkIoType.FORKLIFT_MOVE.id);//鑾峰彇浠诲姟鍙�
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
-            List<ForkLiftCommand> liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo()));
+            ForkLiftCommand liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo()));
             ArrayList<ForkLiftCommand> commands = new ArrayList<>();
-            commands.addAll(liftCommand);
+            commands.add(liftCommand);
 
             //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
             LiftAssignCommand assignCommand = new LiftAssignCommand();
diff --git a/src/main/java/com/zy/common/utils/ForkLiftOperaUtils.java b/src/main/java/com/zy/common/utils/ForkLiftOperaUtils.java
deleted file mode 100644
index e45d338..0000000
--- a/src/main/java/com/zy/common/utils/ForkLiftOperaUtils.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.zy.common.utils;
-
-import com.zy.core.model.command.ForkLiftCommand;
-import org.springframework.stereotype.Component;
-
-/**
- * 璐у弶鎻愬崌鏈烘搷浣滃伐鍏风被
- */
-@Component
-public class ForkLiftOperaUtils {
-
-    /**
-     * 鑾峰彇鎻愬崌鏈哄懡浠�
-     */
-    public ForkLiftCommand getLiftCommand(Integer liftNo, Integer taskNo, Integer taskModel, Integer pick, Integer put, Integer confirm) {
-        ForkLiftCommand command = new ForkLiftCommand();
-        command.setLiftNo(liftNo);
-        command.setTaskNo(taskNo.shortValue());
-        command.setMode(taskModel.shortValue());
-        command.setPick(pick.shortValue());
-        command.setPut(put.shortValue());
-        command.setConfirm(confirm.shortValue());
-        return command;
-    }
-
-}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index c67e150..003d514 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -3,13 +3,16 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.exception.CoolException;
+import com.zy.asrs.entity.BasLift;
 import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.service.BasLiftService;
 import com.zy.asrs.service.DeviceConfigService;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.thread.impl.NyShuttleThread;
+import com.zy.core.thread.impl.ZyForkLiftThread;
 import com.zy.core.utils.DeviceMsgUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +39,8 @@
     private DeviceConfigService deviceConfigService;
     @Autowired
     private DeviceMsgUtils deviceMsgUtils;
+    @Autowired
+    private BasLiftService basLiftService;
 
     @PostConstruct
     @Async
@@ -70,44 +75,38 @@
         List<DeviceConfig> allDevices = new ArrayList<>();
         List<DeviceConfig> fakeDevices = new ArrayList<>();
 
-//        // 鍒濆鍖栬揣鍙夋彁鍗囨満
-//        List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-//                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
-//        allDevices.addAll(forkLiftList);
-//        for (DeviceConfig deviceConfig : forkLiftList) {
-//            News.info("鍒濆鍖栬揣鍙夋彁鍗囨満........................................................");
-//            ThreadHandler thread = null;
-//            if (deviceConfig.getThreadImpl().equals("ZyForkLiftThread")) {
-//                thread = new ZyForkLiftThread(forkLiftSlave, redisUtil);
-//            } else if (deviceConfig.getThreadImpl().equals("LfdZyForkLiftSlaveThread")) {
-//                thread = new LfdZyForkLiftSlaveThread(forkLiftSlave, redisUtil, forkLiftSlave.getMasterId());
-//            } else {
-//                throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
-//            }
-//
-//            new Thread(thread).start();
-//            SlaveConnection.put(SlaveType.ForkLift, deviceConfig.getDeviceNo(), thread);
-//        }
+        // 鍒濆鍖栬揣鍙夋彁鍗囨満
+        News.info("鍒濆鍖栬揣鍙夋彁鍗囨満........................................................");
+        List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
+        for (DeviceConfig deviceConfig : forkLiftList) {
+            BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>().eq("lift_no", deviceConfig.getDeviceNo()));
+            if (basLift == null) {
+                throw new CoolException("鏈厤缃揣鍙夋彁鍗囨満鏁版嵁");
+            }
 
-//        // 鍒濆鍖栬揣鍙夋彁鍗囨満
-//        for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLiftMaster()) {
-//            News.info("鍒濆鍖栬揣鍙夋彁鍗囨満Master........................................................");
-//            ThreadHandler thread = null;
-//            if (forkLiftSlave.getThreadImpl().equals("LfdZyForkLiftMasterThread")) {
-//                thread = new LfdZyForkLiftMasterThread(forkLiftSlave, redisUtil);
-//            } else {
-//                throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
-//            }
-//
-//            new Thread(thread).start();
-//            SlaveConnection.put(SlaveType.ForkLiftMaster, forkLiftSlave.getId(), thread);
-//        }
+            ThreadHandler thread = null;
+            if (deviceConfig.getThreadImpl().equals("ZyForkLiftThread")) {
+                thread = new ZyForkLiftThread(deviceConfig, basLift.getStationList$(), redisUtil);
+            } else {
+                throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
+            }
+
+            new Thread(thread).start();
+            SlaveConnection.put(SlaveType.ForkLift, deviceConfig.getDeviceNo(), thread);
+
+            if (deviceConfig.getFake() == 1) {
+                fakeDevices.add(deviceConfig);
+            }else {
+                allDevices.add(deviceConfig);
+            }
+        }
 
         // 鍒濆鍖栧洓鍚戠┛姊溅
+        News.info("鍒濆鍖栧洓鍚戠┛姊溅......................................................");
         List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
                 .eq("device_type", String.valueOf(SlaveType.Shuttle)));
         for (DeviceConfig deviceConfig : shuttleList) {
-            News.info("鍒濆鍖栧洓鍚戠┛姊溅......................................................");
             ThreadHandler thread = null;
             if (deviceConfig.getThreadImpl().equals("NyShuttleThread")) {
                 thread = new NyShuttleThread(deviceConfig, redisUtil);
diff --git a/src/main/java/com/zy/core/enums/ForkLiftTaskModeType.java b/src/main/java/com/zy/core/enums/ForkLiftTaskModeType.java
index 894c60d..adcbc6b 100644
--- a/src/main/java/com/zy/core/enums/ForkLiftTaskModeType.java
+++ b/src/main/java/com/zy/core/enums/ForkLiftTaskModeType.java
@@ -9,6 +9,10 @@
     PICK_PUT(3, "鍙栨斁璐�"),
     SHUTTLE_SWITCH(4, "灏忚溅鎹㈠眰"),
     MOVE(5, "鎻愬崌鏈虹Щ鍔�"),
+    RESET(9996, "澶嶄綅"),
+    SWITCH_IN(9997, "鍒囨崲鍏ュ簱妯″紡"),
+    SWITCH_OUt(9998, "鍒囨崲鍑哄簱妯″紡"),
+    READ_STATUS(9999, "璇诲彇鐘舵��"),
     ;
 
     public Integer id;
diff --git a/src/main/java/com/zy/core/model/DeviceCommandMsgModel.java b/src/main/java/com/zy/core/model/DeviceCommandMsgModel.java
index 0e44755..8d8ad92 100644
--- a/src/main/java/com/zy/core/model/DeviceCommandMsgModel.java
+++ b/src/main/java/com/zy/core/model/DeviceCommandMsgModel.java
@@ -9,6 +9,8 @@
 
     private String deviceType;
 
+    private String resultKey;
+
     private Object command;
 
 }
diff --git a/src/main/java/com/zy/core/model/DeviceMsgModel.java b/src/main/java/com/zy/core/model/DeviceMsgModel.java
index ecabe4f..ca64719 100644
--- a/src/main/java/com/zy/core/model/DeviceMsgModel.java
+++ b/src/main/java/com/zy/core/model/DeviceMsgModel.java
@@ -13,4 +13,6 @@
 
     private String deviceOriginMsg;
 
+    private String resultKey;
+
 }
diff --git a/src/main/java/com/zy/core/model/command/ForkLiftCommand.java b/src/main/java/com/zy/core/model/command/ForkLiftCommand.java
index 69b637f..aba270a 100644
--- a/src/main/java/com/zy/core/model/command/ForkLiftCommand.java
+++ b/src/main/java/com/zy/core/model/command/ForkLiftCommand.java
@@ -17,27 +17,27 @@
     /**
      * 浠诲姟鍙�
      */
-    private Short taskNo;
+    private Integer taskNo;
 
     /**
      * 浠诲姟妯″紡
      */
-    private Short mode;
+    private Integer mode;
 
     /**
      * 鍙栬揣鏁版嵁
      */
-    private Short pick;
+    private Integer pick;
 
     /**
      * 鏀捐揣鏁版嵁
      */
-    private Short put;
+    private Integer put;
 
     /**
      * 浠诲姟纭
      */
-    private Short confirm;
+    private Integer confirm;
 
     /**
      * 鍛戒护鏄惁瀹屾垚,榛樿false鏈畬鎴�
diff --git a/src/main/java/com/zy/core/thread/ForkLiftThread.java b/src/main/java/com/zy/core/thread/ForkLiftThread.java
index 408ad8c..62fe964 100644
--- a/src/main/java/com/zy/core/thread/ForkLiftThread.java
+++ b/src/main/java/com/zy/core/thread/ForkLiftThread.java
@@ -26,6 +26,8 @@
 
     CommandResponse move(ForkLiftCommand command);//灏忚溅鎹㈠眰
 
+    CommandResponse switchIOMode(ForkLiftCommand command);//鍒囨崲鍑哄叆搴撴ā寮�
+
     CommandResponse reset();//澶嶄綅
 
     boolean isIdle();//鏄惁绌洪棽
@@ -38,16 +40,18 @@
 
     boolean setSyncTaskNo(Integer taskNo);//璁剧疆宸ヤ綔鍙�
 
-    boolean switchIOMode(ForkLiftIoModeType type);//鍒囨崲鍑哄叆搴撴ā寮�
-
     int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type);//鐢熸垚纭欢璁惧宸ヤ綔鍙�
 
     //***************鑾峰彇鍛戒护*****************
 
-    List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put);//鍙栨斁璐ф寚浠�
+    ForkLiftCommand getPickAndPutCommand(Integer taskNo, Integer pick, Integer put);//鍙栨斁璐ф寚浠�
 
-    List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put);//灏忚溅鎹㈠眰
+    ForkLiftCommand getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put);//灏忚溅鎹㈠眰
 
-    List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put);//鎻愬崌鏈虹Щ鍔�
+    ForkLiftCommand getMoveCommand(Integer taskNo, Integer pick, Integer put);//鎻愬崌鏈虹Щ鍔�
+
+    ForkLiftCommand getSwitchIOCommand(Integer taskNo, ForkLiftIoModeType mode);
+
+    ForkLiftCommand getResetCommand(Integer taskNo);
 
 }
diff --git a/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java
index 8a8964d..fbf2829 100644
--- a/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java
+++ b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftMasterThread.java
@@ -1,153 +1,153 @@
-package com.zy.core.thread.impl;
-
-import HslCommunication.Core.Types.OperateResult;
-import HslCommunication.Core.Types.OperateResultExOne;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
-import com.core.common.DateUtils;
-import com.zy.common.utils.RedisUtil;
-import com.zy.core.News;
-import com.zy.core.ThreadHandler;
-import com.zy.core.cache.OutputQueue;
-import com.zy.core.model.ForkLiftSlave;
-import com.zy.core.model.protocol.ForkLiftProtocol;
-import lombok.extern.slf4j.Slf4j;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-
-@Slf4j
-@SuppressWarnings("all")
-public class LfdZyForkLiftMasterThread implements ThreadHandler {
-
-    private ForkLiftSlave slave;
-    private ForkLiftProtocol forkLiftProtocol;
-    private RedisUtil redisUtil;
-    private SiemensS7Net siemensS7Net;
-    private List<HashMap<String,Object>> slaveAddressList = null;
-    private boolean connect = false;
-
-    public LfdZyForkLiftMasterThread(ForkLiftSlave slave, RedisUtil redisUtil) {
-        this.slave = slave;
-        this.redisUtil = redisUtil;
-        ArrayList<HashMap<String, Object>> addressList = new ArrayList<>();
-
-        HashMap<String, Object> lift1 = new HashMap<>();
-        lift1.put("status", new DbData("DB101.0", (short) 18));//鎻愬崌鏈烘暟鎹�
-        lift1.put("staStatusTray", new DbData("DB102.0", (short) 14));//绔欑偣鏁版嵁
-        lift1.put("staStatusCar", new DbData("DB102.50", (short) 14));//绔欑偣鏁版嵁
-        lift1.put("write", new DbData("DB103.0", null));//鍐欏叆鏁版嵁
-        lift1.put("writeConfirm", new DbData("DB103.8", null));//鍐欏叆纭鏁版嵁
-        lift1.put("confirm", new DbData("DB103.10", null));//纭鍛戒护
-        lift1.put("switchIOMode", new DbData("DB103.12", null));//鍑哄叆搴撴ā寮�
-
-        HashMap<String, Object> lift2 = new HashMap<>();
-        lift2.put("status", new DbData("DB104.0", (short) 18));//鎻愬崌鏈烘暟鎹�
-        lift2.put("staStatusTray", new DbData("DB105.0", (short) 14));//绔欑偣鏁版嵁
-        lift2.put("staStatusCar", new DbData("DB105.50", (short) 14));//绔欑偣鏁版嵁
-        lift2.put("write", new DbData("DB106.0", null));//鍐欏叆鏁版嵁
-        lift2.put("writeConfirm", new DbData("DB106.8", null));//鍐欏叆纭鏁版嵁
-        lift2.put("confirm", new DbData("DB106.10", null));//纭鍛戒护
-        lift2.put("switchIOMode", new DbData("DB106.12", null));//鍑哄叆搴撴ā寮�
-
-        addressList.add(lift1);
-        addressList.add(lift2);
-        this.slaveAddressList = addressList;
-    }
-
-    @Override
-    public boolean connect() {
-        boolean result = false;
-        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
-        siemensS7Net.setRack(slave.getRack().byteValue());
-        siemensS7Net.setSlot(slave.getSlot().byteValue());
-        OperateResult connect = siemensS7Net.ConnectServer();
-        if(connect.IsSuccess){
-            result = true;
-            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
-            News.info("璐у弶鎻愬崌鏈鸿繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
-        } else {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
-            News.error("璐у弶鎻愬崌鏈鸿繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
-        }
-        // siemensS7Net.ConnectClose();
-        this.connect = result;
-        return result;
-    }
-
-    @Override
-    public void close() {
-
-    }
-
-    @Override
-    public void run() {
-        News.info("{}鍙疯揣鍙夋彁鍗囨満Master绾跨▼鍚姩", slave.getId());
-        this.connect();
-        while (true) {
-            try {
-                if (!this.connect) {
-                    this.connect();
-                }
-
-                Thread.sleep(500);
-            }catch (Exception e){
-                e.printStackTrace();
-            }
-        }
-    }
-
-    public SiemensS7Net getSiemensS7Net() {
-        return siemensS7Net;
-    }
-
-    public synchronized OperateResultExOne<byte[]> read(Integer slaveId, String dbTag) {
-        try {
-            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
-            DbData dbData = (DbData) map.get(dbTag);
-            OperateResultExOne<byte[]> result = siemensS7Net.Read(dbData.dbAddress, dbData.dbAddressLength);
-            return result;
-        } catch (Exception e) {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-        }
-        return null;
-    }
-
-    public synchronized OperateResult write(Integer slaveId, String dbTag, short[] array) {
-        try {
-            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
-            DbData dbData = (DbData) map.get(dbTag);
-            OperateResult result = siemensS7Net.Write(dbData.dbAddress, array);
-            return result;
-        } catch (Exception e) {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-        }
-        return null;
-    }
-
-    public synchronized OperateResult write(Integer slaveId, String dbTag, short val) {
-        try {
-            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
-            DbData dbData = (DbData) map.get(dbTag);
-            OperateResult result = siemensS7Net.Write(dbData.dbAddress, val);
-            return result;
-        } catch (Exception e) {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-        }
-        return null;
-    }
-
-    private class DbData {
-        private String dbAddress;
-        private Short dbAddressLength;
-
-        public DbData(String dbAddress, Short dbAddressLength) {
-            this.dbAddress = dbAddress;
-            this.dbAddressLength = dbAddressLength;
-        }
-
-    }
-}
+//package com.zy.core.thread.impl;
+//
+//import HslCommunication.Core.Types.OperateResult;
+//import HslCommunication.Core.Types.OperateResultExOne;
+//import HslCommunication.Profinet.Siemens.SiemensPLCS;
+//import HslCommunication.Profinet.Siemens.SiemensS7Net;
+//import com.core.common.DateUtils;
+//import com.zy.common.utils.RedisUtil;
+//import com.zy.core.News;
+//import com.zy.core.ThreadHandler;
+//import com.zy.core.cache.OutputQueue;
+//import com.zy.core.model.ForkLiftSlave;
+//import com.zy.core.model.protocol.ForkLiftProtocol;
+//import lombok.extern.slf4j.Slf4j;
+//
+//import java.text.MessageFormat;
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.HashMap;
+//import java.util.List;
+//
+//@Slf4j
+//@SuppressWarnings("all")
+//public class LfdZyForkLiftMasterThread implements ThreadHandler {
+//
+//    private ForkLiftSlave slave;
+//    private ForkLiftProtocol forkLiftProtocol;
+//    private RedisUtil redisUtil;
+//    private SiemensS7Net siemensS7Net;
+//    private List<HashMap<String,Object>> slaveAddressList = null;
+//    private boolean connect = false;
+//
+//    public LfdZyForkLiftMasterThread(ForkLiftSlave slave, RedisUtil redisUtil) {
+//        this.slave = slave;
+//        this.redisUtil = redisUtil;
+//        ArrayList<HashMap<String, Object>> addressList = new ArrayList<>();
+//
+//        HashMap<String, Object> lift1 = new HashMap<>();
+//        lift1.put("status", new DbData("DB101.0", (short) 18));//鎻愬崌鏈烘暟鎹�
+//        lift1.put("staStatusTray", new DbData("DB102.0", (short) 14));//绔欑偣鏁版嵁
+//        lift1.put("staStatusCar", new DbData("DB102.50", (short) 14));//绔欑偣鏁版嵁
+//        lift1.put("write", new DbData("DB103.0", null));//鍐欏叆鏁版嵁
+//        lift1.put("writeConfirm", new DbData("DB103.8", null));//鍐欏叆纭鏁版嵁
+//        lift1.put("confirm", new DbData("DB103.10", null));//纭鍛戒护
+//        lift1.put("switchIOMode", new DbData("DB103.12", null));//鍑哄叆搴撴ā寮�
+//
+//        HashMap<String, Object> lift2 = new HashMap<>();
+//        lift2.put("status", new DbData("DB104.0", (short) 18));//鎻愬崌鏈烘暟鎹�
+//        lift2.put("staStatusTray", new DbData("DB105.0", (short) 14));//绔欑偣鏁版嵁
+//        lift2.put("staStatusCar", new DbData("DB105.50", (short) 14));//绔欑偣鏁版嵁
+//        lift2.put("write", new DbData("DB106.0", null));//鍐欏叆鏁版嵁
+//        lift2.put("writeConfirm", new DbData("DB106.8", null));//鍐欏叆纭鏁版嵁
+//        lift2.put("confirm", new DbData("DB106.10", null));//纭鍛戒护
+//        lift2.put("switchIOMode", new DbData("DB106.12", null));//鍑哄叆搴撴ā寮�
+//
+//        addressList.add(lift1);
+//        addressList.add(lift2);
+//        this.slaveAddressList = addressList;
+//    }
+//
+//    @Override
+//    public boolean connect() {
+//        boolean result = false;
+//        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
+//        siemensS7Net.setRack(slave.getRack().byteValue());
+//        siemensS7Net.setSlot(slave.getSlot().byteValue());
+//        OperateResult connect = siemensS7Net.ConnectServer();
+//        if(connect.IsSuccess){
+//            result = true;
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            News.info("璐у弶鎻愬崌鏈鸿繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+//        } else {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            News.error("璐у弶鎻愬崌鏈鸿繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+//        }
+//        // siemensS7Net.ConnectClose();
+//        this.connect = result;
+//        return result;
+//    }
+//
+//    @Override
+//    public void close() {
+//
+//    }
+//
+//    @Override
+//    public void run() {
+//        News.info("{}鍙疯揣鍙夋彁鍗囨満Master绾跨▼鍚姩", slave.getId());
+//        this.connect();
+//        while (true) {
+//            try {
+//                if (!this.connect) {
+//                    this.connect();
+//                }
+//
+//                Thread.sleep(500);
+//            }catch (Exception e){
+//                e.printStackTrace();
+//            }
+//        }
+//    }
+//
+//    public SiemensS7Net getSiemensS7Net() {
+//        return siemensS7Net;
+//    }
+//
+//    public synchronized OperateResultExOne<byte[]> read(Integer slaveId, String dbTag) {
+//        try {
+//            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
+//            DbData dbData = (DbData) map.get(dbTag);
+//            OperateResultExOne<byte[]> result = siemensS7Net.Read(dbData.dbAddress, dbData.dbAddressLength);
+//            return result;
+//        } catch (Exception e) {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//        }
+//        return null;
+//    }
+//
+//    public synchronized OperateResult write(Integer slaveId, String dbTag, short[] array) {
+//        try {
+//            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
+//            DbData dbData = (DbData) map.get(dbTag);
+//            OperateResult result = siemensS7Net.Write(dbData.dbAddress, array);
+//            return result;
+//        } catch (Exception e) {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//        }
+//        return null;
+//    }
+//
+//    public synchronized OperateResult write(Integer slaveId, String dbTag, short val) {
+//        try {
+//            HashMap<String, Object> map = this.slaveAddressList.get(slaveId - 1);
+//            DbData dbData = (DbData) map.get(dbTag);
+//            OperateResult result = siemensS7Net.Write(dbData.dbAddress, val);
+//            return result;
+//        } catch (Exception e) {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戝啓鍏ユ彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//        }
+//        return null;
+//    }
+//
+//    private class DbData {
+//        private String dbAddress;
+//        private Short dbAddressLength;
+//
+//        public DbData(String dbAddress, Short dbAddressLength) {
+//            this.dbAddress = dbAddress;
+//            this.dbAddressLength = dbAddressLength;
+//        }
+//
+//    }
+//}
diff --git a/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java
index 82bb5aa..ae2b966 100644
--- a/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java
+++ b/src/main/java/com/zy/core/thread/impl/LfdZyForkLiftSlaveThread.java
@@ -1,475 +1,475 @@
-package com.zy.core.thread.impl;
-
-import HslCommunication.Core.Types.OperateResult;
-import HslCommunication.Core.Types.OperateResultExOne;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.core.common.DateUtils;
-import com.core.common.SpringUtils;
-import com.zy.asrs.entity.BasLift;
-import com.zy.asrs.entity.DeviceDataLog;
-import com.zy.asrs.service.BasLiftService;
-import com.zy.asrs.service.DeviceDataLogService;
-import com.zy.asrs.utils.Utils;
-import com.zy.common.ExecuteSupport;
-import com.zy.common.utils.RedisUtil;
-import com.zy.core.News;
-import com.zy.core.action.ForkLiftAction;
-import com.zy.core.cache.OutputQueue;
-import com.zy.core.cache.SlaveConnection;
-import com.zy.core.enums.*;
-import com.zy.core.model.CommandResponse;
-import com.zy.core.model.ForkLiftSlave;
-import com.zy.core.model.command.ForkLiftCommand;
-import com.zy.core.model.protocol.ForkLiftProtocol;
-import com.zy.core.model.protocol.ForkLiftStaProtocol;
-import com.zy.core.thread.ForkLiftThread;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-
-import java.text.MessageFormat;
-import java.util.*;
-
-@Slf4j
-@SuppressWarnings("all")
-public class LfdZyForkLiftSlaveThread implements ForkLiftThread {
-
-    private Integer masterId;
-    private ForkLiftSlave slave;
-    private ForkLiftProtocol forkLiftProtocol;
-    private RedisUtil redisUtil;
-    private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>();
-    private LfdZyForkLiftMasterThread masterThread;
-
-    public LfdZyForkLiftSlaveThread(ForkLiftSlave slave, RedisUtil redisUtil, Integer masterId) {
-        this.slave = slave;
-        this.redisUtil = redisUtil;
-        this.masterId = masterId;
-        //鍒濆鍖栫珯鐐�
-        for (ForkLiftSlave.Sta sta : this.slave.getSta()) {
-            ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol();
-            forkLiftStaProtocol.setStaNo(sta.getStaNo());//绔欑偣鍙�
-            forkLiftStaProtocol.setLev(sta.getLev());//绔欑偣妤煎眰
-            String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev());
-            forkLiftStaProtocol.setLocNo(locNo);//绔欑偣搴撲綅鍙�
-            forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//鎻愬崌鏈哄彿
-            forkLiftStaProtocols.add(forkLiftStaProtocol);
-        }
-    }
-
-    @Override
-    public boolean connect() {
-        boolean result = false;
-        LfdZyForkLiftMasterThread masterThread = (LfdZyForkLiftMasterThread) SlaveConnection.get(SlaveType.ForkLiftMaster, masterId);
-        if(masterThread != null) {
-            result = true;
-            this.masterThread = masterThread;
-        }
-        return result;
-    }
-
-    @Override
-    public void close() {
-
-    }
-
-    @Override
-    public void run() {
-        News.info("{}鍙疯揣鍙夋彁鍗囨満绾跨▼鍚姩", slave.getId());
-        this.connect();
-        while (true) {
-            try {
-                if (this.masterThread == null) {
-                    this.connect();
-                    continue;
-                }
-
-                read();
-                Thread.sleep(300);
-                execute();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    private void execute() {
-        ForkLiftAction forkLiftAction = null;
-        try {
-            forkLiftAction = SpringUtils.getBean(ForkLiftAction.class);
-        }catch (Exception e){}
-        if (forkLiftAction == null) {
-            return;
-        }
-
-        Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId());
-        if (object == null) {
-            return;
-        }
-
-        Integer taskNo = Integer.valueOf(String.valueOf(object));
-        if (taskNo != 0) {
-            //瀛樺湪浠诲姟闇�瑕佹墽琛�
-            boolean result = forkLiftAction.executeWork(slave.getId(), taskNo);
-        }
-    }
-
-    private void read() {
-        try {
-            readStatus();
-
-            //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓簍rue
-            if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP)
-                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN)
-                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) {
-                forkLiftProtocol.setPakMk(true);
-            }
-        } catch (Exception e) {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-        }
-    }
-
-    private void readStatus() {
-        try {
-            //鑾峰彇鎻愬崌鏈烘暟鎹�
-            OperateResultExOne<byte[]> result1 = this.masterThread.read(this.slave.getId(), "status");
-            SiemensS7Net siemensS7Net = this.masterThread.getSiemensS7Net();
-            if (result1.IsSuccess) {
-                if (null == forkLiftProtocol) {
-                    forkLiftProtocol = new ForkLiftProtocol();
-                    forkLiftProtocol.setLiftNo(slave.getId());
-                    forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE);
-
-                    InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend();
-                }
-
-                //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
-                //妯″紡
-                forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0));
-                //PLC浠诲姟鍙�
-                forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2));
-                //浠诲姟鐘舵��
-                forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
-                //浠诲姟妯″紡
-                forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
-                //鍙栬揣鏁版嵁
-                forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8));
-                //鏀捐揣鏁版嵁
-                forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10));
-                //鍑哄叆搴撴ā寮�
-                forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12));
-                //鏁呴殰鐮�
-                forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14));
-                //褰撳墠灞�
-                forkLiftProtocol.setLev((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 16));
-
-                //************琛ュ厖鎵╁睍瀛楁*************
-                InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend();
-                forkLiftProtocol.setExtend(forkLiftExtend);
-
-            }else {
-                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇璐у弶鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
-            }
-
-            OperateResultExOne<byte[]> result2 = this.masterThread.read(this.slave.getId(), "staStatusTray");
-            if (result2.IsSuccess) {
-                for (int i = 0; i < this.slave.getSta().size(); i++) {
-                    ForkLiftSlave.Sta sta = this.slave.getSta().get(i);
-                    if (forkLiftStaProtocols.isEmpty()) {
-                        continue;
-                    }
-
-                    short val = siemensS7Net.getByteTransform().TransInt16(result2.Content, i * 2);
-                    ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i);
-                    forkLiftStaProtocol.setHasTray(val == 1);
-                }
-            }
-
-            OperateResultExOne<byte[]> result3 = this.masterThread.read(this.slave.getId(), "staStatusCar");
-            if (result3.IsSuccess) {
-                for (int i = 0; i < this.slave.getSta().size(); i++) {
-                    ForkLiftSlave.Sta sta = this.slave.getSta().get(i);
-                    if (forkLiftStaProtocols.isEmpty()) {
-                        continue;
-                    }
-
-                    short val = siemensS7Net.getByteTransform().TransInt16(result3.Content, i * 2);
-                    ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i);
-                    forkLiftStaProtocol.setHasCar(val == 1);
-                }
-            }
-
-            if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) {
-                //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
-                //淇濆瓨鏁版嵁璁板綍
-                DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
-                DeviceDataLog deviceDataLog = new DeviceDataLog();
-                deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content));
-                deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol));
-                deviceDataLog.setType("forkLift");
-                deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo());
-                deviceDataLog.setCreateTime(new Date());
-                deviceDataLogService.insert(deviceDataLog);
-
-                //淇濆瓨鏁版嵁璁板綍
-                DeviceDataLog deviceDataLog2 = new DeviceDataLog();
-                deviceDataLog2.setOriginData(Base64.getEncoder().encodeToString(result2.Content));
-                deviceDataLog2.setWcsData(JSON.toJSONString(forkLiftStaProtocols));
-                deviceDataLog2.setType("forkLiftStaProtocols");
-                deviceDataLog2.setDeviceNo(forkLiftProtocol.getLiftNo());
-                deviceDataLog2.setCreateTime(new Date());
-                deviceDataLogService.insert(deviceDataLog2);
-
-                //鏇存柊閲囬泦鏃堕棿
-                forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis());
-            }
-
-            //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
-            BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
-            BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>()
-                    .eq("lift_no", slave.getId()));
-            if (basLift == null) {
-                basLift = new BasLift();
-                //鎻愬崌鏈哄彿
-                basLift.setLiftNo(forkLiftProtocol.getLiftNo());
-                basLift.setStatus(1);
-                basLiftService.insert(basLift);
-            }
-            //浠诲姟鍙�
-            basLift.setWrkNo(forkLiftProtocol.getTaskNo());
-            //淇敼鏃堕棿
-            basLift.setUpdateTime(new Date());
-            //璁惧鐘舵��
-            basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol));
-            if (basLiftService.updateById(basLift)) {
-                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo()));
-            }
-
-        } catch (Exception e) {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栬揣鍙夋彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-        }
-    }
-
-    @Override
-    public ForkLiftProtocol getStatus(boolean clone) {
-        if (this.forkLiftProtocol == null) {
-            return null;
-        }
-        return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol;
-    }
-
-    @Override
-    public List<ForkLiftStaProtocol> getForkLiftStaProtocols() {
-        return this.forkLiftStaProtocols;
-    }
-
-    @Override
-    public ForkLiftProtocol getStatus() {
-        return getStatus(true);
-    }
-
-    @Override
-    public CommandResponse pickAndPut(ForkLiftCommand command) {
-        CommandResponse response = new CommandResponse(false);
-
-        short[] array = new short[4];
-        array[0] = command.getTaskNo();//浠诲姟鍙�
-        array[1] = command.getMode();//浠诲姟妯″紡
-        array[2] = command.getPick();//鍙栬揣鏁版嵁
-        array[3] = command.getPut();//鏀捐揣鏁版嵁
-        OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
-        if (result.IsSuccess) {
-            OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
-            if (result2.IsSuccess) {
-                response.setResult(true);
-            }
-        }
-        return response;
-    }
-
-    @Override
-    public CommandResponse shuttleSwitch(ForkLiftCommand command) {
-        CommandResponse response = new CommandResponse(false);
-
-        short[] array = new short[4];
-        array[0] = command.getTaskNo();//浠诲姟鍙�
-        array[1] = command.getMode();//浠诲姟妯″紡
-        array[2] = command.getPick();//鍙栬揣鏁版嵁
-        array[3] = command.getPut();//鏀捐揣鏁版嵁
-        OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
-        if (result.IsSuccess) {
-            OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
-            if (result2.IsSuccess) {
-                response.setResult(true);
-            }
-        }
-        return response;
-    }
-
-    @Override
-    public CommandResponse move(ForkLiftCommand command) {
-        CommandResponse response = new CommandResponse(false);
-
-        short[] array = new short[4];
-        array[0] = command.getTaskNo();//浠诲姟鍙�
-        array[1] = command.getMode();//浠诲姟妯″紡
-        array[2] = command.getPut();//鏀捐揣鏁版嵁
-        OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
-        if (result.IsSuccess) {
-            OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
-            if (result2.IsSuccess) {
-                response.setResult(true);
-            }
-        }
-        return response;
-    }
-
-    @Override
-    public CommandResponse reset() {
-        CommandResponse response = new CommandResponse(false);
-        OperateResult result = this.masterThread.write(this.slave.getId(), "confirm", (short) 1);
-        if (result.IsSuccess) {
-            News.info("璐у弶鎻愬崌鏈虹‘璁ゅ懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}", forkLiftProtocol.getLiftNo());
-            response.setResult(true);
-        }
-        return response;
-    }
-
-    @Override
-    public boolean isIdle() {
-        if (this.forkLiftProtocol.getTaskNo() == null
-                || this.forkLiftProtocol.getProtocolStatus() == null
-                || this.forkLiftProtocol.getModel() == null
-                || this.forkLiftProtocol.getErrorCode() == null
-        ) {
-            return false;
-        }
-
-        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
-                && this.forkLiftProtocol.getWrkNo() == 0
-                && this.forkLiftProtocol.getTaskNo() == 0
-                && this.forkLiftProtocol.getModel() == 2
-                && this.forkLiftProtocol.getErrorCode() == 0
-                ;
-        return res;
-    }
-
-    @Override
-    public boolean isDeviceIdle() {
-        return isDeviceIdle(null);
-    }
-
-    @Override
-    public boolean isDeviceIdle(ExecuteSupport support) {
-        if (null != support) {
-            Boolean judgement = support.judgement();
-            if (judgement != null && !judgement) {
-                return true;
-            }
-        }
-
-        if (this.forkLiftProtocol.getTaskNo() == null
-                || this.forkLiftProtocol.getProtocolStatus() == null
-                || this.forkLiftProtocol.getModel() == null
-                || this.forkLiftProtocol.getErrorCode() == null
-        ) {
-            return false;
-        }
-
-        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
-                && this.forkLiftProtocol.getWrkNo() == 0
-                && this.forkLiftProtocol.getModel() == 2
-                && this.forkLiftProtocol.getErrorCode() == 0
-                ;
-        return res;
-    }
-
-    @Override
-    public boolean setProtocolStatus(ForkLiftProtocolStatusType status) {
-        return false;
-    }
-
-    @Override
-    public boolean setSyncTaskNo(Integer taskNo) {
-        this.forkLiftProtocol.setSyncTaskNo(taskNo);
-        return true;
-    }
-
-    @Override
-    public boolean switchIOMode(ForkLiftIoModeType type) {
-        OperateResult result = this.masterThread.write(this.slave.getId(), "switchIOMode", type.id.shortValue());
-        if (result.IsSuccess) {
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) {
-        return taskNo;
-    }
-
-    @Override
-    public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) {
-        Integer realPick = pick % 1000;
-        Integer realPut = put % 1000;
-
-        List<ForkLiftCommand> commands = new ArrayList<>();
-        ForkLiftCommand command = new ForkLiftCommand();
-        command.setLiftNo(slave.getId());
-        command.setTaskNo(taskNo.shortValue());
-        command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
-        command.setPick(realPick.shortValue());
-        command.setPut(realPut.shortValue());
-        command.setConfirm((short) 1);
-
-        commands.add(command);
-        return commands;
-    }
-
-    @Override
-    public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put) {
-        Integer realPick = pick % 1000;
-        Integer realPut = put % 1000;
-
-        List<ForkLiftCommand> commands = new ArrayList<>();
-        ForkLiftCommand command = new ForkLiftCommand();
-        command.setLiftNo(slave.getId());
-        command.setTaskNo(taskNo.shortValue());
-        command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
-        command.setPick(realPick.shortValue());
-        command.setPut(realPut.shortValue());
-        command.setConfirm((short) 1);
-
-        commands.add(command);
-        return commands;
-    }
-
-    @Override
-    public List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put) {
-        Integer realPick = pick % 1000;
-        Integer realPut = put % 1000;
-
-        List<ForkLiftCommand> commands = new ArrayList<>();
-        ForkLiftCommand command = new ForkLiftCommand();
-        command.setLiftNo(slave.getId());
-        command.setTaskNo(taskNo.shortValue());
-        command.setMode(ForkLiftTaskModeType.MOVE.id.shortValue());
-        command.setPick(realPick.shortValue());
-        command.setPut(realPut.shortValue());
-        command.setConfirm((short) 1);
-
-        commands.add(command);
-        return commands;
-    }
-
-    /**
-     * 鎵╁睍瀛楁
-     */
-    @Data
-    private class InnerForkLiftExtend {
-
-    }
-}
+//package com.zy.core.thread.impl;
+//
+//import HslCommunication.Core.Types.OperateResult;
+//import HslCommunication.Core.Types.OperateResultExOne;
+//import HslCommunication.Profinet.Siemens.SiemensPLCS;
+//import HslCommunication.Profinet.Siemens.SiemensS7Net;
+//import com.alibaba.fastjson.JSON;
+//import com.baomidou.mybatisplus.mapper.EntityWrapper;
+//import com.core.common.DateUtils;
+//import com.core.common.SpringUtils;
+//import com.zy.asrs.entity.BasLift;
+//import com.zy.asrs.entity.DeviceDataLog;
+//import com.zy.asrs.service.BasLiftService;
+//import com.zy.asrs.service.DeviceDataLogService;
+//import com.zy.asrs.utils.Utils;
+//import com.zy.common.ExecuteSupport;
+//import com.zy.common.utils.RedisUtil;
+//import com.zy.core.News;
+//import com.zy.core.action.ForkLiftAction;
+//import com.zy.core.cache.OutputQueue;
+//import com.zy.core.cache.SlaveConnection;
+//import com.zy.core.enums.*;
+//import com.zy.core.model.CommandResponse;
+//import com.zy.core.model.ForkLiftSlave;
+//import com.zy.core.model.command.ForkLiftCommand;
+//import com.zy.core.model.protocol.ForkLiftProtocol;
+//import com.zy.core.model.protocol.ForkLiftStaProtocol;
+//import com.zy.core.thread.ForkLiftThread;
+//import lombok.Data;
+//import lombok.extern.slf4j.Slf4j;
+//
+//import java.text.MessageFormat;
+//import java.util.*;
+//
+//@Slf4j
+//@SuppressWarnings("all")
+//public class LfdZyForkLiftSlaveThread implements ForkLiftThread {
+//
+//    private Integer masterId;
+//    private ForkLiftSlave slave;
+//    private ForkLiftProtocol forkLiftProtocol;
+//    private RedisUtil redisUtil;
+//    private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>();
+//    private LfdZyForkLiftMasterThread masterThread;
+//
+//    public LfdZyForkLiftSlaveThread(ForkLiftSlave slave, RedisUtil redisUtil, Integer masterId) {
+//        this.slave = slave;
+//        this.redisUtil = redisUtil;
+//        this.masterId = masterId;
+//        //鍒濆鍖栫珯鐐�
+//        for (ForkLiftSlave.Sta sta : this.slave.getSta()) {
+//            ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol();
+//            forkLiftStaProtocol.setStaNo(sta.getStaNo());//绔欑偣鍙�
+//            forkLiftStaProtocol.setLev(sta.getLev());//绔欑偣妤煎眰
+//            String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev());
+//            forkLiftStaProtocol.setLocNo(locNo);//绔欑偣搴撲綅鍙�
+//            forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//鎻愬崌鏈哄彿
+//            forkLiftStaProtocols.add(forkLiftStaProtocol);
+//        }
+//    }
+//
+//    @Override
+//    public boolean connect() {
+//        boolean result = false;
+//        LfdZyForkLiftMasterThread masterThread = (LfdZyForkLiftMasterThread) SlaveConnection.get(SlaveType.ForkLiftMaster, masterId);
+//        if(masterThread != null) {
+//            result = true;
+//            this.masterThread = masterThread;
+//        }
+//        return result;
+//    }
+//
+//    @Override
+//    public void close() {
+//
+//    }
+//
+//    @Override
+//    public void run() {
+//        News.info("{}鍙疯揣鍙夋彁鍗囨満绾跨▼鍚姩", slave.getId());
+//        this.connect();
+//        while (true) {
+//            try {
+//                if (this.masterThread == null) {
+//                    this.connect();
+//                    continue;
+//                }
+//
+//                read();
+//                Thread.sleep(300);
+//                execute();
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+//        }
+//    }
+//
+//    private void execute() {
+//        ForkLiftAction forkLiftAction = null;
+//        try {
+//            forkLiftAction = SpringUtils.getBean(ForkLiftAction.class);
+//        }catch (Exception e){}
+//        if (forkLiftAction == null) {
+//            return;
+//        }
+//
+//        Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId());
+//        if (object == null) {
+//            return;
+//        }
+//
+//        Integer taskNo = Integer.valueOf(String.valueOf(object));
+//        if (taskNo != 0) {
+//            //瀛樺湪浠诲姟闇�瑕佹墽琛�
+//            boolean result = forkLiftAction.executeWork(slave.getId(), taskNo);
+//        }
+//    }
+//
+//    private void read() {
+//        try {
+//            readStatus();
+//
+//            //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓簍rue
+//            if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP)
+//                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN)
+//                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) {
+//                forkLiftProtocol.setPakMk(true);
+//            }
+//        } catch (Exception e) {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//        }
+//    }
+//
+//    private void readStatus() {
+//        try {
+//            //鑾峰彇鎻愬崌鏈烘暟鎹�
+//            OperateResultExOne<byte[]> result1 = this.masterThread.read(this.slave.getId(), "status");
+//            SiemensS7Net siemensS7Net = this.masterThread.getSiemensS7Net();
+//            if (result1.IsSuccess) {
+//                if (null == forkLiftProtocol) {
+//                    forkLiftProtocol = new ForkLiftProtocol();
+//                    forkLiftProtocol.setLiftNo(slave.getId());
+//                    forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE);
+//
+//                    InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend();
+//                }
+//
+//                //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
+//                //妯″紡
+//                forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0));
+//                //PLC浠诲姟鍙�
+//                forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2));
+//                //浠诲姟鐘舵��
+//                forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
+//                //浠诲姟妯″紡
+//                forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
+//                //鍙栬揣鏁版嵁
+//                forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8));
+//                //鏀捐揣鏁版嵁
+//                forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10));
+//                //鍑哄叆搴撴ā寮�
+//                forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12));
+//                //鏁呴殰鐮�
+//                forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14));
+//                //褰撳墠灞�
+//                forkLiftProtocol.setLev((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 16));
+//
+//                //************琛ュ厖鎵╁睍瀛楁*************
+//                InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend();
+//                forkLiftProtocol.setExtend(forkLiftExtend);
+//
+//            }else {
+//                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇璐у弶鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
+//            }
+//
+//            OperateResultExOne<byte[]> result2 = this.masterThread.read(this.slave.getId(), "staStatusTray");
+//            if (result2.IsSuccess) {
+//                for (int i = 0; i < this.slave.getSta().size(); i++) {
+//                    ForkLiftSlave.Sta sta = this.slave.getSta().get(i);
+//                    if (forkLiftStaProtocols.isEmpty()) {
+//                        continue;
+//                    }
+//
+//                    short val = siemensS7Net.getByteTransform().TransInt16(result2.Content, i * 2);
+//                    ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i);
+//                    forkLiftStaProtocol.setHasTray(val == 1);
+//                }
+//            }
+//
+//            OperateResultExOne<byte[]> result3 = this.masterThread.read(this.slave.getId(), "staStatusCar");
+//            if (result3.IsSuccess) {
+//                for (int i = 0; i < this.slave.getSta().size(); i++) {
+//                    ForkLiftSlave.Sta sta = this.slave.getSta().get(i);
+//                    if (forkLiftStaProtocols.isEmpty()) {
+//                        continue;
+//                    }
+//
+//                    short val = siemensS7Net.getByteTransform().TransInt16(result3.Content, i * 2);
+//                    ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i);
+//                    forkLiftStaProtocol.setHasCar(val == 1);
+//                }
+//            }
+//
+//            if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) {
+//                //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+//                //淇濆瓨鏁版嵁璁板綍
+//                DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+//                DeviceDataLog deviceDataLog = new DeviceDataLog();
+//                deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content));
+//                deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol));
+//                deviceDataLog.setType("forkLift");
+//                deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo());
+//                deviceDataLog.setCreateTime(new Date());
+//                deviceDataLogService.insert(deviceDataLog);
+//
+//                //淇濆瓨鏁版嵁璁板綍
+//                DeviceDataLog deviceDataLog2 = new DeviceDataLog();
+//                deviceDataLog2.setOriginData(Base64.getEncoder().encodeToString(result2.Content));
+//                deviceDataLog2.setWcsData(JSON.toJSONString(forkLiftStaProtocols));
+//                deviceDataLog2.setType("forkLiftStaProtocols");
+//                deviceDataLog2.setDeviceNo(forkLiftProtocol.getLiftNo());
+//                deviceDataLog2.setCreateTime(new Date());
+//                deviceDataLogService.insert(deviceDataLog2);
+//
+//                //鏇存柊閲囬泦鏃堕棿
+//                forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis());
+//            }
+//
+//            //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
+//            BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+//            BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>()
+//                    .eq("lift_no", slave.getId()));
+//            if (basLift == null) {
+//                basLift = new BasLift();
+//                //鎻愬崌鏈哄彿
+//                basLift.setLiftNo(forkLiftProtocol.getLiftNo());
+//                basLift.setStatus(1);
+//                basLiftService.insert(basLift);
+//            }
+//            //浠诲姟鍙�
+//            basLift.setWrkNo(forkLiftProtocol.getTaskNo());
+//            //淇敼鏃堕棿
+//            basLift.setUpdateTime(new Date());
+//            //璁惧鐘舵��
+//            basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol));
+//            if (basLiftService.updateById(basLift)) {
+//                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo()));
+//            }
+//
+//        } catch (Exception e) {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栬揣鍙夋彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//        }
+//    }
+//
+//    @Override
+//    public ForkLiftProtocol getStatus(boolean clone) {
+//        if (this.forkLiftProtocol == null) {
+//            return null;
+//        }
+//        return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol;
+//    }
+//
+//    @Override
+//    public List<ForkLiftStaProtocol> getForkLiftStaProtocols() {
+//        return this.forkLiftStaProtocols;
+//    }
+//
+//    @Override
+//    public ForkLiftProtocol getStatus() {
+//        return getStatus(true);
+//    }
+//
+//    @Override
+//    public CommandResponse pickAndPut(ForkLiftCommand command) {
+//        CommandResponse response = new CommandResponse(false);
+//
+//        short[] array = new short[4];
+//        array[0] = command.getTaskNo();//浠诲姟鍙�
+//        array[1] = command.getMode();//浠诲姟妯″紡
+//        array[2] = command.getPick();//鍙栬揣鏁版嵁
+//        array[3] = command.getPut();//鏀捐揣鏁版嵁
+//        OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
+//        if (result.IsSuccess) {
+//            OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
+//            if (result2.IsSuccess) {
+//                response.setResult(true);
+//            }
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public CommandResponse shuttleSwitch(ForkLiftCommand command) {
+//        CommandResponse response = new CommandResponse(false);
+//
+//        short[] array = new short[4];
+//        array[0] = command.getTaskNo();//浠诲姟鍙�
+//        array[1] = command.getMode();//浠诲姟妯″紡
+//        array[2] = command.getPick();//鍙栬揣鏁版嵁
+//        array[3] = command.getPut();//鏀捐揣鏁版嵁
+//        OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
+//        if (result.IsSuccess) {
+//            OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
+//            if (result2.IsSuccess) {
+//                response.setResult(true);
+//            }
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public CommandResponse move(ForkLiftCommand command) {
+//        CommandResponse response = new CommandResponse(false);
+//
+//        short[] array = new short[4];
+//        array[0] = command.getTaskNo();//浠诲姟鍙�
+//        array[1] = command.getMode();//浠诲姟妯″紡
+//        array[2] = command.getPut();//鏀捐揣鏁版嵁
+//        OperateResult result = this.masterThread.write(this.slave.getId(), "write", array);
+//        if (result.IsSuccess) {
+//            OperateResult result2 = this.masterThread.write(this.slave.getId(), "writeConfirm", command.getConfirm());
+//            if (result2.IsSuccess) {
+//                response.setResult(true);
+//            }
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public CommandResponse reset() {
+//        CommandResponse response = new CommandResponse(false);
+//        OperateResult result = this.masterThread.write(this.slave.getId(), "confirm", (short) 1);
+//        if (result.IsSuccess) {
+//            News.info("璐у弶鎻愬崌鏈虹‘璁ゅ懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}", forkLiftProtocol.getLiftNo());
+//            response.setResult(true);
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public boolean isIdle() {
+//        if (this.forkLiftProtocol.getTaskNo() == null
+//                || this.forkLiftProtocol.getProtocolStatus() == null
+//                || this.forkLiftProtocol.getModel() == null
+//                || this.forkLiftProtocol.getErrorCode() == null
+//        ) {
+//            return false;
+//        }
+//
+//        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
+//                && this.forkLiftProtocol.getWrkNo() == 0
+//                && this.forkLiftProtocol.getTaskNo() == 0
+//                && this.forkLiftProtocol.getModel() == 2
+//                && this.forkLiftProtocol.getErrorCode() == 0
+//                ;
+//        return res;
+//    }
+//
+//    @Override
+//    public boolean isDeviceIdle() {
+//        return isDeviceIdle(null);
+//    }
+//
+//    @Override
+//    public boolean isDeviceIdle(ExecuteSupport support) {
+//        if (null != support) {
+//            Boolean judgement = support.judgement();
+//            if (judgement != null && !judgement) {
+//                return true;
+//            }
+//        }
+//
+//        if (this.forkLiftProtocol.getTaskNo() == null
+//                || this.forkLiftProtocol.getProtocolStatus() == null
+//                || this.forkLiftProtocol.getModel() == null
+//                || this.forkLiftProtocol.getErrorCode() == null
+//        ) {
+//            return false;
+//        }
+//
+//        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
+//                && this.forkLiftProtocol.getWrkNo() == 0
+//                && this.forkLiftProtocol.getModel() == 2
+//                && this.forkLiftProtocol.getErrorCode() == 0
+//                ;
+//        return res;
+//    }
+//
+//    @Override
+//    public boolean setProtocolStatus(ForkLiftProtocolStatusType status) {
+//        return false;
+//    }
+//
+//    @Override
+//    public boolean setSyncTaskNo(Integer taskNo) {
+//        this.forkLiftProtocol.setSyncTaskNo(taskNo);
+//        return true;
+//    }
+//
+//    @Override
+//    public boolean switchIOMode(ForkLiftIoModeType type) {
+//        OperateResult result = this.masterThread.write(this.slave.getId(), "switchIOMode", type.id.shortValue());
+//        if (result.IsSuccess) {
+//            return true;
+//        }
+//        return false;
+//    }
+//
+//    @Override
+//    public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) {
+//        return taskNo;
+//    }
+//
+//    @Override
+//    public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) {
+//        Integer realPick = pick % 1000;
+//        Integer realPut = put % 1000;
+//
+//        List<ForkLiftCommand> commands = new ArrayList<>();
+//        ForkLiftCommand command = new ForkLiftCommand();
+//        command.setLiftNo(slave.getId());
+//        command.setTaskNo(taskNo.shortValue());
+//        command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
+//        command.setPick(realPick.shortValue());
+//        command.setPut(realPut.shortValue());
+//        command.setConfirm((short) 1);
+//
+//        commands.add(command);
+//        return commands;
+//    }
+//
+//    @Override
+//    public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put) {
+//        Integer realPick = pick % 1000;
+//        Integer realPut = put % 1000;
+//
+//        List<ForkLiftCommand> commands = new ArrayList<>();
+//        ForkLiftCommand command = new ForkLiftCommand();
+//        command.setLiftNo(slave.getId());
+//        command.setTaskNo(taskNo.shortValue());
+//        command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
+//        command.setPick(realPick.shortValue());
+//        command.setPut(realPut.shortValue());
+//        command.setConfirm((short) 1);
+//
+//        commands.add(command);
+//        return commands;
+//    }
+//
+//    @Override
+//    public List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put) {
+//        Integer realPick = pick % 1000;
+//        Integer realPut = put % 1000;
+//
+//        List<ForkLiftCommand> commands = new ArrayList<>();
+//        ForkLiftCommand command = new ForkLiftCommand();
+//        command.setLiftNo(slave.getId());
+//        command.setTaskNo(taskNo.shortValue());
+//        command.setMode(ForkLiftTaskModeType.MOVE.id.shortValue());
+//        command.setPick(realPick.shortValue());
+//        command.setPut(realPut.shortValue());
+//        command.setConfirm((short) 1);
+//
+//        commands.add(command);
+//        return commands;
+//    }
+//
+//    /**
+//     * 鎵╁睍瀛楁
+//     */
+//    @Data
+//    private class InnerForkLiftExtend {
+//
+//    }
+//}
diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
index 166c711..68771e5 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -56,7 +56,7 @@
     private static final boolean DEBUG = false;//璋冭瘯妯″紡
 
     private List<JSONObject> socketReadResults = new ArrayList<>();
-    private List<JSONObject> socketResults = new ArrayList<>();
+    private List<DeviceMsgModel> socketResults = new ArrayList<>();
 
     //鍘熷璁惧鏁版嵁
     private Object originDeviceData;
@@ -188,54 +188,32 @@
                 data.put("originDeviceData", deviceMsg.getDeviceOriginMsg());
                 socketReadResults.add(data);
             } else {
-                socketResults.add(data);//娣诲姞鏁版嵁
+                socketResults.add(deviceMsg);//娣诲姞鏁版嵁
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    public JSONObject getRequestBody(String type, String taskId) {
+    public JSONObject getRequestBody(String resultKey) {
         try {
             // 鑾峰彇鏈嶅姟鍣ㄥ搷搴�
             JSONObject result = null;
-            if (type.equals("readState")) {
-                type = "state";
-            }
-
+            int idx = -1;
             for (int i = 0; i < socketResults.size(); i++) {
-                JSONObject socketResult = socketResults.get(i);
-                if (!socketResult.get("msgType").equals("responseMsg")) {//涓嶆槸鍝嶅簲鍐呭
-                    continue;
-                }
-
-                JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString());
-                JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
-                String responseType = resultBody.get("responseType").toString();
-                if (DEBUG) {
-                    result = socketResult;
+                DeviceMsgModel deviceMsgModel = socketResults.get(i);
+                if(deviceMsgModel.getResultKey().equals(resultKey)){
+                    idx = i;
+                    result = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg()));
                     break;
                 }
-
-                if (!responseType.equals(type)) {
-                    continue;//鍝嶅簲绫诲瀷涓庤姹傜被鍨嬩笉涓�鑷达紝涓嶅湪璋冭瘯妯″紡涓�
-                }
-
-                if (taskId != null) {
-                    String responseTaskId = resultBody.get("taskId").toString();
-                    if (!responseTaskId.equals(taskId)) {
-                        continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓�
-                    }
-                }
-
-                result = socketResult;
-                break;
             }
 
             if (result == null) {
                 return null;//鏃犲搷搴旂粨鏋�
             }
 
+            socketResults.remove(idx);
             return filterBodyData(result);//杩斿洖Body缁撴灉闆�
         } catch (Exception e) {
             return null;
@@ -359,35 +337,38 @@
             // 鑾峰彇鏈嶅姟鍣ㄥ搷搴�
             JSONObject result = null;
             int removeIdx = -1;
+            JSONObject socketResult = null;
             for (int i = 0; i < socketResults.size(); i++) {
-                JSONObject socketResult = socketResults.get(i);
-                if (socketResult == null) {
+                DeviceMsgModel deviceMsgModel = socketResults.get(i);
+                if (!deviceMsgModel.getDeviceMsgType().equals("shuttleInit")) {
                     continue;
                 }
-                if (!socketResult.get("msgType").equals("requestMsg")) {//涓嶆槸璇锋眰鍐呭
-                    continue;
-                }
+                removeIdx = i;
+                socketResult = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg()));
+                break;
+            }
 
-                JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString());
-                JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString());
-                JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
-                String requestType = resultBody.getString("requestType");
-                Integer requestId = resultHeader.getInteger("requestId");
-                if (requestType.equals("init")) {
-                    removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄�
-                    socketResults.remove(removeIdx);
+            if (socketResult == null) {
+                return;
+            }
 
-                    Integer code = resultBody.getInteger("code");
-                    //灏忚溅澶嶄綅璇锋眰
-                    ShuttleCommand initCommand = getInitCommand(requestId, code);
-                    //鍙戝嚭璇锋眰
-                    NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class);
-                    requestCommand(httpCommand);
+            JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString());
+            JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString());
+            JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
+            String requestType = resultBody.getString("requestType");
+            Integer requestId = resultHeader.getInteger("requestId");
+            if (requestType.equals("init")) {
+                socketResults.remove(removeIdx);
 
-                    log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort()));
-                    OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort()));
-                    break;
-                }
+                Integer code = resultBody.getInteger("code");
+                //灏忚溅澶嶄綅璇锋眰
+                ShuttleCommand initCommand = getInitCommand(requestId, code);
+                //鍙戝嚭璇锋眰
+                NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class);
+                requestCommand(httpCommand);
+
+                log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort()));
+                OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort()));
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -479,9 +460,9 @@
         try {
             //鍙戝嚭璇锋眰
             NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
-            JSONObject requestToken = requestCommand(httpCommand);
+            String resultKey = requestCommand(httpCommand);
             //鏌ヨ璇锋眰缁撴灉
-            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
+            JSONObject result = queryCommandStatus(resultKey);
             if (result == null) {
                 return response;//璇锋眰澶辫触
             }
@@ -502,9 +483,9 @@
         try {
             //鍙戝嚭璇锋眰
             NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
-            JSONObject requestToken = requestCommand(httpCommand);
+            String resultKey = requestCommand(httpCommand);
             //鏌ヨ璇锋眰缁撴灉
-            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
+            JSONObject result = queryCommandStatus(resultKey);
             if (result == null) {
                 return response;//璇锋眰澶辫触
             }
@@ -524,9 +505,9 @@
         try {
             //鍙戝嚭璇锋眰
             NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
-            JSONObject requestToken = requestCommand(httpCommand);
+            String resultKey = requestCommand(httpCommand);
             //鏌ヨ璇锋眰缁撴灉
-            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
+            JSONObject result = queryCommandStatus(resultKey);
             if (result == null) {
                 return response;//璇锋眰澶辫触
             }
@@ -554,9 +535,9 @@
         try {
             //鍙戝嚭璇锋眰
             NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
-            JSONObject requestToken = requestCommand(httpCommand);
+            String resultKey = requestCommand(httpCommand);
             //鏌ヨ璇锋眰缁撴灉
-            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
+            JSONObject result = queryCommandStatus(resultKey);
             if (result == null) {
                 return response;//璇锋眰澶辫触
             }
@@ -1127,7 +1108,7 @@
     }
 
     //鍙戝嚭璇锋眰
-    private JSONObject requestCommand(NyShuttleHttpCommand httpCommand) throws IOException {
+    private String requestCommand(NyShuttleHttpCommand httpCommand) throws IOException {
         try {
             DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
             if (deviceMsgUtils == null) {
@@ -1143,33 +1124,19 @@
             commandMsgModel.setDeviceType(String.valueOf(SlaveType.Shuttle));
             commandMsgModel.setCommand(data);
             String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, deviceConfig.getDeviceNo(), commandMsgModel);
-
-            String requestType = null;
-            String taskId = null;
-            try {
-                requestType = httpCommand.getRequest().getBody().get("requestType").toString();
-                taskId = httpCommand.getRequest().getBody().get("taskId").toString();
-            } catch (Exception e) {
-//            return null;
-                //taskId鍙兘鍙栫┖锛屼笉鎶ラ敊锛屾甯告儏鍐�
-            }
-
-            JSONObject result = new JSONObject();
-            result.put("requestType", requestType);
-            result.put("taskId", taskId);
-            return result;
+            return key;
         }catch (Exception e) {
             e.printStackTrace();
         }
         return null;
     }
 
-    private JSONObject queryCommandStatus(String requestType, String taskId) {
+    private JSONObject queryCommandStatus(String resultKey) {
         // 鑾峰彇鏈嶅姟鍣ㄥ搷搴�
         // 灏濊瘯50娆�
         JSONObject result = null;
         for (int i = 0; i < 50; i++) {
-            result = getRequestBody(requestType, taskId);
+            result = getRequestBody(resultKey);
             if (result == null) {
                 try {
                     Thread.sleep(500);
diff --git a/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java b/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java
deleted file mode 100644
index e795ce3..0000000
--- a/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java
+++ /dev/null
@@ -1,452 +0,0 @@
-package com.zy.core.thread.impl;
-
-import HslCommunication.Core.Types.OperateResult;
-import HslCommunication.Core.Types.OperateResultExOne;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.core.common.DateUtils;
-import com.core.common.SpringUtils;
-import com.zy.asrs.entity.BasLift;
-import com.zy.asrs.entity.DeviceDataLog;
-import com.zy.asrs.service.BasLiftService;
-import com.zy.asrs.service.DeviceDataLogService;
-import com.zy.asrs.utils.Utils;
-import com.zy.common.ExecuteSupport;
-import com.zy.common.utils.RedisUtil;
-import com.zy.core.News;
-import com.zy.core.action.ForkLiftAction;
-import com.zy.core.action.ShuttleAction;
-import com.zy.core.cache.OutputQueue;
-import com.zy.core.enums.ForkLiftIoModeType;
-import com.zy.core.enums.ForkLiftProtocolStatusType;
-import com.zy.core.enums.ForkLiftTaskModeType;
-import com.zy.core.enums.RedisKeyType;
-import com.zy.core.model.CommandResponse;
-import com.zy.core.model.ForkLiftSlave;
-import com.zy.core.model.command.ForkLiftCommand;
-import com.zy.core.model.protocol.ForkLiftProtocol;
-import com.zy.core.model.protocol.ForkLiftStaProtocol;
-import com.zy.core.thread.ForkLiftThread;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-
-import java.text.MessageFormat;
-import java.util.*;
-
-@Slf4j
-@SuppressWarnings("all")
-public class ZyForkLiftThread implements ForkLiftThread {
-
-    private ForkLiftSlave slave;
-    private ForkLiftProtocol forkLiftProtocol;
-    private RedisUtil redisUtil;
-    private SiemensS7Net siemensS7Net;
-    private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>();
-
-    public ZyForkLiftThread(ForkLiftSlave slave, RedisUtil redisUtil) {
-        this.slave = slave;
-        this.redisUtil = redisUtil;
-        //鍒濆鍖栫珯鐐�
-        for (ForkLiftSlave.Sta sta : this.slave.getSta()) {
-            ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol();
-            forkLiftStaProtocol.setStaNo(sta.getStaNo());//绔欑偣鍙�
-            forkLiftStaProtocol.setLev(sta.getLev());//绔欑偣妤煎眰
-            String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev());
-            forkLiftStaProtocol.setLocNo(locNo);//绔欑偣搴撲綅鍙�
-            forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//鎻愬崌鏈哄彿
-            forkLiftStaProtocols.add(forkLiftStaProtocol);
-        }
-    }
-
-    @Override
-    public boolean connect() {
-        boolean result = false;
-        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
-        siemensS7Net.setRack(slave.getRack().byteValue());
-        siemensS7Net.setSlot(slave.getSlot().byteValue());
-        OperateResult connect = siemensS7Net.ConnectServer();
-        if(connect.IsSuccess){
-            result = true;
-            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
-            News.info("璐у弶鎻愬崌鏈鸿繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
-        } else {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
-            News.error("璐у弶鎻愬崌鏈鸿繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
-        }
-        // siemensS7Net.ConnectClose();
-        return result;
-    }
-
-    @Override
-    public void close() {
-
-    }
-
-    @Override
-    public void run() {
-        News.info("{}鍙疯揣鍙夋彁鍗囨満绾跨▼鍚姩", slave.getId());
-        this.connect();
-        while (true) {
-            try {
-                read();
-                Thread.sleep(200);
-                execute();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    private void execute() {
-        ForkLiftAction forkLiftAction = SpringUtils.getBean(ForkLiftAction.class);
-        if (forkLiftAction == null) {
-            return;
-        }
-
-        Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId());
-        if (object == null) {
-            return;
-        }
-
-        Integer taskNo = Integer.valueOf(String.valueOf(object));
-        if (taskNo != 0) {
-            //瀛樺湪浠诲姟闇�瑕佹墽琛�
-            boolean result = forkLiftAction.executeWork(slave.getId(), taskNo);
-        }
-    }
-
-    private void read() {
-        try {
-            readStatus();
-
-            //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓簍rue
-            if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP)
-                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN)
-                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) {
-                forkLiftProtocol.setPakMk(true);
-            }
-        } catch (Exception e) {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-        }
-    }
-
-    private void readStatus() {
-        try {
-            //鑾峰彇鎻愬崌鏈烘暟鎹�
-            OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) 16);
-            if (result1.IsSuccess) {
-                if (null == forkLiftProtocol) {
-                    forkLiftProtocol = new ForkLiftProtocol();
-                    forkLiftProtocol.setLiftNo(slave.getId());
-                    forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE);
-
-                    InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend();
-                }
-
-                //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
-                //妯″紡
-                forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0));
-                //PLC浠诲姟鍙�
-                forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2));
-                //浠诲姟鐘舵��
-                forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
-                //浠诲姟妯″紡
-                forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
-                //鍙栬揣鏁版嵁
-                forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8));
-                //鏀捐揣鏁版嵁
-                forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10));
-                //鍑哄叆搴撴ā寮�
-                forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12));
-                //鏁呴殰鐮�
-                forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14));
-
-                //************琛ュ厖鎵╁睍瀛楁*************
-                InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend();
-                forkLiftProtocol.setExtend(forkLiftExtend);
-
-            }else {
-                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇璐у弶鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
-            }
-
-            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB102.0", (short) 8);
-            if (result2.IsSuccess) {
-                for (int i = 0; i < this.slave.getSta().size(); i++) {
-                    ForkLiftSlave.Sta sta = this.slave.getSta().get(i);
-                    if (forkLiftStaProtocols.isEmpty()) {
-                        continue;
-                    }
-
-                    ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i);
-                    boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result2.Content, i * 2, 2);
-                    forkLiftStaProtocol.setHasTray(status1[0]);
-                    forkLiftStaProtocol.setHasCar(status1[1]);
-                }
-            }
-
-            if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) {
-                //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
-                //淇濆瓨鏁版嵁璁板綍
-                DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
-                DeviceDataLog deviceDataLog = new DeviceDataLog();
-                deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content));
-                deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol));
-                deviceDataLog.setType("forkLift");
-                deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo());
-                deviceDataLog.setCreateTime(new Date());
-                deviceDataLogService.insert(deviceDataLog);
-
-                //鏇存柊閲囬泦鏃堕棿
-                forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis());
-            }
-
-            //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
-            BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
-            BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>()
-                    .eq("lift_no", slave.getId()));
-            if (basLift == null) {
-                basLift = new BasLift();
-                //鎻愬崌鏈哄彿
-                basLift.setLiftNo(forkLiftProtocol.getLiftNo());
-                basLift.setStatus(1);
-                basLiftService.insert(basLift);
-            }
-            //浠诲姟鍙�
-            basLift.setWrkNo(forkLiftProtocol.getTaskNo());
-            //淇敼鏃堕棿
-            basLift.setUpdateTime(new Date());
-            //璁惧鐘舵��
-            basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol));
-            if (basLiftService.updateById(basLift)) {
-                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo()));
-            }
-
-        } catch (Exception e) {
-            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栬揣鍙夋彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-        }
-    }
-
-    @Override
-    public ForkLiftProtocol getStatus(boolean clone) {
-        if (this.forkLiftProtocol == null) {
-            return null;
-        }
-        return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol;
-    }
-
-    @Override
-    public List<ForkLiftStaProtocol> getForkLiftStaProtocols() {
-        return this.forkLiftStaProtocols;
-    }
-
-    @Override
-    public ForkLiftProtocol getStatus() {
-        return getStatus(true);
-    }
-
-    @Override
-    public CommandResponse pickAndPut(ForkLiftCommand command) {
-        CommandResponse response = new CommandResponse(false);
-
-        short[] array = new short[4];
-        array[0] = command.getTaskNo();//浠诲姟鍙�
-        array[1] = command.getMode();//浠诲姟妯″紡
-        array[2] = command.getPick();//鍙栬揣鏁版嵁
-        array[3] = command.getPut();//鏀捐揣鏁版嵁
-        OperateResult result = siemensS7Net.Write("DB103.0", array);
-        if (result.IsSuccess) {
-            OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm());
-            if (result2.IsSuccess) {
-                response.setResult(true);
-            }
-        }
-        return response;
-    }
-
-    @Override
-    public CommandResponse shuttleSwitch(ForkLiftCommand command) {
-        CommandResponse response = new CommandResponse(false);
-
-        short[] array = new short[4];
-        array[0] = command.getTaskNo();//浠诲姟鍙�
-        array[1] = command.getMode();//浠诲姟妯″紡
-        array[2] = command.getPick();//鍙栬揣鏁版嵁
-        array[3] = command.getPut();//鏀捐揣鏁版嵁
-        OperateResult result = siemensS7Net.Write("DB103.0", array);
-        if (result.IsSuccess) {
-            OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm());
-            if (result2.IsSuccess) {
-                response.setResult(true);
-            }
-        }
-        return response;
-    }
-
-    @Override
-    public CommandResponse move(ForkLiftCommand command) {
-        CommandResponse response = new CommandResponse(false);
-
-        short[] array = new short[4];
-        array[0] = command.getTaskNo();//浠诲姟鍙�
-        array[1] = command.getMode();//浠诲姟妯″紡
-        array[2] = command.getPick();//鍙栬揣鏁版嵁
-        array[3] = command.getPut();//鏀捐揣鏁版嵁
-        OperateResult result = siemensS7Net.Write("DB103.0", array);
-        if (result.IsSuccess) {
-            OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm());
-            if (result2.IsSuccess) {
-                response.setResult(true);
-            }
-        }
-        return response;
-    }
-
-    @Override
-    public CommandResponse reset() {
-        CommandResponse response = new CommandResponse(false);
-        OperateResult result = siemensS7Net.Write("DB103.10", (short) 1);
-        if (result.IsSuccess) {
-            News.info("璐у弶鎻愬崌鏈虹‘璁ゅ懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}", forkLiftProtocol.getLiftNo());
-            response.setResult(true);
-        }
-        return response;
-    }
-
-    @Override
-    public boolean isIdle() {
-        if (this.forkLiftProtocol.getTaskNo() == null
-                || this.forkLiftProtocol.getProtocolStatus() == null
-                || this.forkLiftProtocol.getModel() == null
-                || this.forkLiftProtocol.getErrorCode() == null
-        ) {
-            return false;
-        }
-
-        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
-                && this.forkLiftProtocol.getWrkNo() == 0
-                && this.forkLiftProtocol.getTaskNo() == 0
-                && this.forkLiftProtocol.getModel() == 2
-                && this.forkLiftProtocol.getErrorCode() == 0
-                ;
-        return res;
-    }
-
-    @Override
-    public boolean isDeviceIdle() {
-        return isDeviceIdle(null);
-    }
-
-    @Override
-    public boolean isDeviceIdle(ExecuteSupport support) {
-        if (null != support) {
-            Boolean judgement = support.judgement();
-            if (judgement != null && !judgement) {
-                return true;
-            }
-        }
-
-        if (this.forkLiftProtocol.getTaskNo() == null
-                || this.forkLiftProtocol.getProtocolStatus() == null
-                || this.forkLiftProtocol.getModel() == null
-                || this.forkLiftProtocol.getErrorCode() == null
-        ) {
-            return false;
-        }
-
-        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
-                && this.forkLiftProtocol.getWrkNo() == 0
-                && this.forkLiftProtocol.getModel() == 2
-                && this.forkLiftProtocol.getErrorCode() == 0
-                ;
-        return res;
-    }
-
-    @Override
-    public boolean setProtocolStatus(ForkLiftProtocolStatusType status) {
-        return false;
-    }
-
-    @Override
-    public boolean setSyncTaskNo(Integer taskNo) {
-        this.forkLiftProtocol.setSyncTaskNo(taskNo);
-        return true;
-    }
-
-    @Override
-    public boolean switchIOMode(ForkLiftIoModeType type) {
-        OperateResult result = siemensS7Net.Write("DB103.12", type.id.shortValue());
-        if (result.IsSuccess) {
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) {
-        return taskNo;
-    }
-
-    @Override
-    public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) {
-        Integer realPick = pick % 1000;
-        Integer realPut = put % 1000;
-
-        List<ForkLiftCommand> commands = new ArrayList<>();
-        ForkLiftCommand command = new ForkLiftCommand();
-        command.setLiftNo(slave.getId());
-        command.setTaskNo(taskNo.shortValue());
-        command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
-        command.setPick(realPick.shortValue());
-        command.setPut(realPut.shortValue());
-        command.setConfirm((short) 1);
-
-        commands.add(command);
-        return commands;
-    }
-
-    @Override
-    public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put) {
-        Integer realPick = pick % 1000;
-        Integer realPut = put % 1000;
-
-        List<ForkLiftCommand> commands = new ArrayList<>();
-        ForkLiftCommand command = new ForkLiftCommand();
-        command.setLiftNo(slave.getId());
-        command.setTaskNo(taskNo.shortValue());
-        command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
-        command.setPick(realPick.shortValue());
-        command.setPut(realPut.shortValue());
-        command.setConfirm((short) 1);
-
-        commands.add(command);
-        return commands;
-    }
-
-    @Override
-    public List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put) {
-        Integer realPick = pick % 1000;
-        Integer realPut = put % 1000;
-
-        List<ForkLiftCommand> commands = new ArrayList<>();
-        ForkLiftCommand command = new ForkLiftCommand();
-        command.setLiftNo(slave.getId());
-        command.setTaskNo(taskNo.shortValue());
-        command.setMode(ForkLiftTaskModeType.MOVE.id.shortValue());
-        command.setPick(realPick.shortValue());
-        command.setPut(realPut.shortValue());
-        command.setConfirm((short) 1);
-
-        commands.add(command);
-        return commands;
-    }
-
-    /**
-     * 鎵╁睍瀛楁
-     */
-    @Data
-    private class InnerForkLiftExtend {
-
-    }
-}
diff --git a/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread2.java b/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread2.java
new file mode 100644
index 0000000..84c661e
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread2.java
@@ -0,0 +1,451 @@
+//package com.zy.core.thread.impl;
+//
+//import HslCommunication.Core.Types.OperateResult;
+//import HslCommunication.Core.Types.OperateResultExOne;
+//import HslCommunication.Profinet.Siemens.SiemensPLCS;
+//import HslCommunication.Profinet.Siemens.SiemensS7Net;
+//import com.alibaba.fastjson.JSON;
+//import com.baomidou.mybatisplus.mapper.EntityWrapper;
+//import com.core.common.DateUtils;
+//import com.core.common.SpringUtils;
+//import com.zy.asrs.entity.BasLift;
+//import com.zy.asrs.entity.DeviceDataLog;
+//import com.zy.asrs.service.BasLiftService;
+//import com.zy.asrs.service.DeviceDataLogService;
+//import com.zy.asrs.utils.Utils;
+//import com.zy.common.ExecuteSupport;
+//import com.zy.common.utils.RedisUtil;
+//import com.zy.core.News;
+//import com.zy.core.action.ForkLiftAction;
+//import com.zy.core.cache.OutputQueue;
+//import com.zy.core.enums.ForkLiftIoModeType;
+//import com.zy.core.enums.ForkLiftProtocolStatusType;
+//import com.zy.core.enums.ForkLiftTaskModeType;
+//import com.zy.core.enums.RedisKeyType;
+//import com.zy.core.model.CommandResponse;
+//import com.zy.core.model.ForkLiftSlave;
+//import com.zy.core.model.command.ForkLiftCommand;
+//import com.zy.core.model.protocol.ForkLiftProtocol;
+//import com.zy.core.model.protocol.ForkLiftStaProtocol;
+//import com.zy.core.thread.ForkLiftThread;
+//import lombok.Data;
+//import lombok.extern.slf4j.Slf4j;
+//
+//import java.text.MessageFormat;
+//import java.util.*;
+//
+//@Slf4j
+//@SuppressWarnings("all")
+//public class ZyForkLiftThread2 implements ForkLiftThread {
+//
+//    private ForkLiftSlave slave;
+//    private ForkLiftProtocol forkLiftProtocol;
+//    private RedisUtil redisUtil;
+//    private SiemensS7Net siemensS7Net;
+//    private List<ForkLiftStaProtocol> forkLiftStaProtocols = new ArrayList<>();
+//
+//    public ZyForkLiftThread2(ForkLiftSlave slave, RedisUtil redisUtil) {
+//        this.slave = slave;
+//        this.redisUtil = redisUtil;
+//        //鍒濆鍖栫珯鐐�
+//        for (ForkLiftSlave.Sta sta : this.slave.getSta()) {
+//            ForkLiftStaProtocol forkLiftStaProtocol = new ForkLiftStaProtocol();
+//            forkLiftStaProtocol.setStaNo(sta.getStaNo());//绔欑偣鍙�
+//            forkLiftStaProtocol.setLev(sta.getLev());//绔欑偣妤煎眰
+//            String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev());
+//            forkLiftStaProtocol.setLocNo(locNo);//绔欑偣搴撲綅鍙�
+//            forkLiftStaProtocol.setLiftNo(sta.getLiftNo());//鎻愬崌鏈哄彿
+//            forkLiftStaProtocols.add(forkLiftStaProtocol);
+//        }
+//    }
+//
+//    @Override
+//    public boolean connect() {
+//        boolean result = false;
+//        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
+//        siemensS7Net.setRack(slave.getRack().byteValue());
+//        siemensS7Net.setSlot(slave.getSlot().byteValue());
+//        OperateResult connect = siemensS7Net.ConnectServer();
+//        if(connect.IsSuccess){
+//            result = true;
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            News.info("璐у弶鎻愬崌鏈鸿繛鎺ユ垚鍔� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+//        } else {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            News.error("璐у弶鎻愬崌鏈鸿繛鎺ュけ璐ワ紒锛侊紒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+//        }
+//        // siemensS7Net.ConnectClose();
+//        return result;
+//    }
+//
+//    @Override
+//    public void close() {
+//
+//    }
+//
+//    @Override
+//    public void run() {
+//        News.info("{}鍙疯揣鍙夋彁鍗囨満绾跨▼鍚姩", slave.getId());
+//        this.connect();
+//        while (true) {
+//            try {
+//                read();
+//                Thread.sleep(200);
+//                execute();
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+//        }
+//    }
+//
+//    private void execute() {
+//        ForkLiftAction forkLiftAction = SpringUtils.getBean(ForkLiftAction.class);
+//        if (forkLiftAction == null) {
+//            return;
+//        }
+//
+//        Object object = redisUtil.get(RedisKeyType.FORK_LIFT_FLAG.key + slave.getId());
+//        if (object == null) {
+//            return;
+//        }
+//
+//        Integer taskNo = Integer.valueOf(String.valueOf(object));
+//        if (taskNo != 0) {
+//            //瀛樺湪浠诲姟闇�瑕佹墽琛�
+//            boolean result = forkLiftAction.executeWork(slave.getId(), taskNo);
+//        }
+//    }
+//
+//    private void read() {
+//        try {
+//            readStatus();
+//
+//            //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓簍rue
+//            if (forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PICK_UP)
+//                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.PUT_DOWN)
+//                    || forkLiftProtocol.getProtocolStatusType().equals(ForkLiftProtocolStatusType.WAITING)) {
+//                forkLiftProtocol.setPakMk(true);
+//            }
+//        } catch (Exception e) {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栨彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//        }
+//    }
+//
+//    private void readStatus() {
+//        try {
+//            //鑾峰彇鎻愬崌鏈烘暟鎹�
+//            OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB101.0", (short) 16);
+//            if (result1.IsSuccess) {
+//                if (null == forkLiftProtocol) {
+//                    forkLiftProtocol = new ForkLiftProtocol();
+//                    forkLiftProtocol.setLiftNo(slave.getId());
+//                    forkLiftProtocol.setProtocolStatus(ForkLiftProtocolStatusType.NONE);
+//
+//                    InnerForkLiftExtend innerForkLiftExtend = new InnerForkLiftExtend();
+//                }
+//
+//                //----------璇诲彇鎻愬崌鏈虹姸鎬�-----------
+//                //妯″紡
+//                forkLiftProtocol.setModel((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 0));
+//                //PLC浠诲姟鍙�
+//                forkLiftProtocol.setWrkNo((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 2));
+//                //浠诲姟鐘舵��
+//                forkLiftProtocol.setProtocolStatus((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 4));
+//                //浠诲姟妯″紡
+//                forkLiftProtocol.setTaskMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 6));
+//                //鍙栬揣鏁版嵁
+//                forkLiftProtocol.setPick((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 8));
+//                //鏀捐揣鏁版嵁
+//                forkLiftProtocol.setPut((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 10));
+//                //鍑哄叆搴撴ā寮�
+//                forkLiftProtocol.setIOMode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 12));
+//                //鏁呴殰鐮�
+//                forkLiftProtocol.setErrorCode((int) siemensS7Net.getByteTransform().TransInt16(result1.Content, 14));
+//
+//                //************琛ュ厖鎵╁睍瀛楁*************
+//                InnerForkLiftExtend forkLiftExtend = (InnerForkLiftExtend) forkLiftProtocol.getExtend();
+//                forkLiftProtocol.setExtend(forkLiftExtend);
+//
+//            }else {
+//                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆憑1}璇诲彇璐у弶鎻愬崌鏈虹姸鎬佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
+//            }
+//
+//            OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB102.0", (short) 8);
+//            if (result2.IsSuccess) {
+//                for (int i = 0; i < this.slave.getSta().size(); i++) {
+//                    ForkLiftSlave.Sta sta = this.slave.getSta().get(i);
+//                    if (forkLiftStaProtocols.isEmpty()) {
+//                        continue;
+//                    }
+//
+//                    ForkLiftStaProtocol forkLiftStaProtocol = forkLiftStaProtocols.get(i);
+//                    boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result2.Content, i * 2, 2);
+//                    forkLiftStaProtocol.setHasTray(status1[0]);
+//                    forkLiftStaProtocol.setHasCar(status1[1]);
+//                }
+//            }
+//
+//            if (System.currentTimeMillis() - forkLiftProtocol.getDeviceDataLog() > 1000 * 5) {
+//                //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+//                //淇濆瓨鏁版嵁璁板綍
+//                DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+//                DeviceDataLog deviceDataLog = new DeviceDataLog();
+//                deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result1.Content));
+//                deviceDataLog.setWcsData(JSON.toJSONString(forkLiftProtocol));
+//                deviceDataLog.setType("forkLift");
+//                deviceDataLog.setDeviceNo(forkLiftProtocol.getLiftNo());
+//                deviceDataLog.setCreateTime(new Date());
+//                deviceDataLogService.insert(deviceDataLog);
+//
+//                //鏇存柊閲囬泦鏃堕棿
+//                forkLiftProtocol.setDeviceDataLog(System.currentTimeMillis());
+//            }
+//
+//            //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
+//            BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class);
+//            BasLift basLift = basLiftService.selectOne(new EntityWrapper<BasLift>()
+//                    .eq("lift_no", slave.getId()));
+//            if (basLift == null) {
+//                basLift = new BasLift();
+//                //鎻愬崌鏈哄彿
+//                basLift.setLiftNo(forkLiftProtocol.getLiftNo());
+//                basLift.setStatus(1);
+//                basLiftService.insert(basLift);
+//            }
+//            //浠诲姟鍙�
+//            basLift.setWrkNo(forkLiftProtocol.getTaskNo());
+//            //淇敼鏃堕棿
+//            basLift.setUpdateTime(new Date());
+//            //璁惧鐘舵��
+//            basLift.setDeviceStatus(JSON.toJSONString(forkLiftProtocol));
+//            if (basLiftService.updateById(basLift)) {
+//                OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), forkLiftProtocol.getLiftNo()));
+//            }
+//
+//        } catch (Exception e) {
+//            OutputQueue.FORKLIFT.offer(MessageFormat.format("銆恵0}銆戣鍙栬揣鍙夋彁鍗囨満鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+//        }
+//    }
+//
+//    @Override
+//    public ForkLiftProtocol getStatus(boolean clone) {
+//        if (this.forkLiftProtocol == null) {
+//            return null;
+//        }
+//        return clone ? this.forkLiftProtocol.clone() : this.forkLiftProtocol;
+//    }
+//
+//    @Override
+//    public List<ForkLiftStaProtocol> getForkLiftStaProtocols() {
+//        return this.forkLiftStaProtocols;
+//    }
+//
+//    @Override
+//    public ForkLiftProtocol getStatus() {
+//        return getStatus(true);
+//    }
+//
+//    @Override
+//    public CommandResponse pickAndPut(ForkLiftCommand command) {
+//        CommandResponse response = new CommandResponse(false);
+//
+//        short[] array = new short[4];
+//        array[0] = command.getTaskNo();//浠诲姟鍙�
+//        array[1] = command.getMode();//浠诲姟妯″紡
+//        array[2] = command.getPick();//鍙栬揣鏁版嵁
+//        array[3] = command.getPut();//鏀捐揣鏁版嵁
+//        OperateResult result = siemensS7Net.Write("DB103.0", array);
+//        if (result.IsSuccess) {
+//            OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm());
+//            if (result2.IsSuccess) {
+//                response.setResult(true);
+//            }
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public CommandResponse shuttleSwitch(ForkLiftCommand command) {
+//        CommandResponse response = new CommandResponse(false);
+//
+//        short[] array = new short[4];
+//        array[0] = command.getTaskNo();//浠诲姟鍙�
+//        array[1] = command.getMode();//浠诲姟妯″紡
+//        array[2] = command.getPick();//鍙栬揣鏁版嵁
+//        array[3] = command.getPut();//鏀捐揣鏁版嵁
+//        OperateResult result = siemensS7Net.Write("DB103.0", array);
+//        if (result.IsSuccess) {
+//            OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm());
+//            if (result2.IsSuccess) {
+//                response.setResult(true);
+//            }
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public CommandResponse move(ForkLiftCommand command) {
+//        CommandResponse response = new CommandResponse(false);
+//
+//        short[] array = new short[4];
+//        array[0] = command.getTaskNo();//浠诲姟鍙�
+//        array[1] = command.getMode();//浠诲姟妯″紡
+//        array[2] = command.getPick();//鍙栬揣鏁版嵁
+//        array[3] = command.getPut();//鏀捐揣鏁版嵁
+//        OperateResult result = siemensS7Net.Write("DB103.0", array);
+//        if (result.IsSuccess) {
+//            OperateResult result2 = siemensS7Net.Write("DB103.8", command.getConfirm());
+//            if (result2.IsSuccess) {
+//                response.setResult(true);
+//            }
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public CommandResponse reset() {
+//        CommandResponse response = new CommandResponse(false);
+//        OperateResult result = siemensS7Net.Write("DB103.10", (short) 1);
+//        if (result.IsSuccess) {
+//            News.info("璐у弶鎻愬崌鏈虹‘璁ゅ懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}", forkLiftProtocol.getLiftNo());
+//            response.setResult(true);
+//        }
+//        return response;
+//    }
+//
+//    @Override
+//    public boolean isIdle() {
+//        if (this.forkLiftProtocol.getTaskNo() == null
+//                || this.forkLiftProtocol.getProtocolStatus() == null
+//                || this.forkLiftProtocol.getModel() == null
+//                || this.forkLiftProtocol.getErrorCode() == null
+//        ) {
+//            return false;
+//        }
+//
+//        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
+//                && this.forkLiftProtocol.getWrkNo() == 0
+//                && this.forkLiftProtocol.getTaskNo() == 0
+//                && this.forkLiftProtocol.getModel() == 2
+//                && this.forkLiftProtocol.getErrorCode() == 0
+//                ;
+//        return res;
+//    }
+//
+//    @Override
+//    public boolean isDeviceIdle() {
+//        return isDeviceIdle(null);
+//    }
+//
+//    @Override
+//    public boolean isDeviceIdle(ExecuteSupport support) {
+//        if (null != support) {
+//            Boolean judgement = support.judgement();
+//            if (judgement != null && !judgement) {
+//                return true;
+//            }
+//        }
+//
+//        if (this.forkLiftProtocol.getTaskNo() == null
+//                || this.forkLiftProtocol.getProtocolStatus() == null
+//                || this.forkLiftProtocol.getModel() == null
+//                || this.forkLiftProtocol.getErrorCode() == null
+//        ) {
+//            return false;
+//        }
+//
+//        boolean res = this.forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.IDLE.id
+//                && this.forkLiftProtocol.getWrkNo() == 0
+//                && this.forkLiftProtocol.getModel() == 2
+//                && this.forkLiftProtocol.getErrorCode() == 0
+//                ;
+//        return res;
+//    }
+//
+//    @Override
+//    public boolean setProtocolStatus(ForkLiftProtocolStatusType status) {
+//        return false;
+//    }
+//
+//    @Override
+//    public boolean setSyncTaskNo(Integer taskNo) {
+//        this.forkLiftProtocol.setSyncTaskNo(taskNo);
+//        return true;
+//    }
+//
+//    @Override
+//    public boolean switchIOMode(ForkLiftIoModeType type) {
+//        OperateResult result = siemensS7Net.Write("DB103.12", type.id.shortValue());
+//        if (result.IsSuccess) {
+//            return true;
+//        }
+//        return false;
+//    }
+//
+//    @Override
+//    public int generateDeviceTaskNo(int taskNo, ForkLiftTaskModeType type) {
+//        return taskNo;
+//    }
+//
+//    @Override
+//    public List<ForkLiftCommand> getPickAndPutCommand(Integer taskNo, Integer pick, Integer put) {
+//        Integer realPick = pick % 1000;
+//        Integer realPut = put % 1000;
+//
+//        List<ForkLiftCommand> commands = new ArrayList<>();
+//        ForkLiftCommand command = new ForkLiftCommand();
+//        command.setLiftNo(slave.getId());
+//        command.setTaskNo(taskNo.shortValue());
+//        command.setMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
+//        command.setPick(realPick.shortValue());
+//        command.setPut(realPut.shortValue());
+//        command.setConfirm((short) 1);
+//
+//        commands.add(command);
+//        return commands;
+//    }
+//
+//    @Override
+//    public List<ForkLiftCommand> getShuttleSwitchCommand(Integer taskNo, Integer pick, Integer put) {
+//        Integer realPick = pick % 1000;
+//        Integer realPut = put % 1000;
+//
+//        List<ForkLiftCommand> commands = new ArrayList<>();
+//        ForkLiftCommand command = new ForkLiftCommand();
+//        command.setLiftNo(slave.getId());
+//        command.setTaskNo(taskNo.shortValue());
+//        command.setMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
+//        command.setPick(realPick.shortValue());
+//        command.setPut(realPut.shortValue());
+//        command.setConfirm((short) 1);
+//
+//        commands.add(command);
+//        return commands;
+//    }
+//
+//    @Override
+//    public List<ForkLiftCommand> getMoveCommand(Integer taskNo, Integer pick, Integer put) {
+//        Integer realPick = pick % 1000;
+//        Integer realPut = put % 1000;
+//
+//        List<ForkLiftCommand> commands = new ArrayList<>();
+//        ForkLiftCommand command = new ForkLiftCommand();
+//        command.setLiftNo(slave.getId());
+//        command.setTaskNo(taskNo.shortValue());
+//        command.setMode(ForkLiftTaskModeType.MOVE.id.shortValue());
+//        command.setPick(realPick.shortValue());
+//        command.setPut(realPut.shortValue());
+//        command.setConfirm((short) 1);
+//
+//        commands.add(command);
+//        return commands;
+//    }
+//
+//    /**
+//     * 鎵╁睍瀛楁
+//     */
+//    @Data
+//    private class InnerForkLiftExtend {
+//
+//    }
+//}
diff --git a/src/main/java/com/zy/core/utils/DeviceMsgUtils.java b/src/main/java/com/zy/core/utils/DeviceMsgUtils.java
index c6c26fc..7a4f8b3 100644
--- a/src/main/java/com/zy/core/utils/DeviceMsgUtils.java
+++ b/src/main/java/com/zy/core/utils/DeviceMsgUtils.java
@@ -84,6 +84,7 @@
 
     public String sendDeviceCommand(SlaveType deviceType, Integer deviceId, DeviceCommandMsgModel command) {
         String key = parseDeviceCommandMsgKey(deviceType, deviceId) + System.currentTimeMillis();
+        command.setResultKey(key);
         redisUtil.set(key, command, 60 * 60 * 24);
         return key;
     }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 4b685fd..c20a4eb 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -17,7 +17,7 @@
   mvc:
     static-path-pattern: /**
   redis:
-    host: 127.0.0.1
+    host: 192.168.4.77
     port: 6379
     database: 0
 #    password: 123456
@@ -46,16 +46,16 @@
   # 璇诲彇鏁版嵁鍚庤嚜鍔ㄥ垹闄�
   destroyAfterReading: true
 
-# 涓嬩綅鏈洪厤缃�
-wcs-slave:
-  # 鍥涘悜绌挎杞�1
-  shuttle[0]:
-    id: 1
-    ip: 10.10.20.11
-    port: 8888
-    rack: 0
-    slot: 0
-    threadImpl: NyShuttleThread
+## 涓嬩綅鏈洪厤缃�
+#wcs-slave:
+#  # 鍥涘悜绌挎杞�1
+#  shuttle[0]:
+#    id: 1
+#    ip: 10.10.20.11
+#    port: 8888
+#    rack: 0
+#    slot: 0
+#    threadImpl: NyShuttleThread
 #  # 鍥涘悜绌挎杞�2
 #  shuttle[1]:
 #    id: 2
diff --git a/src/main/resources/mapper/BasLiftMapper.xml b/src/main/resources/mapper/BasLiftMapper.xml
index 484f672..3975d12 100644
--- a/src/main/resources/mapper/BasLiftMapper.xml
+++ b/src/main/resources/mapper/BasLiftMapper.xml
@@ -11,21 +11,7 @@
         <result column="memo" property="memo" />
         <result column="pak_mk" property="pakMk" />
         <result column="point" property="point" />
-        <result column="model" property="model" />
-        <result column="busy" property="busy" />
-        <result column="front_overrun" property="frontOverrun" />
-        <result column="back_overrun" property="backOverrun" />
-        <result column="left_overrun" property="leftOverrun" />
-        <result column="right_overrun" property="rightOverrun" />
-        <result column="over_height" property="overHeight" />
-        <result column="over_weight" property="overWeight" />
-        <result column="has_tray" property="hasTray" />
-        <result column="has_car" property="hasCar" />
-        <result column="device_error" property="deviceError" />
-        <result column="task_address" property="taskAddress" />
-        <result column="dist_address" property="distAddress" />
-        <result column="complete_task_no" property="completeTaskNo" />
-        <result column="lev" property="lev" />
+        <result column="station_list" property="stationList" />
 
     </resultMap>
 
diff --git a/src/main/webapp/static/js/basLift/basLift.js b/src/main/webapp/static/js/basLift/basLift.js
index cdef2d8..80ae9a6 100644
--- a/src/main/webapp/static/js/basLift/basLift.js
+++ b/src/main/webapp/static/js/basLift/basLift.js
@@ -25,31 +25,12 @@
             ,{field: 'liftNo', align: 'center',title: '鎻愬崌鏈哄彿'}
             ,{field: 'status', align: 'center',title: '褰撳墠浠诲姟鐘舵��'}
             ,{field: 'wrkNo', align: 'center',title: '浠诲姟鍙�'}
+            ,{field: 'point', align: 'center',title: '鎻愬崌鏈哄潗鏍�'}
+            ,{field: 'stationList', align: 'center',title: '绔欑偣鍒楄〃'}
             // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
             // ,{field: 'updateBy$', align: 'center',title: '淇敼浜哄憳'}
             ,{field: 'memo', align: 'center',title: '澶囨敞'}
-            ,{field: 'pakMk$', align: 'center',title: '浣滀笟鏍囪'}
-            ,{field: 'liftLock$', align: 'center',title: '鎻愬崌鏈洪攣瀹�'}
-            ,{field: 'positionArrivalFeedback', align: 'center',title: '浣嶇疆鍒拌揪鍙嶉'}
-            ,{field: 'ready$', align: 'center',title: '鍑嗗灏辩华'}
-            ,{field: 'running', align: 'center',title: '杩愯涓�'}
-            ,{field: 'mode$', align: 'center',title: '鑱旀満/鍗曟満'}
-            // ,{field: 'lineFrontHasStock', align: 'center',title: '杈撻�佺嚎鍓嶇鍏夌數鏈夎揣'}
-            // ,{field: 'forwardRotationFeedback', align: 'center',title: '杈撻�佺嚎姝h浆鍙嶉'}
-            // ,{field: 'reverseFeedback', align: 'center',title: '杈撻�佺嚎鍙嶈浆鍙嶉'}
-            // ,{field: 'motorOverload', align: 'center',title: '杈撻�佺嚎鐢垫満杩囪浇'}
-            // ,{field: 'lineEndHasStock', align: 'center',title: '杈撻�佺嚎鏈鍏夌數鏈夎揣'}
-            // ,{field: 'inConveyLineCardTrayAlarm', align: 'center',title: '杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�'}
-            // ,{field: 'outConveyLineCardTrayAlarm', align: 'center',title: '鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�'}
-            // ,{field: 'platPositionDeviationAlarm', align: 'center',title: '骞冲彴浣嶇疆鍋忓樊鎶ヨ'}
-            // ,{field: 'platTorqueDeviationAlarm', align: 'center',title: '骞冲彴鎵煩鍋忓樊鎶ヨ'}
-            // ,{field: 'platShuttleCheck', align: 'center',title: '骞冲彴鍥涘悜杞︽娴�'}
-            ,{field: 'notReady$', align: 'center',title: '鏈氨缁姸鎬�'}
-            // ,{field: 'servoError1', align: 'center',title: '浼烘湇1閿欒'}
-            // ,{field: 'servoError2', align: 'center',title: '浼烘湇2閿欒'}
-            // ,{field: 'servoError3', align: 'center',title: '浼烘湇3閿欒'}
-            // ,{field: 'servoError4', align: 'center',title: '浼烘湇4閿欒'}
-            // ,{field: 'liftActualSpeed', align: 'center',title: '鎻愬崌鏈哄疄闄呴�熷害鍙嶉'}
+            // ,{field: 'pakMk', align: 'center',title: '浣滀笟鏍囪'}
 
             ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
         ]],
diff --git a/src/main/webapp/views/admin/basLift/basLift.html b/src/main/webapp/views/admin/basLift/basLift.html
index 2d2dd95..8028c2f 100644
--- a/src/main/webapp/views/admin/basLift/basLift.html
+++ b/src/main/webapp/views/admin/basLift/basLift.html
@@ -79,174 +79,23 @@
                     </div>
                 </div>
                 <div class="layui-form-item">
-                    <label class="layui-form-label">褰撳墠浠诲姟鐘舵��: </label>
+                    <label class="layui-form-label">鎻愬崌鏈哄潗鏍�: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="status" placeholder="璇疯緭鍏ュ綋鍓嶄换鍔$姸鎬�">
+                        <input class="layui-input" name="point" placeholder="璇疯緭鍏ユ彁鍗囨満鍧愭爣">
                     </div>
                 </div>
                 <div class="layui-form-item">
-                    <label class="layui-form-label">浠诲姟鍙�: </label>
+                    <label class="layui-form-label">绔欑偣鍒楄〃: </label>
                     <div class="layui-input-block">
-                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ヤ换鍔″彿">
+                        <input class="layui-input" name="stationList" placeholder="璇疯緭鍏ョ珯鐐瑰垪琛�">
                     </div>
                 </div>
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">淇敼鏃堕棿: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="updateTime" id="updateTime$" placeholder="璇疯緭鍏ヤ慨鏀规椂闂�">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">淇敼浜哄憳: </label>-->
-<!--                    <div class="layui-input-block cool-auto-complete">-->
-<!--                        <input class="layui-input" name="updateBy" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">-->
-<!--                        <input id="updateBy$" name="updateBy$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>-->
-<!--                        <div class="cool-auto-complete-window">-->
-<!--                            <input class="cool-auto-complete-window-input" data-key="userQueryByupdateBy" onkeyup="autoLoad(this.getAttribute('data-key'))">-->
-<!--                            <select class="cool-auto-complete-window-select" data-key="userQueryByupdateBySelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">-->
-<!--                            </select>-->
-<!--                        </div>-->
-<!--                    </div>-->
-<!--                </div>-->
                 <div class="layui-form-item">
                     <label class="layui-form-label">澶囨敞: </label>
                     <div class="layui-input-block">
                         <input class="layui-input" name="memo" placeholder="璇疯緭鍏ュ娉�">
                     </div>
                 </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">浣滀笟鏍囪: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="pakMk" placeholder="璇疯緭鍏ヤ綔涓氭爣璁�">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">鎻愬崌鏈洪攣瀹�: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="liftLock" placeholder="璇疯緭鍏ユ彁鍗囨満閿佸畾">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">浣嶇疆鍒拌揪鍙嶉: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="positionArrivalFeedback" placeholder="璇疯緭鍏ヤ綅缃埌杈惧弽棣�">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">鍑嗗灏辩华: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="ready" placeholder="璇疯緭鍏ュ噯澶囧氨缁�">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">杩愯涓�: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="running" placeholder="璇疯緭鍏ヨ繍琛屼腑">
-                    </div>
-                </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">鑱旀満/鍗曟満: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="mode" placeholder="璇疯緭鍏ヨ仈鏈�/鍗曟満">
-                    </div>
-                </div>
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">杈撻�佺嚎鍓嶇鍏夌數鏈夎揣: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="lineFrontHasStock" placeholder="璇疯緭鍏ヨ緭閫佺嚎鍓嶇鍏夌數鏈夎揣">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">杈撻�佺嚎姝h浆鍙嶉: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="forwardRotationFeedback" placeholder="璇疯緭鍏ヨ緭閫佺嚎姝h浆鍙嶉">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">杈撻�佺嚎鍙嶈浆鍙嶉: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="reverseFeedback" placeholder="璇疯緭鍏ヨ緭閫佺嚎鍙嶈浆鍙嶉">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">杈撻�佺嚎鐢垫満杩囪浇: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="motorOverload" placeholder="璇疯緭鍏ヨ緭閫佺嚎鐢垫満杩囪浇">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">杈撻�佺嚎鏈鍏夌數鏈夎揣: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="lineEndHasStock" placeholder="璇疯緭鍏ヨ緭閫佺嚎鏈鍏夌數鏈夎揣">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="inConveyLineCardTrayAlarm" placeholder="璇疯緭鍏ヨ繘杈撻�佺嚎鍗℃墭鐩樻姤璀�">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="outConveyLineCardTrayAlarm" placeholder="璇疯緭鍏ュ嚭杈撻�佺嚎鍗℃墭鐩樻姤璀�">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">骞冲彴浣嶇疆鍋忓樊鎶ヨ: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="platPositionDeviationAlarm" placeholder="璇疯緭鍏ュ钩鍙颁綅缃亸宸姤璀�">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">骞冲彴鎵煩鍋忓樊鎶ヨ: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="platTorqueDeviationAlarm" placeholder="璇疯緭鍏ュ钩鍙版壄鐭╁亸宸姤璀�">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">骞冲彴鍥涘悜杞︽娴�: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="platShuttleCheck" placeholder="璇疯緭鍏ュ钩鍙板洓鍚戣溅妫�娴�">-->
-<!--                    </div>-->
-<!--                </div>-->
-                <div class="layui-form-item">
-                    <label class="layui-form-label">鏈氨缁姸鎬�: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="notReady" placeholder="璇疯緭鍏ユ湭灏辩华鐘舵��">
-                    </div>
-                </div>
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">浼烘湇1閿欒: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="servoError1" placeholder="璇疯緭鍏ヤ己鏈�1閿欒">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">浼烘湇2閿欒: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="servoError2" placeholder="璇疯緭鍏ヤ己鏈�2閿欒">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">浼烘湇3閿欒: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="servoError3" placeholder="璇疯緭鍏ヤ己鏈�3閿欒">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">浼烘湇4閿欒: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="servoError4" placeholder="璇疯緭鍏ヤ己鏈�4閿欒">-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--                <div class="layui-form-item">-->
-<!--                    <label class="layui-form-label">鎻愬崌鏈哄疄闄呴�熷害鍙嶉: </label>-->
-<!--                    <div class="layui-input-block">-->
-<!--                        <input class="layui-input" name="liftActualSpeed" placeholder="璇疯緭鍏ユ彁鍗囨満瀹為檯閫熷害鍙嶉">-->
-<!--                    </div>-->
-<!--                </div>-->
-
              </div>
         </div>
         <hr class="layui-bg-gray">

--
Gitblit v1.9.1