From 9372f61dcb41eeb2e09871caefce0f764d6ab021 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期五, 21 六月 2024 15:17:04 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java                 |   30 +++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java                |    8 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java            |    4 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/DevpThread.java                     |    2 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java           |   21 ++
 zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx                             |  121 ++++++-----
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java                |   16 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java            |    2 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SuopaiSiemensDevpThread.java   |   41 ++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java    |   58 ++++-
 zy-asrs-flow/src/pages/device/lift/index.jsx                                             |   10 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java                        |    1 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |  116 ++---------
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/SwitchWorkModeParam.java     |   17 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/enums/WorkModeType.java              |   30 +++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SiemensDevpThread.java         |   39 +++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java            |   28 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/dto/WorkModeTypeDto.java             |   20 ++
 18 files changed, 394 insertions(+), 170 deletions(-)

diff --git a/zy-asrs-flow/src/pages/device/lift/index.jsx b/zy-asrs-flow/src/pages/device/lift/index.jsx
index 9d046e4..ebe0a9c 100644
--- a/zy-asrs-flow/src/pages/device/lift/index.jsx
+++ b/zy-asrs-flow/src/pages/device/lift/index.jsx
@@ -201,6 +201,16 @@
                         label: '褰撳墠灞�',
                         children: item.lev,
                     },
+                    {
+                        key: '11',
+                        label: '宸插畬鎴愪换鍔″彿',
+                        children: item.completeTaskNo,
+                    },
+                    {
+                        key: '12',
+                        label: '鎵╁睍',
+                        children: JSON.stringify(item.extend),
+                    },
                 ];
                 return <div key={item.id} style={{ width: '45%' }}>
                     <div style={{ marginBottom: '10px' }}>
diff --git a/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx b/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx
index 1deb1b9..232747e 100644
--- a/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx
+++ b/zy-asrs-flow/src/pages/deviceConfig/basConveyorSta/index.jsx
@@ -143,60 +143,60 @@
                 setSearchParam={setSearchParam}
             />,
         },
-        {
-            title: '淇敼浜哄憳',
-            dataIndex: 'updateBy$',
-            valueType: 'text',
-            hidden: false,
-            width: 140,
-            filterDropdown: (props) => <LinkFilter
-                name='updateBy'
-                major='user'
-                {...props}
-                actionRef={actionRef}
-                setSearchParam={setSearchParam}
-            />,
-        },
-        {
-            title: '鍒涘缓浜哄憳',
-            dataIndex: 'createBy$',
-            valueType: 'text',
-            hidden: false,
-            width: 140,
-            filterDropdown: (props) => <LinkFilter
-                name='createBy'
-                major='user'
-                {...props}
-                actionRef={actionRef}
-                setSearchParam={setSearchParam}
-            />,
-        },
-        {
-            title: '鍒涘缓鏃堕棿',
-            dataIndex: 'createTime$',
-            valueType: 'text',
-            hidden: false,
-            width: 140,
-            filterDropdown: (props) => <DatetimeRangeFilter
-                name='createTime'
-                {...props}
-                actionRef={actionRef}
-                setSearchParam={setSearchParam}
-            />,
-        },
-        {
-            title: '淇敼鏃堕棿',
-            dataIndex: 'updateTime$',
-            valueType: 'text',
-            hidden: false,
-            width: 140,
-            filterDropdown: (props) => <DatetimeRangeFilter
-                name='updateTime'
-                {...props}
-                actionRef={actionRef}
-                setSearchParam={setSearchParam}
-            />,
-        },
+        // {
+        //     title: '淇敼浜哄憳',
+        //     dataIndex: 'updateBy$',
+        //     valueType: 'text',
+        //     hidden: false,
+        //     width: 140,
+        //     filterDropdown: (props) => <LinkFilter
+        //         name='updateBy'
+        //         major='user'
+        //         {...props}
+        //         actionRef={actionRef}
+        //         setSearchParam={setSearchParam}
+        //     />,
+        // },
+        // {
+        //     title: '鍒涘缓浜哄憳',
+        //     dataIndex: 'createBy$',
+        //     valueType: 'text',
+        //     hidden: false,
+        //     width: 140,
+        //     filterDropdown: (props) => <LinkFilter
+        //         name='createBy'
+        //         major='user'
+        //         {...props}
+        //         actionRef={actionRef}
+        //         setSearchParam={setSearchParam}
+        //     />,
+        // },
+        // {
+        //     title: '鍒涘缓鏃堕棿',
+        //     dataIndex: 'createTime$',
+        //     valueType: 'text',
+        //     hidden: false,
+        //     width: 140,
+        //     filterDropdown: (props) => <DatetimeRangeFilter
+        //         name='createTime'
+        //         {...props}
+        //         actionRef={actionRef}
+        //         setSearchParam={setSearchParam}
+        //     />,
+        // },
+        // {
+        //     title: '淇敼鏃堕棿',
+        //     dataIndex: 'updateTime$',
+        //     valueType: 'text',
+        //     hidden: false,
+        //     width: 140,
+        //     filterDropdown: (props) => <DatetimeRangeFilter
+        //         name='updateTime'
+        //         {...props}
+        //         actionRef={actionRef}
+        //         setSearchParam={setSearchParam}
+        //     />,
+        // },
         {
             title: '澶囨敞',
             dataIndex: 'memo',
@@ -381,6 +381,19 @@
                 setSearchParam={setSearchParam}
             />,
         },
