From 8037aaf2ea84786f7d2442d10b17743d6c27c89a Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期一, 24 十一月 2025 15:30:28 +0800
Subject: [PATCH] *

---
 src/main/webapp/static/js/taskWrkLog/taskWrkLog.js                     |  296 ++++
 src/main/java/com/zy/asrs/entity/TaskWrk.java                          |  290 ++++
 src/main/java/com/zy/asrs/service/TaskWrkLogService.java               |    8 
 src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java            |   12 
 src/main/webapp/views/taskWrkLog/taskWrkLog.html                       |  242 +++
 src/main/java/com/zy/asrs/controller/TaskWrkLogController.java         |   57 
 src/main/java/com/zy/asrs/entity/TaskWrkLog.java                       |  256 ++++
 src/main/java/com/zy/core/model/protocol/StaProtocol.java              |   12 
 src/main/java/basDevpPosition.sql                                      |   18 
 src/main/webapp/views/taskWrk/taskWrk.html                             |  248 +++
 src/main/java/taskWrkLog.sql                                           |   18 
 src/main/java/com/zy/asrs/mapper/TaskWrkLogMapper.java                 |   12 
 src/main/java/com/zy/asrs/service/TaskWrkService.java                  |    8 
 src/main/java/com/zy/core/MainProcess.java                             |   23 
 src/main/java/com/zy/asrs/entity/BasDevpPosition.java                  |   75 +
 src/main/java/com/zy/core/thread/SiemensDevpThread.java                |   56 
 src/main/java/com/zy/asrs/utils/BarcodeUtils.java                      |   91 +
 src/main/java/taskWrk.sql                                              |   18 
 src/main/java/com/zy/asrs/service/BasDevpPositionService.java          |    8 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java            | 1144 ++++++++++++++++++
 src/main/webapp/static/js/taskWrk/taskWrk.js                           |  297 ++++
 src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java         |   12 
 src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java |   12 
 src/main/java/com/zy/core/DevpThread.java                              |    5 
 src/main/resources/mapper/TaskWrkMapper.xml                            |   33 
 src/main/java/com/zy/asrs/service/impl/TaskWrkLogServiceImpl.java      |   12 
 src/main/webapp/static/js/basDevpPosition/basDevpPosition.js           |  249 +++
 src/main/java/com/zy/common/CodeBuilder.java                           |    4 
 src/main/webapp/views/basDevpPosition/basDevpPosition.html             |  110 +
 src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java                    |   12 
 src/main/resources/mapper/BasDevpPositionMapper.xml                    |   15 
 src/main/java/com/zy/asrs/controller/TaskWrkController.java            |   83 +
 src/main/resources/mapper/TaskWrkLogMapper.xml                         |   32 
 33 files changed, 3,759 insertions(+), 9 deletions(-)

