From 1ba343ab3a7cd5cbabfef6a27a5344051f526793 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 25 十一月 2025 16:49:50 +0800
Subject: [PATCH] #

---
 src/main/webapp/components/WatchRgvCard.js                       |    2 
 src/main/java/com/zy/core/plugin/MainProcessPluginApi.java       |    7 
 src/main/java/com/zy/asrs/controller/LocMastController.java      |    7 
 src/main/java/com/zy/asrs/entity/BasDevp.java                    |   56 +
 src/main/resources/mapper/LocMastMapper.xml                      |    1 
 src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java    |    2 
 src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java      |  316 +++++++++
 src/main/java/com/zy/asrs/entity/BasCrnp.java                    |   54 +
 src/main/java/com/zy/asrs/task/WrkMastScheduler.java             |    2 
 src/main/resources/mapper/BasCrnpMapper.xml                      |    3 
 src/main/java/com/zy/common/model/StartupDto.java                |   11 
 src/main/java/com/zy/core/thread/StationThread.java              |    3 
 src/main/java/com/zy/core/thread/impl/ZyStationThread.java       |   12 
 src/main/java/com/zy/core/MainProcess.java                       |   25 
 src/main/java/com/zy/asrs/entity/LocMast.java                    |    4 
 src/main/java/com/zy/common/service/CommonService.java           |  119 ++
 src/main/java/com/zy/core/plugin/FakeProcess.java                |  573 ++++++++++++++++
 src/main/webapp/views/basCrnp/basCrnp.html                       |   30 
 src/main/java/com/zy/core/utils/StationOperateProcessUtils.java  |  195 +++++
 src/main/webapp/views/wrkMast/wrkMast.html                       |    6 
 src/main/java/com/zy/asrs/controller/BasDevpController.java      |   11 
 src/main/java/com/zy/asrs/entity/WrkMast.java                    |   16 
 src/main/resources/mapper/WrkMastMapper.xml                      |  136 ---
 src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java   |    6 
 src/main/java/com/zy/asrs/entity/WrkMastLog.java                 |   17 
 src/main/java/com/zy/core/model/command/CrnCommand.java          |   12 
 src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java |  102 ++
 /dev/null                                                        |   16 
 src/main/webapp/static/js/basCrnp/basCrnp.js                     |   13 
 src/main/java/com/zy/asrs/controller/StationController.java      |   11 
 src/main/java/com/zy/core/plugin/NormalProcess.java              |   28 
 src/main/java/com/zy/core/enums/WrkStsType.java                  |   13 
 src/main/java/com/zy/asrs/service/WrkMastService.java            |   25 
 src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java   |  138 ---
 src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java    |    3 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java              |   39 -
 src/main/java/com/zy/core/enums/RedisKeyType.java                |    6 
 src/main/webapp/static/js/locMast/locMast.js                     |    2 
 src/main/resources/application.yml                               |    4 
 src/main/java/com/zy/core/model/StationObjModel.java             |   18 
 40 files changed, 1,549 insertions(+), 495 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/BasDevpController.java b/src/main/java/com/zy/asrs/controller/BasDevpController.java
index 086dabb..b936913 100644
--- a/src/main/java/com/zy/asrs/controller/BasDevpController.java
+++ b/src/main/java/com/zy/asrs/controller/BasDevpController.java
@@ -15,6 +15,7 @@
 import com.core.common.Cools;
 import com.core.common.R;
 import com.zy.common.web.BaseController;
+import com.zy.core.model.StationObjModel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -144,12 +145,12 @@
             return R.error("璇疯緭鍏ュ垵濮嬪寲闀垮害");
         }
 
-        List<HashMap<String, Object>> list = new ArrayList<>();
+        List<StationObjModel> list = new ArrayList<>();
         for (int i = param.getStationNo(); i < param.getStationNo() + param.getInitLength(); i++) {
-            HashMap<String, Object> map = new HashMap<>();
-            map.put("devpNo", param.getDevpNo());
-            map.put("stationId", i);
-            list.add(map);
+            StationObjModel stationObjModel = new StationObjModel();
+            stationObjModel.setDeviceNo(param.getDevpNo());
+            stationObjModel.setStationId(i);
+            list.add(stationObjModel);
         }
 
         basDevp.setStationList(JSON.toJSONString(list));
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index d3beb2f..737d0ad 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -18,9 +18,12 @@
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.RedisUtil;
 import com.zy.common.web.BaseController;
+import com.zy.core.enums.LocStsType;
 import com.zy.core.enums.MapNodeType;
 
+import com.zy.core.enums.RedisKeyType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -36,6 +39,8 @@
     private LocMastService locMastService;
     @Autowired
     private BasMapService basMapService;
+    @Autowired
+    private RedisUtil redisUtil;
 
     @RequestMapping(value = "/locMast/{id}/auth")
     @ManagerAuth
@@ -191,6 +196,7 @@
                 int mapX = (int) map.get("mapX");
                 int mapY = (int) map.get("mapY");
                 locMast.setLocNo(Utils.getLocNo(row, bay, finalLev));
+                locMast.setLocSts(String.valueOf(LocStsType.O));
                 locMast.setRow1(row);
                 locMast.setBay1(bay);
                 locMast.setLev1(finalLev);
@@ -201,6 +207,7 @@
             });
         }
 
+        redisUtil.del(RedisKeyType.LOC_MAP_BASE.key);
         return R.ok();
     }
 
diff --git a/src/main/java/com/zy/asrs/controller/StationController.java b/src/main/java/com/zy/asrs/controller/StationController.java
index 2542008..0a25edb 100644
--- a/src/main/java/com/zy/asrs/controller/StationController.java
+++ b/src/main/java/com/zy/asrs/controller/StationController.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.service.BasDevpService;
+import com.zy.core.model.StationObjModel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -40,12 +41,12 @@
         Integer taskNo = param.getTaskNo();
         Integer targetStationId = param.getTargetStationId();
 
-        JSONObject finalStation = null;
+        StationObjModel finalStation = null;
         List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>());
         for (BasDevp basDevp : basDevps) {
-            List<JSONObject> list = JSON.parseArray(basDevp.getStationList(), JSONObject.class);
-            for (JSONObject entity : list) {
-                if(entity.getInteger("stationId").equals(stationId)){
+            List<StationObjModel> list = basDevp.getStationList$();
+            for (StationObjModel entity : list) {
+                if(entity.getStationId().equals(stationId)){
                     finalStation = entity;
                     break;
                 }
@@ -60,7 +61,7 @@
             return R.error("绔欑偣涓嶅瓨鍦�");
         }
 
-        Integer devpNo = finalStation.getInteger("devpNo");
+        Integer devpNo = finalStation.getDeviceNo();
 
         StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, devpNo);
         if (stationThread == null) {
diff --git a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
index 8ff1677..db454c1 100644
--- a/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/CreateInTaskParam.java
@@ -17,6 +17,9 @@
     //鐩爣搴撲綅
     private String locNo;
 
+    //鏉$爜
+    private String barcode;
+
     //浠诲姟浼樺厛绾�
     private Integer taskPri;
 
diff --git a/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java b/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java
index 9288763..80c8ff1 100644
--- a/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java
+++ b/src/main/java/com/zy/asrs/domain/param/CreateOutTaskParam.java
@@ -8,12 +8,18 @@
     //wms浠诲姟鍙�
     private String taskNo;
 
+    //婧愮珯
+    private Integer sourceStaNo;
+
     //鐩爣绔�
     private Integer staNo;
 
     //婧愬簱浣�
     private String sourceLocNo;
 
+    //鏉$爜
+    private String barcode;
+
     //浠诲姟浼樺厛绾�
     private Integer taskPri;
 
diff --git a/src/main/java/com/zy/asrs/entity/BasCrnp.java b/src/main/java/com/zy/asrs/entity/BasCrnp.java
index b9a2efe..475a448 100644
--- a/src/main/java/com/zy/asrs/entity/BasCrnp.java
+++ b/src/main/java/com/zy/asrs/entity/BasCrnp.java
@@ -1,13 +1,18 @@
 package com.zy.asrs.entity;
 
-import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.core.common.Cools;
+import com.zy.core.model.StationObjModel;
+import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.enums.IdType;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.annotations.TableField;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
+
 import org.springframework.format.annotation.DateTimeFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -70,6 +75,24 @@
     @ApiModelProperty(value= "")
     private String memo;
 
+    @ApiModelProperty(value= "")
+    @TableField("control_rows")
+    private String controlRows;
+
+    /**
+     * 鍏ョ珯鍒楄〃
+     */
+    @ApiModelProperty(value= "鍏ョ珯鍒楄〃")
+    @TableField("in_station_list")
+    private String inStationList;
+
+    /**
+     * 鍑虹珯鍒楄〃
+     */
+    @ApiModelProperty(value= "鍑虹珯鍒楄〃")
+    @TableField("out_station_list")
+    private String outStationList;
+
     public BasCrnp() {}
 
     public BasCrnp(Integer status,Integer wrkNo,String inEnable,String outEnable,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
@@ -117,5 +140,30 @@
         return this.status == 1 ? "姝e父" : "绂佺敤";
     }
 
+    public List<StationObjModel> getInStationList$(){
+        List<StationObjModel> list = new ArrayList<>();
+        if (Cools.isEmpty(this.inStationList)){
+            return list;
+        }
+
+        List<StationObjModel> jsonList = JSON.parseArray(this.inStationList,StationObjModel.class);
+        for (StationObjModel json : jsonList){
+            list.add(json);
+        }
+        return list;
+    }
+
+    public List<StationObjModel> getOutStationList$(){
+        List<StationObjModel> list = new ArrayList<>();
+        if (Cools.isEmpty(this.outStationList)){
+            return list;
+        }
+
+        List<StationObjModel> jsonList = JSON.parseArray(this.outStationList,StationObjModel.class);
+        for (StationObjModel json : jsonList){
+            list.add(json);
+        }
+        return list;
+    }
 
 }
diff --git a/src/main/java/com/zy/asrs/entity/BasDevp.java b/src/main/java/com/zy/asrs/entity/BasDevp.java
index e56c777..3e5a10d 100644
--- a/src/main/java/com/zy/asrs/entity/BasDevp.java
+++ b/src/main/java/com/zy/asrs/entity/BasDevp.java
@@ -1,15 +1,20 @@
 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.StationObjModel;
 import org.springframework.format.annotation.DateTimeFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.baomidou.mybatisplus.annotations.TableName;
 import java.io.Serializable;
+import java.util.List;
 
 @Data
 @TableName("asr_bas_devp")
@@ -152,5 +157,56 @@
         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
     }
 
+    public List<StationObjModel> getStationList$(){
+        List<StationObjModel> list = new ArrayList<>();
+        if (Cools.isEmpty(this.stationList)){
+            return list;
+        }
+
+        List<StationObjModel> jsonList = JSON.parseArray(this.stationList, StationObjModel.class);
+        for (StationObjModel json : jsonList){
+            list.add(json);
+        }
+        return list;
+    }
+
+    public List<StationObjModel> getBarcodeStationList$(){
+        List<StationObjModel> list = new ArrayList<>();
+        if (Cools.isEmpty(this.barcodeStationList)){
+            return list;
+        }
+
+        List<StationObjModel> jsonList = JSON.parseArray(this.barcodeStationList, StationObjModel.class);
+        for (StationObjModel json : jsonList){
+            list.add(json);
+        }
+        return list;
+    }
+
+    public List<StationObjModel> getInStationList$(){
+        List<StationObjModel> list = new ArrayList<>();
+        if (Cools.isEmpty(this.inStationList)){
+            return list;
+        }
+
+        List<StationObjModel> jsonList = JSON.parseArray(this.inStationList, StationObjModel.class);
+        for (StationObjModel json : jsonList){
+            list.add(json);
+        }
+        return list;
+    }
+
+    public List<StationObjModel> getOutStationList$(){
+        List<StationObjModel> list = new ArrayList<>();
+        if (Cools.isEmpty(this.outStationList)){
+            return list;
+        }
+
+        List<StationObjModel> jsonList = JSON.parseArray(this.outStationList, StationObjModel.class);
+        for (StationObjModel json : jsonList){
+            list.add(json);
+        }
+        return list;
+    }
 
 }