+        {
+            title: '宸ヤ綔妯″紡',
+            dataIndex: 'workMode$',
+            valueType: 'text',
+            hidden: false,
+            width: 140,
+            filterDropdown: (props) => <TextFilter
+                name='workMode'
+                {...props}
+                actionRef={actionRef}
+                setSearchParam={setSearchParam}
+            />,
+        },
 
         {
             title: '鎿嶄綔',
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
index 940edd9..892c241 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
@@ -6,10 +6,7 @@
 import com.zy.asrs.framework.common.R;
 import com.zy.asrs.framework.common.SnowflakeIdWorker;
 import com.zy.asrs.wcs.core.domain.dto.BasLiftStaDto;
-import com.zy.asrs.wcs.core.domain.param.CreateInTaskParam;
-import com.zy.asrs.wcs.core.domain.param.CreateManualTakeTaskParam;
-import com.zy.asrs.wcs.core.domain.param.CreateMoveTaskParam;
-import com.zy.asrs.wcs.core.domain.param.CreateOutTaskParam;
+import com.zy.asrs.wcs.core.domain.param.*;
 import com.zy.asrs.wcs.core.entity.*;
 import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
 import com.zy.asrs.wcs.core.model.enums.TaskCtgType;
@@ -21,6 +18,7 @@
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
 import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
 import com.zy.asrs.wcs.rcs.service.DeviceService;
+import com.zy.asrs.wcs.rcs.thread.DevpThread;
 import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
 import com.zy.asrs.wcs.system.controller.BaseController;
 import com.zy.asrs.wcs.system.entity.Dict;
@@ -58,6 +56,8 @@
     private BasConveyorPathService basConveyorPathService;
     @Autowired
     private BasLiftService basLiftService;
+    @Autowired
+    private BasConveyorService basConveyorService;
 
     //鐢熸垚鍏ュ簱浠诲姟
     @PostMapping("/createInTask")
@@ -364,4 +364,24 @@
         return R.ok();
     }
 