diff --git a/src/main/java/basDevpPosition.sql b/src/main/java/basDevpPosition.sql
new file mode 100644
index 0000000..25f7f65
--- /dev/null
+++ b/src/main/java/basDevpPosition.sql
@@ -0,0 +1,18 @@
+-- save basDevpPosition record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basDevpPosition/basDevpPosition.html', 'basDevpPosition绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basDevpPosition#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basDevpPosition#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basDevpPosition#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basDevpPosition#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basDevpPosition#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basDevpPosition/basDevpPosition.html', N'basDevpPosition绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basDevpPosition#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basDevpPosition#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basDevpPosition#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basDevpPosition#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basDevpPosition#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/java/com/zy/asrs/controller/TaskWrkController.java b/src/main/java/com/zy/asrs/controller/TaskWrkController.java
new file mode 100644
index 0000000..204b1c7
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -0,0 +1,83 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.zy.asrs.entity.TaskWrk;
+import com.zy.asrs.service.TaskWrkService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class TaskWrkController extends BaseController {
+
+    @Autowired
+    private TaskWrkService taskWrkService;
+
+    @RequestMapping(value = "/taskWrk/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(taskWrkService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/taskWrk/add/auth")
+    @ManagerAuth
+    public R add(TaskWrk taskWrk) {
+        taskWrkService.insert(taskWrk);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/taskWrk/update/auth")
+	@ManagerAuth
+    public R update(TaskWrk taskWrk){
+        if (Cools.isEmpty(taskWrk) || null==taskWrk.getTaskNo()){
+            return R.error();
+        }
+        taskWrkService.updateById(taskWrk);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/taskWrk/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            taskWrkService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/taskWrkQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<TaskWrk> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<TaskWrk> page = taskWrkService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (TaskWrk taskWrk : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", taskWrk.getTaskNo());
+            map.put("value", taskWrk.getTaskNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/taskWrk/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<TaskWrk> wrapper = new EntityWrapper<TaskWrk>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != taskWrkService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(TaskWrk.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/TaskWrkLogController.java b/src/main/java/com/zy/asrs/controller/TaskWrkLogController.java
new file mode 100644
index 0000000..023c640
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/TaskWrkLogController.java
@@ -0,0 +1,57 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.zy.asrs.entity.TaskWrkLog;
+import com.zy.asrs.service.TaskWrkLogService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+public class TaskWrkLogController extends BaseController {
+
+    @Autowired
+    private TaskWrkLogService taskWrkLogService;
+
+    @RequestMapping(value = "/taskWrkLog/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(taskWrkLogService.selectById(String.valueOf(id)));
+    }
+
+
+    @RequestMapping(value = "/taskWrkLog/add/auth")
+    @ManagerAuth
+    public R add(TaskWrkLog taskWrkLog) {
+        taskWrkLogService.insert(taskWrkLog);
+        return R.ok();
+    }
+
+
+    @RequestMapping(value = "/taskWrkLog/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            taskWrkLogService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+
+
+    @RequestMapping(value = "/taskWrkLog/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<TaskWrkLog> wrapper = new EntityWrapper<TaskWrkLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != taskWrkLogService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(TaskWrkLog.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasDevpPosition.java b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java
new file mode 100644
index 0000000..0059d22
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java
@@ -0,0 +1,75 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_devp_position")
+public class BasDevpPosition implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    private Long id;
+
+    @ApiModelProperty(value= "")
+    @TableField("dev_no")
+    private Integer devNo;
+
+    @ApiModelProperty(value= "")
+    @TableField("plc_id")
+    private Integer plcId;
+
+    @ApiModelProperty(value= "")
+    @TableField("plc_position")
+    private Long plcPosition;
+
+    @ApiModelProperty(value= "")
+    @TableField("rgv_sign")
+    private Integer rgvSign;
+
+    public BasDevpPosition() {}
+
+    public BasDevpPosition(Integer devNo,Integer plcId,Long plcPosition,Integer rgvSign) {
+        this.devNo = devNo;
+        this.plcId = plcId;
+        this.plcPosition = plcPosition;
+        this.rgvSign = rgvSign;
+    }
+
+    public BasDevpPosition(Integer devNo, Integer plcId, Long plcPosition) {
+        this.devNo = devNo;
+        this.plcId = plcId;
+        this.plcPosition = plcPosition;
+    }
+
+    public BasDevpPosition(BasDevpPosition basDevpPosition) {
+        this.id = basDevpPosition.getId();
+        this.devNo = basDevpPosition.getDevNo();
+        this.plcId = basDevpPosition.getPlcId();
+        this.plcPosition = basDevpPosition.getPlcPosition();
+    }
+
+    public BasDevpPosition(BasDevpPosition basDevpPosition,Long plcPosition) {
+        this.id = basDevpPosition.getId();
+        this.devNo = basDevpPosition.getDevNo();
+        this.plcId = basDevpPosition.getPlcId();
+        this.plcPosition = plcPosition;
+    }
+
+//    BasDevpPosition basDevpPosition = new BasDevpPosition(
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/TaskWrk.java b/src/main/java/com/zy/asrs/entity/TaskWrk.java
new file mode 100644
index 0000000..e3e7153
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/TaskWrk.java
@@ -0,0 +1,290 @@
+package com.zy.asrs.entity;
+
+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.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("wcs_task_wrk")
+public class TaskWrk implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * wms浠诲姟鍙�
+     */
+    @ApiModelProperty(value= "wms浠诲姟鍙�")
+    @TableId(value = "task_no", type = IdType.INPUT)
+    @TableField("task_no")
+    private String taskNo;
+
+    /**
+     * 浠诲姟鐘舵�� 1: 鎺ユ敹  2: 娲惧彂  3: 瀹岀粨  4: 鍙栨秷  
+     */
+    @ApiModelProperty(value= "浠诲姟鐘舵�� 1: 鎺ユ敹  2: 娲惧彂  3: 瀹岀粨  4: 鍙栨秷  ")
+    private Integer status;
+
+    /**
+     * 浠诲姟鍙�
+     */
+    @ApiModelProperty(value= "浠诲姟鍙�")
+    @TableField("wrk_no")
+    private Integer wrkNo;
+
+    /**
+     * 浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)
+     */
+    @ApiModelProperty(value= "浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 浠诲姟绫诲瀷
+     */
+    @ApiModelProperty(value= "浠诲姟绫诲瀷")
+    @TableField("io_type")
+    private Integer ioType;
+
+    /**
+     * 璧风偣
+     */
+    @ApiModelProperty(value= "璧风偣")
+    @TableField("start_point")
+    private String startPoint;
+
+    /**
+     * 缁堢偣
+     */
+    @ApiModelProperty(value= "缁堢偣")
+    @TableField("target_point")
+    private String targetPoint;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modiTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 鏉$爜
+     */
+    @ApiModelProperty(value= "鏉$爜")
+    private String barcode;
+
+    /**
+     * 娲惧彂鏃堕棿
+     */
+    @ApiModelProperty(value= "娲惧彂鏃堕棿")
+    @TableField("assign_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date assignTime;
+
+    /**
+     * 鎵ц鏃堕棿
+     */
+    @ApiModelProperty(value= "鎵ц鏃堕棿")
+    @TableField("execute_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date executeTime;
+
+    /**
+     * 瀹岀粨鏃堕棿
+     */
+    @ApiModelProperty(value= "瀹岀粨鏃堕棿")
+    @TableField("complete_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date completeTime;
+
+    /**
+     * 鍙栨秷鏃堕棿
+     */
+    @ApiModelProperty(value= "鍙栨秷鏃堕棿")
+    @TableField("cancel_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date cancelTime;
+
+    /**
+     * 宸ヤ綔鐘舵��
+     */
+    @ApiModelProperty(value= "宸ヤ綔鐘舵��")
+    @TableField("wrk_sts")
+    private Integer wrkSts;
+
+    /**
+     * 鍫嗗灈鏈哄彿
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableField("crn_no")
+    private Integer crnNo;
+
+    /**
+     * 鎸囦护鎵ц姝ュ簭
+     */
+    @ApiModelProperty(value= "鎸囦护鎵ц姝ュ簭")
+    @TableField("command_step")
+    private Integer commandStep;
+
+    /**
+     * 绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�
+     */
+    @ApiModelProperty(value= "绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�")
+    @TableField("transfer_mark")
+    private Integer transferMark;
+
+    @ApiModelProperty(value= "")
+    @TableField("origin_start_point")
+    private String originStartPoint;
+
+    @ApiModelProperty(value= "")
+    @TableField("origin_target_point")
+    private String originTargetPoint;
+
+    @ApiModelProperty(value= "")
+    @TableField("io_pri")
+    private Integer ioPri;
+
+    @ApiModelProperty(value= "")
+    @TableField("sc_weight")
+    private Double scWeight;
+
+    public TaskWrk() {}
+
+    public TaskWrk(String taskNo,Integer status,Integer wrkNo,Date createTime,Integer ioType,String startPoint,String targetPoint,Long modiUser,Date modiTime,String memo,String barcode,Date assignTime,Date executeTime,Date completeTime,Date cancelTime,Integer wrkSts,Integer crnNo,Integer commandStep,Integer transferMark,String originStartPoint,String originTargetPoint,Integer ioPri,Double scWeight) {
+        this.taskNo = taskNo;
+        this.status = status;
+        this.wrkNo = wrkNo;
+        this.createTime = createTime;
+        this.ioType = ioType;
+        this.startPoint = startPoint;
+        this.targetPoint = targetPoint;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.memo = memo;
+        this.barcode = barcode;
+        this.assignTime = assignTime;
+        this.executeTime = executeTime;
+        this.completeTime = completeTime;
+        this.cancelTime = cancelTime;
+        this.wrkSts = wrkSts;
+        this.crnNo = crnNo;
+        this.commandStep = commandStep;
+        this.transferMark = transferMark;
+        this.originStartPoint = originStartPoint;
+        this.originTargetPoint = originTargetPoint;
+        this.ioPri = ioPri;
+        this.scWeight = scWeight;
+    }
+
+//    TaskWrk taskWrk = new TaskWrk(
+//            null,    // wms浠诲姟鍙穂闈炵┖]
+//            null,    // 浠诲姟鐘舵��
+//            null,    // 浠诲姟鍙�
+//            null,    // 浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)
+//            null,    // 浠诲姟绫诲瀷
+//            null,    // 璧风偣
+//            null,    // 缁堢偣
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 澶囨敞
+//            null,    // 鏉$爜
+//            null,    // 娲惧彂鏃堕棿
+//            null,    // 鎵ц鏃堕棿
+//            null,    // 瀹岀粨鏃堕棿
+//            null,    // 鍙栨秷鏃堕棿
+//            null,    // 宸ヤ綔鐘舵��
+//            null,    // 鍫嗗灈鏈哄彿
+//            null,    // 鎸囦护鎵ц姝ュ簭
+//            null,    // 绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "鎺ユ敹";
+            case 2:
+                return "娲惧彂";
+            case 3:
+                return "瀹岀粨";
+            case 4:
+                return "鍙栨秷";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getAssignTime$(){
+        if (Cools.isEmpty(this.assignTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.assignTime);
+    }
+
+    public String getExecuteTime$(){
+        if (Cools.isEmpty(this.executeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.executeTime);
+    }
+
+    public String getCompleteTime$(){
+        if (Cools.isEmpty(this.completeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.completeTime);
+    }
+
+    public String getCancelTime$(){
+        if (Cools.isEmpty(this.cancelTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.cancelTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/TaskWrkLog.java b/src/main/java/com/zy/asrs/entity/TaskWrkLog.java
new file mode 100644
index 0000000..1e418f4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/TaskWrkLog.java
@@ -0,0 +1,256 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("wcs_task_wrk_log")
+public class TaskWrkLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * wms浠诲姟鍙�
+     */
+    @ApiModelProperty(value= "wms浠诲姟鍙�")
+    @TableField("task_no")
+    private String taskNo;
+
+    /**
+     * 浠诲姟鐘舵�� 1: 鎺ユ敹  2: 娲惧彂  3: 瀹岀粨  4: 鍙栨秷  
+     */
+    @ApiModelProperty(value= "浠诲姟鐘舵�� 1: 鎺ユ敹  2: 娲惧彂  3: 瀹岀粨  4: 鍙栨秷  ")
+    private Integer status;
+
+    /**
+     * 浠诲姟鍙�
+     */
+    @ApiModelProperty(value= "浠诲姟鍙�")
+    @TableField("wrk_no")
+    private Integer wrkNo;
+
+    /**
+     * 浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)
+     */
+    @ApiModelProperty(value= "浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 浠诲姟绫诲瀷
+     */
+    @ApiModelProperty(value= "浠诲姟绫诲瀷")
+    @TableField("io_type")
+    private Integer ioType;
+
+    /**
+     * 浼樺厛绾�
+     */
+    @ApiModelProperty(value= "浼樺厛绾�")
+    @TableField("io_pri")
+    private Double ioPri;
+
+    /**
+     * 璧风偣
+     */
+    @ApiModelProperty(value= "璧风偣")
+    @TableField("start_point")
+    private String startPoint;
+
+    /**
+     * 缁堢偣
+     */
+    @ApiModelProperty(value= "缁堢偣")
+    @TableField("target_point")
+    private String targetPoint;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modiTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 鏉$爜
+     */
+    @ApiModelProperty(value= "鏉$爜")
+    private String barcode;
+
+    /**
+     * 娲惧彂鏃堕棿
+     */
+    @ApiModelProperty(value= "娲惧彂鏃堕棿")
+    @TableField("assign_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date assignTime;
+
+    /**
+     * 鎵ц鏃堕棿
+     */
+    @ApiModelProperty(value= "鎵ц鏃堕棿")
+    @TableField("execute_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date executeTime;
+
+    /**
+     * 瀹岀粨鏃堕棿
+     */
+    @ApiModelProperty(value= "瀹岀粨鏃堕棿")
+    @TableField("complete_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date completeTime;
+
+    /**
+     * 鍙栨秷鏃堕棿
+     */
+    @ApiModelProperty(value= "鍙栨秷鏃堕棿")
+    @TableField("cancel_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date cancelTime;
+
+    /**
+     * 宸ヤ綔鐘舵��
+     */
+    @ApiModelProperty(value= "宸ヤ綔鐘舵��")
+    @TableField("wrk_sts")
+    private Integer wrkSts;
+
+    /**
+     * 鍫嗗灈鏈哄彿
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableField("crn_no")
+    private Integer crnNo;
+
+    /**
+     * 鎸囦护鎵ц姝ュ簭
+     */
+    @ApiModelProperty(value= "鎸囦护鎵ц姝ュ簭")
+    @TableField("command_step")
+    private Integer commandStep;
+
+    /**
+     * 绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�
+     */
+    @ApiModelProperty(value= "绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�")
+    @TableField("transfer_mark")
+    private Integer transferMark;
+
+    @ApiModelProperty(value= "")
+    @TableField("origin_start_point")
+    private String originStartPoint;
+
+    @ApiModelProperty(value= "")
+    @TableField("origin_target_point")
+    private String originTargetPoint;
+
+    public TaskWrkLog() {}
+
+    public TaskWrkLog(String taskNo,Integer status,Integer wrkNo,Date createTime,Integer ioType,Double ioPri,String startPoint,String targetPoint,Long modiUser,Date modiTime,String memo,String barcode,Date assignTime,Date executeTime,Date completeTime,Date cancelTime,Integer wrkSts,Integer crnNo,Integer commandStep,Integer transferMark,String originStartPoint,String originTargetPoint) {
+        this.taskNo = taskNo;
+        this.status = status;
+        this.wrkNo = wrkNo;
+        this.createTime = createTime;
+        this.ioType = ioType;
+        this.ioPri = ioPri;
+        this.startPoint = startPoint;
+        this.targetPoint = targetPoint;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.memo = memo;
+        this.barcode = barcode;
+        this.assignTime = assignTime;
+        this.executeTime = executeTime;
+        this.completeTime = completeTime;
+        this.cancelTime = cancelTime;
+        this.wrkSts = wrkSts;
+        this.crnNo = crnNo;
+        this.commandStep = commandStep;
+        this.transferMark = transferMark;
+        this.originStartPoint = originStartPoint;
+        this.originTargetPoint = originTargetPoint;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "鎺ユ敹";
+            case 2:
+                return "娲惧彂";
+            case 3:
+                return "瀹岀粨";
+            case 4:
+                return "鍙栨秷";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getAssignTime$(){
+        if (Cools.isEmpty(this.assignTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.assignTime);
+    }
+
+    public String getExecuteTime$(){
+        if (Cools.isEmpty(this.executeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.executeTime);
+    }
+
+    public String getCompleteTime$(){
+        if (Cools.isEmpty(this.completeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.completeTime);
+    }
+
+    public String getCancelTime$(){
+        if (Cools.isEmpty(this.cancelTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.cancelTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java
new file mode 100644
index 0000000..12d70a7
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasDevpPosition;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasDevpPositionMapper extends BaseMapper<BasDevpPosition> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/TaskWrkLogMapper.java b/src/main/java/com/zy/asrs/mapper/TaskWrkLogMapper.java
new file mode 100644
index 0000000..66c793e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/TaskWrkLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.TaskWrkLog;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface TaskWrkLogMapper extends BaseMapper<TaskWrkLog> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java b/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
new file mode 100644
index 0000000..43a301e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.TaskWrk;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface TaskWrkMapper extends BaseMapper<TaskWrk> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasDevpPositionService.java b/src/main/java/com/zy/asrs/service/BasDevpPositionService.java
new file mode 100644
index 0000000..627fc0a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasDevpPositionService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasDevpPosition;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasDevpPositionService extends IService<BasDevpPosition> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/TaskWrkLogService.java b/src/main/java/com/zy/asrs/service/TaskWrkLogService.java
new file mode 100644
index 0000000..7a9515f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/TaskWrkLogService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.TaskWrkLog;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface TaskWrkLogService extends IService<TaskWrkLog> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/TaskWrkService.java b/src/main/java/com/zy/asrs/service/TaskWrkService.java
new file mode 100644
index 0000000..83ceb0c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/TaskWrkService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.TaskWrk;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface TaskWrkService extends IService<TaskWrk> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java
new file mode 100644
index 0000000..0c82272
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasDevpPositionMapper;
+import com.zy.asrs.entity.BasDevpPosition;
+import com.zy.asrs.service.BasDevpPositionService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basDevpPositionService")
+public class BasDevpPositionServiceImpl extends ServiceImpl<BasDevpPositionMapper, BasDevpPosition> implements BasDevpPositionService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index e646968..271ee70 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -9,9 +9,7 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
-import com.zy.asrs.utils.RouteUtils;
-import com.zy.asrs.utils.Utils;
-import com.zy.asrs.utils.VersionUtils;
+import com.zy.asrs.utils.*;
 import com.zy.common.model.LocTypeDto;
 import com.zy.common.model.MatDto;
 import com.zy.common.model.SearchLocParam;
@@ -22,17 +20,16 @@
 import com.zy.common.utils.News;
 import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.SlaveConnection;
+import com.zy.core.cache.*;
 import com.zy.core.enums.*;
 import com.zy.core.model.*;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.command.LedCommand;
-import com.zy.core.model.protocol.CrnProtocol;
-import com.zy.core.model.protocol.StaProtocol;
+import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.LedThread;
+import com.zy.core.thread.RgvThread;
 import com.zy.core.thread.SiemensDevpThread;
 import com.zy.system.entity.license.LicenseVerify;
 import lombok.extern.slf4j.Slf4j;
@@ -43,6 +40,7 @@
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -80,6 +78,8 @@
     private BasCrnErrorMapper basCrnErrorMapper;
     @Autowired
     private WrkMastService wrkMastService;
+    @Autowired
+    private BasDevpPositionService basDevpPositionService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -2518,4 +2518,1134 @@
         }
     }
 
+
+//
+//    public synchronized void taskStart() {
+//        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+//            try {
+//                if (rgvDetection(rgvSlave)) {
+//                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
+//                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
+//                    boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
+//                    if (basDevpPositions.isEmpty()) {
+//                        log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
+//                        try{
+//                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+//                            deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚锛氳幏鍙栨墍鏈夌珯鐐逛俊鎭紓甯�");
+//                        } catch (Exception e2){
+//                        }
+//                        continue;
+//                    }
+//                    List<WrkMast> wrkMastList = new ArrayList<>();
+//                    List<Integer> staList = new ArrayList<>();
+//                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
+//                        TaskWrk taskWrk = deviceDetection(inSta);
+//                        if (taskWrk != null) {
+//                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
+//                            wrkMastList.add(taskWrk);
+//                            staList.add(inSta.getStaNo());
+//                        }
+//                    }
+//
+//                    if (wrkMastList.isEmpty() || staList.isEmpty()) continue;
+//
+//                    boolean sign = false;
+//
+//                    if (rgvOtherStatusEnable(rgvSlave)) {
+//                        //鍒嗘垚涓婁笅涓ら儴鍒嗕换鍔�
+//                        List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions, itSmall);
+//                        List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
+//                        List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
+//                        //灏辫繎鎺掑簭
+//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+//                        List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
+//                        List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
+//
+//                        //鎵�灞為儴鍒嗗氨杩涘彇璐�
+//
+//                        //绛涢�夎寖鍥村唴浠诲姟
+//                        //灏辫繎鎺掑簭
+//                        //绛涢�夊湪鑼冨洿浠诲姟
+//                        Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance);
+//                        List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions);
+//
+//                        if (!sign && staList.size()==1){
+//                            if (rgvOtherIDLEOther(rgvSlave)){
+//                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
+//                                    System.out.println("绌洪棽灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"绌洪棽灏辫繎璺宠繃");
+//
+//                                    sign=true;
+//                                }
+//                            }
+//                            if (sign){
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
+//                                        WrkMast wrkMast = deviceDetection(rgvStn);
+//                                        if (wrkMast != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(wrkMast.getStaNo().toString());//绔欑偣杞崲  闇�瑕佷慨鏀�
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("绌洪棽灏辫繎璺宠繃鍚庡洜鏈�杩滃啀娆℃墽琛�==="+rgvSlave.getId()+"===");
+//
+//                                                    sign=false;
+//                                                    break;
+//                                                }
+//                                            }
+//                                        } else {
+//                                            return;
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                            }
+//                        }
+//
+//                        if(!sign){
+//                            for (Integer staNoNow : belongToRange) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        WrkMast wrkMast = deviceDetection(rgvStn);
+//                                        if (wrkMast != null) {
+//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(wrkMast.getStaNo().toString())));//绔欑偣杞崲  闇�瑕佷慨鏀�
+//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                System.out.println("鍏ㄨ寖鍥存墽琛�==="+rgvSlave.getId()+"==="+wrkMast);
+//                                                System.out.println("鍏ㄨ寖鍥存墽琛�==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }
+//                        if (!sign) {
+//                            //  绛涢�夎寖鍥村唴鍙栬揣浠诲姟
+//                            for (Integer staNoNow : belongToRange) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
+//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
+//                                                    System.out.println("绛涢�夎寖鍥村唴鍙栬揣浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                    System.out.println("绛涢�夎寖鍥村唴鍙栬揣浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }
+//
+//                        if (!sign && staList.size()==1){
+//                            if (rgvOtherIDLEOther2(rgvSlave)){
+//                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
+//                                    System.out.println("杩愯灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"杩愯灏辫繎璺宠繃");
+//
+//                                    sign=true;
+//                                }
+//                            }
+//                            if (sign){
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("杩愯灏辫繎璺宠繃鍚庡洜鏈�杩滃啀娆℃墽琛�==="+rgvSlave.getId()+"===");
+//
+//                                                    sign=false;
+//                                                    break;
+//                                                }
+//                                            }
+//                                        } else {
+//                                            return;
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                            }
+//                        }
+//
+//
+//
+//                        if (!sign && staList.size()>1) {
+//                            for (Integer staNoNow : rangeList) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }else if (!sign && staList.size()==1){
+//                            BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0)));
+//                            if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){
+//                                for (Integer staNoNow : rangeList) {
+//                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                        if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                            TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                            if (taskWrk != null) {
+//                                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                                if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                }
+//                                            }
+//                                            break;
+//                                        }
+//                                    }
+//                                    if (sign) {
+//                                        break;
+//                                    }
+//                                }
+//                            }
+//                        }
+//
+//
+//
+//                        if (!sign && staList.size()>1) {
+//                            //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+//                            for (Integer staNoNow : rangeList) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
+//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村彇璐т换鍔�==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村彇璐т换鍔�==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }
+//                        if (!sign && staList.size()>1) {
+//                            for (Integer staNoNow : rangeListOther) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("鍥犳渶杩滄墽琛屽崐杈瑰尯鍩熷唴鏀捐揣浠诲姟==="+rgvSlave.getId()+"===");
+//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    }
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                    if (sign) {
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//
+//                        }else if (!sign && staList.size()==1){
+//                            for (Integer staNoNow : rangeList) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("鍥犳渶杩滄墽琛屽崐杈瑰尯鍩熷唴鏀捐揣浠诲姟==="+rgvSlave.getId()+"===");
+//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    }
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                    if (sign) {
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//
+//                        }
+//                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"鏈煡璇㈠埌鍙墽琛屼换鍔�");
+//
+//                    } else {
+//                        //鍙敤鍖哄煙灏辫繎鍙栬揣
+//                        //灏辫繎鎺掑簭
+//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+//                        List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
+//                        //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+//                        for (Integer staNoNow : rangeList) {
+//                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                    TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                    if (taskWrk != null) {
+//                                        Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                        for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
+//                                            if (rgvStnOut.getStaNo().equals(outStaNo)) {
+//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                break;
+//                                            }
+//                                        }
+//                                    }
+//                                    break;
+//                                }
+//                            }
+//                            if (sign) {
+//                                break;
+//                            }
+//                        }
+//                    }
+//                }
+//            } catch (Exception e) {
+//                log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+//                try{
+//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+//                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚澶辫触");
+//                } catch (Exception e2){
+//                }
+//            }
+//        }
+//    }
+//
+//    public String rgvOtherTaskWrk(RgvSlave slave) {
+//
+//        RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getOtherId());
+//        TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+//        ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+//        if (!allTaskProtocol.isEmpty()) {
+//            for (TaskProtocol taskProtocol : allTaskProtocol.values()) {
+//                if (taskProtocol.getTaskNo() != 0) {
+//                    return taskProtocol.getTaskNo().toString();
+//                }
+//            }
+//        }
+//        return "鏃�";
+//
+//    }
+//
+//    public boolean rgvDetection(RgvSlave slave) {
+//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+//
+//        if (rgvProtocol == null || rgvTaskProtocol == null) {
+//            return false;
+//        }
+//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
+//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+//            return false;
+//        }
+//        if (rgvProtocol.getLoaded()==1){
+//            return false;
+//        }
+//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+//        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+//
+//        if (rgvProtocolOther == null) {
+//            return false;
+//        }
+//        if (rgvProtocolOther.statusEnable) {
+//            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1 || rgvProtocolOther.getRgvPosDestination() == 0L) {
+//                return false;
+//            }
+//        }
+//        return true;
+//    }
+//    public boolean rgvOtherIDLEOther(RgvSlave slave) {
+//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId());
+//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId());
+//
+//        if (rgvProtocol == null || rgvTaskProtocol == null) {
+//            return false;
+//        }
+//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
+//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+//            return false;
+//        }
+//
+//        if (rgvProtocol.getLoaded()!=0) {
+//            return false;
+//        }
+//        return true;
+//    }
+//    public boolean rgvOtherIDLEOther2(RgvSlave slave) {
+//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getOtherId());
+//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getOtherId());
+//
+//        if (rgvProtocol == null || rgvTaskProtocol == null) {
+//            return false;
+//        }
+//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO)
+//                || rgvProtocol.getRgvPos().equals(0L)
+//                || rgvTaskProtocol.getAvoid() == -1) {
+//            return false;
+//        }
+//
+//        if (rgvProtocol.getLoaded()!=0) {
+//            return false;
+//        }
+//        return true;
+//    }
+//    public boolean rgvOtherIDLE(RgvSlave slave,Integer staNo) {
+//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+//
+//        if (rgvProtocol == null || rgvTaskProtocol == null) {
+//            return false;
+//        }
+//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
+//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+//            return false;
+//        }
+//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+//
+//        if (rgvProtocolOther == null) {
+//            return true;
+//        }
+//        if (rgvProtocolOther.statusEnable) {
+//            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
+//            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
+//                    -
+//                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
+//            if (abs<100){
+//                return true;
+//            }
+//            if (Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
+//                    >=
+//                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos())){
+//                return false;
+//            }
+//        }
+//        return true;
+//    }
+//    public boolean rgvOtherIDLE2(RgvSlave slave,Integer staNo) {
+//        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+//        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+//
+//        if (rgvProtocol == null || rgvTaskProtocol == null) {
+//            return false;
+//        }
+//        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1
+//                || ((!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) || (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100)) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+//            return false;
+//        }
+//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+//
+//        if (rgvProtocolOther == null) {
+//            return true;
+//        }
+//        if (rgvProtocolOther.statusEnable) {
+//            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staNo));
+//            long abs = Math.abs(Math.abs(basDevpPosition.getPlcPosition() - rgvProtocol.getRgvPos())
+//                    -
+//                    Math.abs(basDevpPosition.getPlcPosition() - rgvProtocolOther.getRgvPos()));
+//            if (abs<100){
+//                return true;
+//            }
+//            if (Math.abs(basDevpPosition.getPlcPosition()-rgvProtocol.getRgvPos())
+//                    >=
+//                    Math.abs(basDevpPosition.getPlcPosition()-rgvProtocolOther.getRgvPos())){
+//                return false;
+//            }
+//        }
+//        return true;
+//    }
+//
+//    public TaskWrk deviceDetection(RgvSlave.RgvStn inSta) {
+//
+//        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
+//        StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+//        if (staProtocol == null) {
+//            return null;
+//        }
+//        // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+//        if (!staProtocol.isPakMkTask()) {
+//            devpThread.setErrorDev(staProtocol.getSiteId(), "浠诲姟宸蹭笅鍙戠瓑寰呭皬杞﹀彇");
+//            return null;
+//        }
+//        // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+//        if (staProtocol.isAutoing()
+////                && staProtocol.isLoading()
+////                && staProtocol.isStaOk()
+//                && staProtocol.getWorkNo() != 0) {
+//            TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo());
+//            if (taskWrk != null) {
+//                Integer stano = staProtocol.getStaNo();
+//                if (staProtocol.getSiteId() == 1004 || staProtocol.getSiteId()==1020){
+//                    if (!staProtocol.isPakMkRun()) {
+//                        devpThread.setErrorDev(staProtocol.getSiteId(), "寮傚父鍥為��鏍囪锛岄渶瑕佸洖閫�");
+//                        return null;
+//                    }
+//                    if (!staProtocol.isLoading()) {
+//                        devpThread.setErrorDev(staProtocol.getSiteId(), "鏃犵墿");
+//                        return null;
+//                    }
+//                    if (!staProtocol.isInEnable()) {
+//                        devpThread.setErrorDev(staProtocol.getSiteId(), "绛夊緟鍙叆淇″彿");
+//                        return null;
+//                    }
+//                    if (!staProtocol.isStaOk()) {
+//                        devpThread.setErrorDev(staProtocol.getSiteId(), "绛夊緟閾炬潯灏辩华");
+//                        return null;
+//                    }
+//                    // 灏哄妫�娴嬪紓甯�
+//                    boolean back = false;
+//                    String errMsg = "-";
+//                    if (staProtocol.getGrossWt()>=600){
+//                        errMsg = "瓒呴噸锛�"+staProtocol.getGrossWt()+"kg";
+//                        back = true;
+//                    }
+//                    if (staProtocol.isFrontErr()) {
+//                        if (!back){
+//                            errMsg = "鍓嶈秴闄�";
+//                        } else {
+//                            errMsg = errMsg+"---"+"鍓嶈秴闄�";
+//                        }
+//                        back = true;
+//                    }
+//                    if (staProtocol.isBackErr()) {
+//                        if (!back){
+//                            errMsg = "鍚庤秴闄�";
+//                        } else {
+//                            errMsg = errMsg+"---"+"鍚庤秴闄�";
+//                        }
+//                        back = true;
+//                    }
+//                    if (staProtocol.isHighErr()) {
+//                        if (!back){
+//                            errMsg = "楂樿秴闄�";
+//                        } else {
+//                            errMsg = errMsg+"---"+"楂樿秴闄�";
+//                        }
+//                        back = true;
+//                    }
+//                    if (staProtocol.isLeftErr()) {
+//                        if (!back){
+//                            errMsg = "宸﹁秴闄�";
+//                        } else {
+//                            errMsg = errMsg+"---"+"宸﹁秴闄�";
+//                        }
+//                        back = true;
+//                    }
+//                    if (staProtocol.isRightErr()) {
+//                        if (!back){
+//                            errMsg = "鍙宠秴闄�";
+//                        } else {
+//                            errMsg = errMsg+"---"+"鍙宠秴闄�";
+//                        }
+//                        back = true;
+//                    }
+////                    if (!back && staProtocol.isWeightErr()) {
+////                        errMsg = "瓒呴噸";
+////                        back = true;
+////                    }
+//                    if (staProtocol.isBarcodeErr()) {
+//                        if (!back){
+//                            errMsg = "鎵爜澶辫触";
+//                        } else {
+//                            errMsg = errMsg+"---"+"鎵爜澶辫触";
+//                        }
+//                        back = true;
+//                    }
+//                    // 閫�鍥�
+//                    if (back) {
+//                        if (stano.equals(staProtocol.getStaNo() + 1)) {
+//                            return null;
+//                        }
+//                        if (!staProtocol.isPakMk()) {
+//                            return null;
+//                        }
+//                        System.out.println("鎵爜鍏ュ簱澶辫触锛寋"+inSta.getStaNo()+"}鍏ュ簱绔欏洜{"+errMsg+"}寮傚父锛屾墭鐩樺凡琚��鍥�");
+////                        News.warn("鎵爜鍏ュ簱澶辫触锛寋}鍏ュ簱绔欏洜{}寮傚父锛屾墭鐩樺凡琚��鍥�", inSta.getStaNo(), errMsg);
+//                        staProtocol.setWorkNo(9999);
+//                        staProtocol.setStaNo(staProtocol.getStaNo()+1);
+//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
+//                        devpThread.setPakMkRun(staProtocol.getSiteId(), false);
+//                        devpThread.setPakMkTask(staProtocol.getSiteId(), false);
+//                        devpThread.setErrorDev(staProtocol.getSiteId(), errMsg);
+//                        MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+//                        try{
+//                            taskWrk.setMemo(errMsg);//灏嗛敊璇爜瀛樺叆澶囨敞瀛楁杩涜灞曠ず
+//                            taskWrk.setModiTime(new Date());
+//                            taskWrkMapper.updateById(taskWrk);
+//                        } catch (Exception e){
+//                            devpThread.setErrorDev(staProtocol.getSiteId(), errMsg+"寮傚父淇℃伅淇濆瓨宸ヤ綔妗f澶辫触锛�");
+//                        }
+//                        return null;
+//                    }
+//                }
+//                return taskWrk;
+//            }
+//        } else if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 && !staProtocol.isLoading()){
+//            if (inSta.isDirectionOther()){
+//                StaProtocol staProtocolOther = devpThread.getStation().get(inSta.getStaNoOther());
+//                if (staProtocolOther == null) {
+//                    return null;
+//                }
+//                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+//                if (staProtocolOther.isAutoing()
+//                        && staProtocolOther.getWorkNo() != 0) {
+//                    TaskWrk taskWrkOther = taskWrkService.selectByWrkNo(staProtocolOther.getWorkNo());
+//                    if (taskWrkOther != null) {
+//                        return taskWrkOther;
+//                    }
+//                }
+//            }
+//        }
+//        return null;
+//    }
+//    public boolean deviceDetection(RgvSlave.RgvStn inSta,Integer rgvNo) {
+//        ArrayList<Integer> arrayList = new ArrayList<Integer>() {{
+//            add(1009);
+//            add(1011);
+//            add(1012);
+//            add(1014);
+//            add(1016);
+//        }};
+//        try{
+//
+//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, inSta.getDevpPlcId());
+//            ArrayList<Integer> listW = new ArrayList<Integer>();
+//            ArrayList<Integer> listL = new ArrayList<Integer>();
+//            for (Integer staNo : arrayList){
+//                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+//                if (staProtocol == null) {
+//                    RgvErrCache.updateRgvErr(rgvNo,staNo+"绔欑偣鏁版嵁涓㈠け");
+//                    return false;
+//                }
+//                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+//                if (staProtocol.getWorkNo() != 0) {
+//                    if (!listW.contains(staProtocol.getWorkNo())) {
+//                        listW.add(staProtocol.getWorkNo());
+//                    }
+//                }
+//                // 鍒ゆ柇鏄惁婊¤冻鍙栬揣鏉′欢
+//                if (staProtocol.isLoading()) {
+//                    if (!listL.contains(staProtocol.getStaNo())) {
+//                        listL.add(staProtocol.getStaNo());
+//                    }
+//                }
+//            }
+//            if (listW.size()>=3){
+//                RgvErrCache.updateRgvErr(rgvNo,"绛夊緟1012鎷i�夛紝闃叉鍫靛");
+//                return false;
+//            }
+//            if (listL.size()>=3){
+//                RgvErrCache.updateRgvErr(rgvNo,"绛夊緟1012鎷i�夛紝闃叉鍫靛");
+//                return false;
+//            }
+//        } catch (Exception e){
+//            RgvErrCache.updateRgvErr(rgvNo,"1012妫�娴嬪紓甯革細"+e.getMessage());
+//            return false;
+//        }
+//        return true;
+//    }
+//
+//    public boolean rgvOtherStatusEnable(RgvSlave slave) {
+//        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+//        if (rgvProtocolOther == null) {
+//            return true;
+//        }
+//        if (rgvProtocolOther.statusEnable) {
+////            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+//            return true;
+////            }
+//        }
+//        return false;
+//    }
+//
+//    public synchronized void taskStart() {
+//        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+//            try {
+//                if (rgvDetection(rgvSlave)) {
+//                    String taskNoNow = rgvOtherTaskWrk(rgvSlave);
+//                    List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("PLC_POSITION", true));
+//                    boolean itSmall = new TrackRangeUtils().IsItSmall(rgvSlave);
+//                    if (basDevpPositions.isEmpty()) {
+//                        log.error("鑾峰彇鎵�鏈夌珯鐐逛俊鎭紓甯�");
+//                        try{
+//                            DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+//                            deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚锛氳幏鍙栨墍鏈夌珯鐐逛俊鎭紓甯�");
+//                        } catch (Exception e2){
+//                        }
+//                        continue;
+//                    }
+//                    List<TaskWrk> taskWrkList = new ArrayList<>();
+//                    List<Integer> staList = new ArrayList<>();
+//                    for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSta()) {
+//                        TaskWrk taskWrk = deviceDetection(inSta);
+//                        if (taskWrk != null) {
+//                            if (taskWrk.getWrkNo().toString().equals(taskNoNow)) continue;
+//                            taskWrkList.add(taskWrk);
+//                            staList.add(inSta.getStaNo());
+//                        }
+//                    }
+//
+//                    if (taskWrkList.isEmpty() || staList.isEmpty()) continue;
+//
+//                    boolean sign = false;
+//
+//                    if (rgvOtherStatusEnable(rgvSlave)) {
+//                        //鍒嗘垚涓婁笅涓ら儴鍒嗕换鍔�
+//                        List<Integer>[] avoidRange = RouteUtils.gradeRange(staList, basDevpPositions, itSmall);
+//                        List<Integer> rangeListSou = avoidRange[itSmall ? 0 : 1];
+//                        List<Integer> rangeListSouOther = avoidRange[itSmall ? 1 : 0];
+//                        //灏辫繎鎺掑簭
+//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+//                        List<Integer> rangeList = RouteUtils.SortNearby(rangeListSou, rgvProtocol.RgvPos, basDevpPositions);
+//                        List<Integer> rangeListOther = RouteUtils.SortNearby(rangeListSouOther, rgvProtocol.RgvPos, basDevpPositions);
+//
+//                        //鎵�灞為儴鍒嗗氨杩涘彇璐�
+//
+//                        //绛涢�夎寖鍥村唴浠诲姟
+//                        //灏辫繎鎺掑簭
+//                        //绛涢�夊湪鑼冨洿浠诲姟
+//                        Long[][] avoidedRange = new TrackRangeUtils().avoidRangeArr(rgvSlave, trackEntireLength, trackBenchmark, avoidDistance);
+//                        List<Integer> belongToRange = RouteUtils.SortNearby(RouteUtils.belongToRange(rangeList, avoidedRange[0], basDevpPositions), rgvProtocol.RgvPos, basDevpPositions);
+//
+//                        if (!sign && staList.size()==1){
+//                            if (rgvOtherIDLEOther(rgvSlave)){
+//                                if (!rgvOtherIDLE(rgvSlave,staList.get(0))){
+//                                    System.out.println("绌洪棽灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"绌洪棽灏辫繎璺宠繃");
+//
+//                                    sign=true;
+//                                }
+//                            }
+//                            if (sign){
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("绌洪棽灏辫繎璺宠繃鍚庡洜鏈�杩滃啀娆℃墽琛�==="+rgvSlave.getId()+"===");
+//
+//                                                    sign=false;
+//                                                    break;
+//                                                }
+//                                            }
+//                                        } else {
+//                                            return;
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                            }
+//                        }
+//
+//                        if(!sign){
+//                            for (Integer staNoNow : belongToRange) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                System.out.println("鍏ㄨ寖鍥存墽琛�==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                System.out.println("鍏ㄨ寖鍥存墽琛�==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }
+//                        if (!sign) {
+//                            //  绛涢�夎寖鍥村唴鍙栬揣浠诲姟
+//                            for (Integer staNoNow : belongToRange) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
+//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
+//                                                    System.out.println("绛涢�夎寖鍥村唴鍙栬揣浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                    System.out.println("绛涢�夎寖鍥村唴鍙栬揣浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }
+//
+//                        if (!sign && staList.size()==1){
+//                            if (rgvOtherIDLEOther2(rgvSlave)){
+//                                if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){
+//                                    System.out.println("杩愯灏辫繎璺宠繃==="+rgvSlave.getId()+"===");
+//                                    RgvErrCache.updateRgvErr(rgvSlave.getId(),staList.get(0)+"杩愯灏辫繎璺宠繃");
+//
+//                                    sign=true;
+//                                }
+//                            }
+//                            if (sign){
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staList.get(0))) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("杩愯灏辫繎璺宠繃鍚庡洜鏈�杩滃啀娆℃墽琛�==="+rgvSlave.getId()+"===");
+//
+//                                                    sign=false;
+//                                                    break;
+//                                                }
+//                                            }
+//                                        } else {
+//                                            return;
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                            }
+//                        }
+//
+//
+//
+//                        if (!sign && staList.size()>1) {
+//                            for (Integer staNoNow : rangeList) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                            if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }else if (!sign && staList.size()==1){
+//                            BasDevpPosition basDevpPosition1 = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", staList.get(0)));
+//                            if (Math.abs(basDevpPosition1.getPlcPosition()- rgvProtocol.getRgvPos())<rgvProtocol.getCarBodyJiaoMing()+rgvProtocol.getCarBodyKunPeng() + avoidDistance*2){
+//                                for (Integer staNoNow : rangeList) {
+//                                    for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                        if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                            TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                            if (taskWrk != null) {
+//                                                BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                                if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村唴浠诲姟==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                }
+//                                            }
+//                                            break;
+//                                        }
+//                                    }
+//                                    if (sign) {
+//                                        break;
+//                                    }
+//                                }
+//                            }
+//                        }
+//
+//
+//
+//                        if (!sign && staList.size()>1) {
+//                            //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+//                            for (Integer staNoNow : rangeList) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
+//                                                if (rgvStnOut.getStaNo().equals(outStaNo)) {
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村彇璐т换鍔�==="+rgvSlave.getId()+"==="+taskWrk);
+//                                                    System.out.println("绛涢�夊崐杈硅寖鍥村彇璐т换鍔�==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange));
+//
+//                                                    sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//                        }
+//                        if (!sign && staList.size()>1) {
+//                            for (Integer staNoNow : rangeListOther) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("鍥犳渶杩滄墽琛屽崐杈瑰尯鍩熷唴鏀捐揣浠诲姟==="+rgvSlave.getId()+"===");
+//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    }
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                    if (sign) {
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//
+//                        }else if (!sign && staList.size()==1){
+//                            for (Integer staNoNow : rangeList) {
+//                                for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                    if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                        TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                        if (taskWrk != null) {
+//                                            Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                            for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){
+//                                                if (rgvSuper.getStaNo().equals(outStaNo)){
+//                                                    System.out.println("鍥犳渶杩滄墽琛屽崐杈瑰尯鍩熷唴鏀捐揣浠诲姟==="+rgvSlave.getId()+"===");
+//                                                    BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint())));
+//                                                    if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) {
+//                                                        sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                    }
+//                                                    break;
+//                                                }
+//                                            }
+//                                        }
+//                                        break;
+//                                    }
+//                                    if (sign) {
+//                                        break;
+//                                    }
+//                                }
+//                                if (sign) {
+//                                    break;
+//                                }
+//                            }
+//
+//                        }
+//                        RgvErrCache.updateRgvErr(rgvSlave.getId(),"鏈煡璇㈠埌鍙墽琛屼换鍔�");
+//
+//                    } else {
+//                        //鍙敤鍖哄煙灏辫繎鍙栬揣
+//                        //灏辫繎鎺掑簭
+//                        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+//                        List<Integer> rangeList = RouteUtils.SortNearby(staList, rgvProtocol.RgvPos, basDevpPositions);
+//                        //  鍗婅竟鍖哄煙鍐呭彇璐т换鍔�
+//                        for (Integer staNoNow : rangeList) {
+//                            for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) {
+//                                if (rgvStn.getStaNo().equals(staNoNow)) {
+//                                    TaskWrk taskWrk = deviceDetection(rgvStn);
+//                                    if (taskWrk != null) {
+//                                        Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                                        for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) {
+//                                            if (rgvStnOut.getStaNo().equals(outStaNo)) {
+//                                                sign = taskGenerate(rgvSlave, rgvStn, 0);
+//                                                break;
+//                                            }
+//                                        }
+//                                    }
+//                                    break;
+//                                }
+//                            }
+//                            if (sign) {
+//                                break;
+//                            }
+//                        }
+//                    }
+//                }
+//            } catch (Exception e) {
+//                log.error("浠诲姟鐢熸垚澶辫触===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+//                try{
+//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+//                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "鎸囦护鐢熸垚澶辫触");
+//                } catch (Exception e2){
+//                }
+//            }
+//        }
+//    }
+//
+//
+//    public boolean taskGenerate(RgvSlave rgvSlave, RgvSlave.RgvStn rgvStn, Integer sign) {
+//        try {
+//            RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
+//            TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache();
+//            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, rgvStn.getDevpPlcId());
+//
+//            TaskProtocol issuedTake = new TaskProtocol();
+//            TaskProtocol issuedPut = new TaskProtocol();
+//            try {
+//                ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol();
+//                if (allTaskProtocol.size() > 0) {
+//                    return false;
+//                }
+//                TaskWrk taskWrk = deviceDetection(rgvStn);
+//                if (taskWrk == null) {
+//                    return false;
+//                }
+////                Integer targetPointConvert = taskWrk.getTargetPointConvert();
+//                Integer targetPointConvert = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint());
+//                if (targetPointConvert == null) {
+//                    return false;
+//                }
+//                if (targetPointConvert == 1009){
+//                    if (!deviceDetection(rgvStn, rgvSlave.getId())){
+//                        return false;
+//                    }
+//                }
+//                try{
+//                    devpThread.setPakMkTask(rgvStn.getStaNo(), false);
+//                } catch (Exception e2){
+//                    RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"灏忚溅浠诲姟涓嬪彂鏍囪鏇存柊澶辫触");
+//                }
+//
+//
+//                BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo()));
+//                BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert));
+//                //鎵ц
+//                issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
+//                issuedTake.setTaskStatus(2);
+//                issuedTake.setTargetPositionStaNo(basDevpPositionSou.getDevNo());
+//                issuedTake.setTargetPositionStaNoPlcId(basDevpPositionSou.getPlcId());
+//                issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus()));
+//                issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition());
+//                issuedTake.setIsRunning(1);
+//                issuedTake.setDirection(basDevpPositionSou.getRgvSign()==1);
+//
+//
+//                issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo()));
+//                issuedPut.setTaskStatus(3);
+//                issuedPut.setTargetPositionStaNo(basDevpPositionEnd.getDevNo());
+//                issuedPut.setTargetPositionStaNoPlcId(basDevpPositionEnd.getPlcId());
+//                issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus()));
+//                issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition());
+//                issuedPut.setIsRunning(1);
+//                issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1);
+//
+//                try{
+//                    if (taskWrk.getIoType()==2 && basDevpPositionEnd.getRgvSign()==1){
+//                        Date now = new Date();
+//                        taskWrk.setStatus(TaskStatusType.OVER.id);
+//                        taskWrk.setModiTime(now);//鏇存柊鏃堕棿
+//                        taskWrk.setCompleteTime(now);//瀹岀粨鏃堕棿
+//                        taskWrkService.updateById(taskWrk);
+//                    }
+//                } catch (Exception e){
+//
+//                }
+//            } catch (Exception e) {
+//                log.error("浠诲姟鐢熸垚澶辫触issued1===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+//                RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"绔欑偣浠诲姟鐢熸垚澶辫触issued1");
+//
+//                try{
+//                    DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+//                    deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "浠诲姟鐢熸垚澶辫触issued1");
+//                } catch (Exception e2){
+//                }
+//                return false;
+//            }
+//
+//            switch (sign) {
+//                case 1:
+//                    taskProtocolCache.updateTaskProtocol(issuedTake);
+//                    break;
+//                case 2:
+//                    taskProtocolCache.updateTaskProtocol(issuedPut);
+//                    break;
+//                default:
+//                    taskProtocolCache.updateTaskProtocol(issuedTake);
+//                    taskProtocolCache.updateTaskProtocol(issuedPut);
+//                    break;
+//            }
+//        } catch (Exception e) {
+//            log.error("浠诲姟鐢熸垚澶辫触issued2===銆嬪紓甯镐俊鎭細{}", e.getMessage());
+//            RgvErrCache.updateRgvErr(rgvSlave.getId(),rgvStn.getStaNo()+"绔欑偣浠诲姟鐢熸垚澶辫触issued2");
+//
+//            try{
+//                DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
+//                deviceErrorService.addDeviceError("rgvErr", rgvSlave.getId(), "绔欑偣浠诲姟鐢熸垚澶辫触issued2");
+//            } catch (Exception e2){
+//            }
+//        }
+//        return true;
+//    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskWrkLogServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskWrkLogServiceImpl.java
new file mode 100644
index 0000000..c705e81
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/TaskWrkLogServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.TaskWrkLogMapper;
+import com.zy.asrs.entity.TaskWrkLog;
+import com.zy.asrs.service.TaskWrkLogService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("taskWrkLogService")
+public class TaskWrkLogServiceImpl extends ServiceImpl<TaskWrkLogMapper, TaskWrkLog> implements TaskWrkLogService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
new file mode 100644
index 0000000..b1d7315
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.TaskWrkMapper;
+import com.zy.asrs.entity.TaskWrk;
+import com.zy.asrs.service.TaskWrkService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("taskWrkService")
+public class TaskWrkServiceImpl extends ServiceImpl<TaskWrkMapper, TaskWrk> implements TaskWrkService {
+
+}
diff --git a/src/main/java/com/zy/asrs/utils/BarcodeUtils.java b/src/main/java/com/zy/asrs/utils/BarcodeUtils.java
new file mode 100644
index 0000000..9823ef5
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/BarcodeUtils.java
@@ -0,0 +1,91 @@
+package com.zy.asrs.utils;
+
+import java.util.ArrayList;
+
+public class BarcodeUtils {
+
+    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
+        add(1001);add(1002);add(1003);add(1004);add(1005);add(1006);add(1007);
+        add(1008);add(1009);add(1010);add(1011);add(1012);add(1013);add(1014);add(1015);
+        add(1016);add(1017);add(1018);add(1019);add(1020);add(1021);add(1022);add(1023);
+    }};
+
+    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+        add(1001);add(1002);add(1003);add(1004);add(1005);add(1006);add(1007);
+        add(1008);add(1009);add(1010);add(1011);add(1012);add(1013);add(1014);add(1015);
+        add(1016);add(1017);add(1018);add(1019);add(1020);add(1021);add(1022);add(1023);
+    }};
+
+    public static Integer getStaNo(Integer staNo) {
+        switch (staNo){
+            case 1021:
+                return 1020;
+            case 1012:
+                return 1014;
+            case 1005:
+                return 1004;
+            default:
+                return staNo;
+        }
+    }
+    public static Integer getStartStaNo(String staNo) {
+        switch (staNo){
+            case "1021":
+                return 1020;
+            case "1012":
+                return 1014;
+            case "1005":
+                return 1004;
+            default:
+                return Integer.getInteger(staNo);
+        }
+    }
+    public static Integer getOutStaNo(String staNo) {
+        switch (staNo){
+            case "1021":
+                return 1020;
+            case "1012":
+                return 1009;
+            case "1005":
+                return 1004;
+            default:
+                return Integer.parseInt(staNo);
+        }
+    }
+
+    public static String formatCode(String input) {
+        if (input == null || input.length() != 7 || !input.matches("\\d+")) {
+            throw new IllegalArgumentException("杈撳叆蹇呴』鏄�7浣嶆暟瀛�");
+        }
+
+        // 鏍规嵁绀轰緥鍒嗘瀽鎷嗗垎瑙勫垯锛�
+        // "0500708" -> "05", "07", "08" (璺宠繃绗�3浣�)
+        // "0201001" -> "02", "10", "01"
+        // "1001010" -> "10", "10", "10"
+        // "0500210" -> "05", "02", "10"
+
+        // 鎷嗗垎瑙勫垯锛氱1-2浣嶏紝绗�4-5浣嶏紝绗�6-7浣嶏紙璺宠繃绗�3浣嶏級
+        String part1 = input.substring(0, 2);  // 鍓嶄袱浣�
+        String part2 = input.substring(3, 5);  // 绗�4-5浣嶏紙璺宠繃绗�3浣嶏級
+        String part3 = input.substring(5, 7);  // 绗�6-7浣�
+
+        // 鍘婚櫎鍓嶅闆跺苟鏍煎紡鍖栦负涓や綅鏁�
+        String formattedPart1 = String.format("%02d", Integer.parseInt(part1));
+        String formattedPart2 = String.format("%02d", Integer.parseInt(part2));
+        String formattedPart3 = String.format("%02d", Integer.parseInt(part3));
+
+        return "F-F01-" + formattedPart1 + "-" + formattedPart2 + "-" + formattedPart3;
+    }
+
+    public static void main(String[] args) {
+        // 娴嬭瘯鎵�鏈夌ず渚�
+        System.out.println("0500708 -> " + formatCode("0500708")); // F-F01-05-07-08
+        System.out.println("0201001 -> " + formatCode("0201001")); // F-F01-02-10-01
+        System.out.println("1001010 -> " + formatCode("1001010")); // F-F01-10-10-10
+        System.out.println("0500210 -> " + formatCode("0500210")); // F-F01-05-02-10
+
+        // 楠岃瘉闀垮害鏄惁涓�14涓瓧绗�
+        String result = formatCode("1000110");
+        System.out.println("缁撴灉闀垮害: " + result.length() + " 瀛楃: " + result);
+    }
+}
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index d3ad969..da93fcc 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -17,10 +17,10 @@
 //        generator.table="sys_host";
         // sqlserver
         generator.sqlOsType = SqlOsType.SQL_SERVER;
-        generator.url="localhost:1433;databasename=jshdasrs";
+        generator.url="localhost:50948;databasename=zzgtasrs";
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="asr_bas_rgv_error_log";
+        generator.table="wcs_task_wrk";
         generator.packagePath="com.zy.asrs";
         generator.build();
     }
diff --git a/src/main/java/com/zy/core/DevpThread.java b/src/main/java/com/zy/core/DevpThread.java
index 715c3a5..e0e67f6 100644
--- a/src/main/java/com/zy/core/DevpThread.java
+++ b/src/main/java/com/zy/core/DevpThread.java
@@ -9,5 +9,10 @@
     Map<Integer, StaProtocol> getStation();
 
     void setPakMk(Integer siteId, boolean pakMk);
+    void setPakMkRun(Integer siteId, boolean pakMk);
+    void setPakMkTask(Integer siteId, boolean pakMk);
+    void setPakMkWalk(Integer siteId, boolean pakMkWalk);
+    void setGrossWt(Integer siteId, Double grossWt);
+    void setErrorDev(Integer siteId, String msgErr);
 
 }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 7e206fa..e5ab087 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -24,6 +24,7 @@
     private MainServiceImpl mainService;
     // 鎵�灞炵嚎绋�
     private Thread thread;
+    private Thread rgvThread;
     private Thread licenseThread;
     // 棰戠巼
     private int i = 0;
@@ -36,6 +37,8 @@
     public void start(){
         thread = new Thread(this::crnAndDevRun);
         thread.start();
+        rgvThread = new Thread(this::rgvRun);
+        rgvThread.start();
         licenseThread = new Thread(this::licenseThreadRun);
         licenseThread.start();
     }
@@ -88,6 +91,25 @@
             }
         }
     }
+    private void rgvRun() {
+        while (!Thread.currentThread().isInterrupted()) {
+            try {
+
+                // 闂撮殧
+                Thread.sleep(1000);
+
+                // 绯荤粺杩愯鐘舵�佸垽鏂�
+                if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
+                    continue;
+                }
+                // 浠诲姟涓嬪彂
+//                mainService.taskStart();
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
 
     private void licenseThreadRun(){
         int i = 0;
@@ -120,6 +142,7 @@
     @PreDestroy
     public void shutDown(){
         if (thread != null) thread.interrupt();
+        if (rgvThread != null) rgvThread.interrupt();
         if (licenseThread != null) licenseThread.interrupt();
     }
 
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 8bcba40..4a07e0c 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -54,6 +54,9 @@
 
     // 閿佸畾鏍囪
     private boolean pakMk = true;
+    private boolean pakMkRun = true;
+    private boolean pakMkTask = true;
+    private boolean pakMkWalk = true;
 
     // 鍏ュ簱鏆傚瓨鏁�
     private Short inQty;
@@ -158,6 +161,15 @@
     private Boolean sensorDecR = false; //鍙崇Щ鏂瑰悜鍑忛��
 
 
+    // Super鏈夋棤淇℃伅
+    private boolean loadingSuper = true;
+
+    //鎸囦护ID
+    private Integer commandId;
+    private Double grossWt = 0D;
+    private String errorDev = "-";
+    private String barcodeNow = "-";
+
     public BasDevpErrorLog toSqlModelError(){
         BasDevpErrorLog basDevpErrorLog = new BasDevpErrorLog();
         basDevpErrorLog.setDevNo(siteId); // 璁惧鍙凤紙鍋囪鏈夊畾涔� siteId锛�
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index f9ca221..ede985f 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -982,6 +982,62 @@
         }
     }
 
+
+    /**
+     * 璁剧疆鍏ュ簱鏍囪
+     */
+    @Override
+    public void setPakMkTask(Integer siteId, boolean pakMk) {
+        StaProtocol staProtocol = station.get(siteId);
+        if (null != staProtocol) {
+            staProtocol.setPakMkTask(pakMk);
+        }
+    }
+
+
+    /**
+     * 璁剧疆鍏ュ簱鏍囪
+     */
+    @Override
+    public void setPakMkRun(Integer siteId, boolean pakMk) {
+        StaProtocol staProtocol = station.get(siteId);
+        if (null != staProtocol) {
+            staProtocol.setPakMkRun(pakMk);
+        }
+    }
+    /**
+     * 璁剧疆鍏ュ簱鏍囪
+     */
+    @Override
+    public void setPakMkWalk(Integer siteId, boolean pakMkWalk) {
+        StaProtocol staProtocol = station.get(siteId);
+        if (null != staProtocol) {
+            staProtocol.setPakMkWalk(pakMkWalk);
+        }
+    }
+
+    /**
+     * 璁剧疆鍏ュ簱鏍囪
+     */
+    @Override
+    public void setGrossWt(Integer siteId, Double grossWt) {
+        StaProtocol staProtocol = station.get(siteId);
+        if (null != staProtocol) {
+            staProtocol.setGrossWt(grossWt);
+        }
+    }
+
+    /**
+     * 璁剧疆鍏ュ簱鏍囪
+     */
+    @Override
+    public void setErrorDev(Integer siteId, String msgErr) {
+        StaProtocol staProtocol = station.get(siteId);
+        if (null != staProtocol) {
+            staProtocol.setErrorDev(msgErr);
+        }
+    }
+
     @Override
     public void close() {
         siemensS7Net.ConnectClose();
diff --git a/src/main/java/taskWrk.sql b/src/main/java/taskWrk.sql
new file mode 100644
index 0000000..6bd8eb9
--- /dev/null
+++ b/src/main/java/taskWrk.sql
@@ -0,0 +1,18 @@
+-- save taskWrk record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrk/taskWrk.html', 'taskWrk绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrk#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrk#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrk#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrk#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrk#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrk/taskWrk.html', N'taskWrk绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrk#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrk#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrk#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrk#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrk#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/java/taskWrkLog.sql b/src/main/java/taskWrkLog.sql
new file mode 100644
index 0000000..ea7f368
--- /dev/null
+++ b/src/main/java/taskWrkLog.sql
@@ -0,0 +1,18 @@
+-- save taskWrkLog record
+-- mysql
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrkLog/taskWrkLog.html', 'taskWrkLog绠$悊', null , '2', null , '1');
+
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrkLog#view', '鏌ヨ', '', '3', '0', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrkLog#btn-add', '鏂板', '', '3', '1', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrkLog#btn-edit', '缂栬緫', '', '3', '2', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrkLog#btn-delete', '鍒犻櫎', '', '3', '3', '1');
+insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'taskWrkLog#btn-export', '瀵煎嚭', '', '3', '4', '1');
+
+-- sqlserver
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrkLog/taskWrkLog.html', N'taskWrkLog绠$悊', null, '2', null, '1');
+
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrkLog#view', N'鏌ヨ', '', '3', '0', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrkLog#btn-add', N'鏂板', '', '3', '1', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrkLog#btn-edit', N'缂栬緫', '', '3', '2', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrkLog#btn-delete', N'鍒犻櫎', '', '3', '3', '1');
+insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'taskWrkLog#btn-export', N'瀵煎嚭', '', '3', '4', '1');
diff --git a/src/main/resources/mapper/BasDevpPositionMapper.xml b/src/main/resources/mapper/BasDevpPositionMapper.xml
new file mode 100644
index 0000000..099970a
--- /dev/null
+++ b/src/main/resources/mapper/BasDevpPositionMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasDevpPositionMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasDevpPosition">
+        <id column="id" property="id" />
+        <result column="dev_no" property="devNo" />
+        <result column="plc_id" property="plcId" />
+        <result column="plc_position" property="plcPosition" />
+        <result column="rgv_sign" property="rgvSign" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/TaskWrkLogMapper.xml b/src/main/resources/mapper/TaskWrkLogMapper.xml
new file mode 100644
index 0000000..4a26b2c
--- /dev/null
+++ b/src/main/resources/mapper/TaskWrkLogMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.TaskWrkLogMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.TaskWrkLog">
+        <result column="task_no" property="taskNo" />
+        <result column="status" property="status" />
+        <result column="wrk_no" property="wrkNo" />
+        <result column="create_time" property="createTime" />
+        <result column="io_type" property="ioType" />
+        <result column="io_pri" property="ioPri" />
+        <result column="start_point" property="startPoint" />
+        <result column="target_point" property="targetPoint" />
+        <result column="modi_user" property="modiUser" />
+        <result column="modi_time" property="modiTime" />
+        <result column="memo" property="memo" />
+        <result column="barcode" property="barcode" />
+        <result column="assign_time" property="assignTime" />
+        <result column="execute_time" property="executeTime" />
+        <result column="complete_time" property="completeTime" />
+        <result column="cancel_time" property="cancelTime" />
+        <result column="wrk_sts" property="wrkSts" />
+        <result column="crn_no" property="crnNo" />
+        <result column="command_step" property="commandStep" />
+        <result column="transfer_mark" property="transferMark" />
+        <result column="origin_start_point" property="originStartPoint" />
+        <result column="origin_target_point" property="originTargetPoint" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/TaskWrkMapper.xml b/src/main/resources/mapper/TaskWrkMapper.xml
new file mode 100644
index 0000000..72951b0
--- /dev/null
+++ b/src/main/resources/mapper/TaskWrkMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.TaskWrkMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.TaskWrk">
+        <result column="task_no" property="taskNo" />
+        <result column="status" property="status" />
+        <result column="wrk_no" property="wrkNo" />
+        <result column="create_time" property="createTime" />
+        <result column="io_type" property="ioType" />
+        <result column="start_point" property="startPoint" />
+        <result column="target_point" property="targetPoint" />
+        <result column="modi_user" property="modiUser" />
+        <result column="modi_time" property="modiTime" />
+        <result column="memo" property="memo" />
+        <result column="barcode" property="barcode" />
+        <result column="assign_time" property="assignTime" />
+        <result column="execute_time" property="executeTime" />
+        <result column="complete_time" property="completeTime" />
+        <result column="cancel_time" property="cancelTime" />
+        <result column="wrk_sts" property="wrkSts" />
+        <result column="crn_no" property="crnNo" />
+        <result column="command_step" property="commandStep" />
+        <result column="transfer_mark" property="transferMark" />
+        <result column="origin_start_point" property="originStartPoint" />
+        <result column="origin_target_point" property="originTargetPoint" />
+        <result column="io_pri" property="ioPri" />
+        <result column="sc_weight" property="scWeight" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/js/basDevpPosition/basDevpPosition.js b/src/main/webapp/static/js/basDevpPosition/basDevpPosition.js
new file mode 100644
index 0000000..3c2ef29
--- /dev/null
+++ b/src/main/webapp/static/js/basDevpPosition/basDevpPosition.js
@@ -0,0 +1,249 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#basDevpPosition',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/basDevpPosition/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'id', align: 'center',title: 'ID'}
+            ,{field: 'devNo', align: 'center',title: ''}
+            ,{field: 'plcId', align: 'center',title: ''}
+            ,{field: 'plcPosition', align: 'center',title: ''}
+            ,{field: 'rgvSign', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(basDevpPosition)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(basDevpPosition)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'basDevpPosition': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/basDevpPosition/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(basDevpPosition)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/basDevpPosition/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/basDevpPosition/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/taskWrk/taskWrk.js b/src/main/webapp/static/js/taskWrk/taskWrk.js
new file mode 100644
index 0000000..417db9d
--- /dev/null
+++ b/src/main/webapp/static/js/taskWrk/taskWrk.js
@@ -0,0 +1,297 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#taskWrk',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/taskWrk/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'taskNo', align: 'center',title: 'wms浠诲姟鍙�'}
+            ,{field: 'status$', align: 'center',title: '浠诲姟鐘舵��'}
+            ,{field: 'wrkNo', align: 'center',title: '浠诲姟鍙�'}
+            ,{field: 'createTime$', align: 'center',title: '浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)'}
+            ,{field: 'ioType$', align: 'center',title: '浠诲姟绫诲瀷'}
+            ,{field: 'startPoint', align: 'center',title: '璧风偣'}
+            ,{field: 'targetPoint', align: 'center',title: '缁堢偣'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜'}
+            ,{field: 'assignTime$', align: 'center',title: '娲惧彂鏃堕棿'}
+            ,{field: 'executeTime$', align: 'center',title: '鎵ц鏃堕棿'}
+            ,{field: 'completeTime$', align: 'center',title: '瀹岀粨鏃堕棿'}
+            ,{field: 'cancelTime$', align: 'center',title: '鍙栨秷鏃堕棿'}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'}
+            ,{field: 'crnNo', align: 'center',title: '鍫嗗灈鏈哄彿'}
+            ,{field: 'commandStep', align: 'center',title: '鎸囦护鎵ц姝ュ簭'}
+            ,{field: 'transferMark', align: 'center',title: '绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�'}
+            ,{field: 'originStartPoint', align: 'center',title: ''}
+            ,{field: 'originTargetPoint', align: 'center',title: ''}
+            ,{field: 'ioPri', align: 'center',title: ''}
+            ,{field: 'scWeight', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(taskWrk)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(taskWrk)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.taskNo;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'taskWrk': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/taskWrk/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(taskWrk)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.taskNo]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/taskWrk/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/taskWrk/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#modiTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['modiTime\\$']:null
+            });
+            layDate.render({
+                elem: '#assignTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['assignTime\\$']:null
+            });
+            layDate.render({
+                elem: '#executeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['executeTime\\$']:null
+            });
+            layDate.render({
+                elem: '#completeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['completeTime\\$']:null
+            });
+            layDate.render({
+                elem: '#cancelTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['cancelTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/static/js/taskWrkLog/taskWrkLog.js b/src/main/webapp/static/js/taskWrkLog/taskWrkLog.js
new file mode 100644
index 0000000..48169fe
--- /dev/null
+++ b/src/main/webapp/static/js/taskWrkLog/taskWrkLog.js
@@ -0,0 +1,296 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table','laydate', 'form', 'admin'], function(){
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#taskWrkLog',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl+'/taskWrkLog/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            ,{field: 'taskNo', align: 'center',title: 'wms浠诲姟鍙�'}
+            ,{field: 'status$', align: 'center',title: '浠诲姟鐘舵��'}
+            ,{field: 'wrkNo', align: 'center',title: '浠诲姟鍙�'}
+            ,{field: 'createTime$', align: 'center',title: '浠诲姟鏃堕棿(鎺ユ敹鏃堕棿)'}
+            ,{field: 'ioType$', align: 'center',title: '浠诲姟绫诲瀷'}
+            ,{field: 'ioPri', align: 'center',title: '浼樺厛绾�'}
+            ,{field: 'startPoint', align: 'center',title: '璧风偣'}
+            ,{field: 'targetPoint', align: 'center',title: '缁堢偣'}
+            ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳'}
+            ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}
+            ,{field: 'memo', align: 'center',title: '澶囨敞'}
+            ,{field: 'barcode', align: 'center',title: '鏉$爜'}
+            ,{field: 'assignTime$', align: 'center',title: '娲惧彂鏃堕棿'}
+            ,{field: 'executeTime$', align: 'center',title: '鎵ц鏃堕棿'}
+            ,{field: 'completeTime$', align: 'center',title: '瀹岀粨鏃堕棿'}
+            ,{field: 'cancelTime$', align: 'center',title: '鍙栨秷鏃堕棿'}
+            ,{field: 'wrkSts$', align: 'center',title: '宸ヤ綔鐘舵��'}
+            ,{field: 'crnNo', align: 'center',title: '鍫嗗灈鏈哄彿'}
+            ,{field: 'commandStep', align: 'center',title: '鎸囦护鎵ц姝ュ簭'}
+            ,{field: 'transferMark', align: 'center',title: '绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�'}
+            ,{field: 'originStartPoint', align: 'center',title: ''}
+            ,{field: 'originTargetPoint', align: 'center',title: ''}
+
+            ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:120}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function(res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl+"/";
+            }
+            pageCurr=curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(taskWrkLog)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function() {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(taskWrkLog)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch(obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+               if (checkStatus.length === 0) {
+                   layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                   return;
+               }
+               del(checkStatus.map(function (d) {
+                   return d.id;
+               }));
+               break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
+                    var titles=[];
+                    var fields=[];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function() {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'taskWrkLog': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl+"/taskWrkLog/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType:'json',
+                        contentType:'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles,res.data,'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl+"/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(taskWrkLog)', function(obj){
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: (mData ? '淇敼' : '娣诲姞') + '璁㈠崟鐘舵��',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl+"/taskWrkLog/"+(mData?'update':'add')+"/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200){
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403){
+                                top.location.href = baseUrl+"/";
+                            }else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl+"/taskWrkLog/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200){
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403){
+                        top.location.href = baseUrl+"/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                ,type: 'datetime'
+                ,range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['createTime\\$']:null
+            });
+            layDate.render({
+                elem: '#modiTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['modiTime\\$']:null
+            });
+            layDate.render({
+                elem: '#assignTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['assignTime\\$']:null
+            });
+            layDate.render({
+                elem: '#executeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['executeTime\\$']:null
+            });
+            layDate.render({
+                elem: '#completeTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['completeTime\\$']:null
+            });
+            layDate.render({
+                elem: '#cancelTime\\$',
+                type: 'datetime',
+                value: data!==undefined?data['cancelTime\\$']:null
+            });
+
+        }, 300);
+    }
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+     });
+}
diff --git a/src/main/webapp/views/basDevpPosition/basDevpPosition.html b/src/main/webapp/views/basDevpPosition/basDevpPosition.html
new file mode 100644
index 0000000..349c4ed
--- /dev/null
+++ b/src/main/webapp/views/basDevpPosition/basDevpPosition.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="basDevpPosition" lay-filter="basDevpPosition"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/basDevpPosition/basDevpPosition.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="devNo" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="plcId" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="plcPosition" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="rgvSign" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/taskWrk/taskWrk.html b/src/main/webapp/views/taskWrk/taskWrk.html
new file mode 100644
index 0000000..b0619bd
--- /dev/null
+++ b/src/main/webapp/views/taskWrk/taskWrk.html
@@ -0,0 +1,248 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="taskWrk" lay-filter="taskWrk"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/taskWrk/taskWrk.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">wms浠诲姟鍙�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="taskNo" placeholder="璇疯緭鍏ms浠诲姟鍙�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浠诲姟鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨浠诲姟鐘舵��</option>
+                            <option value="1">鎺ユ敹</option>
+                            <option value="2">娲惧彂</option>
+                            <option value="3">瀹岀粨</option>
+                            <option value="4">鍙栨秷</option>
+                        </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="createTime" id="createTime$" placeholder="璇疯緭鍏ヤ换鍔℃椂闂�(鎺ユ敹鏃堕棿)">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浠诲姟绫诲瀷: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="ioType" placeholder="璇疯緭鍏ヤ换鍔$被鍨�" style="display: none">
+                        <input id="ioType$" name="ioType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ换鍔$被鍨�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkIotypeQueryByioType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkIotypeQueryByioTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璧风偣: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="startPoint" placeholder="璇疯緭鍏ヨ捣鐐�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缁堢偣: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="targetPoint" placeholder="璇疯緭鍏ョ粓鐐�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼浜哄憳: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="modiUser" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">
+                        <input id="modiUser$" name="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="modiTime" id="modiTime$" 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="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏉$爜: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="barcode" placeholder="璇疯緭鍏ユ潯鐮�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娲惧彂鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="assignTime" id="assignTime$" placeholder="璇疯緭鍏ユ淳鍙戞椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎵ц鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="executeTime" id="executeTime$" placeholder="璇疯緭鍏ユ墽琛屾椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀹岀粨鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="completeTime" id="completeTime$" placeholder="璇疯緭鍏ュ畬缁撴椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍙栨秷鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="cancelTime" id="cancelTime$" placeholder="璇疯緭鍏ュ彇娑堟椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">宸ヤ綔鐘舵��: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="wrkSts" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" style="display: none">
+                        <input id="wrkSts$" name="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkStatusQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkStatusQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍫嗗灈鏈哄彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="crnNo" placeholder="璇疯緭鍏ュ爢鍨涙満鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎸囦护鎵ц姝ュ簭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="commandStep" placeholder="璇疯緭鍏ユ寚浠ゆ墽琛屾搴�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="transferMark" placeholder="璇疯緭鍏ョЩ搴撴爣璁� 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="originStartPoint" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="originTargetPoint" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="ioPri" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="scWeight" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/taskWrkLog/taskWrkLog.html b/src/main/webapp/views/taskWrkLog/taskWrkLog.html
new file mode 100644
index 0000000..031fc69
--- /dev/null
+++ b/src/main/webapp/views/taskWrkLog/taskWrkLog.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="taskWrkLog" lay-filter="taskWrkLog"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/taskWrkLog/taskWrkLog.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <form id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label layui-form-required">wms浠诲姟鍙�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="taskNo" placeholder="璇疯緭鍏ms浠诲姟鍙�" lay-vertype="tips" lay-verify="required">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浠诲姟鐘舵��: </label>
+                    <div class="layui-input-block">
+                        <select name="status">
+                            <option value="">璇烽�夋嫨浠诲姟鐘舵��</option>
+                            <option value="1">鎺ユ敹</option>
+                            <option value="2">娲惧彂</option>
+                            <option value="3">瀹岀粨</option>
+                            <option value="4">鍙栨秷</option>
+                        </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="createTime" id="createTime$" placeholder="璇疯緭鍏ヤ换鍔℃椂闂�(鎺ユ敹鏃堕棿)">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浠诲姟绫诲瀷: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="ioType" placeholder="璇疯緭鍏ヤ换鍔$被鍨�" style="display: none">
+                        <input id="ioType$" name="ioType$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ换鍔$被鍨�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkIotypeQueryByioType" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkIotypeQueryByioTypeSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">浼樺厛绾�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="ioPri" placeholder="璇疯緭鍏ヤ紭鍏堢骇">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">璧风偣: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="startPoint" placeholder="璇疯緭鍏ヨ捣鐐�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">缁堢偣: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="targetPoint" placeholder="璇疯緭鍏ョ粓鐐�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼浜哄憳: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="modiUser" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" style="display: none">
+                        <input id="modiUser$" name="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ヤ慨鏀逛汉鍛�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">淇敼鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="modiTime" id="modiTime$" 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="璇疯緭鍏ュ娉�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鏉$爜: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="barcode" placeholder="璇疯緭鍏ユ潯鐮�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">娲惧彂鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="assignTime" id="assignTime$" placeholder="璇疯緭鍏ユ淳鍙戞椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎵ц鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="executeTime" id="executeTime$" placeholder="璇疯緭鍏ユ墽琛屾椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">瀹岀粨鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="completeTime" id="completeTime$" placeholder="璇疯緭鍏ュ畬缁撴椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍙栨秷鏃堕棿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="cancelTime" id="cancelTime$" placeholder="璇疯緭鍏ュ彇娑堟椂闂�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">宸ヤ綔鐘舵��: </label>
+                    <div class="layui-input-block cool-auto-complete">
+                        <input class="layui-input" name="wrkSts" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" style="display: none">
+                        <input id="wrkSts$" name="wrkSts$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏ュ伐浣滅姸鎬�" onfocus=this.blur()>
+                        <div class="cool-auto-complete-window">
+                            <input class="cool-auto-complete-window-input" data-key="basWrkStatusQueryBywrkSts" onkeyup="autoLoad(this.getAttribute('data-key'))">
+                            <select class="cool-auto-complete-window-select" data-key="basWrkStatusQueryBywrkStsSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍫嗗灈鏈哄彿: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="crnNo" placeholder="璇疯緭鍏ュ爢鍨涙満鍙�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鎸囦护鎵ц姝ュ簭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="commandStep" placeholder="璇疯緭鍏ユ寚浠ゆ墽琛屾搴�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">绉诲簱鏍囪 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="transferMark" placeholder="璇疯緭鍏ョЩ搴撴爣璁� 1锛氶渶瑕佺Щ搴�  鍏跺畠涓嶉渶瑕�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="originStartPoint" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="originTargetPoint" placeholder="璇疯緭鍏�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </form>
+</script>
+</html>
+

--
Gitblit v1.9.1