*
lsh
2025-11-24 8037aaf2ea84786f7d2442d10b17743d6c27c89a
*
27个文件已添加
6个文件已修改
3768 ■■■■■ 已修改文件
src/main/java/basDevpPosition.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TaskWrkController.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TaskWrkLogController.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasDevpPosition.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskWrk.java 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskWrkLog.java 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/TaskWrkLogMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasDevpPositionService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/TaskWrkLogService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/TaskWrkService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 1144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskWrkLogServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/BarcodeUtils.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/DevpThread.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/taskWrk.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/taskWrkLog.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasDevpPositionMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkLogMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskWrkMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/basDevpPosition/basDevpPosition.js 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/taskWrk/taskWrk.js 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/taskWrkLog/taskWrkLog.js 296 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/basDevpPosition/basDevpPosition.html 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/taskWrk/taskWrk.html 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/taskWrkLog/taskWrkLog.html 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/basDevpPosition.sql
New file
@@ -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');
src/main/java/com/zy/asrs/controller/TaskWrkController.java
New file
@@ -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();
    }
}
src/main/java/com/zy/asrs/controller/TaskWrkLogController.java
New file
@@ -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();
    }
}
src/main/java/com/zy/asrs/entity/BasDevpPosition.java
New file
@@ -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    //
//    );
}
src/main/java/com/zy/asrs/entity/TaskWrk.java
New file
@@ -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);
    }
}
src/main/java/com/zy/asrs/entity/TaskWrkLog.java
New file
@@ -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);
    }
}
src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/mapper/TaskWrkLogMapper.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/mapper/TaskWrkMapper.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/service/BasDevpPositionService.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/service/TaskWrkLogService.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/service/TaskWrkService.java
New file
@@ -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> {
}
src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java
New file
@@ -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 {
}
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+"异常信息保存工作档案失败!");
//                        }
//                        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拣选,防止堵塞");
//                return false;
//            }
//            if (listL.size()>=3){
//                RgvErrCache.updateRgvErr(rgvNo,"等待1012拣选,防止堵塞");
//                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;
//    }
}
src/main/java/com/zy/asrs/service/impl/TaskWrkLogServiceImpl.java
New file
@@ -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 {
}
src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
New file
@@ -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 {
}
src/main/java/com/zy/asrs/utils/BarcodeUtils.java
New file
@@ -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);
    }
}
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();
    }
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);
}
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();
    }
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)
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();
src/main/java/taskWrk.sql
New file
@@ -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');
src/main/java/taskWrkLog.sql
New file
@@ -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');
src/main/resources/mapper/BasDevpPositionMapper.xml
New file
@@ -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>
src/main/resources/mapper/TaskWrkLogMapper.xml
New file
@@ -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>
src/main/resources/mapper/TaskWrkMapper.xml
New file
@@ -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>
src/main/webapp/static/js/basDevpPosition/basDevpPosition.js
New file
@@ -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}
     });
}
src/main/webapp/static/js/taskWrk/taskWrk.js
New file
@@ -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}
     });
}
src/main/webapp/static/js/taskWrkLog/taskWrkLog.js
New file
@@ -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}
     });
}
src/main/webapp/views/basDevpPosition/basDevpPosition.html
New file
@@ -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>
src/main/webapp/views/taskWrk/taskWrk.html
New file
@@ -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="请输入wms任务号" 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>
src/main/webapp/views/taskWrkLog/taskWrkLog.html
New file
@@ -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="请输入wms任务号" 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>