+    //鍒囨崲宸ヤ綔妯″紡
+    @PostMapping("/switchWorkMode")
+    public R switchWorkMode(@RequestBody SwitchWorkModeParam param) {
+        BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getConveyorNo, param.getConveyorNo()));
+        if(basConveyor == null) {
+            return R.error("杈撻�佺嚎涓嶅瓨鍦�");
+        }
+
+        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue());
+        if(devpThread == null) {
+            return R.error("杈撻�佺嚎绾跨▼涓嶅瓨鍦�");
+        }
+
+        boolean result = devpThread.switchWorkMode(param.getSiteId(), param.getWorkMode());
+        if (!result) {
+            return R.error("妯″紡鍒囨崲澶辫触");
+        }
+        return R.ok();
+    }
+
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/SwitchWorkModeParam.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/SwitchWorkModeParam.java
new file mode 100644
index 0000000..abb39d3
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/SwitchWorkModeParam.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.wcs.core.domain.param;
+
+import lombok.Data;
+
+@Data
+public class SwitchWorkModeParam {
+
+    //宸ヤ綔妯″紡
+    private Integer workMode;
+
+    //杈撻�佺嚎鍙�
+    private Integer conveyorNo;
+
+    //绔欑偣
+    private Integer siteId;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java
index 2a41008..323e203 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/BasConveyorSta.java
@@ -4,6 +4,7 @@
 import java.util.Date;
 
 import com.zy.asrs.wcs.core.service.BasConveyorService;
+import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
 import com.zy.asrs.wcs.system.entity.Host;
 import com.zy.asrs.wcs.system.entity.User;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -171,6 +172,12 @@
     @ApiModelProperty(value= "宸ヤ綔鍙�")
     private Integer taskNo;
 
+    /**
+     * 宸ヤ綔妯″紡
+     */
+    @ApiModelProperty(value= "宸ヤ綔妯″紡")
+    private Integer workMode;
+
     public BasConveyorSta() {}
 
     public BasConveyorSta(Long conveyorId,Integer conveyorNo,Long updateBy,Long createBy,Date createTime,Date updateTime,String memo,Integer deleted,Long hostId,Integer siteNo,String inEnable,String outEnable,String autoing,String loading,String canining,String canouting,Integer locType1,Integer locType2,Integer locType3,String locNo,String qrCodeValue) {
@@ -325,5 +332,14 @@
         }
     }
 
+    public String getWorkMode$() {
+        if (null == this.workMode){ return null; }
+        WorkModeType workModeType = WorkModeType.get(this.workMode.shortValue());
+        if(!Cools.isEmpty(workModeType)){
+            return workModeType.desc;
+        }
+        return null;
+    }
+
 
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
index 95c20f8..2145544 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
@@ -217,7 +217,6 @@
      * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
      */
     @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