diff --git a/src/main/java/com/zy/asrs/entity/LocMast.java b/src/main/java/com/zy/asrs/entity/LocMast.java
index 21d3677..491cc28 100644
--- a/src/main/java/com/zy/asrs/entity/LocMast.java
+++ b/src/main/java/com/zy/asrs/entity/LocMast.java
@@ -116,6 +116,10 @@
     @TableField("status")
     private Integer status;
 
+    @ApiModelProperty(value= "")
+    @TableField("barcode")
+    private String barcode;
+
     public String getLocSts$(){
         BasLocStsService service = SpringUtils.getBean(BasLocStsService.class);
         BasLocSts basLocSts = service.selectById(this.locSts);
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 3dae97c..b4d78ed 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -141,18 +141,18 @@
     private String barcode;
 
     /**
-     * 鍥涘悜绌挎杞﹀彿
+     * 鍫嗗灈鏈哄彿
      */
-    @ApiModelProperty(value= "鍥涘悜绌挎杞﹀彿")
-    @TableField(value = "shuttle_no",strategy = FieldStrategy.IGNORED)
-    private Integer shuttleNo;
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableField(value = "crn_no",strategy = FieldStrategy.IGNORED)
+    private Integer crnNo;
 
     /**
-     * 鎻愬崌鏈哄彿
+     * RGV鍙�
      */
-    @ApiModelProperty(value= "鎻愬崌鏈哄彿")
-    @TableField(value = "lift_no",strategy = FieldStrategy.IGNORED)
-    private Integer liftNo;
+    @ApiModelProperty(value= "RGV鍙�")
+    @TableField(value = "rgv_no",strategy = FieldStrategy.IGNORED)
+    private Integer rgvNo;
 
     /**
      * WMS浠诲姟鍙�
diff --git a/src/main/java/com/zy/asrs/entity/WrkMastLog.java b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
index 0202441..2d87a39 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMastLog.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.FieldStrategy;
 import com.baomidou.mybatisplus.enums.IdType;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
@@ -146,18 +147,18 @@
     private String barcode;
 
     /**
-     * 鍥涘悜绌挎杞﹀彿
+     * 鍫嗗灈鏈哄彿
      */
-    @ApiModelProperty(value= "鍥涘悜绌挎杞﹀彿")
-    @TableField(value = "shuttle_no")
-    private Integer shuttleNo;
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableField(value = "crn_no")
+    private Integer crnNo;
 
     /**
-     * 鎻愬崌鏈哄彿
+     * RGV鍙�
      */
-    @ApiModelProperty(value= "鎻愬崌鏈哄彿")
-    @TableField(value = "lift_no")
-    private Integer liftNo;
+    @ApiModelProperty(value= "RGV鍙�")
+    @TableField(value = "rgv_no")
+    private Integer rgvNo;
 
     /**
      * WMS浠诲姟鍙�
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index fb466b9..2bbdcec 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -11,45 +11,6 @@
 @Repository
 public interface WrkMastMapper extends BaseMapper<WrkMast> {
 
-    // wcs ---------------------------------------------
-    // 鍏ュ簱绗竴姝ワ紝鎵爜浠幏鍙栨潯鐮佷俊鎭椂鏌ヨ
-//    @Select("select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC")
-    WrkMast selectPakInStep1(@Param("sourceStaNo")Integer sourceStaNo, @Param("barcode")String barcode);
-
-    WrkMast selectPakInStep11(@Param("sourceStaNo")Integer sourceStaNo);
-
-    List<WrkMast> selectInStep4();
-
     WrkMast selectByWorkNo(Integer workNo);
-
-    List<WrkMast> selectLiftStep223103();
-
-    WrkMast selectByWorkNo324104(Integer workNo);
-
-    List<WrkMast> selectBy2125();
-
-    List<WrkMast> selectShuttleWrkByLev(String lev);
-
-    List<WrkMast> selectShuttleOutWrkByLev(String lev);
-
-    List<WrkMast> selectLiftWrkMast(Integer liftNo);
-
-    List<WrkMast> selectLocToLocWrkMast();//鏌ヨ搴撲綅绉昏浆宸ヤ綔妗�
-
-    WrkMast selectPickStepByBarcode(String barcode);
-
-    WrkMast selectShuttleHasMoveWorking(@Param("shuttleNo") Integer shuttleNo);
-
-    List<WrkMast> selectShuttleMoveWrk();
-
-    WrkMast selectShuttleWorking(@Param("shuttleNo") Integer shuttleNo);//鏄惁鏈夌┛姊溅浠诲姟(绉诲簱浠诲姟闄ゅ)
-
-    WrkMast selectByBarcode(String barcode);
-
-    List<WrkMast> selectInWrkMastByLiftNo(Integer liftNo);//鎼滅储鎸囧畾鎻愬崌鏈虹殑鍏ュ簱浠诲姟
-
-    WrkMast selectChargeWorking(Integer shuttleNo);
-
-    WrkMast selectChargeWorkingByChargeSta(Integer chargeSta);
 
 }
diff --git a/src/main/java/com/zy/asrs/service/WrkMastService.java b/src/main/java/com/zy/asrs/service/WrkMastService.java
index 9f0081a..7148656 100644
--- a/src/main/java/com/zy/asrs/service/WrkMastService.java
+++ b/src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -9,29 +9,4 @@
 
     WrkMast selectByWorkNo(Integer workNo);
 
-    Boolean judgeInbound(WrkMast wrkMast);
-
-    //鏌ヨ鎸囧畾妤煎眰浠诲姟
-    List<WrkMast> selectWrkByLev(Integer lev);
-
-    //鏌ヨ鎸囧畾妤煎眰宸插垎閰嶈溅杈嗙殑浠诲姟
-    List<WrkMast> selectShuttleWrkByLev(Integer lev);
-
-    //鏌ヨ鎸囧畾妤煎眰宸插垎閰嶈溅杈嗙殑鍑哄簱浠诲姟
-    List<WrkMast> selectShuttleOutWrkByLev(Integer lev);
-
-    WrkMast selectChargeWorking(Integer shuttleNo);
-
-    WrkMast selectChargeWorkingByChargeSta(Integer chargeSta);
-
-    Boolean hasBusyByShuttle(Integer shuttleNo);
-
-    WrkMast selectShuttleHasMoveWorking(Integer shuttleNo);
-
-    WrkMast selectShuttleWorking(Integer shuttleNo);//鏄惁鏈夌┛姊溅浠诲姟(绉诲簱浠诲姟闄ゅ)
-
-    List<WrkMast> selectShuttleMoveWrk();
-
-    List<WrkMast> selectLiftWrkMast(Integer liftNo);
-
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
deleted file mode 100644
index 3a4b101..0000000
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.zy.asrs.service.impl;
-
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-/**
- * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
- */
-@Slf4j
-@Service("mainService")
-public class MainServiceImpl {
-
-
-
-}
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
index a6a0ff2..8776a4e 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -1,19 +1,10 @@
 package com.zy.asrs.service.impl;
 
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
-import com.core.common.Cools;
-import com.core.exception.CoolException;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.WrkMastService;
-import com.zy.asrs.utils.Utils;
-import com.zy.core.enums.WrkIoType;
-import com.zy.core.enums.WrkStsType;
 import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
 
 @Service("wrkMastService")
 public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
@@ -23,133 +14,4 @@
         return this.baseMapper.selectByWorkNo(workNo);
     }
 
-    @Override
-    public Boolean judgeInbound(WrkMast wrkMast) {
-        switch (WrkStsType.query(wrkMast.getWrkSts())) {
-            case NEW_INBOUND:
-            case INBOUND_DEVICE_RUN:
-            case INBOUND_LIFT_RUN:
-            case INBOUND_LIFT_RUN_COMPLETE:
-            case INBOUND_SHUTTLE_RUN:
-            case INBOUND_SHUTTLE_RUN_COMPLETE:
-            case COMPLETE_INBOUND:
-            case SETTLE_INBOUND:
-                return Boolean.TRUE;
-            case NEW_OUTBOUND:
-            case OUTBOUND_SHUTTLE_RUN:
-            case OUTBOUND_SHUTTLE_RUN_COMPLETE:
-            case OUTBOUND_LIFT_RUN:
-            case OUTBOUND_LIFT_RUN_COMPLETE:
-            case COMPLETE_OUTBOUND:
-            case SETTLE_OUTBOUND:
-                return Boolean.FALSE;
-        }
-        return Boolean.TRUE;
-    }
-
-    @Override
-    public List<WrkMast> selectWrkByLev(Integer lev) {
-        ArrayList<WrkMast> currentLevList = new ArrayList<>();
-        List<WrkMast> wrkMasts = this.baseMapper.selectList(new EntityWrapper<WrkMast>());
-        for (WrkMast wrkMast : wrkMasts) {
-            int wrkLev;
-            if (wrkMast.getIoType() == WrkIoType.IN.id) {
-                wrkLev = Utils.getLev(wrkMast.getLocNo());
-            } else if (wrkMast.getIoType() == WrkIoType.OUT.id) {
-                wrkLev = Utils.getLev(wrkMast.getSourceLocNo());
-            } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_MOVE.id) {
-                wrkLev = Utils.getLev(wrkMast.getLocNo());
-            } else if (wrkMast.getIoType() == WrkIoType.LOC_MOVE.id) {
-                wrkLev = Utils.getLev(wrkMast.getLocNo());
-            } else if (wrkMast.getIoType() == WrkIoType.SHUTTLE_CHARGE.id) {
-                continue;
-            } else {
-                throw new CoolException("鏈煡浠诲姟绫诲瀷");
-            }
-
-            if (wrkLev == lev) {
-                currentLevList.add(wrkMast);
-            }
-        }
-        return currentLevList;
-    }
-
-    @Override
-    public List<WrkMast> selectShuttleWrkByLev(Integer lev) {
-        return this.baseMapper.selectShuttleWrkByLev("%" + lev);
-    }
-
-    @Override
-    public List<WrkMast> selectShuttleOutWrkByLev(Integer lev) {
-        return this.baseMapper.selectShuttleOutWrkByLev("%" + lev);
-    }
-
-    @Override
-    public WrkMast selectChargeWorking(Integer shuttleNo) {
-        return this.baseMapper.selectChargeWorking(shuttleNo);
-    }
-
-    @Override
-    public WrkMast selectChargeWorkingByChargeSta(Integer chargeSta) {
-        return this.baseMapper.selectChargeWorkingByChargeSta(chargeSta);
-    }
-
-    @Override
-    public Boolean hasBusyByShuttle(Integer shuttleNo) {
-        List<WrkMast> wrkMasts = this.selectList(new EntityWrapper<WrkMast>().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
-
-                , 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
-
-                , WrkStsType.NEW_MOVE.sts
-                , WrkStsType.MOVE_NEARBY.sts
-                , WrkStsType.MOVE_NEARBY_COMPLETE.sts
-                , WrkStsType.MOVE_IN_LIFT.sts
-                , WrkStsType.MOVE_IN_LIFT_COMPLETE.sts
-                , WrkStsType.MOVE_LIFT_RUN.sts
-                , WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts
-                , WrkStsType.MOVE_OUT_LIFT.sts
-                , WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts
-                , WrkStsType.MOVE_SHUTTLE.sts
-
-                , WrkStsType.NEW_CHARGE.sts
-                , WrkStsType.CHARGE_SHUTTLE_RUN.sts
-                , WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts
-                , WrkStsType.CHARGE_SHUTTLE_CHARGING.sts
-                , WrkStsType.CHARGE_SHUTTLE_CHARGING_COMPLETE.sts
-        ).eq("shuttle_no", shuttleNo));
-        if (Cools.isEmpty(wrkMasts)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public WrkMast selectShuttleHasMoveWorking(Integer shuttleNo) {
-        return this.baseMapper.selectShuttleHasMoveWorking(shuttleNo);
-    }
-
-    @Override
-    public WrkMast selectShuttleWorking(Integer shuttleNo) {
-        return this.baseMapper.selectShuttleWorking(shuttleNo);
-    }
-
-    @Override
-    public List<WrkMast> selectShuttleMoveWrk() {
-        return this.baseMapper.selectShuttleMoveWrk();
-    }
-
-    @Override
-    public List<WrkMast> selectLiftWrkMast(Integer liftNo) {
-        return this.baseMapper.selectLiftWrkMast(liftNo);
-    }
 }
diff --git a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
index 61ae077..b4df723 100644
--- a/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WrkMastScheduler.java
@@ -62,6 +62,7 @@
             }
 
             locMast.setLocSts("F");
+            locMast.setBarcode(wrkMast.getBarcode());
             locMast.setModiTime(new Date());
             boolean result = locMastService.updateById(locMast);
             if (!result) {
@@ -105,6 +106,7 @@
             }
 
             locMast.setLocSts("O");
+            locMast.setBarcode("");
             locMast.setModiTime(new Date());
             boolean result = locMastService.updateById(locMast);
             if (!result) {
diff --git a/src/main/java/com/zy/common/model/StartupDto.java b/src/main/java/com/zy/common/model/StartupDto.java
index b0ecc3e..9a47096 100644
--- a/src/main/java/com/zy/common/model/StartupDto.java
+++ b/src/main/java/com/zy/common/model/StartupDto.java
@@ -2,20 +2,13 @@
 
 import lombok.Data;
 
-/**
- * Created by vincent on 2020/6/11
- */
 @Data
 public class StartupDto {
-
-    private Integer sourceStaNo;
-
-    private Integer staNo;
-
-    private Integer crnNo;
 
     private String locNo;
 
     private Integer workNo;
 
+    private Integer taskPri;
+
 }
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index fd01bf3..dc6ca52 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,18 +1,25 @@
 package com.zy.common.service;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
 import com.zy.asrs.domain.param.*;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.NavigateUtils;
 import com.zy.core.News;
 import com.zy.core.enums.WrkIoType;
 import com.zy.core.enums.WrkStsType;
+import com.zy.core.model.StationObjModel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.List;
 
 @Slf4j
 @Service
@@ -24,6 +31,12 @@
     private WrkLastnoService wrkLastnoService;
     @Autowired
     private LocMastService locMastService;
+    @Autowired
+    private BasCrnpService basCrnpService;
+    @Autowired
+    private NavigateUtils navigateUtils;
+    @Autowired
+    private CommonService commonService;
 
     /**
      * 鐢熸垚宸ヤ綔鍙�
@@ -61,35 +74,6 @@
             }
         }
         return workNo;
-    }
-
-    //妫�娴嬪伐浣滃彿鏄惁鍦ㄦ寚瀹氱被鍨嬪伐浣滆寖鍥村唴
-    public synchronized boolean checkWorkNoContainMk(Integer workNo, Integer wrkMk) {
-        WrkLastno wrkLastno = wrkLastnoService.selectById(wrkMk);
-        if (Cools.isEmpty(wrkLastno)) {
-            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
-        }
-
-        int sNo = wrkLastno.getSNo();
-        int eNo = wrkLastno.getENo();
-        if (workNo >= sNo && workNo <= eNo) {
-            return true;
-        }
-        return false;
-    }
-
-    public static String zerofill(String msg, Integer count) {
-        if (msg.length() == count) {
-            return msg;
-        } else if (msg.length() > count) {
-            return msg.substring(0, 16);
-        } else {
-            StringBuilder msgBuilder = new StringBuilder(msg);
-            for(int i = 0; i < count - msg.length(); ++i) {
-                msgBuilder.insert(0, "0");
-            }
-            return msgBuilder.toString();
-        }
     }
 
     public boolean completeTask(CompleteTaskParam param) {
@@ -203,6 +187,11 @@
             ioPri = param.getTaskPri().doubleValue();
         }
 
+        Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+        if (crnNo == null) {
+            throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+        }
+
         // 鑾峰彇宸ヤ綔鍙�
         int workNo = getWorkNo(WrkIoType.IN.id);
         // 淇濆瓨宸ヤ綔妗�
@@ -216,6 +205,8 @@
         wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
         wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
         wrkMast.setWmsWrkNo(param.getTaskNo());
+        wrkMast.setBarcode(param.getBarcode());
+        wrkMast.setCrnNo(crnNo);
         wrkMast.setAppeTime(now);
         wrkMast.setModiTime(now);
         boolean res = wrkMastService.insert(wrkMast);
@@ -248,6 +239,11 @@
             ioPri = param.getTaskPri().doubleValue();
         }
 
+        Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+        if (crnNo == null) {
+            throw new CoolException("鏈壘鍒板搴斿爢鍨涙満");
+        }
+
         // 鑾峰彇宸ヤ綔鍙�
         int workNo = getWorkNo(WrkIoType.OUT.id);
         // 淇濆瓨宸ヤ綔妗�
@@ -258,8 +254,11 @@
         wrkMast.setIoType(WrkIoType.OUT.id); // 鍏ュ嚭搴撶姸鎬侊細 101.鍑哄簱
         wrkMast.setIoPri(ioPri);
         wrkMast.setSourceLocNo(param.getSourceLocNo()); // 婧愬簱浣�
+        wrkMast.setSourceStaNo(param.getSourceStaNo());//婧愮珯
         wrkMast.setStaNo(param.getStaNo());//鐩爣绔�
         wrkMast.setWmsWrkNo(param.getTaskNo());
+        wrkMast.setBarcode(param.getBarcode());
+        wrkMast.setCrnNo(crnNo);
         wrkMast.setAppeTime(now);
         wrkMast.setModiTime(now);
         boolean res = wrkMastService.insert(wrkMast);
@@ -275,4 +274,66 @@
         return true;
     }
 
+    public Integer findCrnNoByLocNo(String locNo) {
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+        for (BasCrnp basCrnp : basCrnps) {
+            String controlRows = basCrnp.getControlRows();
+            if (Cools.isEmpty(controlRows)) {
+                continue;
+            }
+
+            List<Integer> rowList = JSON.parseArray(controlRows, Integer.class);
+            if(rowList.contains(Utils.getRow(locNo))) {
+                return basCrnp.getCrnNo();
+            }
+        }
+        return null;
+    }
+
+    public Integer findInStationId(Integer crnNo, Integer sourceStationId) {
+        BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+        if(basCrnp == null) {
+            return null;
+        }
+
+        Integer targetStationId = null;
+        List<StationObjModel> stationList = basCrnp.getInStationList$();
+        for (StationObjModel stationObjModel : stationList) {
+            try {
+                String startLev = String.valueOf(sourceStationId).substring(0, 1);
+                List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), sourceStationId, stationObjModel.getStationId());
+                if(navigateNodes != null) {
+                    targetStationId = stationObjModel.getStationId();
+                    break;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return targetStationId;
+    }
+
+    public Integer findOutStationId(Integer crnNo, Integer targetStationId) {
+        BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", crnNo));
+        if(basCrnp == null) {
+            return null;
+        }
+
+        Integer finalSourceStationId = null;
+        List<StationObjModel> stationList = basCrnp.getOutStationList$();
+        for (StationObjModel stationObjModel : stationList) {
+            try {
+                String startLev = String.valueOf(targetStationId).substring(0, 1);
+                List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(Integer.parseInt(startLev), stationObjModel.getStationId(), targetStationId);
+                if(navigateNodes != null) {
+                    finalSourceStationId = stationObjModel.getStationId();
+                    break;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return finalSourceStationId;
+    }
+
 }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 3376856..cd49feb 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -1,29 +1,25 @@
 package com.zy.core;
 
-import com.zy.asrs.service.impl.MainServiceImpl;
+import com.core.common.SpringUtils;
+import com.zy.core.plugin.MainProcessPluginApi;
 import com.zy.core.properties.SystemProperties;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
-
 import javax.annotation.PreDestroy;
 
 /**
  * WCS涓绘祦绋�
- * Created by vincent on 2020/8/6
  */
-@Data
 @Slf4j
 @Component
 public class MainProcess {
 
-    @Autowired
-    private MainServiceImpl mainService;
+    @Value("${mainProcessPlugin}")
+    private String mainProcessPlugin;
+    private MainProcessPluginApi mainProcessPluginApi;
     // 鎵�灞炵嚎绋�
     private Thread thread;
-    // 棰戠巼
-    private int i = 0;
 
     /**
      * =====>>  寮�濮嬪伐浣�
@@ -32,15 +28,18 @@
         thread = new Thread(() -> {
             while (!Thread.currentThread().isInterrupted()) {
                 try {
-
-                    // 闂撮殧
-                    Thread.sleep(300);
+                    if (mainProcessPluginApi == null) {
+                        String className = mainProcessPlugin.contains(".") ? mainProcessPlugin : "com.zy.core.plugin." + mainProcessPlugin;
+                        Class<? extends MainProcessPluginApi> clazz = Class.forName(className).asSubclass(MainProcessPluginApi.class);
+                        mainProcessPluginApi = SpringUtils.getBean(clazz);
+                    }
 
                     // 绯荤粺杩愯鐘舵�佸垽鏂�
                     if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                         continue;
                     }
 
+                    mainProcessPluginApi.run();
                     // 闂撮殧
                     Thread.sleep(200);
                 } catch (Exception e) {
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index 1418e84..9bbda3a 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -20,6 +20,12 @@
     LOC_MAP_BASE("loc_map_base"),
 
     DEVICE_LOG_KEY("device_log_key_"),
+
+    GENERATE_FAKE_IN_TASK_LIMIT("generate_fake_in_task_limit_"),
+    GENERATE_FAKE_OUT_TASK_LIMIT("generate_fake_out_task_limit_"),
+    GENERATE_FAKE_IN_STATION_DATA_LIMIT("generate_fake_in_station_data_limit_"),
+    CHECK_OUT_STATION_STAY_TIME_OUT_LIMIT("check_out_station_stay_time_out_limit_"),
+    CHECK_IN_STATION_STAY_TIME_OUT_LIMIT("check_in_station_stay_time_out_limit_"),
     ;
 
     public String key;
diff --git a/src/main/java/com/zy/core/enums/WrkStsType.java b/src/main/java/com/zy/core/enums/WrkStsType.java
index d72f4b4..0d1e544 100644
--- a/src/main/java/com/zy/core/enums/WrkStsType.java
+++ b/src/main/java/com/zy/core/enums/WrkStsType.java
@@ -6,18 +6,15 @@
 
     NEW_INBOUND(1, "鐢熸垚鍏ュ簱浠诲姟"),
     INBOUND_DEVICE_RUN(2, "璁惧涓婅蛋"),
-    INBOUND_LIFT_RUN(3, "鎻愬崌鏈烘惉杩愪腑"),
-    INBOUND_LIFT_RUN_COMPLETE(4, "鎻愬崌鏈烘惉杩愬畬鎴�"),
-    INBOUND_SHUTTLE_RUN(5, "灏忚溅鎼繍涓�"),
-    INBOUND_SHUTTLE_RUN_COMPLETE(6, "灏忚溅鎼繍瀹屾垚"),
+    INBOUND_RUN(3, "璁惧鎼繍涓�"),
+    INBOUND_RUN_COMPLETE(4, "璁惧鎼繍瀹屾垚"),
     COMPLETE_INBOUND(9, "鍏ュ簱瀹屾垚"),
     SETTLE_INBOUND(10, "鍏ュ簱搴撳瓨鏇存柊"),
 
     NEW_OUTBOUND(101, "鐢熸垚鍑哄簱浠诲姟"),
-    OUTBOUND_SHUTTLE_RUN(102, "灏忚溅鎼繍涓�"),
-    OUTBOUND_SHUTTLE_RUN_COMPLETE(103, "灏忚溅鎼繍瀹屾垚"),
-    OUTBOUND_LIFT_RUN(104, "鎻愬崌鏈烘惉杩愪腑"),
-    OUTBOUND_LIFT_RUN_COMPLETE(105, "鎻愬崌鏈烘惉杩愬畬鎴�"),
+    OUTBOUND_RUN(102, "璁惧鎼繍涓�"),
+    OUTBOUND_RUN_COMPLETE(103, "璁惧鎼繍瀹屾垚"),
+    STATION_RUN(104, "绔欑偣杩愯涓�"),
     COMPLETE_OUTBOUND(109, "鍑哄簱瀹屾垚"),
     SETTLE_OUTBOUND(110, "鍑哄簱搴撳瓨鏇存柊"),
 
diff --git a/src/main/java/com/zy/core/model/StationObjModel.java b/src/main/java/com/zy/core/model/StationObjModel.java
new file mode 100644
index 0000000..cb29f2f
--- /dev/null
+++ b/src/main/java/com/zy/core/model/StationObjModel.java
@@ -0,0 +1,18 @@
+package com.zy.core.model;
+
+import lombok.Data;
+
+@Data
+public class StationObjModel {
+
+    private Integer deviceNo;
+    
+    private Integer stationId;
+
+    private Integer deviceRow;
+
+    private Integer deviceBay;
+
+    private Integer deviceLev;
+
+}
diff --git a/src/main/java/com/zy/core/model/command/CrnCommand.java b/src/main/java/com/zy/core/model/command/CrnCommand.java
index c31a1e9..7bf7df9 100644
--- a/src/main/java/com/zy/core/model/command/CrnCommand.java
+++ b/src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -41,12 +41,6 @@
     // 婧愪綅缃眰鍙�
     private Short sourcePosZ = 0;
 
-    // 婧愮珯
-    private Short sourceStaNo = 0;
-
-    // 婧愬贩閬�
-    private Short sourceLane = 0;
-
     // 鐩爣浣嶇疆鎺掑彿
     private Short destinationPosX = 0;
 
@@ -55,12 +49,6 @@
 
     // 鐩爣浣嶇疆灞傚彿
     private Short destinationPosZ = 0;
-
-    // 鐩爣绔�
-    private Short destinationStaNo = 0;
-
-    // 鐩爣宸烽亾
-    private Short destinationLane = 0;
 
     // 浠诲姟纭 0锛氭湭纭 1锛氬凡纭
     private Short command = 0;
diff --git a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
index b1281e2..1ec6b2d 100644
--- a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
@@ -6,6 +6,7 @@
 import com.zy.asrs.entity.DeviceConfig;
 import com.zy.common.model.NavigateNode;
 import com.zy.common.utils.NavigateUtils;
+import com.zy.core.News;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.command.StationCommand;
 import com.zy.core.network.api.ZyStationConnectApi;
@@ -26,7 +27,7 @@
     private final DeviceConfig deviceConfig;
     // 鍏佽骞惰鎵ц澶氫釜鍛戒护浠诲姟锛堝浐瀹氱嚎绋嬫睜锛夈�傚闇�鏇撮珮骞跺彂鍙皟鏁村ぇ灏忋��
     private final ExecutorService executor = Executors
-            .newFixedThreadPool(Math.max(2, Runtime.getRuntime().availableProcessors()));
+            .newFixedThreadPool(9999);
 
     public ZyStationFakeConnect(DeviceConfig deviceConfig) {
         this.deviceConfig = deviceConfig;
@@ -77,8 +78,28 @@
     }
 
     private void handleCommand(StationCommand command) {
+        News.info("[WCS Debug] 绔欑偣浠跨湡妯℃嫙宸插惎鍔紝鍛戒护鏁版嵁={}", JSON.toJSONString(command));
+        Integer taskNo = command.getTaskNo();
         Integer stationId = command.getStationId();
         Integer targetStationId = command.getTargetStaNo();
+
+        if(taskNo == 0 && targetStationId == 0){
+            //娓呯┖绔欑偣
+            resetStation(stationId);
+            return;
+        }
+
+        if (taskNo == 9999 && targetStationId == 0) {
+            //鐢熸垚浠跨湡鏁版嵁
+            generateFakeData(stationId, taskNo);
+            return;
+        }
+
+        if (taskNo == 9998 && targetStationId == 0) {
+            //鐢熸垚鍑哄簱绔欑偣浠跨湡鏁版嵁
+            generateFakeOutStationData(stationId);
+            return;
+        }
 
         String startLev = String.valueOf(stationId).substring(0, 1);
         String endLev = String.valueOf(targetStationId).substring(0, 1);
@@ -88,6 +109,40 @@
         }else {
             diffLevCommand(command);
         }
+    }
+
+    private void generateFakeData(Integer stationId, Integer taskNo) {
+        ZyStationStatusEntity status = statusList.stream()
+                .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
+        if (status == null) {
+            return;
+        }
+
+        status.setTaskNo(taskNo);
+        status.setLoading(true);
+        status.setBarcode(String.valueOf(System.currentTimeMillis()));
+    }
+
+    private void generateFakeOutStationData(Integer stationId) {
+        ZyStationStatusEntity status = statusList.stream()
+                .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
+        if (status == null) {
+            return;
+        }
+
+        status.setLoading(true);
+    }
+
+    private void resetStation(Integer stationId) {
+        ZyStationStatusEntity status = statusList.stream()
+                .filter(item -> item.getStationId().equals(stationId)).findFirst().orElse(null);
+        if (status == null) {
+            return;
+        }
+
+        status.setTaskNo(0);
+        status.setLoading(false);
+        status.setBarcode("");
     }
 
     private void currentLevCommand(StationCommand command) {
@@ -114,7 +169,7 @@
             return;
         }
 
-        stationMove(navigateNodes, taskNo, targetStationId);
+        stationMove(navigateNodes, taskNo, targetStationId, false);
     }
 
     private void diffLevCommand(StationCommand command) {
@@ -189,11 +244,11 @@
             return;
         }
 
-        stationMove(navigateNodes, taskNo, stationId);
-        stationMove(targetNavigateNodes, taskNo, targetStationId);
+        stationMove(navigateNodes, taskNo, stationId, true);
+        stationMove(targetNavigateNodes, taskNo, targetStationId, false);
     }
 
-    private void stationMove(List<NavigateNode> navigateNodes, Integer taskNo, Integer targetStationId) {
+    private void stationMove(List<NavigateNode> navigateNodes, Integer taskNo, Integer targetStationId, boolean clearData) {
         Integer lastStationId = null;
         for (int i = 0; i < navigateNodes.size(); i++) {
             NavigateNode navigateNode = navigateNodes.get(i);
@@ -213,7 +268,7 @@
                         continue;
                     }
 
-                    if (nextStatus.getTaskNo() == 0) {
+                    if (nextStatus.getTaskNo() == 0 || nextStatus.getTaskNo() == 9999) {
                         break;
                     }
 
@@ -221,12 +276,6 @@
                 }
             } catch (Exception e) {
                 continue;
-            }
-
-            synchronized (status) {
-                status.setTaskNo(taskNo);
-                status.setTargetStaNo(targetStationId);
-                status.setLoading(true);
             }
 
             if (lastStationId != null) {
@@ -241,20 +290,29 @@
                     }
                 }
             }
+
+            synchronized (status) {
+                status.setTaskNo(taskNo);
+                status.setTargetStaNo(targetStationId);
+                status.setLoading(true);
+            }
+
             lastStationId = currentStationId;
             sleep(1000);
         }
 
-        sleep(10000);
-        if (lastStationId != null) {
-            Integer finalLastStationId = lastStationId;
-            ZyStationStatusEntity lastStatus = statusList.stream()
-                    .filter(item -> item.getStationId().equals(finalLastStationId)).findFirst().orElse(null);
-            if (lastStatus != null) {
-                synchronized (lastStatus) {
-                    lastStatus.setTaskNo(0);
-                    lastStatus.setTargetStaNo(0);
-                    lastStatus.setLoading(false);
+        if (clearData) {
+            sleep(10000);
+            if (lastStationId != null) {
+                Integer finalLastStationId = lastStationId;
+                ZyStationStatusEntity lastStatus = statusList.stream()
+                        .filter(item -> item.getStationId().equals(finalLastStationId)).findFirst().orElse(null);
+                if (lastStatus != null) {
+                    synchronized (lastStatus) {
+                        lastStatus.setTaskNo(0);
+                        lastStatus.setTargetStaNo(0);
+                        lastStatus.setLoading(false);
+                    }
                 }
             }
         }
diff --git a/src/main/java/com/zy/core/plugin/FakeProcess.java b/src/main/java/com/zy/core/plugin/FakeProcess.java
new file mode 100644
index 0000000..c6c7532
--- /dev/null
+++ b/src/main/java/com/zy/core/plugin/FakeProcess.java
@@ -0,0 +1,573 @@
+package com.zy.core.plugin;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.domain.param.CreateInTaskParam;
+import com.zy.asrs.domain.param.CreateOutTaskParam;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.common.model.StartupDto;
+import com.zy.common.service.CommonService;
+import com.zy.common.utils.HttpHandler;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.*;
+import com.zy.core.model.StationObjModel;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.thread.CrnThread;
+import com.zy.core.thread.StationThread;
+import com.zy.core.utils.CrnOperateProcessUtils;
+import com.zy.core.utils.StationOperateProcessUtils;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Slf4j
+@Component
+public class FakeProcess implements MainProcessPluginApi {
+
+    private static Map<Integer,Long> stationStayTimeMap = new HashMap<>();
+    private static String enableFake = "N";
+
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private BasDevpService basDevpService;
+    @Autowired
+    private ConfigService configService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private BasCrnpService basCrnpService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private CrnOperateProcessUtils crnOperateUtils;
+    @Autowired
+    private StationOperateProcessUtils stationOperateProcessUtils;
+
+    @Override
+    public void run() {
+        Config enableFakeConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "enableFake"));
+        if (enableFakeConfig != null) {
+            enableFake = enableFakeConfig.getValue();
+        }
+
+        //妫�娴嬪叆搴撶珯鏄惁鏈変换鍔$敓鎴愶紝骞朵豢鐪熺敓鎴愭ā鎷熷叆搴撶珯鐐规暟鎹�
+        checkInStationHasTask();
+        //鐢熸垚浠跨湡妯℃嫙鍏ュ簱浠诲姟
+        generateFakeInTask();
+        //鐢熸垚浠跨湡妯℃嫙鍑哄簱浠诲姟
+        generateFakeOutTask();
+        //璁$畻鎵�鏈夌珯鐐瑰仠鐣欐椂闂�
+        calcAllStationStayTime();
+        //妫�娴嬪嚭搴撶珯鐐瑰仠鐣欐槸鍚﹁秴鏃�
+        checkOutStationStayTimeOut();
+        //妫�娴嬪叆搴撶珯鐐瑰爢鍨涙満鏄惁鍙栬蛋璐х墿
+        checkInStationCrnTake();
+
+        //璇锋眰鐢熸垚鍏ュ簱浠诲姟
+        generateStoreWrkFile();
+        //鎵ц鍫嗗灈鏈轰换鍔�
+        crnOperateUtils.crnIoExecute();
+        //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�-鍏峰浠跨湡鑳藉姏
+        crnIoExecuteFinish();
+        //鎵ц杈撻�佺珯鐐瑰叆搴撲换鍔�
+        stationOperateProcessUtils.stationInExecute();
+        //鎵ц杈撻�佺珯鐐瑰嚭搴撲换鍔�
+        stationOperateProcessUtils.stationOutExecute();
+        //妫�娴嬭緭閫佺珯鐐瑰嚭搴撲换鍔℃墽琛屽畬鎴�
+        stationOperateProcessUtils.stationOutExecuteFinish();
+    }
+
+    //妫�娴嬪叆搴撶珯鏄惁鏈変换鍔$敓鎴愶紝骞朵豢鐪熺敓鎴愭ā鎷熷叆搴撶珯鐐规暟鎹�
+    private synchronized void checkInStationHasTask() {
+        if (!enableFake.equals("Y")) {
+            return;
+        }
+
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+            if(stationThread == null){
+                continue;
+            }
+
+            Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+            List<StationObjModel> list = basDevp.getInStationList$();
+            for (StationObjModel entity : list) {
+                Integer stationId = entity.getStationId();
+                if(!stationMap.containsKey(stationId)){
+                    continue;
+                }
+
+                StationProtocol stationProtocol = stationMap.get(stationId);
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                Object object = redisUtil.get(RedisKeyType.GENERATE_FAKE_IN_STATION_DATA_LIMIT.key + stationId);
+                if (object != null) {
+                    continue;
+                }
+
+                //婊¤冻鑷姩銆佹棤鐗┿�佸伐浣滃彿0锛岀敓鎴愬叆搴撴暟鎹�
+                if (stationProtocol.isAutoing()
+                        && !stationProtocol.isLoading()
+                        && stationProtocol.getTaskNo() == 0
+                ) {
+                    StationCommand command = stationThread.getMoveCommand(9999, stationId, 0, 0);
+                    MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
+                    redisUtil.set(RedisKeyType.GENERATE_FAKE_IN_STATION_DATA_LIMIT.key + stationId, "lock", 10);
+                }
+            }
+        }
+    }
+
+    //鐢熸垚浠跨湡妯℃嫙鍏ュ簱浠诲姟
+    private synchronized void generateFakeInTask() {
+        if (!enableFake.equals("Y")) {
+            return;
+        }
+
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+            if(stationThread == null){
+                continue;
+            }
+
+            Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+            List<StationObjModel> list = basDevp.getInStationList$();
+            for (StationObjModel model : list) {
+                Integer stationId = model.getStationId();
+                if(!stationMap.containsKey(stationId)){
+                    continue;
+                }
+
+                StationProtocol stationProtocol = stationMap.get(stationId);
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                Object object = redisUtil.get(RedisKeyType.GENERATE_FAKE_IN_TASK_LIMIT.key + stationId);
+                if (object != null) {
+                    return;
+                }
+
+                //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿9999锛岀敓鎴愬叆搴撴暟鎹�
+                if (stationProtocol.isAutoing()
+                        && stationProtocol.isLoading()
+                        && stationProtocol.getTaskNo() == 9999
+                ) {
+                    //妫�娴嬩换鍔℃槸鍚︾敓鎴�
+                    List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("barcode", stationProtocol.getBarcode()));
+                    if (!wrkMasts.isEmpty()) {
+                        continue;
+                    }
+
+                    List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", String.valueOf(LocStsType.O)));
+                    if (locMastList.isEmpty()) {
+                        continue;
+                    }
+
+                    int nextInt = new Random().nextInt(locMastList.size());
+                    LocMast locMast = locMastList.get(nextInt);
+
+                    Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+                    if (crnNo == null) {
+                        continue;
+                    }
+
+                    Integer targetStationId = commonService.findInStationId(crnNo, stationId);
+                    if (targetStationId == null) {
+                        continue;
+                    }
+
+                    CreateInTaskParam taskParam = new CreateInTaskParam();
+                    taskParam.setTaskNo(String.valueOf(commonService.getWorkNo(WrkIoType.IN.id)));
+                    taskParam.setSourceStaNo(stationId);
+                    taskParam.setStaNo(targetStationId);
+                    taskParam.setLocNo(locMast.getLocNo());
+                    taskParam.setBarcode(stationProtocol.getBarcode());
+                    boolean result = commonService.createInTask(taskParam);
+
+                    redisUtil.set(RedisKeyType.GENERATE_FAKE_IN_TASK_LIMIT.key + stationId, "lock", 5);
+                }
+            }
+        }
+    }
+
+    //鐢熸垚浠跨湡妯℃嫙鍑哄簱浠诲姟
+    private synchronized void generateFakeOutTask() {
+        if (!enableFake.equals("Y")) {
+            return;
+        }
+
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+            if(stationThread == null){
+                continue;
+            }
+
+            Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+            List<StationObjModel> list = basDevp.getOutStationList$();
+            for (StationObjModel entity : list) {
+                Integer stationId = entity.getStationId();
+                if(!stationMap.containsKey(stationId)){
+                    continue;
+                }
+
+                StationProtocol stationProtocol = stationMap.get(stationId);
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                Object object = redisUtil.get(RedisKeyType.GENERATE_FAKE_OUT_TASK_LIMIT.key + stationId);
+                if(object != null){
+                    return;
+                }
+
+                //婊¤冻鑷姩銆佹棤鐗┿�佸伐浣滃彿0锛岀敓鎴愬嚭搴撴暟鎹�
+                if (stationProtocol.isAutoing()
+                        && !stationProtocol.isLoading()
+                        && stationProtocol.getTaskNo() == 0
+                ) {
+                    List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", String.valueOf(LocStsType.F)));
+                    if (locMastList.isEmpty()) {
+                        continue;
+                    }
+
+                    LocMast locMast = locMastList.get(0);
+
+                    Integer crnNo = commonService.findCrnNoByLocNo(locMast.getLocNo());
+                    if (crnNo == null) {
+                        continue;
+                    }
+
+                    Integer sourceStationId = commonService.findOutStationId(crnNo, stationId);
+                    if (sourceStationId == null) {
+                        continue;
+                    }
+
+                    CreateOutTaskParam taskParam = new CreateOutTaskParam();
+                    taskParam.setTaskNo(String.valueOf(commonService.getWorkNo(WrkIoType.OUT.id)));
+                    taskParam.setSourceStaNo(sourceStationId);
+                    taskParam.setStaNo(stationId);
+                    taskParam.setSourceLocNo(locMast.getLocNo());
+                    taskParam.setBarcode(locMast.getBarcode());
+                    boolean result = commonService.createOutTask(taskParam);
+                    redisUtil.set(RedisKeyType.GENERATE_FAKE_OUT_TASK_LIMIT.key + stationId, "lock", 15);
+                }
+            }
+        }
+    }
+
+    /**
+     * 璇锋眰鐢熸垚鍏ュ簱浠诲姟
+     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗�
+     */
+    public synchronized void generateStoreWrkFile() {
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+            if(stationThread == null){
+                continue;
+            }
+
+            Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+            List<StationObjModel> list = basDevp.getInStationList$();
+            for (StationObjModel entity : list) {
+                Integer stationId = entity.getStationId();
+                if(!stationMap.containsKey(stationId)){
+                    continue;
+                }
+
+                StationProtocol stationProtocol = stationMap.get(stationId);
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿9999锛岀敓鎴愬叆搴撴暟鎹�
+                if (stationProtocol.isAutoing()
+                        && stationProtocol.isLoading()
+                        && stationProtocol.getTaskNo() == 9999
+                ) {
+                    //妫�娴嬩换鍔℃槸鍚︾敓鎴�
+                    List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("barcode", stationProtocol.getBarcode()));
+                    if (!wrkMasts.isEmpty()) {
+                        continue;
+                    }
+
+                    String wmsUrl = null;
+                    Config wmsSystemUriConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "wmsSystemUri"));
+                    if (wmsSystemUriConfig != null) {
+                        wmsUrl = wmsSystemUriConfig.getValue();
+                    }
+
+                    if(wmsUrl == null){
+                        News.error("鏈厤缃甒MS绯荤粺URI锛岄厤缃枃浠禖ode缂栫爜锛歸msSystemUri");
+                        return;
+                    }
+
+                    String wmsSystemInUrl = null;
+                    Config wmsSystemInUrlConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "wmsSystemInUrl"));
+                    if (wmsSystemInUrlConfig != null) {
+                        wmsSystemInUrl = wmsSystemInUrlConfig.getValue();
+                    }
+
+                    if(wmsSystemInUrlConfig == null){
+                        News.error("鏈厤缃甒MS鍏ュ簱鎺ュ彛鍦板潃锛岄厤缃枃浠禖ode缂栫爜锛歸msSystemInUrl");
+                        return;
+                    }
+
+                    try {
+                        HashMap<String, Object> param = new HashMap<>();
+                        param.put("barcode", stationProtocol.getBarcode());
+                        param.put("ioType", 1);
+                        param.put("sourceStaNo", stationProtocol.getStationId());
+                        param.put("locType1", stationProtocol.getPalletHeight());
+
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath(wmsSystemInUrl)
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        if (jsonObject.getInteger("code").equals(200)) {
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+                            CreateInTaskParam taskParam = new CreateInTaskParam();
+                            taskParam.setTaskNo(String.valueOf(dto.getWorkNo()));
+                            taskParam.setLocNo(dto.getLocNo());
+                            taskParam.setTaskPri(dto.getTaskPri());
+                            boolean result = commonService.createInTask(taskParam);
+                        } else {
+                            News.error("璇锋眰WMS鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+
+    //璁$畻鎵�鏈夌珯鐐瑰仠鐣欐椂闂�
+    public synchronized void calcAllStationStayTime() {
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+            if (stationThread == null) {
+                continue;
+            }
+
+            List<StationProtocol> list = stationThread.getStatus();
+            for (StationProtocol stationProtocol : list) {
+                if (stationProtocol.getTaskNo() > 0 && !stationStayTimeMap.containsKey(stationProtocol.getStationId())) {
+                    stationStayTimeMap.put(stationProtocol.getStationId(), System.currentTimeMillis());
+                }
+
+                if(stationProtocol.getTaskNo() <= 0 && stationStayTimeMap.containsKey(stationProtocol.getStationId())) {
+                    stationStayTimeMap.remove(stationProtocol.getStationId());
+                }
+            }
+        }
+    }
+
+    //妫�娴嬪嚭搴撶珯鐐瑰仠鐣欐槸鍚﹁秴鏃�
+    public synchronized void checkOutStationStayTimeOut() {
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            List<StationObjModel> outStationList = basDevp.getOutStationList$();
+            if(outStationList.isEmpty()){
+                News.info("杈撻�佺嚎:{} 鍑哄簱绔欑偣鏈缃�", basDevp.getDevpNo());
+                continue;
+            }
+
+            for (StationObjModel stationObjModel : outStationList) {
+                Object lock = redisUtil.get(RedisKeyType.CHECK_OUT_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId());
+                if(lock != null){
+                    continue;
+                }
+
+                Long stayTime = stationStayTimeMap.get(stationObjModel.getStationId());
+                if (stayTime == null) {
+                    continue;
+                }
+
+                if(System.currentTimeMillis() - stayTime > 1000 * 15) {
+                    StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+                    if(stationThread == null){
+                        continue;
+                    }
+
+                    StationCommand command = stationThread.getMoveCommand(0, stationObjModel.getStationId(), 0, 0);
+                    if(command == null){
+                        continue;
+                    }
+
+                    MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+                    redisUtil.set(RedisKeyType.CHECK_OUT_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId(), "lock",10);
+                    News.info("杈撻�佺珯鐐归噸缃懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽懡浠ゆ暟鎹�={}", stationObjModel.getStationId(), JSON.toJSONString(command));
+                }
+            }
+        }
+    }
+
+    //妫�娴嬪叆搴撶珯鐐瑰爢鍨涙満鏄惁鍙栬蛋璐х墿
+    public synchronized void checkInStationCrnTake() {
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+        for (BasCrnp basCrnp : basCrnps) {
+            List<StationObjModel> inStationList = basCrnp.getInStationList$();
+            if(inStationList.isEmpty()){
+                News.info("鍫嗗灈鏈�:{} 鍏ュ簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+                continue;
+            }
+
+            for (StationObjModel stationObjModel : inStationList) {
+                Object lock = redisUtil.get(RedisKeyType.CHECK_IN_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId());
+                if(lock != null){
+                    continue;
+                }
+
+                StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+                if(stationThread == null){
+                    continue;
+                }
+
+                StationCommand command = stationThread.getMoveCommand(0, stationObjModel.getStationId(), 0, 0);
+                if(command == null){
+                    continue;
+                }
+
+                Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
+                StationProtocol stationProtocol = statusMap.get(stationObjModel.getStationId());
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                if(stationProtocol.getTaskNo() > 0) {
+                    WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
+                    if (wrkMast == null) {
+                        MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+                        redisUtil.set(RedisKeyType.CHECK_IN_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId(), "lock",10);
+                        News.info("杈撻�佺珯鐐归噸缃懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽懡浠ゆ暟鎹�={}", stationObjModel.getStationId(), JSON.toJSONString(command));
+                    }else {
+                        if (wrkMast.getWrkSts() != WrkStsType.NEW_INBOUND.sts && wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts) {
+                            Integer crnNo = wrkMast.getCrnNo();
+                            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo);
+                            if (crnThread == null) {
+                                continue;
+                            }
+                            CrnProtocol crnProtocol = crnThread.getStatus();
+                            if (crnProtocol.getStatusType().equals(CrnStatusType.FETCH_MOVING) || crnProtocol.getStatusType().equals(CrnStatusType.FETCHING)) {
+                                continue;
+                            }
+
+                            MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+                            redisUtil.set(RedisKeyType.CHECK_IN_STATION_STAY_TIME_OUT_LIMIT.key + stationObjModel.getStationId(), "lock",10);
+                            News.info("杈撻�佺珯鐐归噸缃懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽懡浠ゆ暟鎹�={}", stationObjModel.getStationId(), JSON.toJSONString(command));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
+    public synchronized void crnIoExecuteFinish() {
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+        for (BasCrnp basCrnp : basCrnps) {
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
+            if(crnThread == null){
+                continue;
+            }
+
+            CrnProtocol crnProtocol = crnThread.getStatus();
+            if(crnProtocol == null){
+                continue;
+            }
+
+            if (crnProtocol.getMode() == CrnModeType.AUTO.id
+                    && crnProtocol.getTaskNo() > 0
+                    && crnProtocol.getStatus() == CrnStatusType.WAITING.id
+            ) {
+
+                // 鑾峰彇寰呯‘璁ゅ伐浣滄。
+                WrkMast wrkMast = wrkMastService.selectByWorkNo(crnProtocol.getTaskNo());
+                if (wrkMast == null) {
+                    News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                    continue;
+                }
+
+                Long updateWrkSts = null;
+                if(wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts){
+                    updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
+                }else if(wrkMast.getWrkSts() == WrkStsType.OUTBOUND_RUN.sts){
+                    updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
+
+                    //鐢熸垚浠跨湡绔欑偣鏁版嵁
+                    List<StationObjModel> outStationList = basCrnp.getOutStationList$();
+                    if(outStationList.isEmpty()){
+                        News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+                        continue;
+                    }
+
+                    for (StationObjModel stationObjModel : outStationList) {
+                        if (!stationObjModel.getStationId().equals(wrkMast.getSourceStaNo())) {
+                            continue;
+                        }
+
+                        StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+                        if (stationThread == null) {
+                            continue;
+                        }
+                        //鐢熸垚浠跨湡绔欑偣鏁版嵁
+                        StationCommand command = stationThread.getMoveCommand(9998, wrkMast.getSourceStaNo(), 0, 0);
+                        MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+                    }
+                }else{
+                    News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                    continue;
+                }
+
+                wrkMast.setWrkSts(updateWrkSts);
+                wrkMast.setSystemMsg("");
+                wrkMast.setIoTime(new Date());
+                if (wrkMastService.updateById(wrkMast)) {
+                    CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getCrnNo());
+                    MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
+                    News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                }
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/plugin/MainProcessPluginApi.java b/src/main/java/com/zy/core/plugin/MainProcessPluginApi.java
new file mode 100644
index 0000000..4eb6cc3
--- /dev/null
+++ b/src/main/java/com/zy/core/plugin/MainProcessPluginApi.java
@@ -0,0 +1,7 @@
+package com.zy.core.plugin;
+
+public interface MainProcessPluginApi {
+
+    void run();
+
+}
diff --git a/src/main/java/com/zy/core/plugin/NormalProcess.java b/src/main/java/com/zy/core/plugin/NormalProcess.java
new file mode 100644
index 0000000..28979e7
--- /dev/null
+++ b/src/main/java/com/zy/core/plugin/NormalProcess.java
@@ -0,0 +1,28 @@
+package com.zy.core.plugin;
+
+import com.alibaba.fastjson.JSON;
+import com.zy.asrs.service.BasMapService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component
+public class NormalProcess implements MainProcessPluginApi{
+
+    @Autowired
+    private BasMapService basMapService;
+
+    @Override
+    public void run() {
+        getLevList();
+    }
+
+    private void getLevList() {
+        List<Integer> list = basMapService.getLevList();
+        System.out.println(JSON.toJSONString(list));
+    }
+
+}
diff --git a/src/main/java/com/zy/core/thread/StationThread.java b/src/main/java/com/zy/core/thread/StationThread.java
index fd98cc7..3fe7659 100644
--- a/src/main/java/com/zy/core/thread/StationThread.java
+++ b/src/main/java/com/zy/core/thread/StationThread.java
@@ -5,11 +5,14 @@
 import com.zy.core.model.command.StationCommand;
 import com.zy.core.model.protocol.StationProtocol;
 import java.util.List;
+import java.util.Map;
 
 public interface StationThread extends ThreadHandler {
 
     List<StationProtocol> getStatus();
 
+    Map<Integer, StationProtocol> getStatusMap();
+
     StationCommand getMoveCommand(Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize);
 
     CommandResponse sendCommand(StationCommand command);
diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
index ee135e2..d805c8b 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
@@ -191,6 +191,8 @@
                 basCrnp = new BasCrnp();
                 basCrnp.setCrnNo(deviceConfig.getDeviceNo());
                 basCrnp.setStatus(1);
+                basCrnp.setInEnable("N");
+                basCrnp.setOutEnable("N");
                 basCrnp.setCreateTime(new Date());
                 basCrnpService.insert(basCrnp);
             }
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
index 68cbd91..5cfe421 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -24,9 +24,7 @@
 import com.zy.core.network.entity.ZyStationStatusEntity;
 
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -172,4 +170,12 @@
        return commandResponse;
     }
 
+    @Override
+    public Map<Integer, StationProtocol> getStatusMap() {
+        Map<Integer, StationProtocol> map = new HashMap<>();
+        for (StationProtocol stationProtocol : statusList) {
+            map.put(stationProtocol.getStationId(), stationProtocol);
+        }
+        return map;
+    }
 }
diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
new file mode 100644
index 0000000..c8b5024
--- /dev/null
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -0,0 +1,316 @@
+package com.zy.core.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.utils.Utils;
+import com.zy.core.News;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.CrnModeType;
+import com.zy.core.enums.CrnStatusType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.WrkStsType;
+import com.zy.core.model.StationObjModel;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.thread.CrnThread;
+import com.zy.core.thread.StationThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class CrnOperateProcessUtils {
+
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private BasCrnpService basCrnpService;
+    @Autowired
+    private LocMastService locMastService;
+
+    //鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
+    public synchronized void crnIoExecute() {
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+        for (BasCrnp basCrnp : basCrnps) {
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
+            if(crnThread == null){
+                continue;
+            }
+
+            CrnProtocol crnProtocol = crnThread.getStatus();
+            if(crnProtocol == null){
+                continue;
+            }
+
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                    .eq("crn_no", basCrnp.getCrnNo())
+                    .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts)
+            );
+            if(!wrkMasts.isEmpty()){
+                continue;
+            }
+
+            // 鍙湁褰撳爢鍨涙満绌洪棽 骞朵笖 鏃犱换鍔℃椂鎵嶇户缁墽琛�
+            if (crnProtocol.getMode() == CrnModeType.AUTO.id
+                    && crnProtocol.getTaskNo() == 0
+                    && crnProtocol.getStatus() == CrnStatusType.IDLE.id
+                    && crnProtocol.getLoaded() == 0
+                    && crnProtocol.getForkPos() == 0
+                    && crnProtocol.getAlarm() == 0
+            ) {
+                // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
+                if (crnProtocol.getLastIo().equals("I")) {
+                    if (basCrnp.getInEnable().equals("Y")) {
+                        this.crnExecuteIn(basCrnp, crnThread); //  鍏ュ簱
+                        crnProtocol.setLastIo("O");
+                    } else if (basCrnp.getOutEnable().equals("Y")) {
+                        this.crnExecuteOut(basCrnp, crnThread); //  鍑哄簱
+                        crnProtocol.setLastIo("I");
+                    }
+                }
+                // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
+                else if (crnProtocol.getLastIo().equals("O")) {
+                    if (basCrnp.getOutEnable().equals("Y")) {
+                        this.crnExecuteOut(basCrnp, crnThread); //  鍑哄簱
+                        crnProtocol.setLastIo("I");
+                    } else if (basCrnp.getInEnable().equals("Y")) {
+                        this.crnExecuteIn(basCrnp, crnThread); //  鍏ュ簱
+                        crnProtocol.setLastIo("O");
+                    }
+                }
+            }
+        }
+    }
+
+    private synchronized void crnExecuteIn(BasCrnp basCrnp, CrnThread crnThread) {
+        CrnProtocol crnProtocol = crnThread.getStatus();
+        if(crnProtocol == null){
+            return;
+        }
+
+        if(!basCrnp.getInEnable().equals("Y")){
+            News.info("鍫嗗灈鏈�:{} 鍙叆淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
+            return;
+        }
+
+        List<StationObjModel> inStationList = basCrnp.getInStationList$();
+        if(inStationList.isEmpty()){
+            News.info("鍫嗗灈鏈�:{} 鍏ュ簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+            return;
+        }
+
+        Integer crnNo = basCrnp.getCrnNo();
+
+        for (StationObjModel stationObjModel : inStationList) {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+            if (stationThread == null) {
+                continue;
+            }
+
+            Map<Integer, StationProtocol> stationProtocolMap = stationThread.getStatusMap();
+            StationProtocol stationProtocol = stationProtocolMap.get(stationObjModel.getStationId());
+            if (stationProtocol == null) {
+                continue;
+            }
+
+            if (!stationProtocol.isAutoing()) {
+                continue;
+            }
+
+            if (!stationProtocol.isLoading()) {
+                continue;
+            }
+
+            if (stationProtocol.getTaskNo() <= 0) {
+                continue;
+            }
+
+            if (!stationProtocol.isInEnable()) {
+                News.taskInfo(stationProtocol.getTaskNo(), "鍙栬揣绔欑偣:{} 娌℃湁鍙叆淇″彿", stationObjModel.getStationId());
+                continue;
+            }
+
+            // 鑾峰彇浠诲姟
+            WrkMast wrkMast = wrkMastService.selectByWorkNo(stationProtocol.getTaskNo());
+            if (null == wrkMast) {
+                News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟淇℃伅涓嶅瓨鍦�", stationProtocol.getTaskNo());
+                continue;
+            }
+
+            if(wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts){
+                News.taskInfo(stationProtocol.getTaskNo(), "宸ヤ綔鍙�:{} 浠诲姟鐘舵�佸紓甯�", stationProtocol.getTaskNo());
+                continue;
+            }
+
+            // 鑾峰彇搴撲綅淇℃伅
+            LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
+            if (locMast == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "鐩爣搴撲綅:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getLocNo());
+                continue;
+            }
+
+            if (!locMast.getLocSts().equals("S")) {
+                News.taskInfo(wrkMast.getWrkNo(), "鐩爣搴撲綅:{} 鐘舵�佸紓甯�", wrkMast.getLocNo());
+                continue;
+            }
+
+            String sourceLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
+
+            CrnCommand command = crnThread.getPickAndPutCommand(sourceLocNo, wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
+
+            wrkMast.setWrkSts(WrkStsType.INBOUND_RUN.sts);
+            wrkMast.setCrnNo(crnNo);
+            wrkMast.setSystemMsg("");
+            wrkMast.setIoTime(new Date());
+            if (wrkMastService.updateById(wrkMast)) {
+                MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
+                News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
+            }
+        }
+    }
+
+    private synchronized void crnExecuteOut(BasCrnp basCrnp, CrnThread crnThread) {
+        CrnProtocol crnProtocol = crnThread.getStatus();
+        if(crnProtocol == null){
+            return;
+        }
+
+        if(!basCrnp.getOutEnable().equals("Y")){
+            News.info("鍫嗗灈鏈�:{} 鍙嚭淇″彿涓嶆弧瓒�", basCrnp.getCrnNo());
+            return;
+        }
+
+        List<StationObjModel> outStationList = basCrnp.getOutStationList$();
+        if(outStationList.isEmpty()){
+            News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+            return;
+        }
+
+        Integer crnNo = basCrnp.getCrnNo();
+
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+                .eq("crn_no", crnNo)
+                .eq("wrk_sts", WrkStsType.NEW_OUTBOUND.sts)
+        );
+
+        for (WrkMast wrkMast : wrkMasts) {
+            for (StationObjModel stationObjModel : outStationList) {
+                StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+                if (stationThread == null) {
+                    continue;
+                }
+
+                Map<Integer, StationProtocol> stationProtocolMap = stationThread.getStatusMap();
+                StationProtocol stationProtocol = stationProtocolMap.get(stationObjModel.getStationId());
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                if (!stationProtocol.isAutoing()) {
+                    continue;
+                }
+
+                if (stationProtocol.isLoading()) {
+                    continue;
+                }
+
+                if (stationProtocol.getTaskNo() != 0) {
+                    continue;
+                }
+
+                if (!stationProtocol.isOutEnable()) {
+                    News.info("鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
+                    continue;
+                }
+
+                // 鑾峰彇搴撲綅淇℃伅
+                LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo());
+                if (locMast == null) {
+                    News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 淇℃伅涓嶅瓨鍦�", wrkMast.getSourceLocNo());
+                    continue;
+                }
+
+                if (!locMast.getLocSts().equals("R")) {
+                    News.taskInfo(wrkMast.getWrkNo(), "婧愬簱浣�:{} 鐘舵�佸紓甯�", wrkMast.getSourceLocNo());
+                    continue;
+                }
+
+                String targetLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
+
+                CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), targetLocNo, wrkMast.getWrkNo(), crnNo);
+
+                wrkMast.setWrkSts(WrkStsType.OUTBOUND_RUN.sts);
+                wrkMast.setCrnNo(crnNo);
+                wrkMast.setSystemMsg("");
+                wrkMast.setIoTime(new Date());
+                if (wrkMastService.updateById(wrkMast)) {
+                    MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, command));
+                    News.info("鍫嗗灈鏈哄懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", crnNo, JSON.toJSON(command));
+                    return;
+                }
+            }
+        }
+    }
+
+    //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
+    public synchronized void crnIoExecuteFinish() {
+        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
+        for (BasCrnp basCrnp : basCrnps) {
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
+            if(crnThread == null){
+                continue;
+            }
+
+            CrnProtocol crnProtocol = crnThread.getStatus();
+            if(crnProtocol == null){
+                continue;
+            }
+
+            if (crnProtocol.getMode() == CrnModeType.AUTO.id
+                    && crnProtocol.getTaskNo() > 0
+                    && crnProtocol.getStatus() == CrnStatusType.WAITING.id
+            ) {
+
+                // 鑾峰彇寰呯‘璁ゅ伐浣滄。
+                WrkMast wrkMast = wrkMastService.selectByWorkNo(crnProtocol.getTaskNo());
+                if (wrkMast == null) {
+                    News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                    continue;
+                }
+
+                Long updateWrkSts = null;
+                if(wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts){
+                    updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
+                }else if(wrkMast.getWrkSts() == WrkStsType.OUTBOUND_RUN.sts){
+                    updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
+                }else{
+                    News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                    continue;
+                }
+
+                wrkMast.setWrkSts(updateWrkSts);
+                wrkMast.setSystemMsg("");
+                wrkMast.setIoTime(new Date());
+                if (wrkMastService.updateById(wrkMast)) {
+                    CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getCrnNo());
+                    MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
+                    News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                }
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
new file mode 100644
index 0000000..a00dd68
--- /dev/null
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -0,0 +1,195 @@
+package com.zy.core.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.common.service.CommonService;
+import com.zy.core.News;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.WrkStsType;
+import com.zy.core.model.StationObjModel;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.thread.StationThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class StationOperateProcessUtils {
+
+    @Autowired
+    private BasDevpService basDevpService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private BasCrnpService basCrnpService;
+
+    //鎵ц杈撻�佺珯鐐瑰叆搴撲换鍔�
+    public synchronized void stationInExecute() {
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+        for (BasDevp basDevp : basDevps) {
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+            if(stationThread == null){
+                continue;
+            }
+
+            Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+
+            List<StationObjModel> list = basDevp.getInStationList$();
+            for (StationObjModel entity : list) {
+                Integer stationId = entity.getStationId();
+                if(!stationMap.containsKey(stationId)){
+                    continue;
+                }
+
+                StationProtocol stationProtocol = stationMap.get(stationId);
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿9999
+                if (stationProtocol.isAutoing()
+                        && stationProtocol.isLoading()
+                        && stationProtocol.getTaskNo() == 9999
+                ) {
+                    //妫�娴嬩换鍔℃槸鍚︾敓鎴�
+                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", stationProtocol.getBarcode()));
+                    if (wrkMast == null) {
+                        continue;
+                    }
+
+                    if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) {
+                        continue;
+                    }
+
+                    String locNo = wrkMast.getLocNo();
+                    Integer crnNo = commonService.findCrnNoByLocNo(locNo);
+                    if (crnNo == null) {
+                        News.taskInfo(wrkMast.getWrkNo(), "鏈尮閰嶅埌鍫嗗灈鏈�");
+                        continue;
+                    }
+
+                    Integer targetStationId = commonService.findInStationId(crnNo, stationId);
+                    if (targetStationId == null) {
+                        News.taskInfo(wrkMast.getWrkNo(), "鎼滅储鍏ュ簱绔欑偣澶辫触");
+                        continue;
+                    }
+
+                    StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationId, targetStationId, 0);
+                    if(command == null){
+                        News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
+                        continue;
+                    }
+
+                    wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
+                    wrkMast.setSourceStaNo(stationProtocol.getStationId());
+                    wrkMast.setStaNo(targetStationId);
+                    wrkMast.setSystemMsg("");
+                    wrkMast.setIoTime(new Date());
+                    if (wrkMastService.updateById(wrkMast)) {
+                        MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
+                        News.info("杈撻�佺珯鐐瑰叆搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}", stationId, wrkMast.getWrkNo(), JSON.toJSONString(command));
+                    }
+                }
+            }
+        }
+    }
+
+    //鎵ц杈撻�佺珯鐐瑰嚭搴撲换鍔�
+    public synchronized void stationOutExecute() {
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.OUTBOUND_RUN_COMPLETE.sts));
+        for (WrkMast wrkMast : wrkMasts) {
+            BasCrnp basCrnp = basCrnpService.selectOne(new EntityWrapper<BasCrnp>().eq("crn_no", wrkMast.getCrnNo()));
+            if (basCrnp == null) {
+                continue;
+            }
+
+            List<StationObjModel> outStationList = basCrnp.getOutStationList$();
+            if(outStationList.isEmpty()){
+                News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+                continue;
+            }
+
+            for (StationObjModel stationObjModel : outStationList) {
+                StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
+                if(stationThread == null){
+                    continue;
+                }
+
+                Map<Integer, StationProtocol> stationMap = stationThread.getStatusMap();
+                StationProtocol stationProtocol = stationMap.get(stationObjModel.getStationId());
+                if (stationProtocol == null) {
+                    continue;
+                }
+
+                //婊¤冻鑷姩銆佹湁鐗┿�佸伐浣滃彿0
+                if (stationProtocol.isAutoing()
+                        && stationProtocol.isLoading()
+                        && stationProtocol.getTaskNo() == 0
+                ) {
+                    StationCommand command = stationThread.getMoveCommand(wrkMast.getWrkNo(), stationProtocol.getStationId(), wrkMast.getStaNo(), 0);
+                    if(command == null){
+                        News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
+                        continue;
+                    }
+
+                    wrkMast.setWrkSts(WrkStsType.STATION_RUN.sts);
+                    wrkMast.setSystemMsg("");
+                    wrkMast.setIoTime(new Date());
+                    if (wrkMastService.updateById(wrkMast)) {
+                        MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+                        News.info("杈撻�佺珯鐐瑰嚭搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}", stationProtocol.getStationId(), wrkMast.getWrkNo(), JSON.toJSONString(command));
+                    }
+                }
+            }
+        }
+    }
+
+    //妫�娴嬭緭閫佺珯鐐瑰嚭搴撲换鍔℃墽琛屽畬鎴�
+    public synchronized void stationOutExecuteFinish() {
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", WrkStsType.STATION_RUN.sts));
+        for (WrkMast wrkMast : wrkMasts) {
+            Integer wrkNo = wrkMast.getWrkNo();
+
+            boolean complete = true;
+            List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>());
+            for (BasDevp basDevp : basDevps) {
+                StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basDevp.getDevpNo());
+                if (stationThread == null) {
+                    continue;
+                }
+
+                List<StationProtocol> list = stationThread.getStatus();
+                for (StationProtocol stationProtocol : list) {
+                    if (stationProtocol.getTaskNo().equals(wrkNo)) {
+                        complete = false;
+                    }
+                }
+            }
+
+            if (complete) {
+                wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
+                wrkMast.setIoTime(new Date());
+                wrkMastService.updateById(wrkMast);
+            }
+        }
+    }
+
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 46ac0a8..3850384 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -46,4 +46,6 @@
 deviceExecuteConfig:
   # 姣忎釜绾跨▼绠℃帶璁惧鎵ц鏁伴噺
   threadControlCount: 10
-  liftType: lift
\ No newline at end of file
+  liftType: lift
+
+mainProcessPlugin: FakeProcess
\ No newline at end of file
diff --git a/src/main/resources/mapper/BasCrnpMapper.xml b/src/main/resources/mapper/BasCrnpMapper.xml
index fbba1f7..c584ec2 100644
--- a/src/main/resources/mapper/BasCrnpMapper.xml
+++ b/src/main/resources/mapper/BasCrnpMapper.xml
@@ -14,6 +14,9 @@
         <result column="update_by" property="updateBy" />
         <result column="update_time" property="updateTime" />
         <result column="memo" property="memo" />
+        <result column="control_rows" property="controlRows" />
+        <result column="in_station_list" property="inStationList" />
+        <result column="out_station_list" property="outStationList" />
 
     </resultMap>
 
diff --git a/src/main/resources/mapper/LocMastMapper.xml b/src/main/resources/mapper/LocMastMapper.xml
index 153d314..c0da5d5 100644
--- a/src/main/resources/mapper/LocMastMapper.xml
+++ b/src/main/resources/mapper/LocMastMapper.xml
@@ -22,6 +22,7 @@
         <result column="error_memo" property="errorMemo" />
         <result column="qr_code_value" property="qrCodeValue" />
         <result column="status" property="status" />
+        <result column="barcode" property="barcode" />
 
     </resultMap>
 
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 0187fbe..dbe06de 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -22,149 +22,17 @@
         <result column="error_memo" property="errorMemo" />
         <result column="memo" property="memo" />
         <result column="barcode" property="barcode" />
-        <result column="shuttle_no" property="shuttleNo" />
-        <result column="lift_no" property="liftNo" />
+        <result column="crn_no" property="crnNo" />
+        <result column="rgv_no" property="rgvNo" />
         <result column="wms_wrk_no" property="wmsWrkNo" />
         <result column="system_msg" property="systemMsg" />
 
     </resultMap>
 
-    <select id="selectPakInStep1" resultMap="BaseResultMap">
-        select * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC limit 0,1
-    </select>
-
-    <select id="selectPakInStep11" resultMap="BaseResultMap">
-        select * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=1 and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC limit 0,1
-    </select>
-
-    <select id="selectInStep4" resultMap="BaseResultMap">
-        select *
-        from asr_wrk_mast
-        where 1=1
-        and wrk_sts = 4
-        and io_type in (1,10,53,57)
-        order by io_pri desc,wrk_sts desc
-    </select>
-
     <select id="selectByWorkNo" resultMap="BaseResultMap">
         select * from asr_wrk_mast
         where wrk_no=#{workNo}
         limit 0,1
-    </select>
-
-    <select id="selectLiftStep223103" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where 1=1
-        and wrk_sts in (2,103,303)
-        order by io_pri desc,wrk_sts desc
-    </select>
-
-    <select id="selectByWorkNo324104" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where wrk_no=#{workNo}
-        and wrk_sts in (3,104,303,306)
-        limit 0,1
-    </select>
-
-    <select id="selectBy2125" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where wrk_sts in (101,105)
-        and io_type in (101,103,107,110)
-        order by io_pri desc,wrk_sts desc
-    </select>
-
-    <select id="selectShuttleWrkByLev" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where shuttle_no is not null
-        and ((wrk_sts not in (9,10)  and loc_no like #{lev}) or (wrk_sts not in (29,30) and source_loc_no like #{lev}))
-        order by io_pri desc,wrk_sts desc
-    </select>
-
-    <select id="selectShuttleOutWrkByLev" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where shuttle_no is not null
-        and (wrk_sts not in (109,110) and source_loc_no like #{lev})
-        order by io_pri desc,wrk_sts desc
-    </select>
-
-    <select id="selectLiftWrkMast" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where lift_no = #{liftNo}
-    </select>
-
-    <select id="selectLocToLocWrkMast" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where io_type in (11)
-        and wrk_sts not in (9,10,109,110)
-        order by io_pri desc,wrk_sts desc
-    </select>
-
-    <select id="selectPickStepByBarcode" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where io_type in (53,103,107)
-        and wrk_sts in (2,3,104,109)
-        and barcode = #{barcode}
-        order by io_pri desc,wrk_sts desc
-        limit 0,1
-    </select>
-
-    <select id="selectShuttleHasMoveWorking" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where 1=1
-        and shuttle_no = #{shuttleNo}
-        and wrk_sts not in (311)
-        and io_type = 200
-        order by io_pri desc,io_time,wrk_no asc
-        limit 0,1
-    </select>
-
-    <select id="selectShuttleMoveWrk" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where 1=1
-        and wrk_sts in (301,302,303,304,305,306,307,308,309,310,311)
-        and io_type = 200
-        order by io_pri desc,io_time,wrk_no asc
-    </select>
-
-    <select id="selectShuttleWorking" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where 1=1
-        and shuttle_no = #{shuttleNo}
-        and wrk_sts not in (9,10,109,110,210)
-        and io_type not in (200,300)
-        order by io_pri desc,io_time,wrk_no asc
-        limit 0,1
-    </select>
-
-    <select id="selectByBarcode" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where 1=1
-        and barcode = #{barcode}
-        order by io_pri desc,io_time,wrk_no asc
-        limit 0,1
-    </select>
-
-    <select id="selectInWrkMastByLiftNo" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where 1=1
-        and lift_no = #{liftNo}
-        and io_type &lt;= 100
-        and wrk_sts in (1,2,3,4,5)
-        order by io_pri desc,io_time,wrk_no asc
-    </select>
-
-    <select id="selectChargeWorking" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where io_type in (300)
-        and shuttle_no = #{shuttleNo}
-        order by io_pri desc,io_time,wrk_no asc
-    </select>
-
-    <select id="selectChargeWorkingByChargeSta" resultMap="BaseResultMap">
-        select * from asr_wrk_mast
-        where wrk_sts in (201,202,203,204,205,210)
-        and mk = #{chargeSta}
-        order by io_pri desc,io_time,wrk_no asc
     </select>
 
 </mapper>
diff --git a/src/main/webapp/components/WatchRgvCard.js b/src/main/webapp/components/WatchRgvCard.js
index 18e6ba5..fed44ee 100644
--- a/src/main/webapp/components/WatchRgvCard.js
+++ b/src/main/webapp/components/WatchRgvCard.js
@@ -55,7 +55,7 @@
       rgvList: [],
       activeNames: "",
       searchRgvNo: "",
-      showControl: true,
+      showControl: false,
       controlParam: {
         rgvNo: "",
         sourcePos: "",
diff --git a/src/main/webapp/static/js/basCrnp/basCrnp.js b/src/main/webapp/static/js/basCrnp/basCrnp.js
index 6834467..68888c0 100644
--- a/src/main/webapp/static/js/basCrnp/basCrnp.js
+++ b/src/main/webapp/static/js/basCrnp/basCrnp.js
@@ -24,13 +24,16 @@
             {type: 'checkbox'}
             ,{field: 'crnNo', align: 'center',title: '缂栧彿'}
             ,{field: 'status$', align: 'center',title: '鐘舵��'}
-            ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
+            // ,{field: 'wrkNo', align: 'center',title: '宸ヤ綔鍙�'}
             ,{field: 'inEnable', align: 'center',title: '鍙叆(checkBox)'}
             ,{field: 'outEnable', align: 'center',title: '鍙嚭(checkBox)'}
-            ,{field: 'createBy', align: 'center',title: '鍒涘缓浜哄憳'}
-            ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿'}
-            ,{field: 'updateBy', align: 'center',title: '淇敼浜哄憳'}
-            ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'controlRows', align: 'center',title: '鎺у埗搴撲綅鎺掑彿'}
+            ,{field: 'inStationList', align: 'center',title: '鍏ュ簱绔欏垪琛�'}
+            ,{field: 'outStationList', align: 'center',title: '鍑哄簱绔欏垪琛�'}
+            // ,{field: 'createBy', align: 'center',title: '鍒涘缓浜哄憳'}
+            // ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿'}
+            // ,{field: 'updateBy', align: 'center',title: '淇敼浜哄憳'}
+            // ,{field: 'updateTime$', align: 'center',title: '淇敼鏃堕棿'}
             ,{field: 'memo', align: 'center',title: '澶囨敞'}
 
             ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
diff --git a/src/main/webapp/static/js/locMast/locMast.js b/src/main/webapp/static/js/locMast/locMast.js
index 726e411..3900990 100644
--- a/src/main/webapp/static/js/locMast/locMast.js
+++ b/src/main/webapp/static/js/locMast/locMast.js
@@ -21,7 +21,7 @@
             {type: 'checkbox', fixed: 'left'}
             ,{field: 'locNo', align: 'center',title: '搴撲綅鍙�',sort:true}
             ,{field: 'locSts$', align: 'center',title: '搴撲綅鐘舵��',width:200}
-            ,{field: 'qrCodeValue', align: 'center',title: '浜岀淮鐮佸��', sort:true}
+            ,{field: 'barcode', align: 'center',title: '鎵樼洏鐮�'}
             ,{field: 'row1', align: 'center',title: '鎺�', sort:true}
             ,{field: 'bay1', align: 'center',title: '鍒�', sort:true}
             ,{field: 'lev1', align: 'center',title: '灞�', sort:true}
diff --git a/src/main/webapp/views/basCrnp/basCrnp.html b/src/main/webapp/views/basCrnp/basCrnp.html
index f6e9865..d3054fe 100644
--- a/src/main/webapp/views/basCrnp/basCrnp.html
+++ b/src/main/webapp/views/basCrnp/basCrnp.html
@@ -82,12 +82,12 @@
                         </select>
                     </div>
                 </div>
-                <div class="layui-form-item">
-                    <label class="layui-form-label">宸ヤ綔鍙�: </label>
-                    <div class="layui-input-block">
-                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ュ伐浣滃彿">
-                    </div>
-                </div>
+<!--                <div class="layui-form-item">-->
+<!--                    <label class="layui-form-label">宸ヤ綔鍙�: </label>-->
+<!--                    <div class="layui-input-block">-->
+<!--                        <input class="layui-input" name="wrkNo" placeholder="璇疯緭鍏ュ伐浣滃彿">-->
+<!--                    </div>-->
+<!--                </div>-->
                 <div class="layui-form-item">
                     <label class="layui-form-label">鍙叆(checkBox): </label>
                     <div class="layui-input-block">
@@ -101,6 +101,24 @@
                     </div>
                 </div>
                 <div class="layui-form-item">
+                    <label class="layui-form-label">鎺у埗搴撲綅鎺掑彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="controlRows" placeholder="璇疯緭鍏ユ帶鍒跺簱浣嶆帓鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍏ュ簱绔欏垪琛�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="inStationList" placeholder="璇疯緭鍏ュ叆搴撶珯鍒楄〃">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍑哄簱绔欏垪琛�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="outStationList" placeholder="璇疯緭鍏ュ嚭搴撶珯鍒楄〃">
+                    </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="璇疯緭鍏ュ娉�">
diff --git a/src/main/webapp/views/wrkMast/wrkMast.html b/src/main/webapp/views/wrkMast/wrkMast.html
index 36c36e9..9b25697 100644
--- a/src/main/webapp/views/wrkMast/wrkMast.html
+++ b/src/main/webapp/views/wrkMast/wrkMast.html
@@ -53,9 +53,7 @@
 						</el-table-column>
 						<el-table-column property="barcode" label="鎵樼洏鐮�">
 						</el-table-column>
-						<el-table-column property="liftNo" label="鎻愬崌鏈�">
-						</el-table-column>
-						<el-table-column property="shuttleNo" label="绌挎杞�">
+						<el-table-column property="crnNo" label="鍫嗗灈鏈�">
 						</el-table-column>
 						<el-table-column property="systemMsg" label="绯荤粺娑堟伅">
 						</el-table-column>
@@ -67,7 +65,7 @@
 <!--										<el-dropdown-item command="change">淇敼</el-dropdown-item>-->
 										<el-dropdown-item command="complete">瀹屾垚</el-dropdown-item>
 										<el-dropdown-item command="cancel">鍙栨秷</el-dropdown-item>
-										<el-dropdown-item command="shuttleCommand">绌挎杞︽寚浠�</el-dropdown-item>
+<!--										<el-dropdown-item command="shuttleCommand">绌挎杞︽寚浠�</el-dropdown-item>-->
 									</el-dropdown-menu>
 								</el-dropdown>
 							</template>

--
Gitblit v1.9.1