-    @TableLogic
     private Integer deleted;
 
     /**
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index 5db9b04..5791605 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -1176,6 +1176,14 @@
                     MotionCtgType.SHUTTLE_MOVE_TO_LIFT
             ));
 
+            // 鍚戞彁鍗囨満鍙戦�佸皬杞﹀凡鍒颁綅淇″彿
+            motionList.addAll(kernelService.liftShuttleArrival(
+                    null
+                    , MotionDto.build((dto -> {
+                        dto.setLiftNo(liftDevice.getId().intValue());
+                    }))
+            ));
+
             // 瑙i攣鎻愬崌鏈�
             motionList.addAll(kernelService.liftUnlock(
                     null
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
index cac9b7d..8cad0eb 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -182,6 +182,36 @@
         return motionList;
     }
 
+    /**
+     * 鎻愬崌鏈�-灏忚溅宸插埌浣�
+     */
+    public List<Motion> liftShuttleArrival(MotionDto origin, MotionDto target) {
+        List<Motion> motionList = new ArrayList<>();
+
+        motionList.add(Motion.build(motion -> {
+            motion.setDeviceCtg(DeviceCtgType.LIFT.val());
+            motion.setDevice(String.valueOf(target.getLiftNo()));
+            motion.setMotionCtg(MotionCtgType.LIFT_SHUTTLE_ARRIVAL.val());
+        }));
+
+        return motionList;
+    }
+
+    /**
+     * 鎻愬崌鏈�-灏忚溅宸查┒绂�
+     */
+    public List<Motion> liftShuttleLeave(MotionDto origin, MotionDto target) {
+        List<Motion> motionList = new ArrayList<>();
+
+        motionList.add(Motion.build(motion -> {
+            motion.setDeviceCtg(DeviceCtgType.LIFT.val());
+            motion.setDevice(String.valueOf(target.getLiftNo()));
+            motion.setMotionCtg(MotionCtgType.LIFT_SHUTTLE_LEAVE.val());
+        }));
+
+        return motionList;
+    }
+
     // shuttle -----------------------------------------------------------------------------
 
     /**
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
index 5e3a669..371cf83 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -52,11 +52,6 @@
             return false;
         }
 
-        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
-        if (!liftThread.isIdle()) {
-            return false;
-        }
-
         if (motionService.count(new LambdaQueryWrapper<Motion>()
                 .eq(Motion::getDeviceCtg, DeviceCtgType.LIFT.val())
                 .eq(Motion::getDevice, motion.getDevice())
@@ -83,6 +78,11 @@
         List<LiftCommand> command = new ArrayList<>();
         switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
             case LIFT_MOVE:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
                 // 濡傛灉宸茬粡鍦ㄧ洰鏍囧眰锛岄偅杈瑰眰杩囨护
                 if (liftProtocol.getLev().equals(Integer.valueOf(motion.getTarget()))) {
                     liftThread.setSyncTaskNo(motion.getTaskNo());
@@ -93,6 +93,10 @@
                 list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_WITH_GOODS:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
 //                if (liftProtocol.getHasTray()) {
 //                    return false;
 //                }
@@ -101,6 +105,11 @@
                 list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_WITH_SHUTTLE:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
                 if (!liftProtocol.getHasCar()) {
                     return false;
                 }
@@ -109,30 +118,46 @@
                 list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_WITH_GOODS_AND_SHUTTLE:
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle()) {
+                    return false;
+                }
+
                 return false;
-//                if (!liftProtocol.getPlatShuttleCheck()) {
-//                    return false;
-//                }
-//
-//                command = liftThread.getLiftUpDownCommand(Integer.parseInt(motion.getTarget()));
-//                command.setLiftNo(deviceNo.shortValue());
-//                command.setTaskNo(motion.getWrkNo().shortValue());
-//                return liftThread.assignWork(command);
             case LIFT_TRANSPORT_TO_CONVEYOR:
                 return false;
             case LIFT_LOCK:
                 //閿佸畾鎻愬崌鏈�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle(MotionCtgType.LIFT_LOCK)) {
+                    return false;
+                }
+
                 command = liftThread.getLockCommand(motion.getTaskNo(), true);//鑾峰彇鎻愬崌鏈洪攣瀹氬懡浠�
                 list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             case LIFT_UNLOCK:
-                //閿佸畾鎻愬崌鏈�
+                //瑙i攣鎻愬崌鏈�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle(MotionCtgType.LIFT_UNLOCK)) {
+                    return false;
+                }
+
                 command = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В瀹氬懡浠�
+                list.addAll(command);
+                return liftAction.assignWork(liftThread.getDevice(), assignCommand);
+            case LIFT_SHUTTLE_ARRIVAL:
+                //鎻愬崌鏈�-灏忚溅宸插埌浣�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔�
+                if (!liftThread.isIdle(MotionCtgType.LIFT_SHUTTLE_ARRIVAL)) {
+                    return false;
+                }
+
+                command = liftThread.getShuttleSignalCommand(motion.getTaskNo(), true);//鑾峰彇灏忚溅宸插埌浣嶅懡浠�
                 list.addAll(command);
                 return liftAction.assignWork(liftThread.getDevice(), assignCommand);
             default:
                 break;
-
         }
 
         return Boolean.TRUE;
@@ -223,6 +248,9 @@
                     return false;
                 }
                 break;
+            case LIFT_SHUTTLE_ARRIVAL:
+
+                break;
             default:
                 return false;
         }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 230f15c..9d49fb4 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -192,7 +192,7 @@
                 if (!liftThread.isLock(new ExecuteSupport() {
                     @Override
                     public Boolean judgement() {
-                        return true;
+                        return true;//鐗涚溂娌℃湁鎻愬崌鏈洪攣锛岀洿鎺ヨ繑鍥瀟rue
                     }
                 })) {
                     return false;
@@ -311,54 +311,24 @@
                 }
 
                 //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
-                if (liftThread.isLock(new ExecuteSupport() {
+                if (!liftThread.isLock(new ExecuteSupport() {
                     @Override
                     public Boolean judgement() {
                         return false;
                     }
                 })) {
-                    //瑙i攣鎻愬崌鏈�
-                    List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В閿佸懡浠�
-
-                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
-                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
-                    liftAssignCommand.setTaskNo(motion.getTaskNo());
-                    ArrayList<LiftCommand> list = new ArrayList<>();
-                    list.addAll(lockCommand);
-                    liftAssignCommand.setCommands(list);
-
-                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
-                    return false;//绛夊緟涓嬩竴娆¤疆璇�
-                }
-
-                //鍒ゆ柇灏忚溅鏄惁宸插埌浣�
-                if (liftProtocol.getHasCar()) {
-                    List<LiftCommand> signalCommand = liftThread.getShuttleSignalCommand(motion.getTaskNo(), true);//鑾峰彇灏忚溅宸插埌浣嶅懡浠�
-                    if(signalCommand != null) {
-                        boolean hasKey = redisUtil.hasKey(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo());
-                        if (!hasKey) {
-                            LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
-                            liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
-                            liftAssignCommand.setTaskNo(motion.getTaskNo());
-                            ArrayList<LiftCommand> list = new ArrayList<>();
-                            list.addAll(signalCommand);
-                            liftAssignCommand.setCommands(list);
-                            liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
-                            redisUtil.set(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo(), true, 120);
-                            return false;
-                        }
-                    }
-                }
-
-                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
-                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
                     return false;
                 }
 
-                if (liftProtocol.getTaskNo() != 0) {
-                    //娓呯┖鎻愬崌鏈哄彿
-                    liftThread.setSyncTaskNo(0);
+                //鍒ゆ柇灏忚溅鏄惁宸插埌浣�
+                if (!liftProtocol.getHasCar()) {
+                    return false;
                 }
+
+//                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+//                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
+//                    return false;
+//                }
                 break;
             case SHUTTLE_MOVE_FROM_LIFT:
                 liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, Integer.parseInt(motion.getTemp()));
@@ -372,54 +342,24 @@
                 }
 
                 //鍒ゆ柇鎻愬崌鏈烘槸鍚﹁閿佸畾
-                if (liftThread.isLock(new ExecuteSupport() {
+                if (!liftThread.isLock(new ExecuteSupport() {
                     @Override
                     public Boolean judgement() {
                         return false;
                     }
                 })) {
-                    //瑙i攣鎻愬崌鏈�
-                    List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В閿佸懡浠�
-
-                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
-                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
-                    liftAssignCommand.setTaskNo(motion.getTaskNo());
-                    ArrayList<LiftCommand> list = new ArrayList<>();
-                    list.addAll(lockCommand);
-                    liftAssignCommand.setCommands(list);
-
-                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
-                    return false;//绛夊緟涓嬩竴娆¤疆璇�
-                }
-
-                //鍒ゆ柇灏忚溅鏄惁宸茬寮�
-                if (!liftProtocol.getHasCar()) {
-                    List<LiftCommand> signalCommand = liftThread.getShuttleSignalCommand(motion.getTaskNo(), false);//鑾峰彇灏忚溅宸查┚绂诲懡浠�
-                    if(signalCommand != null) {
-                        boolean hasKey = redisUtil.hasKey(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo());
-                        if (!hasKey) {
-                            redisUtil.set(DeviceRedisConstant.COMMAND_TMP + motion.getTaskNo(), JSON.toJSONString(signalCommand), 120);
-                            LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
-                            liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
-                            liftAssignCommand.setTaskNo(motion.getTaskNo());
-                            ArrayList<LiftCommand> list = new ArrayList<>();
-                            list.addAll(signalCommand);
-                            liftAssignCommand.setCommands(list);
-                            liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
-                            return false;
-                        }
-                    }
-                }
-
-                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
-                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
                     return false;
                 }
 
-                if (liftProtocol.getTaskNo() != 0) {
-                    //娓呯┖鎻愬崌鏈哄彿
-                    liftThread.setSyncTaskNo(0);
+                //鍒ゆ柇灏忚溅鏄惁宸茬寮�
+                if (liftProtocol.getHasCar()) {
+                    return false;
                 }
+
+//                //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
+//                if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
+//                    return false;
+//                }
                 break;
             case SHUTTLE_TRANSPORT_FROM_LIFT:
             case SHUTTLE_TRANSPORT_TO_LIFT:
@@ -441,28 +381,12 @@
                         return false;
                     }
                 })) {
-                    //瑙i攣鎻愬崌鏈�
-                    List<LiftCommand> lockCommand = liftThread.getLockCommand(motion.getTaskNo(), false);//鑾峰彇鎻愬崌鏈鸿В閿佸懡浠�
-
-                    LiftAssignCommand liftAssignCommand = new LiftAssignCommand();
-                    liftAssignCommand.setLiftNo(liftThread.getStatus().getLiftNo());
-                    liftAssignCommand.setTaskNo(motion.getTaskNo());
-                    ArrayList<LiftCommand> list = new ArrayList<>();
-                    list.addAll(lockCommand);
-                    liftAssignCommand.setCommands(list);
-
-                    liftAction.assignWork(liftThread.getDevice(), liftAssignCommand);
-                    return false;//绛夊緟涓嬩竴娆¤疆璇�
+                    return false;
                 }
 
                 //鍒ゆ柇鎻愬崌鏈哄伐浣滃彿鏄惁鍜屽綋鍓嶄换鍔$浉鍚�
                 if (liftProtocol.getTaskNo().intValue() != motion.getTaskNo()) {
                     return false;
-                }
-
-                if (liftProtocol.getTaskNo() != 0) {
-                    //娓呯┖鎻愬崌鏈哄彿
-                    liftThread.setSyncTaskNo(0);
                 }
                 break;
             case SHUTTLE_UPDATE_LOCATION://灏忚溅鍧愭爣鏇存柊
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
index d1b3efa..19d2949 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
@@ -29,6 +29,8 @@
     LIFT_MISSION_COMPLETE(LIFT),
     LIFT_LOCK(LIFT),
     LIFT_UNLOCK(LIFT),
+    LIFT_SHUTTLE_ARRIVAL(LIFT),
+    LIFT_SHUTTLE_LEAVE(LIFT),
 
     // 绌挎杞� --------------------------------------------
     SHUTTLE_MOVE(SHUTTLE),
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/dto/WorkModeTypeDto.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/dto/WorkModeTypeDto.java
new file mode 100644
index 0000000..639ba9d
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/dto/WorkModeTypeDto.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.wcs.rcs.model.dto;
+
+import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
+import lombok.Data;
+
+@Data
+public class WorkModeTypeDto {
+
+    private Integer siteId;
+
+    private WorkModeType workModeType;
+
+    private String address;
+
+    public WorkModeTypeDto(Integer siteId, WorkModeType workModeType, String address) {
+        this.siteId = siteId;
+        this.workModeType = workModeType;
+        this.address = address;
+    }
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/enums/WorkModeType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/enums/WorkModeType.java
new file mode 100644
index 0000000..1c20948
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/enums/WorkModeType.java
@@ -0,0 +1,30 @@
+package com.zy.asrs.wcs.rcs.model.enums;
+
+/**
+ * 鍏ュ嚭搴撴ā寮忔灇涓�
+ */
+public enum WorkModeType {
+
+    NONE((short) 0, "鏈煡"),
+    PAKIN_MODE((short) 1, "鍏ュ簱妯″紡"),
+    PAKOUT_MODE((short) 2, "鍑哄簱妯″紡"),
+    ;
+
+    public Short id;
+    public String desc;
+
+    WorkModeType(Short id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static WorkModeType get(Short id) {
+        for (WorkModeType type : WorkModeType.values()) {
+            if (id.equals(type.id)) {
+                return type;
+            }
+        }
+        return WorkModeType.NONE;
+    }
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java
index d3d46e2..c1a8775 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/model/protocol/StaProtocol.java
@@ -71,6 +71,9 @@
     // 鎵爜澶辫触
     private boolean barcodeErr;
 
+    // 宸ヤ綔妯″紡
+    private Integer workMode;
+
     @Override
     public StaProtocol clone() {
         try {
@@ -88,6 +91,7 @@
         station.setLoading(loading?"Y":"N");
         station.setInEnable(inEnable?"Y":"N");
         station.setOutEnable(outEnable?"Y":"N");
+        station.setWorkMode(workMode);
         station.setLocType1(0);  // 楂樹綆绫诲瀷{0:鏈煡,1:浣庡簱浣�,2:楂樺簱浣峿
         station.setLocType2(0);  // 瀹界獎绫诲瀷{0:鏈煡,1:绐勫簱浣�,2:瀹藉簱浣峿
         station.setLocType3(0);  // 杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/DevpThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/DevpThread.java
index defcbc6..b362346 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/DevpThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/DevpThread.java
@@ -16,4 +16,6 @@
 
     void setPakMk(Integer siteId, boolean pakMk);
 
+    boolean switchWorkMode(int siteId, int workMode);
+
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SiemensDevpThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SiemensDevpThread.java
index 9668756..19a8a14 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SiemensDevpThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SiemensDevpThread.java
@@ -17,6 +17,8 @@
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.OutputQueue;
 import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.dto.WorkModeTypeDto;
+import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
 import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
 import com.zy.asrs.wcs.rcs.thread.DevpThread;
 import lombok.extern.slf4j.Slf4j;
@@ -44,9 +46,21 @@
      */
     private int barcodeSize = 2;
 
+    /**
+     * 鍏ュ嚭搴撴ā寮�
+     * 0锛氭湭鐭�
+     * 1锛氬叆搴撳惎鍔ㄤ腑
+     * 2.鍏ュ簱妯″紡
+     * 3.鍑哄簱鍚姩涓� 锛堜笉鑳界敓鎴愬叆搴撳伐浣滄。锛�
+     * 4.鍑哄簱妯″紡
+     */
+    private Map<Integer, WorkModeTypeDto> workModeTypes = new ConcurrentHashMap<>();
+
     public SiemensDevpThread(Device device, RedisUtil redisUtil) {
         this.device = device;
         this.redisUtil = redisUtil;
+
+        workModeTypes.put(101, new WorkModeTypeDto(101, WorkModeType.NONE, "DB1001.120"));
     }
 
     private ArrayList<BasConveyorSta> getStaNo() {
@@ -287,4 +301,29 @@
             staProtocol.setPakMk(pakMk);
         }
     }
+
+    private void updateWorkMode() {
+        for (Map.Entry<Integer, WorkModeTypeDto> entry : workModeTypes.entrySet()) {
+            WorkModeTypeDto workModeTypeDto = entry.getValue();
+            WorkModeType workModeType = workModeTypeDto.getWorkModeType();
+            if (workModeType != WorkModeType.NONE) {
+                if (!siemensS7Net.Write(workModeTypeDto.getAddress(), workModeType.id).IsSuccess) {
+                    OutputQueue.DEVP.offer(MessageFormat.format("鍐欏叆杈撻�佺嚎{1}鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎缂栧彿={0}", device.getId(), workModeTypeDto.getSiteId()));
+                    log.error("鍐欏叆杈撻�佺嚎{1}鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎缂栧彿={0}", device.getId(), workModeTypeDto.getSiteId());
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean switchWorkMode(int siteId, int workMode) {
+        WorkModeTypeDto workModeTypeDto = workModeTypes.get(siteId);
+        if(workModeTypeDto == null) {
+            return false;
+        }
+
+        workModeTypeDto.setWorkModeType(WorkModeType.get((short) workMode));
+        workModeTypes.put(siteId, workModeTypeDto);
+        return false;
+    }
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SuopaiSiemensDevpThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SuopaiSiemensDevpThread.java
index 4710723..811346c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SuopaiSiemensDevpThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SuopaiSiemensDevpThread.java
@@ -17,6 +17,8 @@
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.OutputQueue;
 import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.dto.WorkModeTypeDto;
+import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
 import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
 import com.zy.asrs.wcs.rcs.thread.DevpThread;
 import lombok.extern.slf4j.Slf4j;
@@ -44,9 +46,21 @@
      */
     private int barcodeSize = 2;
 
+    /**
+     * 鍏ュ嚭搴撴ā寮�
+     * 0锛氭湭鐭�
+     * 1锛氬叆搴撳惎鍔ㄤ腑
+     * 2.鍏ュ簱妯″紡
+     * 3.鍑哄簱鍚姩涓� 锛堜笉鑳界敓鎴愬叆搴撳伐浣滄。锛�
+     * 4.鍑哄簱妯″紡
+     */
+    private Map<Integer, WorkModeTypeDto> workModeTypes = new ConcurrentHashMap<>();
+
     public SuopaiSiemensDevpThread(Device device, RedisUtil redisUtil) {
         this.device = device;
         this.redisUtil = redisUtil;
+
+        workModeTypes.put(101, new WorkModeTypeDto(101, WorkModeType.NONE, "DB1001.120"));
     }
 
     private ArrayList<BasConveyorSta> getStaNo() {
@@ -86,6 +100,7 @@
     }
 
     private void read() throws InterruptedException {
+        updateWorkMode();
         ArrayList<BasConveyorSta> staNos = getStaNo();
         int staNoSize = staNos.size();
         OperateResultExOne<byte[]> result = siemensS7Net.Read("DB1000.100", (short) (staNoSize * 40));
@@ -105,6 +120,7 @@
                 staProtocol.setLoading(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 32) == 1);  // 鏈夌墿
                 staProtocol.setInEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 14) == 1); // 鍙叆
                 staProtocol.setOutEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 14) == 2);// 鍙嚭
+                staProtocol.setWorkMode((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 8));// 宸ヤ綔妯″紡
 //                staProtocol.setEmptyMk(status[4]);  // 绌烘澘淇″彿
 //                staProtocol.setFullPlt(status[5]);  // 婊℃墭鐩�
 //                staProtocol.setHigh(status[6]);     // 楂樺簱浣�
@@ -265,4 +281,29 @@
             staProtocol.setPakMk(pakMk);
         }
     }
+
+    private void updateWorkMode() {
+        for (Map.Entry<Integer, WorkModeTypeDto> entry : workModeTypes.entrySet()) {
+            WorkModeTypeDto workModeTypeDto = entry.getValue();
+            WorkModeType workModeType = workModeTypeDto.getWorkModeType();
+            if (workModeType != WorkModeType.NONE) {
+                if (!siemensS7Net.Write(workModeTypeDto.getAddress(), workModeType.id).IsSuccess) {
+                    OutputQueue.DEVP.offer(MessageFormat.format("鍐欏叆杈撻�佺嚎{1}鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎缂栧彿={0}", device.getId(), workModeTypeDto.getSiteId()));
+                    log.error("鍐欏叆杈撻�佺嚎{1}鍏ュ嚭搴撴ā寮忓け璐ャ�傝緭閫佺嚎缂栧彿={0}", device.getId(), workModeTypeDto.getSiteId());
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean switchWorkMode(int siteId, int workMode) {
+        WorkModeTypeDto workModeTypeDto = workModeTypes.get(siteId);
+        if(workModeTypeDto == null) {
+            return false;
+        }
+
+        workModeTypeDto.setWorkModeType(WorkModeType.get((short) workMode));
+        workModeTypes.put(siteId, workModeTypeDto);
+        return true;
+    }
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
index 9a7d6ab..ae8097c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -104,6 +104,8 @@
                 liftProtocol.setErrorCode("0");
                 //灞�
                 liftProtocol.setLev(data.getInteger("curFloor"));
+                //宸插畬鎴愮殑浠诲姟鍙�
+                liftProtocol.setCompleteTaskNo(data.getString("completeTaskNo"));
 
 
                 //************琛ュ厖鎵╁睍瀛楁*************
@@ -381,7 +383,11 @@
         switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(flag)))){
             case SHUTTLE_MOVE_FROM_LIFT://绌挎杞﹀嚭鎻愬崌鏈�
             case SHUTTLE_MOVE_TO_LIFT://绌挎杞﹁繘鎻愬崌鏈�
+            case LIFT_SHUTTLE_ARRIVAL://鎻愬崌鏈鸿В閿�
                 return isIdleShuttleMoveToLift();
+            case LIFT_LOCK://鎻愬崌鏈洪攣瀹�
+            case LIFT_UNLOCK://鎻愬崌鏈鸿В閿�
+                return isIdleLiftLock();
         }
 
         return false;
@@ -409,6 +415,21 @@
         return false;
     }
 
+    //鎻愬崌鏈洪攣瀹�-鎻愬崌鏈虹姸鎬佸垽鏂�
+    private boolean isIdleLiftLock() {
+        // 鍒ゆ柇鎻愬崌鏈烘槸鍚﹁嚜鍔ㄣ�佸氨缁�佺┖闂�
+        if (this.liftProtocol.getModel()
+                && !this.liftProtocol.getRun()
+                && this.liftProtocol.getPakMk()
+                && this.liftProtocol.getErrorCode().equals("0")
+                && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
+                || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
+        ) {
+            return true;
+        }
+        return false;
+    }
+
     @Override
     public boolean isDeviceIdle() {
         return isDeviceIdle(null);

--
Gitblit v1.9.1