1
3 天以前 82374fe4b32d58956810f445b7889f1a370f1ab9
#配置信号
18个文件已修改
18个文件已添加
3776 ■■■■■ 已修改文件
src/main/java/basCrnErrorLog.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/basRgvErrorLog.sql 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/BasCrnErrorLogController.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/BasDevpErrorLogController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/BasRgvErrorLogController.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasCrnErrorLog.java 465 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasDevpErrorLog.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasRgvErrorLog.java 392 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasCrnErrorLogMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasRgvErrorLogMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasCrnErrorLogService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasRgvErrorLogService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastStaService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasCrnErrorLogServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasRgvErrorLogServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastStaServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/CrnProtocol.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/RgvProtocol.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/model/protocol/StaProtocol.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensCrnThread.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/SiemensDevpThread.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasCrnErrorLogMapper.xml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasDevpErrorLogMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasRgvErrorLogMapper.xml 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastStaMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/basCrnErrorLog/basCrnErrorLog.js 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/basDevpErrorLog/basDevpErrorLog.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/basRgvErrorLog/basRgvErrorLog.js 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/basCrnErrorLog/basCrnErrorLog.html 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/basDevpErrorLog/basDevpErrorLog.html 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/basRgvErrorLog/basRgvErrorLog.html 320 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/basCrnErrorLog.sql
New file
@@ -0,0 +1,18 @@
-- save basCrnErrorLog record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basCrnErrorLog/basCrnErrorLog.html', 'basCrnErrorLog管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basCrnErrorLog#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basCrnErrorLog#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basCrnErrorLog#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basCrnErrorLog#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basCrnErrorLog#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basCrnErrorLog/basCrnErrorLog.html', N'basCrnErrorLog管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basCrnErrorLog#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basCrnErrorLog#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basCrnErrorLog#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basCrnErrorLog#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basCrnErrorLog#btn-export', N'导出', '', '3', '4', '1');
src/main/java/basRgvErrorLog.sql
New file
@@ -0,0 +1,18 @@
-- save basRgvErrorLog record
-- mysql
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basRgvErrorLog/basRgvErrorLog.html', 'basRgvErrorLog管理', null , '2', null , '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basRgvErrorLog#view', '查询', '', '3', '0', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basRgvErrorLog#btn-add', '新增', '', '3', '1', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basRgvErrorLog#btn-edit', '编辑', '', '3', '2', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basRgvErrorLog#btn-delete', '删除', '', '3', '3', '1');
insert into `sys_resource` ( `code`, `name`, `resource_id`, `level`, `sort`, `status`) values ( 'basRgvErrorLog#btn-export', '导出', '', '3', '4', '1');
-- sqlserver
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basRgvErrorLog/basRgvErrorLog.html', N'basRgvErrorLog管理', null, '2', null, '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basRgvErrorLog#view', N'查询', '', '3', '0', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basRgvErrorLog#btn-add', N'新增', '', '3', '1', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basRgvErrorLog#btn-edit', N'编辑', '', '3', '2', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basRgvErrorLog#btn-delete', N'删除', '', '3', '3', '1');
insert [dbo].[sys_resource] ( [code], [name], [resource_id], [level], [sort], [status]) values ( N'basRgvErrorLog#btn-export', N'导出', '', '3', '4', '1');
src/main/java/com/zy/asrs/controller/BasCrnErrorLogController.java
New file
@@ -0,0 +1,168 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.BasCrnErrorLog;
import com.zy.asrs.service.BasCrnErrorLogService;
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.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
@RestController
public class BasCrnErrorLogController extends BaseController {
    protected static final String RANGE_TIME_LINK = " - ";
    @Autowired
    private BasCrnErrorLogService basCrnErrorLogService;
    @RequestMapping(value = "/basCrnErrorLog/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(basCrnErrorLogService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/basCrnErrorLog/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<BasCrnErrorLog> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        allLike(BasCrnErrorLog.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(basCrnErrorLogService.selectPage(new Page<>(curr, limit), wrapper));
    }
    /**
     * 全字段模糊搜索
     * @param cls 模型类
     * @param set 排除字段集合
     * @param condition 搜索内容
     */
    protected <T> void allLike(Class<T> cls, Set<String> set, EntityWrapper<T> wrapper, String condition){
        if (Cools.isEmpty(condition)) {
            return;
        }
        List<String> columns = new ArrayList<>();
        for (Field field :Cools.getAllFields(cls)){
            if (Modifier.isFinal(field.getModifiers())
                    || Modifier.isStatic(field.getModifiers())
                    || Modifier.isTransient(field.getModifiers())){
                continue;
            }
            String column = null;
            if (field.isAnnotationPresent(TableField.class)) {
                column = field.getAnnotation(TableField.class).value();
            }
            if (Cools.isEmpty(column)) {
                column = field.getName();
            }
            if (!set.contains(column)) {
                columns.add(column);
            }
        }
        if (columns.isEmpty()) {
            return;
        }
        for (int i=0;i<columns.size();i++){
            if (i==0){
                wrapper.andNew();
            } else {
                wrapper.or();
            }
            wrapper.like(columns.get(i), condition);
        }
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    @RequestMapping(value = "/basCrnErrorLog/add/auth")
    @ManagerAuth
    public R add(BasCrnErrorLog basCrnErrorLog) {
        basCrnErrorLogService.insert(basCrnErrorLog);
        return R.ok();
    }
    @RequestMapping(value = "/basCrnErrorLog/update/auth")
    @ManagerAuth
    public R update(BasCrnErrorLog basCrnErrorLog){
        if (Cools.isEmpty(basCrnErrorLog) || null==basCrnErrorLog.getId()){
            return R.error();
        }
        basCrnErrorLogService.updateById(basCrnErrorLog);
        return R.ok();
    }
    @RequestMapping(value = "/basCrnErrorLog/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            basCrnErrorLogService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/basCrnErrorLog/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<BasCrnErrorLog> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("basCrnErrorLog"));
        convert(map, wrapper);
        List<BasCrnErrorLog> list = basCrnErrorLogService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/basCrnErrorLogQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<BasCrnErrorLog> wrapper = new EntityWrapper<>();
        wrapper.like("crn_no", condition);
        Page<BasCrnErrorLog> page = basCrnErrorLogService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (BasCrnErrorLog basCrnErrorLog : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", basCrnErrorLog.getId());
            map.put("value", basCrnErrorLog.getId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/basCrnErrorLog/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<BasCrnErrorLog> wrapper = new EntityWrapper<BasCrnErrorLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != basCrnErrorLogService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(BasCrnErrorLog.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/BasDevpErrorLogController.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
@@ -16,10 +17,13 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
@RestController
public class BasDevpErrorLogController extends BaseController {
    protected static final String RANGE_TIME_LINK = " - ";
    @Autowired
    private BasDevpErrorLogService basDevpErrorLogService;
@@ -30,7 +34,74 @@
        return R.ok(basDevpErrorLogService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/basDevpErrorLog/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<BasDevpErrorLog> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        allLike(BasDevpErrorLog.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(basDevpErrorLogService.selectPage(new Page<>(curr, limit), wrapper));
    }
    /**
     * 全字段模糊搜索
     * @param cls 模型类
     * @param set 排除字段集合
     * @param condition 搜索内容
     */
    protected <T> void allLike(Class<T> cls, Set<String> set, EntityWrapper<T> wrapper, String condition){
        if (Cools.isEmpty(condition)) {
            return;
        }
        List<String> columns = new ArrayList<>();
        for (Field field :Cools.getAllFields(cls)){
            if (Modifier.isFinal(field.getModifiers())
                    || Modifier.isStatic(field.getModifiers())
                    || Modifier.isTransient(field.getModifiers())){
                continue;
            }
            String column = null;
            if (field.isAnnotationPresent(TableField.class)) {
                column = field.getAnnotation(TableField.class).value();
            }
            if (Cools.isEmpty(column)) {
                column = field.getName();
            }
            if (!set.contains(column)) {
                columns.add(column);
            }
        }
        if (columns.isEmpty()) {
            return;
        }
        for (int i=0;i<columns.size();i++){
            if (i==0){
                wrapper.andNew();
            } else {
                wrapper.or();
            }
            wrapper.like(columns.get(i), condition);
        }
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    @RequestMapping(value = "/basDevpErrorLog/add/auth")
    @ManagerAuth
@@ -39,6 +110,15 @@
        return R.ok();
    }
    @RequestMapping(value = "/basDevpErrorLog/update/auth")
    @ManagerAuth
    public R update(BasDevpErrorLog basDevpErrorLog){
        if (Cools.isEmpty(basDevpErrorLog) || null==basDevpErrorLog.getId()){
            return R.error();
        }
        basDevpErrorLogService.updateById(basDevpErrorLog);
        return R.ok();
    }
    @RequestMapping(value = "/basDevpErrorLog/delete/auth")
    @ManagerAuth
@@ -49,6 +129,32 @@
        return R.ok();
    }
    @RequestMapping(value = "/basDevpErrorLog/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<BasDevpErrorLog> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("basDevpErrorLog"));
        convert(map, wrapper);
        List<BasDevpErrorLog> list = basDevpErrorLogService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/basDevpErrorLogQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<BasDevpErrorLog> wrapper = new EntityWrapper<>();
        wrapper.like("dev_no", condition);
        Page<BasDevpErrorLog> page = basDevpErrorLogService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (BasDevpErrorLog basDevpErrorLog : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", basDevpErrorLog.getId());
            map.put("value", basDevpErrorLog.getId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/basDevpErrorLog/check/column/auth")
    @ManagerAuth
src/main/java/com/zy/asrs/controller/BasRgvErrorLogController.java
New file
@@ -0,0 +1,168 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.BasRgvErrorLog;
import com.zy.asrs.service.BasRgvErrorLogService;
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.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
@RestController
public class BasRgvErrorLogController extends BaseController {
    protected static final String RANGE_TIME_LINK = " - ";
    @Autowired
    private BasRgvErrorLogService basRgvErrorLogService;
    @RequestMapping(value = "/basRgvErrorLog/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(basRgvErrorLogService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/basRgvErrorLog/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<BasRgvErrorLog> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        allLike(BasRgvErrorLog.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(basRgvErrorLogService.selectPage(new Page<>(curr, limit), wrapper));
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    /**
     * 全字段模糊搜索
     * @param cls 模型类
     * @param set 排除字段集合
     * @param condition 搜索内容
     */
    protected <T> void allLike(Class<T> cls, Set<String> set, EntityWrapper<T> wrapper, String condition){
        if (Cools.isEmpty(condition)) {
            return;
        }
        List<String> columns = new ArrayList<>();
        for (Field field :Cools.getAllFields(cls)){
            if (Modifier.isFinal(field.getModifiers())
                    || Modifier.isStatic(field.getModifiers())
                    || Modifier.isTransient(field.getModifiers())){
                continue;
            }
            String column = null;
            if (field.isAnnotationPresent(TableField.class)) {
                column = field.getAnnotation(TableField.class).value();
            }
            if (Cools.isEmpty(column)) {
                column = field.getName();
            }
            if (!set.contains(column)) {
                columns.add(column);
            }
        }
        if (columns.isEmpty()) {
            return;
        }
        for (int i=0;i<columns.size();i++){
            if (i==0){
                wrapper.andNew();
            } else {
                wrapper.or();
            }
            wrapper.like(columns.get(i), condition);
        }
    }
    @RequestMapping(value = "/basRgvErrorLog/add/auth")
    @ManagerAuth
    public R add(BasRgvErrorLog basRgvErrorLog) {
        basRgvErrorLogService.insert(basRgvErrorLog);
        return R.ok();
    }
    @RequestMapping(value = "/basRgvErrorLog/update/auth")
    @ManagerAuth
    public R update(BasRgvErrorLog basRgvErrorLog){
        if (Cools.isEmpty(basRgvErrorLog) || null==basRgvErrorLog.getId()){
            return R.error();
        }
        basRgvErrorLogService.updateById(basRgvErrorLog);
        return R.ok();
    }
    @RequestMapping(value = "/basRgvErrorLog/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            basRgvErrorLogService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/basRgvErrorLog/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<BasRgvErrorLog> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("basRgvErrorLog"));
        convert(map, wrapper);
        List<BasRgvErrorLog> list = basRgvErrorLogService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/basRgvErrorLogQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<BasRgvErrorLog> wrapper = new EntityWrapper<>();
        wrapper.like("rgv_no", condition);
        Page<BasRgvErrorLog> page = basRgvErrorLogService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (BasRgvErrorLog basRgvErrorLog : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", basRgvErrorLog.getId());
            map.put("value", basRgvErrorLog.getId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/basRgvErrorLog/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<BasRgvErrorLog> wrapper = new EntityWrapper<BasRgvErrorLog>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != basRgvErrorLogService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(BasRgvErrorLog.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/entity/BasCrnErrorLog.java
New file
@@ -0,0 +1,465 @@
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 com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("asr_bas_crn_error_log")
public class BasCrnErrorLog implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 编号
     */
    @ApiModelProperty(value= "编号")
    @TableField("crn_no")
    private Integer crnNo;
    /**
     * 行走变频器故障
     */
    @ApiModelProperty(value= "行走变频器故障")
    @TableField("ib_drive_fault")
    private String ibDriveFault;
    /**
     * 提共变频器故障
     */
    @ApiModelProperty(value= "提共变频器故障")
    @TableField("ib_supply_fault")
    private String ibSupplyFault;
    /**
     * 货叉变频器故障
     */
    @ApiModelProperty(value= "货叉变频器故障")
    @TableField("ib_fork_drive_fault")
    private String ibForkDriveFault;
    /**
     * 行走断路器故障
     */
    @ApiModelProperty(value= "行走断路器故障")
    @TableField("ib_drive_circuit_fault")
    private String ibDriveCircuitFault;
    /**
     * 提升断路器故障
     */
    @ApiModelProperty(value= "提升断路器故障")
    @TableField("ib_lift_circuit_fault")
    private String ibLiftCircuitFault;
    /**
     * 货叉断路器故障
     */
    @ApiModelProperty(value= "货叉断路器故障")
    @TableField("ib_fork_circuit_fault")
    private String ibForkCircuitFault;
    /**
     * 前进限位
     */
    @ApiModelProperty(value= "前进限位")
    @TableField("ib_forward_limit")
    private String ibForwardLimit;
    /**
     * 后退限位
     */
    @ApiModelProperty(value= "后退限位")
    @TableField("ib_reverse_limit")
    private String ibReverseLimit;
    /**
     * 行走原点
     */
    @ApiModelProperty(value= "行走原点")
    @TableField("ib_drive_start")
    private String ibDriveStart;
    /**
     * 前进强制低速
     */
    @ApiModelProperty(value= "前进强制低速")
    @TableField("ib_forward_brake_speed")
    private String ibForwardBrakeSpeed;
    /**
     * 后退强制低速
     */
    @ApiModelProperty(value= "后退强制低速")
    @TableField("ib_reverse_brake_speed")
    private String ibReverseBrakeSpeed;
    /**
     * 上升限位
     */
    @ApiModelProperty(value= "上升限位")
    @TableField("ib_up_limit")
    private String ibUpLimit;
    /**
     * 下限限位
     */
    @ApiModelProperty(value= "下限限位")
    @TableField("ib_down_limit")
    private String ibDownLimit;
    /**
     * 提升原点
     */
    @ApiModelProperty(value= "提升原点")
    @TableField("ib_up_origin")
    private String ibUpOrigin;
    /**
     * 上升强制低速
     */
    @ApiModelProperty(value= "上升强制低速")
    @TableField("ib_up_brake_speed")
    private String ibUpBrakeSpeed;
    /**
     * 下降强制低速
     */
    @ApiModelProperty(value= "下降强制低速")
    @TableField("ib_down_brake_speed")
    private String ibDownBrakeSpeed;
    /**
     * 创建时间
     */
    @ApiModelProperty(value= "创建时间")
    @TableField("create_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 载货台探货
     */
    @ApiModelProperty(value= "载货台探货")
    @TableField("ib_platform_signal")
    private String ibPlatformSignal;
    /**
     * 货叉中位信号
     */
    @ApiModelProperty(value= "货叉中位信号")
    @TableField("ib_fork_mid_signal")
    private String ibForkMidSignal;
    /**
     * 货叉左极限
     */
    @ApiModelProperty(value= "货叉左极限")
    @TableField("ib_fork_left_limit")
    private String ibForkLeftLimit;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 货叉右极限
     */
    @ApiModelProperty(value= "货叉右极限")
    @TableField("ib_fork_right_limit")
    private String ibForkRightLimit;
    /**
     * 前超限
     */
    @ApiModelProperty(value= "前超限")
    @TableField("ib_front_over_limit")
    private String ibFrontOverLimit;
    /**
     * 后超限
     */
    @ApiModelProperty(value= "后超限")
    @TableField("ib_rear_over_limit")
    private String ibRearOverLimit;
    /**
     * 左超限
     */
    @ApiModelProperty(value= "左超限")
    @TableField("ib_left_over_limit")
    private String ibLeftOverLimit;
    /**
     * 右超限
     */
    @ApiModelProperty(value= "右超限")
    @TableField("ib_right_over_limit")
    private String ibRightOverLimit;
    /**
     * 高超限1
     */
    @ApiModelProperty(value= "高超限1")
    @TableField("ib_high_over_limit_1")
    private String ibHighOverLimit1;
    /**
     * 高超限2
     */
    @ApiModelProperty(value= "高超限2")
    @TableField("ib_high_over_limit_2")
    private String ibHighOverLimit2;
    /**
     * 高超限3
     */
    @ApiModelProperty(value= "高超限3")
    @TableField("ib_high_over_limit_3")
    private String ibHighOverLimit3;
    /**
     * 一伸左侧探货1
     */
    @ApiModelProperty(value= "一伸左侧探货1")
    @TableField("ib_one_extend_left_load_1")
    private String ibOneExtendLeftLoad1;
    /**
     * 一伸左侧探货2
     */
    @ApiModelProperty(value= "一伸左侧探货2")
    @TableField("ib_one_extend_left_load_2")
    private String ibOneExtendLeftLoad2;
    /**
     * 一伸右侧探货1
     */
    @ApiModelProperty(value= "一伸右侧探货1")
    @TableField("ib_one_extend_right_load_1")
    private String ibOneExtendRightLoad1;
    /**
     * 一伸右侧探货2
     */
    @ApiModelProperty(value= "一伸右侧探货2")
    @TableField("ib_one_extend_right_load_2")
    private String ibOneExtendRightLoad2;
    /**
     * 二伸左侧探货1
     */
    @ApiModelProperty(value= "二伸左侧探货1")
    @TableField("ib_two_extend_left_load_1")
    private String ibTwoExtendLeftLoad1;
    /**
     * 二伸左侧探货2
     */
    @ApiModelProperty(value= "二伸左侧探货2")
    @TableField("ib_two_extend_left_load_2")
    private String ibTwoExtendLeftLoad2;
    /**
     * 二伸右侧探货1
     */
    @ApiModelProperty(value= "二伸右侧探货1")
    @TableField("ib_two_extend_right_load_1")
    private String ibTwoExtendRightLoad1;
    /**
     * 二伸右侧探货2
     */
    @ApiModelProperty(value= "二伸右侧探货2")
    @TableField("ib_two_extend_right_load_2")
    private String ibTwoExtendRightLoad2;
    /**
     * 超速信号1
     */
    @ApiModelProperty(value= "超速信号1")
    @TableField("ib_speed_signal_1")
    private String ibSpeedSignal1;
    /**
     * 超速信号2
     */
    @ApiModelProperty(value= "超速信号2")
    @TableField("ib_speed_signal_2")
    private String ibSpeedSignal2;
    /**
     * 超重信号1
     */
    @ApiModelProperty(value= "超重信号1")
    @TableField("ib_overweight_signal_1")
    private String ibOverweightSignal1;
    /**
     * 超重信号2
     */
    @ApiModelProperty(value= "超重信号2")
    @TableField("ib_overweight_signal_2")
    private String ibOverweightSignal2;
    /**
     * 松绳信号1
     */
    @ApiModelProperty(value= "松绳信号1")
    @TableField("ib_rope_release_signal_1")
    private String ibRopeReleaseSignal1;
    /**
     * 松绳信号2
     */
    @ApiModelProperty(value= "松绳信号2")
    @TableField("ib_rope_release_signal_2")
    private String ibRopeReleaseSignal2;
    /**
     * 安全钳
     */
    @ApiModelProperty(value= "安全钳")
    @TableField("ib_safety_clamp")
    private String ibSafetyClamp;
    /**
     * 张紧器
     */
    @ApiModelProperty(value= "张紧器")
    @TableField("ib_tightener")
    private String ibTightener;
    /**
     * 限速器
     */
    @ApiModelProperty(value= "限速器")
    @TableField("ib_speed_limiter")
    private String ibSpeedLimiter;
    /**
     * 安全门打开
     */
    @ApiModelProperty(value= "安全门打开")
    @TableField("ib_safety_door_open")
    private String ibSafetyDoorOpen;
    public BasCrnErrorLog() {}
    public BasCrnErrorLog(Integer crnNo,String ibDriveFault,String ibSupplyFault,String ibForkDriveFault,String ibDriveCircuitFault,String ibLiftCircuitFault,String ibForkCircuitFault,String ibForwardLimit,String ibReverseLimit,String ibDriveStart,String ibForwardBrakeSpeed,String ibReverseBrakeSpeed,String ibUpLimit,String ibDownLimit,String ibUpOrigin,String ibUpBrakeSpeed,String ibDownBrakeSpeed,Date createTime,String ibPlatformSignal,String ibForkMidSignal,String ibForkLeftLimit,String ibForkRightLimit,String ibFrontOverLimit,String ibRearOverLimit,String ibLeftOverLimit,String ibRightOverLimit,String ibHighOverLimit1,String ibHighOverLimit2,String ibHighOverLimit3,String ibOneExtendLeftLoad1,String ibOneExtendLeftLoad2,String ibOneExtendRightLoad1,String ibOneExtendRightLoad2,String ibTwoExtendLeftLoad1,String ibTwoExtendLeftLoad2,String ibTwoExtendRightLoad1,String ibTwoExtendRightLoad2,String ibSpeedSignal1,String ibSpeedSignal2,String ibOverweightSignal1,String ibOverweightSignal2,String ibRopeReleaseSignal1,String ibRopeReleaseSignal2,String ibSafetyClamp,String ibTightener,String ibSpeedLimiter,String ibSafetyDoorOpen) {
        this.crnNo = crnNo;
        this.ibDriveFault = ibDriveFault;
        this.ibSupplyFault = ibSupplyFault;
        this.ibForkDriveFault = ibForkDriveFault;
        this.ibDriveCircuitFault = ibDriveCircuitFault;
        this.ibLiftCircuitFault = ibLiftCircuitFault;
        this.ibForkCircuitFault = ibForkCircuitFault;
        this.ibForwardLimit = ibForwardLimit;
        this.ibReverseLimit = ibReverseLimit;
        this.ibDriveStart = ibDriveStart;
        this.ibForwardBrakeSpeed = ibForwardBrakeSpeed;
        this.ibReverseBrakeSpeed = ibReverseBrakeSpeed;
        this.ibUpLimit = ibUpLimit;
        this.ibDownLimit = ibDownLimit;
        this.ibUpOrigin = ibUpOrigin;
        this.ibUpBrakeSpeed = ibUpBrakeSpeed;
        this.ibDownBrakeSpeed = ibDownBrakeSpeed;
        this.createTime = createTime;
        this.ibPlatformSignal = ibPlatformSignal;
        this.ibForkMidSignal = ibForkMidSignal;
        this.ibForkLeftLimit = ibForkLeftLimit;
        this.ibForkRightLimit = ibForkRightLimit;
        this.ibFrontOverLimit = ibFrontOverLimit;
        this.ibRearOverLimit = ibRearOverLimit;
        this.ibLeftOverLimit = ibLeftOverLimit;
        this.ibRightOverLimit = ibRightOverLimit;
        this.ibHighOverLimit1 = ibHighOverLimit1;
        this.ibHighOverLimit2 = ibHighOverLimit2;
        this.ibHighOverLimit3 = ibHighOverLimit3;
        this.ibOneExtendLeftLoad1 = ibOneExtendLeftLoad1;
        this.ibOneExtendLeftLoad2 = ibOneExtendLeftLoad2;
        this.ibOneExtendRightLoad1 = ibOneExtendRightLoad1;
        this.ibOneExtendRightLoad2 = ibOneExtendRightLoad2;
        this.ibTwoExtendLeftLoad1 = ibTwoExtendLeftLoad1;
        this.ibTwoExtendLeftLoad2 = ibTwoExtendLeftLoad2;
        this.ibTwoExtendRightLoad1 = ibTwoExtendRightLoad1;
        this.ibTwoExtendRightLoad2 = ibTwoExtendRightLoad2;
        this.ibSpeedSignal1 = ibSpeedSignal1;
        this.ibSpeedSignal2 = ibSpeedSignal2;
        this.ibOverweightSignal1 = ibOverweightSignal1;
        this.ibOverweightSignal2 = ibOverweightSignal2;
        this.ibRopeReleaseSignal1 = ibRopeReleaseSignal1;
        this.ibRopeReleaseSignal2 = ibRopeReleaseSignal2;
        this.ibSafetyClamp = ibSafetyClamp;
        this.ibTightener = ibTightener;
        this.ibSpeedLimiter = ibSpeedLimiter;
        this.ibSafetyDoorOpen = ibSafetyDoorOpen;
    }
//    BasCrnErrorLog basCrnErrorLog = new BasCrnErrorLog(
//            null,    // 编号
//            null,    // 行走变频器故障
//            null,    // 提共变频器故障
//            null,    // 货叉变频器故障
//            null,    // 行走断路器故障
//            null,    // 提升断路器故障
//            null,    // 货叉断路器故障
//            null,    // 前进限位
//            null,    // 后退限位
//            null,    // 行走原点
//            null,    // 前进强制低速
//            null,    // 后退强制低速
//            null,    // 上升限位
//            null,    // 下限限位
//            null,    // 提升原点
//            null,    // 上升强制低速
//            null,    // 下降强制低速
//            null,    // 创建时间
//            null,    // 载货台探货
//            null,    // 货叉中位信号
//            null,    // 货叉左极限
//            null,    // 货叉右极限
//            null,    // 前超限
//            null,    // 后超限
//            null,    // 左超限
//            null,    // 右超限
//            null,    // 高超限1
//            null,    // 高超限2
//            null,    // 高超限3
//            null,    // 一伸左侧探货1
//            null,    // 一伸左侧探货2
//            null,    // 一伸右侧探货1
//            null,    // 一伸右侧探货2
//            null,    // 二伸左侧探货1
//            null,    // 二伸左侧探货2
//            null,    // 二伸右侧探货1
//            null,    // 二伸右侧探货2
//            null,    // 超速信号1
//            null,    // 超速信号2
//            null,    // 超重信号1
//            null,    // 超重信号2
//            null,    // 松绳信号1
//            null,    // 松绳信号2
//            null,    // 安全钳
//            null,    // 张紧器
//            null,    // 限速器
//            null    // 安全门打开
//    );
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
}
src/main/java/com/zy/asrs/entity/BasDevpErrorLog.java
@@ -1,11 +1,11 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
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 com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -17,9 +17,7 @@
public class BasDevpErrorLog implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 输送编号
     */
@@ -152,13 +150,169 @@
    @TableField("out_enable")
    private String outEnable;
    /**
     * 数据错误
     */
    @ApiModelProperty(value= "数据错误")
    @TableField("data_error")
    private String dataError;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 直线光电
     */
    @ApiModelProperty(value= "直线光电")
    @TableField("sensorG_arrive")
    private String sensorGArrive;
    /**
     * 减速光电
     */
    @ApiModelProperty(value= "减速光电")
    @TableField("sensorG_dec")
    private String sensorGDec;
    /**
     * 直线凸出
     */
    @ApiModelProperty(value= "直线凸出")
    @TableField("sensorG_arrive2")
    private String sensorGArrive2;
    /**
     * 限位保护光电
     */
    @ApiModelProperty(value= "限位保护光电")
    @TableField("sensor_limit")
    private String sensorLimit;
    /**
     * 急停
     */
    @ApiModelProperty(value= "急停")
    private String emergency;
    /**
     * 光电离开1
     */
    @ApiModelProperty(value= "光电离开1")
    @TableField("sensorG_leave")
    private String sensorGLeave;
    /**
     * 光电离开2
     */
    @ApiModelProperty(value= "光电离开2")
    @TableField("sensorG_leave2")
    private String sensorGLeave2;
    /**
     * 顶升上升
     */
    @ApiModelProperty(value= "顶升上升")
    @TableField("sensorC_up")
    private String sensorCUp;
    /**
     * 顶升下降
     */
    @ApiModelProperty(value= "顶升下降")
    @TableField("sensorC_down")
    private String sensorCDown;
    /**
     * 顶升热继
     */
    @ApiModelProperty(value= "顶升热继")
    @TableField("lift_motor_fr")
    private String liftMotorFr;
    /**
     * 直线热继
     */
    @ApiModelProperty(value= "直线热继")
    @TableField("line_motor_fr")
    private String lineMotorFr;
    /**
     * 移栽热继
     */
    @ApiModelProperty(value= "移栽热继")
    @TableField("tran_motor_fr")
    private String tranMotorFr;
    /**
     * 备用1
     */
    @ApiModelProperty(value= "备用1")
    private String rst1;
    /**
     * 备用2
     */
    @ApiModelProperty(value= "备用2")
    private String rst2;
    /**
     * 备用3
     */
    @ApiModelProperty(value= "备用3")
    private String rst3;
    /**
     * 备用4
     */
    @ApiModelProperty(value= "备用4")
    private String rst4;
    /**
     * 直行方向到位
     */
    @ApiModelProperty(value= "直行方向到位")
    @TableField("sensor_arrive_d")
    private String sensorArriveD;
    /**
     * 直行方向减速
     */
    @ApiModelProperty(value= "直行方向减速")
    @TableField("sensor_dec_d")
    private String sensorDecD;
    /**
     * 左移方向到位
     */
    @ApiModelProperty(value= "左移方向到位")
    @TableField("sensor_arrive_l")
    private String sensorArriveL;
    /**
     * 左移方向减速
     */
    @ApiModelProperty(value= "左移方向减速")
    @TableField("sensor_dec_l")
    private String sensorDecL;
    /**
     * 右移方向到位
     */
    @ApiModelProperty(value= "右移方向到位")
    @TableField("sensor_arrive_r")
    private String sensorArriveR;
    /**
     * 右移方向减速
     */
    @ApiModelProperty(value= "右移方向减速")
    @TableField("sensor_dec_r")
    private String sensorDecR;
    public BasDevpErrorLog() {}
    public BasDevpErrorLog(Integer devNo,String passTimeOut,String objectNoIdError,String idNoObjectError,String lmfrError,String liftError,String dlfrError,String dmfrError,String vfdError,String srvError,String res1,String res2,String res3,String communicationTimeOut,String parameterIncompleteError,String dataNotClear,String setParameterError,Date createTime,String inEnable,String outEnable,String dataError) {
    public BasDevpErrorLog(Integer devNo,String passTimeOut,String objectNoIdError,String idNoObjectError,String lmfrError,String liftError,String dlfrError,String dmfrError,String vfdError,String srvError,String res1,String res2,String res3,String communicationTimeOut,String parameterIncompleteError,String dataNotClear,String setParameterError,Date createTime,String inEnable,String outEnable,String dataError,String sensorGArrive,String sensorGDec,String sensorGArrive2,String sensorLimit,String emergency,String sensorGLeave,String sensorGLeave2,String sensorCUp,String sensorCDown,String liftMotorFr,String lineMotorFr,String tranMotorFr,String rst1,String rst2,String rst3,String rst4,String sensorArriveD,String sensorDecD,String sensorArriveL,String sensorDecL,String sensorArriveR,String sensorDecR) {
        this.devNo = devNo;
        this.passTimeOut = passTimeOut;
        this.objectNoIdError = objectNoIdError;
@@ -180,6 +334,28 @@
        this.inEnable = inEnable;
        this.outEnable = outEnable;
        this.dataError = dataError;
        this.sensorGArrive = sensorGArrive;
        this.sensorGDec = sensorGDec;
        this.sensorGArrive2 = sensorGArrive2;
        this.sensorLimit = sensorLimit;
        this.emergency = emergency;
        this.sensorGLeave = sensorGLeave;
        this.sensorGLeave2 = sensorGLeave2;
        this.sensorCUp = sensorCUp;
        this.sensorCDown = sensorCDown;
        this.liftMotorFr = liftMotorFr;
        this.lineMotorFr = lineMotorFr;
        this.tranMotorFr = tranMotorFr;
        this.rst1 = rst1;
        this.rst2 = rst2;
        this.rst3 = rst3;
        this.rst4 = rst4;
        this.sensorArriveD = sensorArriveD;
        this.sensorDecD = sensorDecD;
        this.sensorArriveL = sensorArriveL;
        this.sensorDecL = sensorDecL;
        this.sensorArriveR = sensorArriveR;
        this.sensorDecR = sensorDecR;
    }
//    BasDevpErrorLog basDevpErrorLog = new BasDevpErrorLog(
@@ -203,7 +379,29 @@
//            null,    // 创建时间
//            null,    // 
//            null,    // 
//            null    //
//            null,    // 数据错误
//            null,    // 直线光电
//            null,    // 减速光电
//            null,    // 直线凸出
//            null,    // 限位保护光电
//            null,    // 急停
//            null,    // 光电离开1
//            null,    // 光电离开2
//            null,    // 顶升上升
//            null,    // 顶升下降
//            null,    // 顶升热继
//            null,    // 直线热继
//            null,    // 移栽热继
//            null,    // 备用1
//            null,    // 备用2
//            null,    // 备用3
//            null,    // 备用4
//            null,    // 直行方向到位
//            null,    // 直行方向减速
//            null,    // 左移方向到位
//            null,    // 左移方向减速
//            null,    // 右移方向到位
//            null    // 右移方向减速
//    );
    public String getCreateTime$(){
src/main/java/com/zy/asrs/entity/BasRgvErrorLog.java
New file
@@ -0,0 +1,392 @@
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 com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("asr_bas_rgv_error_log")
public class BasRgvErrorLog implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 编号
     */
    @ApiModelProperty(value= "编号")
    @TableField("rgv_no")
    private Integer rgvNo;
    /**
     * 急停触发
     */
    @ApiModelProperty(value= "急停触发")
    @TableField("emergency_stop")
    private String emergencyStop;
    /**
     * 1号位有物无资料
     */
    @ApiModelProperty(value= "1号位有物无资料")
    @TableField("slot_1_empty_no_data")
    private String slot1EmptyNoData;
    /**
     * 2号位有物无资料
     */
    @ApiModelProperty(value= "2号位有物无资料")
    @TableField("slot_2_empty_no_data")
    private String slot2EmptyNoData;
    /**
     * 命令错误走链条冲突
     */
    @ApiModelProperty(value= "命令错误走链条冲突")
    @TableField("command_error_chain_conflict")
    private String commandErrorChainConflict;
    /**
     * 目标位下发错误
     */
    @ApiModelProperty(value= "目标位下发错误")
    @TableField("target_position_issue")
    private String targetPositionIssue;
    /**
     * 走行变频器异常
     */
    @ApiModelProperty(value= "走行变频器异常")
    @TableField("travel_inverter_error")
    private String travelInverterError;
    /**
     * 1号光电异常
     */
    @ApiModelProperty(value= "1号光电异常")
    @TableField("photoelectric_1_error")
    private String photoelectric1Error;
    /**
     * 2号光电异常
     */
    @ApiModelProperty(value= "2号光电异常")
    @TableField("photoelectric_2_error")
    private String photoelectric2Error;
    /**
     * 与输线时接超时
     */
    @ApiModelProperty(value= "与输线时接超时")
    @TableField("timeout_connection_with_line")
    private String timeoutConnectionWithLine;
    /**
     * 左侧滚筒运行超时
     */
    @ApiModelProperty(value= "左侧滚筒运行超时")
    @TableField("left_roller_timeout")
    private String leftRollerTimeout;
    /**
     * 右侧滚筒运行超时
     */
    @ApiModelProperty(value= "右侧滚筒运行超时")
    @TableField("right_roller_timeout")
    private String rightRollerTimeout;
    /**
     * rgv运行超时
     */
    @ApiModelProperty(value= "rgv运行超时")
    @TableField("rgv_run_timeout")
    private String rgvRunTimeout;
    /**
     * 1号工位链条变频器异常
     */
    @ApiModelProperty(value= "1号工位链条变频器异常")
    @TableField("position_1_chain_inverter_error")
    private String position1ChainInverterError;
    /**
     * 2号工位链条变频器异常
     */
    @ApiModelProperty(value= "2号工位链条变频器异常")
    @TableField("position_2_chain_inverter_error")
    private String position2ChainInverterError;
    /**
     * 前后极限位
     */
    @ApiModelProperty(value= "前后极限位")
    @TableField("front_rear_limit")
    private String frontRearLimit;
    /**
     * 急停按钮
     */
    @ApiModelProperty(value= "急停按钮")
    @TableField("emergency_button")
    private String emergencyButton;
    /**
     * 创建时间
     */
    @ApiModelProperty(value= "创建时间")
    @TableField("create_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 急停按钮
     */
    @ApiModelProperty(value= "急停按钮")
    @TableField("forward_button")
    private String forwardButton;
    /**
     * 后退按钮
     */
    @ApiModelProperty(value= "后退按钮")
    @TableField("reverse_button")
    private String reverseButton;
    /**
     * 本地/远程
     */
    @ApiModelProperty(value= "本地/远程")
    @TableField("local_remote")
    private String localRemote;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 复位
     */
    @ApiModelProperty(value= "复位")
    private String reset;
    /**
     * 走行抱闸开关钮
     */
    @ApiModelProperty(value= "走行抱闸开关钮")
    @TableField("travel_brake_switch")
    private String travelBrakeSwitch;
    /**
     * 走行强制减速光电
     */
    @ApiModelProperty(value= "走行强制减速光电")
    @TableField("travel_speed_limit_photoelectric")
    private String travelSpeedLimitPhotoelectric;
    /**
     * 左超限 1
     */
    @ApiModelProperty(value= "左超限 1")
    @TableField("left_overlimit_1")
    private String leftOverlimit1;
    /**
     * 右超限 1
     */
    @ApiModelProperty(value= "右超限 1")
    @TableField("right_overlimit_1")
    private String rightOverlimit1;
    /**
     * 左到位 1
     */
    @ApiModelProperty(value= "左到位 1")
    @TableField("left_at_position_1")
    private String leftAtPosition1;
    /**
     * 右到位 1
     */
    @ApiModelProperty(value= "右到位 1")
    @TableField("right_at_position_1")
    private String rightAtPosition1;
    /**
     * 链条前进 1
     */
    @ApiModelProperty(value= "链条前进 1")
    @TableField("chain_forward_1")
    private String chainForward1;
    /**
     * 链条后退 1
     */
    @ApiModelProperty(value= "链条后退 1")
    @TableField("chain_reverse_1")
    private String chainReverse1;
    /**
     * 变频器报警
     */
    @ApiModelProperty(value= "变频器报警")
    @TableField("inverter_alarm")
    private String inverterAlarm;
    /**
     * 左超限 2
     */
    @ApiModelProperty(value= "左超限 2")
    @TableField("left_overlimit_2")
    private String leftOverlimit2;
    /**
     * 右超限 2
     */
    @ApiModelProperty(value= "右超限 2")
    @TableField("right_overlimit_2")
    private String rightOverlimit2;
    /**
     * 左到位 2
     */
    @ApiModelProperty(value= "左到位 2")
    @TableField("left_at_position_2")
    private String leftAtPosition2;
    /**
     * 右到位 2
     */
    @ApiModelProperty(value= "右到位 2")
    @TableField("right_at_position_2")
    private String rightAtPosition2;
    /**
     * 货物减速
     */
    @ApiModelProperty(value= "货物减速")
    @TableField("cargo_speed_reduction")
    private String cargoSpeedReduction;
    /**
     * 输送变频器报警 2
     */
    @ApiModelProperty(value= "输送变频器报警 2")
    @TableField("conveyor_inverter_alarm_2")
    private String conveyorInverterAlarm2;
    /**
     * 左输送 2
     */
    @ApiModelProperty(value= "左输送 2")
    @TableField("left_conveyor_2")
    private String leftConveyor2;
    /**
     * 右输送 2
     */
    @ApiModelProperty(value= "右输送 2")
    @TableField("right_conveyor_2")
    private String rightConveyor2;
    public BasRgvErrorLog() {}
    public BasRgvErrorLog(Integer rgvNo,String emergencyStop,String slot1EmptyNoData,String slot2EmptyNoData,String commandErrorChainConflict,String targetPositionIssue,String travelInverterError,String photoelectric1Error,String photoelectric2Error,String timeoutConnectionWithLine,String leftRollerTimeout,String rightRollerTimeout,String rgvRunTimeout,String position1ChainInverterError,String position2ChainInverterError,String frontRearLimit,String emergencyButton,Date createTime,String forwardButton,String reverseButton,String localRemote,String reset,String travelBrakeSwitch,String travelSpeedLimitPhotoelectric,String leftOverlimit1,String rightOverlimit1,String leftAtPosition1,String rightAtPosition1,String chainForward1,String chainReverse1,String inverterAlarm,String leftOverlimit2,String rightOverlimit2,String leftAtPosition2,String rightAtPosition2,String cargoSpeedReduction,String conveyorInverterAlarm2,String leftConveyor2,String rightConveyor2) {
        this.rgvNo = rgvNo;
        this.emergencyStop = emergencyStop;
        this.slot1EmptyNoData = slot1EmptyNoData;
        this.slot2EmptyNoData = slot2EmptyNoData;
        this.commandErrorChainConflict = commandErrorChainConflict;
        this.targetPositionIssue = targetPositionIssue;
        this.travelInverterError = travelInverterError;
        this.photoelectric1Error = photoelectric1Error;
        this.photoelectric2Error = photoelectric2Error;
        this.timeoutConnectionWithLine = timeoutConnectionWithLine;
        this.leftRollerTimeout = leftRollerTimeout;
        this.rightRollerTimeout = rightRollerTimeout;
        this.rgvRunTimeout = rgvRunTimeout;
        this.position1ChainInverterError = position1ChainInverterError;
        this.position2ChainInverterError = position2ChainInverterError;
        this.frontRearLimit = frontRearLimit;
        this.emergencyButton = emergencyButton;
        this.createTime = createTime;
        this.forwardButton = forwardButton;
        this.reverseButton = reverseButton;
        this.localRemote = localRemote;
        this.reset = reset;
        this.travelBrakeSwitch = travelBrakeSwitch;
        this.travelSpeedLimitPhotoelectric = travelSpeedLimitPhotoelectric;
        this.leftOverlimit1 = leftOverlimit1;
        this.rightOverlimit1 = rightOverlimit1;
        this.leftAtPosition1 = leftAtPosition1;
        this.rightAtPosition1 = rightAtPosition1;
        this.chainForward1 = chainForward1;
        this.chainReverse1 = chainReverse1;
        this.inverterAlarm = inverterAlarm;
        this.leftOverlimit2 = leftOverlimit2;
        this.rightOverlimit2 = rightOverlimit2;
        this.leftAtPosition2 = leftAtPosition2;
        this.rightAtPosition2 = rightAtPosition2;
        this.cargoSpeedReduction = cargoSpeedReduction;
        this.conveyorInverterAlarm2 = conveyorInverterAlarm2;
        this.leftConveyor2 = leftConveyor2;
        this.rightConveyor2 = rightConveyor2;
    }
//    BasRgvErrorLog basRgvErrorLog = new BasRgvErrorLog(
//            null,    // 编号
//            null,    // 急停触发
//            null,    // 1号位有物无资料
//            null,    // 2号位有物无资料
//            null,    // 命令错误走链条冲突
//            null,    // 目标位下发错误
//            null,    // 走行变频器异常
//            null,    // 1号光电异常
//            null,    // 2号光电异常
//            null,    // 与输线时接超时
//            null,    // 左侧滚筒运行超时
//            null,    // 右侧滚筒运行超时
//            null,    // rgv运行超时
//            null,    // 1号工位链条变频器异常
//            null,    // 2号工位链条变频器异常
//            null,    // 前后极限位
//            null,    // 急停按钮
//            null,    // 创建时间
//            null,    // 急停按钮
//            null,    // 后退按钮
//            null,    // 本地/远程
//            null,    // 复位
//            null,    // 走行抱闸开关钮
//            null,    // 走行强制减速光电
//            null,    // 左超限 1
//            null,    // 右超限 1
//            null,    // 左到位 1
//            null,    // 右到位 1
//            null,    // 链条前进 1
//            null,    // 链条后退 1
//            null,    // 变频器报警
//            null,    // 左超限 2
//            null,    // 右超限 2
//            null,    // 左到位 2
//            null,    // 右到位 2
//            null,    // 货物减速
//            null,    // 输送变频器报警 2
//            null,    // 左输送 2
//            null    // 右输送 2
//    );
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
}
src/main/java/com/zy/asrs/entity/param/AgvTaskAssignmentParam.java
@@ -5,10 +5,7 @@
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasAgvLocNo;
import com.zy.asrs.entity.BasAgvMast;
import com.zy.asrs.entity.BasArmMast;
import com.zy.asrs.entity.result.OrderDetlValueResultUtil;
import com.zy.asrs.service.BasAgvLocNoService;
import com.zy.asrs.service.BasDevpErrorLogService;
import lombok.Data;
import java.util.ArrayList;
src/main/java/com/zy/asrs/mapper/BasCrnErrorLogMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.BasCrnErrorLog;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasCrnErrorLogMapper extends BaseMapper<BasCrnErrorLog> {
}
src/main/java/com/zy/asrs/mapper/BasRgvErrorLogMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.BasRgvErrorLog;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasRgvErrorLogMapper extends BaseMapper<BasRgvErrorLog> {
}
src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java
@@ -46,5 +46,6 @@
    List<WrkMastSta> selectLockWrkT();
    List<WrkMastSta> selectPakingWrk(@Param("staStart") Integer staStart);
    List<WrkMastSta> selectPakingWrkNum(@Param("rgvNo") Integer rgvNo);
}
src/main/java/com/zy/asrs/service/BasCrnErrorLogService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.BasCrnErrorLog;
import com.baomidou.mybatisplus.service.IService;
public interface BasCrnErrorLogService extends IService<BasCrnErrorLog> {
}
src/main/java/com/zy/asrs/service/BasRgvErrorLogService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.BasRgvErrorLog;
import com.baomidou.mybatisplus.service.IService;
public interface BasRgvErrorLogService extends IService<BasRgvErrorLog> {
}
src/main/java/com/zy/asrs/service/WrkMastStaService.java
@@ -10,6 +10,7 @@
    List<WrkMastSta> selectLockWrkT();
    List<WrkMastSta> selectPakingWrk(Integer staStart);
    List<WrkMastSta> selectPakingWrkNum(Integer rgvNo);
}
src/main/java/com/zy/asrs/service/impl/BasCrnErrorLogServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.BasCrnErrorLogMapper;
import com.zy.asrs.entity.BasCrnErrorLog;
import com.zy.asrs.service.BasCrnErrorLogService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("basCrnErrorLogService")
public class BasCrnErrorLogServiceImpl extends ServiceImpl<BasCrnErrorLogMapper, BasCrnErrorLog> implements BasCrnErrorLogService {
}
src/main/java/com/zy/asrs/service/impl/BasRgvErrorLogServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.BasRgvErrorLogMapper;
import com.zy.asrs.entity.BasRgvErrorLog;
import com.zy.asrs.service.BasRgvErrorLogService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("basRgvErrorLogService")
public class BasRgvErrorLogServiceImpl extends ServiceImpl<BasRgvErrorLogMapper, BasRgvErrorLog> implements BasRgvErrorLogService {
}
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3486,6 +3486,11 @@
                basRgvService.updateById(basRgv);
                rgvThread.setPakMk(true);
            }
            List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo());
            if(wrkMastStaPakingNum.size() <1){
                basRgv.setPakAll("1"); //防止无其他任务时,连续取货无法恢复
                basRgvService.updateById(basRgv);
            }
        }
    }
@@ -3515,6 +3520,7 @@
                basRgv.setPakAll("1");
                basRgvService.updateById(basRgv);
            }
            // 只有当RGV空闲 并且 无任务时才继续执行
            if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE &&
                    rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk()
@@ -3559,57 +3565,12 @@
                rgvThread.setPakMk(false);  //小车双工位锁定
            }
//            if(basRgv.getPakToCrn().equals("0")){
//                rgvRunWrkToCrn(rgv, rgvProtocol,mark); //若小车取到一个接驳任务,第二个工位只能取接驳任务
//            }
//            if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getTaskNo1() == 0 && rgvThread.isPakIn() && rgvThread.isPakRgv()){
//                rgvPreScheduling();//若暂无下发任务预调度提前到取货点
//            }
//            if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO) {
//                //小车执行放货任务
//                rgvOutExecute();
//
//            }
        }
    }
    public synchronized void rgvRunWrkMastInTest(){
        BasRgvMap basRgvMap = basRgvMapMapper.selectById(1);
        List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
        basRgvMap.setNowRoute(1021); //更新小车当前位置站点号
        WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(342);//根据站点工作号和小车工作范围检索任务档
//        WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, 1);
        boolean result = false;
//        if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //距离计算   2楼单入库口不需要计算
//            result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//工位2放货站点,工位1取货站点
//        }
//        if(result){//若小车距离放货点距离近于取货点则跳过取货 true跳过取货/false优先取货
//            rgvThread.setPakRgv(false);
//            continue;
//        }
        wrkMastSta.setWorkSta(1);
        wrkMastSta.setRgvNo(1);
        wrkMastSta.setStaStart(1035);
        Short direction = 2;//双工位最终抵达位置
        boolean sign = false;
//        sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,); //命令下发
        if (sign){
            wrkMastSta.setWrkSts(1);
            try{
                wrkMastStaMapper.updateById(wrkMastSta);
                log.error("更新小车任务成功");
            }catch (Exception e){
                log.error("更新小车任务失败");
            }
//            rgvThread.setPakOut(false);//出库不允许
            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526");
            if (!signMap){
                log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo());
            }
        } else {
            log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo());
        }
    }
    /**
@@ -3710,7 +3671,7 @@
                if(wrkMastSta3 != null ){
                    List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart());
                    if(wrkMastStaPaking.size() < 1){//已有标记不再标记
                    if(wrkMastStaPaking.size() < 1 ){//已有标记不再标记
                        wrkMastSta3.setMk(1);
                        basRgv.setPakAll("0");
                        basRgvService.updateById(basRgv);
@@ -3815,7 +3776,7 @@
            }
            WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWrkNo( rgvProtocol.getTaskNo1());
            if(basRgv.getPakToCrn().equals("0")){
                wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol.getWorkNo()));
                wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol.getWorkNo()));//处理接驳任务时,连续只取接驳任务
            }
            boolean result = false;
            if(wrkMastSta1!= null && rgvProtocol.getRgvNo() == 1){ //距离计算   2楼单入库口不需要计算
@@ -4603,8 +4564,9 @@
        }
    }
    public void armTaskAssignmentCallApiLogSave(StaProtocol staProtocol ,String tableName, String response, Boolean bool) {
        ApiLog apiLog = apiLogService.selectOne(new EntityWrapper<ApiLog>()
    public void armTaskAssignmentCallApiLogSave(StaProtocol staProtocol, String tableName, String response, Boolean bool) {
        // 查询符合条件的所有 ApiLog
        List<ApiLog> apiLogs = apiLogService.selectList(new EntityWrapper<ApiLog>()
                .eq("namespace", "机械臂任务相关")
                .eq("request", "站点号:" + staProtocol.getSiteId())
                .eq("response", response)
@@ -4614,17 +4576,22 @@
                .orderBy("create_time", false)
        );
        if (!Cools.isEmpty(apiLog)){
        // 遍历结果集,检查时间戳差值是否小于 5 分钟
        for (ApiLog apiLog : apiLogs) {
            long parseLong = Long.parseLong(apiLog.getTimestamp());
            if (new Date().getTime()-parseLong<5*1000*60){
            if (new Date().getTime() - parseLong < 5 * 1000 * 60) {
                // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回
                return;
            }
        }
        // 如果没有符合条件的记录,或者所有记录时间差大于 5 分钟,保存新的日志
        apiLogService.save("机械臂任务相关", tableName, "null", staProtocol.getBarcode(),
                "站点号:" + staProtocol.getSiteId() ,
                "站点号:" + staProtocol.getSiteId(),
                response, bool);
    }
    /*
     * agv任务下发:AGV库位==》输送线站点
     * */
src/main/java/com/zy/asrs/service/impl/WrkMastStaServiceImpl.java
@@ -22,4 +22,9 @@
    public List<WrkMastSta> selectPakingWrk(Integer staStart){
        return this.baseMapper.selectPakingWrk(staStart);
    }
    @Override
    public List<WrkMastSta> selectPakingWrkNum(Integer rgvNo){
        return this.baseMapper.selectPakingWrkNum(rgvNo);
    }
}
src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
        generator.url="localhost:1433;databasename=jshdasrs";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="asr_bas_agv_loc_no";
        generator.table="asr_bas_rgv_error_log";
        generator.packagePath="com.zy.asrs";
        generator.build();
    }
src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -1,5 +1,6 @@
package com.zy.core.model.protocol;
import com.zy.asrs.entity.BasCrnErrorLog;
import com.zy.asrs.entity.BasCrnp;
import com.zy.core.enums.CrnForkPosType;
import com.zy.core.enums.CrnLiftPosType;
@@ -187,6 +188,118 @@
     */
    public Float yDuration;
    //堆垛机配置信号--------------------------------------------------------------
    // 故障读取锁定标记
    private boolean errorMk = false;
    //写入标记
    private boolean writeMk = true;
    private Boolean ibDriveFault = false;       // 行走变频器故障
    private Boolean ibSupplyFault = false;      // 提供变频器故障
    private Boolean ibForkDriveFault = false;   // 货叉变频器故障
    private Boolean ibDriveCircuitFault = false; // 行走断路器故障
    private Boolean ibLiftCircuitFault = false; // 提升断路器故障
    private Boolean ibForkCircuitFault = false; // 货叉断路器故障
    private Boolean ibForwardLimit = false;     // 前进限位
    private Boolean ibReverseLimit = false;     // 后退限位
    private Boolean ibDriveStart = false;       // 行走原点
    private Boolean ibForwardBrakeSpeed = false; // 前进强制低速
    private Boolean ibReverseBrakeSpeed = false; // 后退强制低速
    private Boolean ibUpLimit = false;          // 上升限位
    private Boolean ibDownLimit = false;        // 下限限位
    private Boolean ibUpOrigin = false;         // 提升原点
    private Boolean ibUpBrakeSpeed = false;     // 上升强制低速
    private Boolean ibDownBrakeSpeed = false;   // 下降强制低速
    private Boolean ibPlatformSignal = false;   // 载货台探货
    private Boolean ibForkMidSignal = false;    // 货叉中位信号
    private Boolean ibForkLeftLimit = false;    // 货叉左极限
    private Boolean ibForkRightLimit = false;   // 货叉右极限
    private Boolean ibFrontOverLimit = false;   // 前超限
    private Boolean ibRearOverLimit = false;    // 后超限
    private Boolean ibLeftOverLimit = false;    // 左超限
    private Boolean ibRightOverLimit = false;   // 右超限
    private Boolean ibHighOverLimit1 = false;   // 高超限1
    private Boolean ibHighOverLimit2 = false;   // 高超限2
    private Boolean ibHighOverLimit3 = false;   // 高超限3
    private Boolean ibOneExtendLeftLoad1 = false; // 一伸左侧探货1
    private Boolean ibOneExtendLeftLoad2 = false; // 一伸左侧探货2
    private Boolean ibOneExtendRightLoad1 = false; // 一伸右侧探货1
    private Boolean ibOneExtendRightLoad2 = false; // 一伸右侧探货2
    private Boolean ibTwoExtendLeftLoad1 = false; // 二伸左侧探货1
    private Boolean ibTwoExtendLeftLoad2 = false; // 二伸左侧探货2
    private Boolean ibTwoExtendRightLoad1 = false; // 二伸右侧探货1
    private Boolean ibTwoExtendRightLoad2 = false; // 二伸右侧探货2
    private Boolean ibSpeedSignal1 = false;      // 超速信号1
    private Boolean ibSpeedSignal2 = false;      // 超速信号2
    private Boolean ibOverweightSignal1 = false; // 超重信号1
    private Boolean ibOverweightSignal2 = false; // 超重信号2
    private Boolean ibRopeReleaseSignal1 = false; // 松绳信号1
    private Boolean ibRopeReleaseSignal2 = false; // 松绳信号2
    private Boolean ibSafetyClamp = false;       // 安全钳
    private Boolean ibTightener = false;         // 张紧器
    private Boolean ibSpeedLimiter = false;      // 限速器
    private Boolean ibSafetyDoorOpen = false;    // 安全门打开
    //-------------------------------------------------------------------
    public BasCrnErrorLog toSqlModelError() {
        BasCrnErrorLog basCrnErrorLog = new BasCrnErrorLog();
        // 错误字段转换
        basCrnErrorLog.setCrnNo(crnNo);
        basCrnErrorLog.setIbDriveFault(ibDriveFault ? "Y" : "N");       // 行走变频器故障
        basCrnErrorLog.setIbSupplyFault(ibSupplyFault ? "Y" : "N");      // 提供变频器故障
        basCrnErrorLog.setIbForkDriveFault(ibForkDriveFault ? "Y" : "N");   // 货叉变频器故障
        basCrnErrorLog.setIbDriveCircuitFault(ibDriveCircuitFault ? "Y" : "N"); // 行走断路器故障
        basCrnErrorLog.setIbLiftCircuitFault(ibLiftCircuitFault ? "Y" : "N"); // 提升断路器故障
        basCrnErrorLog.setIbForkCircuitFault(ibForkCircuitFault ? "Y" : "N"); // 货叉断路器故障
        basCrnErrorLog.setIbForwardLimit(ibForwardLimit ? "Y" : "N");     // 前进限位
        basCrnErrorLog.setIbReverseLimit(ibReverseLimit ? "Y" : "N");     // 后退限位
        basCrnErrorLog.setIbDriveStart(ibDriveStart ? "Y" : "N");       // 行走原点
        basCrnErrorLog.setIbForwardBrakeSpeed(ibForwardBrakeSpeed ? "Y" : "N"); // 前进强制低速
        basCrnErrorLog.setIbReverseBrakeSpeed(ibReverseBrakeSpeed ? "Y" : "N"); // 后退强制低速
        basCrnErrorLog.setIbUpLimit(ibUpLimit ? "Y" : "N");          // 上升限位
        basCrnErrorLog.setIbDownLimit(ibDownLimit ? "Y" : "N");        // 下限限位
        basCrnErrorLog.setIbUpOrigin(ibUpOrigin ? "Y" : "N");         // 提升原点
        basCrnErrorLog.setIbUpBrakeSpeed(ibUpBrakeSpeed ? "Y" : "N");     // 上升强制低速
        basCrnErrorLog.setIbDownBrakeSpeed(ibDownBrakeSpeed ? "Y" : "N");   // 下降强制低速
        basCrnErrorLog.setIbPlatformSignal(ibPlatformSignal ? "Y" : "N");   // 载货台探货
        basCrnErrorLog.setIbForkMidSignal(ibForkMidSignal ? "Y" : "N");    // 货叉中位信号
        basCrnErrorLog.setIbForkLeftLimit(ibForkLeftLimit ? "Y" : "N");    // 货叉左极限
        basCrnErrorLog.setIbForkRightLimit(ibForkRightLimit ? "Y" : "N");   // 货叉右极限
        basCrnErrorLog.setIbFrontOverLimit(ibFrontOverLimit ? "Y" : "N");   // 前超限
        basCrnErrorLog.setIbRearOverLimit(ibRearOverLimit ? "Y" : "N");    // 后超限
        basCrnErrorLog.setIbLeftOverLimit(ibLeftOverLimit ? "Y" : "N");    // 左超限
        basCrnErrorLog.setIbRightOverLimit(ibRightOverLimit ? "Y" : "N");   // 右超限
        basCrnErrorLog.setIbHighOverLimit1(ibHighOverLimit1 ? "Y" : "N");   // 高超限1
        basCrnErrorLog.setIbHighOverLimit2(ibHighOverLimit2 ? "Y" : "N");   // 高超限2
        basCrnErrorLog.setIbHighOverLimit3(ibHighOverLimit3 ? "Y" : "N");   // 高超限3
        basCrnErrorLog.setIbOneExtendLeftLoad1(ibOneExtendLeftLoad1 ? "Y" : "N"); // 一伸左侧探货1
        basCrnErrorLog.setIbOneExtendLeftLoad2(ibOneExtendLeftLoad2 ? "Y" : "N"); // 一伸左侧探货2
        basCrnErrorLog.setIbOneExtendRightLoad1(ibOneExtendRightLoad1 ? "Y" : "N"); // 一伸右侧探货1
        basCrnErrorLog.setIbOneExtendRightLoad2(ibOneExtendRightLoad2 ? "Y" : "N"); // 一伸右侧探货2
        basCrnErrorLog.setIbTwoExtendLeftLoad1(ibTwoExtendLeftLoad1 ? "Y" : "N"); // 二伸左侧探货1
        basCrnErrorLog.setIbTwoExtendLeftLoad2(ibTwoExtendLeftLoad2 ? "Y" : "N"); // 二伸左侧探货2
        basCrnErrorLog.setIbTwoExtendRightLoad1(ibTwoExtendRightLoad1 ? "Y" : "N"); // 二伸右侧探货1
        basCrnErrorLog.setIbTwoExtendRightLoad2(ibTwoExtendRightLoad2 ? "Y" : "N"); // 二伸右侧探货2
        basCrnErrorLog.setIbSpeedSignal1(ibSpeedSignal1 ? "Y" : "N");      // 超速信号1
        basCrnErrorLog.setIbSpeedSignal2(ibSpeedSignal2 ? "Y" : "N");      // 超速信号2
        basCrnErrorLog.setIbOverweightSignal1(ibOverweightSignal1 ? "Y" : "N"); // 超重信号1
        basCrnErrorLog.setIbOverweightSignal2(ibOverweightSignal2 ? "Y" : "N"); // 超重信号2
        basCrnErrorLog.setIbRopeReleaseSignal1(ibRopeReleaseSignal1 ? "Y" : "N"); // 松绳信号1
        basCrnErrorLog.setIbRopeReleaseSignal2(ibRopeReleaseSignal2 ? "Y" : "N"); // 松绳信号2
        basCrnErrorLog.setIbSafetyClamp(ibSafetyClamp ? "Y" : "N");       // 安全钳
        basCrnErrorLog.setIbTightener(ibTightener ? "Y" : "N");         // 张紧器
        basCrnErrorLog.setIbSpeedLimiter(ibSpeedLimiter ? "Y" : "N");      // 限速器
        basCrnErrorLog.setIbSafetyDoorOpen(ibSafetyDoorOpen ? "Y" : "N");    // 安全门打开
        return basCrnErrorLog;
    }
    public void setMode(Short mode) {
        this.mode = mode;
        this.modeType = CrnModeType.get(mode);
src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -1,6 +1,7 @@
package com.zy.core.model.protocol;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvErrorLog;
import com.zy.core.enums.RgvModeType;
import com.zy.core.enums.RgvStatusType;
import lombok.Data;
@@ -208,7 +209,51 @@
    ///////////////////////////////////////////////////////////////////////////////////////
    //配置信号-----------------------------------------------------------------------------
    // 故障读取锁定标记
    private boolean errorMk = false;
    //写入标记
    private boolean writeMk = true;
    private Boolean chainForward1 = false;       // 链条前进 1
    private Boolean chainReverse1 = false;       // 链条后退 1
    private Boolean inverterAlarm = false;       // 变频器报警
    private Boolean leftOverlimit2 = false;      // 左超限 2
    private Boolean rightOverlimit2 = false;     // 右超限 2
    private Boolean leftAtPosition2 = false;     // 左到位 2
    private Boolean rightAtPosition2 = false;    // 右到位 2
    private Boolean cargoSpeedReduction = false; // 货物减速
    private Boolean conveyorInverterAlarm2 = false; // 输送变频器报警 2
    private Boolean emergencyStop = false;       // 急停触发
    private Boolean slot1EmptyNoData = false;    // 1号位有物无资料
    private Boolean slot2EmptyNoData = false;    // 2号位有物无资料
    private Boolean commandErrorChainConflict = false; // 命令错误走链条冲突
    private Boolean targetPositionIssue = false; // 目标位下发错误
    private Boolean travelInverterError = false; // 走行变频器异常
    private Boolean photoelectric1Error = false; // 1号光电异常
    private Boolean photoelectric2Error = false; // 2号光电异常
    private Boolean timeoutConnectionWithLine = false; // 与输线时接超时
    private Boolean leftRollerTimeout = false;    // 左侧滚筒运行超时
    private Boolean rightRollerTimeout = false;   // 右侧滚筒运行超时
    private Boolean rgvRunTimeout = false;        // rgv运行超时
    private Boolean position1ChainInverterError = false; // 1号工位链条变频器异常
    private Boolean position2ChainInverterError = false; // 2号工位链条变频器异常
    private Boolean frontRearLimit = false;      // 前后极限位
    private Boolean emergencyButton = false;     // 急停按钮
    private Boolean forwardButton = false;       // 前进按钮
    private Boolean reverseButton = false;       // 后退按钮
    private Boolean localRemote = false;         // 本地/远程
    private Boolean reset = false;               // 复位
    private Boolean travelBrakeSwitch = false;   // 走行抱闸开关钮
    private Boolean travelSpeedLimitPhotoelectric = false; // 走行强制减速光电
    private Boolean leftOverlimit1 = false;      // 左超限 1
    private Boolean rightOverlimit1 = false;     // 右超限 1
    private Boolean leftAtPosition1 = false;     // 左到位 1
    private Boolean rightAtPosition1 = false;    // 右到位 1
    private Boolean rightConveyor2 = false;      // 右输送 2
    private Boolean leftConveyor2 = false;       // 左输送 2
    //---------------------------------------------------------------------
    /**
     * 异常码
     */
@@ -244,6 +289,51 @@
     */
    public Float xDuration;
    public BasRgvErrorLog toSqlModelError(){
        BasRgvErrorLog basRgvErrorLog = new BasRgvErrorLog();
        basRgvErrorLog.setRgvNo((int) RgvNo);// 设备号(假设有定义 siteId)
        basRgvErrorLog.setChainForward1(chainForward1 ? "Y" : "N");       // 链条前进 1
        basRgvErrorLog.setChainReverse1(chainReverse1 ? "Y" : "N");       // 链条后退 1
        basRgvErrorLog.setInverterAlarm(inverterAlarm ? "Y" : "N");       // 变频器报警
        basRgvErrorLog.setLeftOverlimit2(leftOverlimit2 ? "Y" : "N");      // 左超限 2
        basRgvErrorLog.setRightOverlimit2(rightOverlimit2 ? "Y" : "N");     // 右超限 2
        basRgvErrorLog.setLeftAtPosition2(leftAtPosition2 ? "Y" : "N");     // 左到位 2
        basRgvErrorLog.setRightAtPosition2(rightAtPosition2 ? "Y" : "N");    // 右到位 2
        basRgvErrorLog.setCargoSpeedReduction(cargoSpeedReduction ? "Y" : "N"); // 货物减速
        basRgvErrorLog.setConveyorInverterAlarm2(conveyorInverterAlarm2 ? "Y" : "N"); // 输送变频器报警 2
        basRgvErrorLog.setEmergencyStop(emergencyStop ? "Y" : "N");       // 急停触发
        basRgvErrorLog.setSlot1EmptyNoData(slot1EmptyNoData ? "Y" : "N");    // 1号位有物无资料
        basRgvErrorLog.setSlot2EmptyNoData(slot2EmptyNoData ? "Y" : "N");    // 2号位有物无资料
        basRgvErrorLog.setCommandErrorChainConflict(commandErrorChainConflict ? "Y" : "N"); // 命令错误走链条冲突
        basRgvErrorLog.setTargetPositionIssue(targetPositionIssue ? "Y" : "N"); // 目标位下发错误
        basRgvErrorLog.setTravelInverterError(travelInverterError ? "Y" : "N"); // 走行变频器异常
        basRgvErrorLog.setPhotoelectric1Error(photoelectric1Error ? "Y" : "N"); // 1号光电异常
        basRgvErrorLog.setPhotoelectric2Error(photoelectric2Error ? "Y" : "N"); // 2号光电异常
        basRgvErrorLog.setTimeoutConnectionWithLine(timeoutConnectionWithLine ? "Y" : "N"); // 与输线时接超时
        basRgvErrorLog.setLeftRollerTimeout(leftRollerTimeout ? "Y" : "N");    // 左侧滚筒运行超时
        basRgvErrorLog.setRightRollerTimeout(rightRollerTimeout ? "Y" : "N");   // 右侧滚筒运行超时
        basRgvErrorLog.setRgvRunTimeout(rgvRunTimeout ? "Y" : "N");        // rgv运行超时
        basRgvErrorLog.setPosition1ChainInverterError(position1ChainInverterError ? "Y" : "N"); // 1号工位链条变频器异常
        basRgvErrorLog.setPosition2ChainInverterError(position2ChainInverterError ? "Y" : "N"); // 2号工位链条变频器异常
        basRgvErrorLog.setFrontRearLimit(frontRearLimit ? "Y" : "N");      // 前后极限位
        basRgvErrorLog.setEmergencyButton(emergencyButton ? "Y" : "N");     // 急停按钮
        basRgvErrorLog.setForwardButton(forwardButton ? "Y" : "N");       // 前进按钮
        basRgvErrorLog.setReverseButton(reverseButton ? "Y" : "N");       // 后退按钮
        basRgvErrorLog.setLocalRemote(localRemote ? "Y" : "N");         // 本地/远程
        basRgvErrorLog.setReset(reset ? "Y" : "N");               // 复位
        basRgvErrorLog.setTravelBrakeSwitch(travelBrakeSwitch ? "Y" : "N");   // 走行抱闸开关钮
        basRgvErrorLog.setTravelSpeedLimitPhotoelectric(travelSpeedLimitPhotoelectric ? "Y" : "N"); // 走行强制减速光电
        basRgvErrorLog.setLeftOverlimit1(leftOverlimit1 ? "Y" : "N");      // 左超限 1
        basRgvErrorLog.setRightOverlimit1(rightOverlimit1 ? "Y" : "N");     // 右超限 1
        basRgvErrorLog.setLeftAtPosition1(leftAtPosition1 ? "Y" : "N");     // 左到位 1
        basRgvErrorLog.setRightAtPosition1(rightAtPosition1 ? "Y" : "N");    // 右到位 1
        basRgvErrorLog.setRightConveyor2(rightConveyor2 ? "Y" : "N");      // 右输送 2
        basRgvErrorLog.setLeftConveyor2(leftConveyor2 ? "Y" : "N");       // 左输送 2
        return basRgvErrorLog;
    }
    public void setMode(Short mode) {
        this.mode = mode;
        this.modeType = RgvModeType.get(mode);
src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -4,9 +4,6 @@
import com.zy.asrs.entity.BasDevpErrorLog;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
 * 输送线plc单个站点详细信息
 * Created by vincent on 2020/8/6
@@ -136,33 +133,82 @@
    private Boolean res4 = false; //预留4
    private Boolean res5 = false; //预留5
    private Boolean dataError = false; //数据错误
    //配置信号
    private Boolean sensorGArrive = false; //直线光电
    private Boolean sensorGDec = false; //减速光电
    private Boolean sensorGArrive2 = false; //直线凸出
    private Boolean sensorLimit = false; //限位保护光电
    private Boolean emergency = false; //急停
    private Boolean sensorGLeave = false; //光电离开1
    private Boolean sensorGLeave2 = false; //光电离开2
    private Boolean sensorCUp = false; //顶升上升
    private Boolean sensorCDown = false; //顶升下降
    private Boolean liftMotorFr = false; //顶升热继
    private Boolean lineMotorFr = false; //直线热继
    private Boolean tranMotorFr = false; //移栽热继
    private Boolean rst1 = false; //备用1
    private Boolean rst2 = false; //备用2
    private Boolean rst3 = false; //备用3
    private Boolean rst4 = false; //备用4
    private Boolean sensorArriveD = false; //直行方向到位
    private Boolean sensorDecD = false; //直行方向减速
    private Boolean sensorArriveL = false; //左移方向到位
    private Boolean sensorDecL = false; //左移方向减速
    private Boolean sensorArriveR = false; //右移方向到位
    private Boolean sensorDecR = false; //右移方向减速
    public BasDevpErrorLog toSqlModelError(){
        BasDevpErrorLog basDevpErrorLog = new BasDevpErrorLog();
        basDevpErrorLog.setDevNo(siteId);
        basDevpErrorLog.setPassTimeOut(passTimeOut?"Y":"N");
        basDevpErrorLog.setObjectNoIdError(objectNoIdError?"Y":"N");
        basDevpErrorLog.setIdNoObjectError(idNoObjectError?"Y":"N");
        basDevpErrorLog.setLmfrError(lmfrError?"Y":"N");
        basDevpErrorLog.setLiftError(liftError?"Y":"N");
        basDevpErrorLog.setDlfrError(dlfrError?"Y":"N");
        basDevpErrorLog.setDmfrError(dmfrError?"Y":"N");
        basDevpErrorLog.setVfdError(vfdError?"Y":"N");
        basDevpErrorLog.setSrvError(srvError?"Y":"N");
        basDevpErrorLog.setRes1(res1?"Y":"N");
        basDevpErrorLog.setRes2(res2?"Y":"N");
        basDevpErrorLog.setRes3(res3?"Y":"N");
        basDevpErrorLog.setCommunicationTimeOut(communicationTimeOut?"Y":"N");
        basDevpErrorLog.setParameterIncompleteError(parameterIncompleteError?"Y":"N");
        basDevpErrorLog.setDataNotClear(dataNotClear?"Y":"N");
        basDevpErrorLog.setSetParameterError(setParameterError?"Y":"N");
        basDevpErrorLog.setInEnable(res4?"Y":"N");
        basDevpErrorLog.setOutEnable(res5?"Y":"N");
        basDevpErrorLog.setDataError(dataError?"Y":"N");
        basDevpErrorLog.setDevNo(siteId); // 设备号(假设有定义 siteId)
        basDevpErrorLog.setPassTimeOut(passTimeOut ? "Y" : "N");
        basDevpErrorLog.setObjectNoIdError(objectNoIdError ? "Y" : "N");
        basDevpErrorLog.setIdNoObjectError(idNoObjectError ? "Y" : "N");
        basDevpErrorLog.setLmfrError(lmfrError ? "Y" : "N");
        basDevpErrorLog.setLiftError(liftError ? "Y" : "N");
        basDevpErrorLog.setDlfrError(dlfrError ? "Y" : "N");
        basDevpErrorLog.setDmfrError(dmfrError ? "Y" : "N");
        basDevpErrorLog.setVfdError(vfdError ? "Y" : "N");
        basDevpErrorLog.setSrvError(srvError ? "Y" : "N");
        basDevpErrorLog.setRes1(res1 ? "Y" : "N");
        basDevpErrorLog.setRes2(res2 ? "Y" : "N");
        basDevpErrorLog.setRes3(res3 ? "Y" : "N");
        basDevpErrorLog.setCommunicationTimeOut(communicationTimeOut ? "Y" : "N");
        basDevpErrorLog.setParameterIncompleteError(parameterIncompleteError ? "Y" : "N");
        basDevpErrorLog.setDataNotClear(dataNotClear ? "Y" : "N");
        basDevpErrorLog.setSetParameterError(setParameterError ? "Y" : "N");
        basDevpErrorLog.setInEnable(res4 ? "Y" : "N");
        basDevpErrorLog.setOutEnable(res5 ? "Y" : "N");
        basDevpErrorLog.setDataError(dataError ? "Y" : "N");
        // 配置信号
        basDevpErrorLog.setSensorGArrive(sensorGArrive ? "Y" : "N");
        basDevpErrorLog.setSensorGDec(sensorGDec ? "Y" : "N");
        basDevpErrorLog.setSensorGArrive2(sensorGArrive2 ? "Y" : "N");
        basDevpErrorLog.setSensorLimit(sensorLimit ? "Y" : "N");
        basDevpErrorLog.setEmergency(emergency ? "Y" : "N");
        basDevpErrorLog.setSensorGLeave(sensorGLeave ? "Y" : "N");
        basDevpErrorLog.setSensorGLeave2(sensorGLeave2 ? "Y" : "N");
        basDevpErrorLog.setSensorCUp(sensorCUp ? "Y" : "N");
        basDevpErrorLog.setSensorCDown(sensorCDown ? "Y" : "N");
        basDevpErrorLog.setLiftMotorFr(liftMotorFr ? "Y" : "N");
        basDevpErrorLog.setLineMotorFr(lineMotorFr ? "Y" : "N");
        basDevpErrorLog.setTranMotorFr(tranMotorFr ? "Y" : "N");
        basDevpErrorLog.setRst1(rst1 ? "Y" : "N");
        basDevpErrorLog.setRst2(rst2 ? "Y" : "N");
        basDevpErrorLog.setRst3(rst3 ? "Y" : "N");
        basDevpErrorLog.setRst4(rst4 ? "Y" : "N");
        basDevpErrorLog.setSensorArriveD(sensorArriveD ? "Y" : "N");
        basDevpErrorLog.setSensorDecD(sensorDecD ? "Y" : "N");
        basDevpErrorLog.setSensorArriveL(sensorArriveL ? "Y" : "N");
        basDevpErrorLog.setSensorDecL(sensorDecL ? "Y" : "N");
        basDevpErrorLog.setSensorArriveR(sensorArriveR ? "Y" : "N");
        basDevpErrorLog.setSensorDecR(sensorDecR ? "Y" : "N");
        return basDevpErrorLog;
    }
    public Boolean isErr(){
        if (frontErr || backErr || highErr || leftErr || rightErr || weightErr || barcodeErr){
            return true;
src/main/java/com/zy/core/thread/RgvThread.java
@@ -10,14 +10,8 @@
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.BasRgvMap;
import com.zy.asrs.entity.BasRgvOpt;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.BasRgvMapService;
import com.zy.asrs.service.BasRgvOptService;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.common.utils.News;
import com.zy.core.RgvThread2;
import com.zy.core.ThreadHandler;
@@ -280,7 +274,7 @@
    private void readStatus(){
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 38);
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 42);
            if (result.IsSuccess) {
                if (null == rgvProtocol) {
                    rgvProtocol = new RgvProtocol();
@@ -312,6 +306,53 @@
                rgvProtocol.setErr10(status3[1]);
                rgvProtocol.setErr11(status3[2]);
                rgvProtocol.setErr12(status3[3]);
                boolean[] statusErr = siemensNet.getByteTransform().TransBool(result.Content, 36, 6);
                rgvProtocol.setEmergencyStop(statusErr[0]);       // 急停触发
                rgvProtocol.setSlot1EmptyNoData(statusErr[1]);   // 1号位有物无资料
                rgvProtocol.setSlot2EmptyNoData(statusErr[2]);   // 2号位有物无资料
                rgvProtocol.setCommandErrorChainConflict(statusErr[3]); // 命令错误走链条冲突
                rgvProtocol.setTargetPositionIssue(statusErr[4]); // 目标位下发错误
                rgvProtocol.setTravelInverterError(statusErr[5]); // 走行变频器异常
                rgvProtocol.setPhotoelectric1Error(statusErr[6]); // 1号光电异常
                rgvProtocol.setPhotoelectric2Error(statusErr[7]); // 2号光电异常
                rgvProtocol.setTimeoutConnectionWithLine(statusErr[8]); // 与输线时接超时
                rgvProtocol.setLeftRollerTimeout(statusErr[9]);    // 左侧滚筒运行超时
                rgvProtocol.setRightRollerTimeout(statusErr[10]);   // 右侧滚筒运行超时
                rgvProtocol.setRgvRunTimeout(statusErr[11]);        // rgv运行超时
                rgvProtocol.setPosition1ChainInverterError(statusErr[12]); // 1号工位链条变频器异常
                rgvProtocol.setPosition2ChainInverterError(statusErr[13]); // 2号工位链条变频器异常
                rgvProtocol.setFrontRearLimit(statusErr[14]);      // 前后极限位
                rgvProtocol.setEmergencyButton(statusErr[15]);     // 急停按钮
                rgvProtocol.setForwardButton(statusErr[16]);       // 前进按钮
                rgvProtocol.setReverseButton(statusErr[17]);       // 后退按钮
                rgvProtocol.setLocalRemote(statusErr[18]);         // 本地/远程
                rgvProtocol.setReset(statusErr[19]);               // 复位
                rgvProtocol.setTravelBrakeSwitch(statusErr[20]);   // 走行抱闸开关钮
                rgvProtocol.setTravelSpeedLimitPhotoelectric(statusErr[21]); // 走行强制减速光电
                rgvProtocol.setLeftOverlimit1(statusErr[22]);      // 左超限 1
                rgvProtocol.setRightOverlimit1(statusErr[23]);     // 右超限 1
                rgvProtocol.setLeftAtPosition1(statusErr[24]);     // 左到位 1
                rgvProtocol.setRightAtPosition1(statusErr[25]);    // 右到位 1
                rgvProtocol.setChainForward1(statusErr[26]);       // 链条前进 1
                rgvProtocol.setChainReverse1(statusErr[27]);       // 链条后退 1
                rgvProtocol.setInverterAlarm(statusErr[28]);       // 变频器报警
                rgvProtocol.setLeftOverlimit2(statusErr[29]);      // 左超限 2
                rgvProtocol.setRightOverlimit2(statusErr[30]);     // 右超限 2
                rgvProtocol.setLeftAtPosition2(statusErr[31]);     // 左到位 2
                rgvProtocol.setRightAtPosition2(statusErr[32]);    // 右到位 2
                rgvProtocol.setCargoSpeedReduction(statusErr[33]); // 货物减速
                rgvProtocol.setConveyorInverterAlarm2(statusErr[34]); // 输送变频器报警 2
                rgvProtocol.setRightConveyor2(statusErr[35]);      // 右输送 2
                rgvProtocol.setLeftConveyor2(statusErr[36]);       // 左输送 2
                if(rgvProtocol.getStatus() == 99){
                    rgvProtocol.setErrorMk(true);//若存在异常触发写入
                }else{
                    rgvProtocol.setWriteMk(true);//无异常后才能继续写入
                    rgvProtocol.setErrorMk(false);
                }
//                BasRgvMapService basRgvMapService = SpringUtils.getBean(BasRgvMapService.class);
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功", DateUtils.convert(new Date()), slave.getId()));
                try {
@@ -320,6 +361,18 @@
                    BasRgv basRgv = new BasRgv();
                    basRgv.setRgvNo(slave.getId());
                    basRgv.setRgvSts((int)rgvProtocol.getMode());
                    if(rgvProtocol.isWriteMk() && rgvProtocol.isErrorMk()){
                        try {
                            // 日志记录异常情况
                            BasRgvErrorLog basRgvErrorLogs;
                            basRgvErrorLogs = rgvProtocol.toSqlModelError();
                            BasRgvErrorLogService basRgvErrorLogService = SpringUtils.getBean(BasRgvErrorLogService.class);
                            basRgvErrorLogService.insert(basRgvErrorLogs);
                            rgvProtocol.setWriteMk(false);
                        } catch (Exception ignore) {
                            log.error(ignore.getMessage());
                        }
                    }
                    if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
                        log.error("RGV plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
                    }
src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -8,10 +8,14 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasCrnErrorLog;
import com.zy.asrs.entity.BasCrnOpt;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.BasDevpErrorLog;
import com.zy.asrs.service.BasCrnErrorLogService;
import com.zy.asrs.service.BasCrnOptService;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.BasDevpErrorLogService;
import com.zy.common.utils.News;
import com.zy.core.CrnThread;
import com.zy.core.cache.MessageQueue;
@@ -166,6 +170,7 @@
    private void readStatus(){
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56);
            OperateResultExOne<byte[]> resultErr = siemensNet.Read("DB64.0", (short) 7);
            if (result.IsSuccess) {
                if (null == crnProtocol) {
                    crnProtocol = new CrnProtocol();
@@ -194,6 +199,63 @@
                crnProtocol.setxDuration(siemensNet.getByteTransform().TransSingle(result.Content, 48));
                crnProtocol.setyDuration(siemensNet.getByteTransform().TransSingle(result.Content, 52));
                boolean[] statusSign = siemensNet.getByteTransform().TransBool(resultErr.Content, 0, 7);
                crnProtocol.setIbDriveFault(statusSign[0]);       // 行走变频器故障
                crnProtocol.setIbSupplyFault(statusSign[1]);      // 提供变频器故障
                crnProtocol.setIbForkDriveFault(statusSign[2]);   // 货叉变频器故障
                crnProtocol.setIbDriveCircuitFault(statusSign[3]); // 行走断路器故障
                crnProtocol.setIbLiftCircuitFault(statusSign[4]); // 提升断路器故障
                crnProtocol.setIbForkCircuitFault(statusSign[5]); // 货叉断路器故障
                crnProtocol.setIbForwardLimit(statusSign[6]);     // 前进限位
                crnProtocol.setIbReverseLimit(statusSign[7]);     // 后退限位
                crnProtocol.setIbDriveStart(statusSign[8]);       // 行走原点
                crnProtocol.setIbForwardBrakeSpeed(statusSign[9]); // 前进强制低速
                crnProtocol.setIbReverseBrakeSpeed(statusSign[10]); // 后退强制低速
                crnProtocol.setIbUpLimit(statusSign[11]);          // 上升限位
                crnProtocol.setIbDownLimit(statusSign[12]);        // 下限限位
                crnProtocol.setIbUpOrigin(statusSign[13]);         // 提升原点
                crnProtocol.setIbUpBrakeSpeed(statusSign[14]);     // 上升强制低速
                crnProtocol.setIbDownBrakeSpeed(statusSign[15]);   // 下降强制低速
                crnProtocol.setIbPlatformSignal(statusSign[16]);   // 载货台探货
                crnProtocol.setIbForkMidSignal(statusSign[17]);    // 货叉中位信号
                crnProtocol.setIbForkLeftLimit(statusSign[18]);    // 货叉左极限
                crnProtocol.setIbForkRightLimit(statusSign[19]);   // 货叉右极限
                crnProtocol.setIbFrontOverLimit(statusSign[20]);   // 前超限
                crnProtocol.setIbRearOverLimit(statusSign[21]);    // 后超限
                crnProtocol.setIbLeftOverLimit(statusSign[22]);    // 左超限
                crnProtocol.setIbRightOverLimit(statusSign[23]);   // 右超限
                crnProtocol.setIbHighOverLimit1(statusSign[24]);   // 高超限1
                crnProtocol.setIbHighOverLimit2(statusSign[25]);   // 高超限2
                crnProtocol.setIbHighOverLimit3(statusSign[26]);   // 高超限3
                crnProtocol.setIbOneExtendLeftLoad1(statusSign[27]); // 一伸左侧探货1
                crnProtocol.setIbOneExtendLeftLoad2(statusSign[28]); // 一伸左侧探货2
                crnProtocol.setIbOneExtendRightLoad1(statusSign[29]); // 一伸右侧探货1
                crnProtocol.setIbOneExtendRightLoad2(statusSign[30]); // 一伸右侧探货2
                crnProtocol.setIbTwoExtendLeftLoad1(statusSign[31]); // 二伸左侧探货1
                crnProtocol.setIbTwoExtendLeftLoad2(statusSign[32]); // 二伸左侧探货2
                crnProtocol.setIbTwoExtendRightLoad1(statusSign[33]); // 二伸右侧探货1
                crnProtocol.setIbTwoExtendRightLoad2(statusSign[34]); // 二伸右侧探货2
                crnProtocol.setIbSpeedSignal1(statusSign[35]);      // 超速信号1
                crnProtocol.setIbSpeedSignal2(statusSign[36]);      // 超速信号2
                crnProtocol.setIbOverweightSignal1(statusSign[37]); // 超重信号1
                crnProtocol.setIbOverweightSignal2(statusSign[38]); // 超重信号2
                crnProtocol.setIbRopeReleaseSignal1(statusSign[39]); // 松绳信号1
                crnProtocol.setIbRopeReleaseSignal2(statusSign[40]); // 松绳信号2
                crnProtocol.setIbSafetyClamp(statusSign[41]);       // 安全钳
                crnProtocol.setIbTightener(statusSign[42]);         // 张紧器
                crnProtocol.setIbSpeedLimiter(statusSign[43]);      // 限速器
                crnProtocol.setIbSafetyDoorOpen(statusSign[44]);    // 安全门打开
                if(crnProtocol.getStatus() == 99){
                    crnProtocol.setErrorMk(true);//若存在异常触发写入
                }else{
                    crnProtocol.setWriteMk(true);//无异常后才能继续写入
                    crnProtocol.setErrorMk(false);
                }
                OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
                // 复位信号
@@ -221,6 +283,18 @@
                    BasCrnp basCrnp = new BasCrnp();
                    basCrnp.setCrnNo(slave.getId());
                    basCrnp.setCrnSts((int)crnProtocol.getMode());
                    if(crnProtocol.isWriteMk() && crnProtocol.isErrorMk()){
                        try {
                            // 日志记录异常情况
                            BasCrnErrorLog basCrnErrorLogs;
                            basCrnErrorLogs = crnProtocol.toSqlModelError();
                            BasCrnErrorLogService basCrnErrorLogService = SpringUtils.getBean(BasCrnErrorLogService.class);
                            basCrnErrorLogService.insert(basCrnErrorLogs);
                            crnProtocol.setWriteMk(false);
                        } catch (Exception ignore) {
                            log.error(ignore.getMessage());
                        }
                    }
                    if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
                        News.error("SiemensCrn"+" - 3"+" - 堆垛机plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
                    }
src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -120,6 +120,43 @@
        // 其他站点同理继续加
    }};
    // 站点信号偏移量映射表
    public static final Map<Integer, Integer> siteOffsetMapSign = new HashMap<Integer, Integer>() {{
        put(1001, 0);put(1002, 4);put(1003, 8);put(1004, 12);put(1005, 16);put(1006, 20);put(1007, 24);
        put(1008, 28);put(1009, 32);put(1010, 36);put(1011, 40);put(1012, 44);put(1013, 48);put(1014, 52);
        put(1015, 56);put(1016, 60);put(1017, 64);put(1018, 68);put(1019, 72);put(1020, 76);put(1021, 80);
        put(1022, 84);put(1023, 88);put(1024, 92);put(1025, 96);put(1026, 100);put(1027, 104);put(1028, 108);
        put(1029, 112);put(1030, 116);put(1031, 120);put(1032, 124);put(1033, 128);put(1034, 132);put(1035, 136);
        put(1036, 140);put(1037, 144);put(1038, 148);put(1039, 152);put(1040, 156);put(1041, 160);
        put(1042, 392);put(1043, 396);put(1044, 400);put(1045, 404);put(1046, 408);put(1047, 412);
        put(1048, 416);put(1049, 420);put(1050, 424);put(1051, 428);put(1052, 432);put(1053, 436);
        put(1054, 288);put(1055, 292);put(1056, 296);put(1057, 300);put(1058, 304);put(1059, 308);put(1060, 312);
        put(1061, 316);put(1062, 320);put(1063, 324);put(1064, 328);put(1065, 332);put(1066, 336);put(1067, 340);
        put(1068, 344);put(1069, 348);put(1070, 352);put(1071, 356);put(1072, 360);put(1073, 364);put(1074, 368);
        put(1075, 372);put(1076, 376);put(1077, 380);put(1078, 384);put(1079, 388);
        put(1080, 164);put(1081, 168);put(1082, 172);put(1083, 176);put(1084, 180);put(1085, 184);put(1086, 188);
        put(1087, 192);put(1088, 196);put(1089, 200);put(1090, 204);put(1091, 208);put(1092, 212);put(1093, 216);
        put(1094, 220);put(1095, 224);put(1096, 228);put(1097, 232);put(1098, 236);put(1099, 240);put(1100, 244);
        put(1101, 248);put(1102, 252);put(1103, 256);put(1104, 260);put(1105, 264);
        put(1106, 268);put(1107, 272);put(1108, 276);put(1109, 280);put(1110, 284);
        put(2001, 0);put(2002, 4);put(2003, 8);put(2004, 12);put(2005, 16);
        put(2006, 20);put(2007, 24);put(2008, 28);put(2009, 32);put(2010, 36);
        put(2011, 40);put(2012, 44);put(2013, 48);put(2014, 52);put(2015, 56);
        put(2016, 60);put(2017, 64);put(2018, 68);put(2019, 72);put(2020, 76);
        put(2021, 80);put(2022, 84);put(2023, 88);put(2024, 92);put(2025, 96);
        put(2026, 100);put(2027, 104);put(2028, 108);put(2029, 112);put(2030, 116);
        put(2031, 120);put(2032, 124);put(2033, 128);put(2034, 132);put(2035, 136);
        put(2037, 144);
        put(4001, 240);put(4002, 244);put(4003, 248);put(4004, 252);put(4005, 256);
        put(4006, 260);
        // 其他站点同理继续加
    }};
    public static final Map<Integer, Integer> siteErrOffsetMap = new HashMap<Integer, Integer>() {{
        put(1036, 512);put(1103, 476);put(1047, 452);put(2037, 270);put(4001,294);
@@ -459,8 +496,9 @@
                if (offset == null) {
                    continue; // 如果没定义偏移量,跳过
                }
                Integer offset2 = getOffsetBySiteId(siteId);
                Integer offset2 = getOffsetBySiteId(siteId);//特殊偏移量计算
                Integer offset3 = getOffsetBySiteId2(siteId);
                Integer offsetSign = siteOffsetMapSign.get(siteId);
                if(siteId == 1040){
                    boolean[] full = siemensS7Net.getByteTransform().TransBool(result.Content, offset, 2);
                    staProtocol.setFull(full[0]);
@@ -493,6 +531,7 @@
                staProtocol.setAutoing(!status[0]);  // 自动
                boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result.Content, offset + offset3 - 4, 3);
                boolean[] statusErr = siemensS7Net.getByteTransform().TransBool(result.Content, offset + offset3 - 8, 3);
                boolean[] statusSign = siemensS7Net.getByteTransform().TransBool(resultErr.Content, offsetSign, 3);
                boolean loading = false;
                if(!status1[0])
                {
@@ -504,6 +543,7 @@
                staProtocol.setOutEnable(status1[2]);// 可出
                staProtocol.setErr(status1[6]);
                //报警
                staProtocol.setPassTimeOut(statusErr[0]);
                staProtocol.setObjectNoIdError(statusErr[1]);
                staProtocol.setIdNoObjectError(statusErr[2]);
@@ -523,6 +563,31 @@
                staProtocol.setRes4(statusErr[16]);
                staProtocol.setRes5(statusErr[17]);
                staProtocol.setDataError(statusErr[18]);
                //信号
                staProtocol.setSensorGArrive(statusSign[0]);
                staProtocol.setSensorGDec(statusSign[1]);
                staProtocol.setSensorGArrive2(statusSign[2]);
                staProtocol.setSensorLimit(statusSign[3]);
                staProtocol.setEmergency(statusSign[4]);
                staProtocol.setSensorGLeave(statusSign[5]);
                staProtocol.setSensorGLeave2(statusSign[6]);
                staProtocol.setSensorCUp(statusSign[7]);
                staProtocol.setSensorCDown(statusSign[8]);
                staProtocol.setLiftMotorFr(statusSign[9]);
                staProtocol.setLineMotorFr(statusSign[10]);
                staProtocol.setTranMotorFr(statusSign[11]);
                staProtocol.setRst1(statusSign[12]);
                staProtocol.setRst2(statusSign[13]);
                staProtocol.setRst3(statusSign[14]);
                staProtocol.setRst4(statusSign[15]);
                staProtocol.setSensorArriveD(statusSign[16]);
                staProtocol.setSensorDecD(statusSign[17]);
                staProtocol.setSensorArriveL(statusSign[18]);
                staProtocol.setSensorDecL(statusSign[19]);
                staProtocol.setSensorArriveR(statusSign[20]);
                staProtocol.setSensorDecR(statusSign[21]);
                if( (staProtocol.getPassTimeOut() ||
                    staProtocol.getObjectNoIdError() ||
@@ -644,7 +709,7 @@
                    if(staProtocol.isWriteMk() && staProtocol.isErrorMk()){
                        try {
                            // 日志记录异常情况
                            BasDevpErrorLog basDevpErrorLogs = new BasDevpErrorLog();
                            BasDevpErrorLog basDevpErrorLogs;
                            basDevpErrorLogs = staProtocol.toSqlModelError();
                            BasDevpErrorLogService basDevpErrorLogService = SpringUtils.getBean(BasDevpErrorLogService.class);
                            basDevpErrorLogService.insert(basDevpErrorLogs);
src/main/resources/mapper/BasCrnErrorLogMapper.xml
New file
@@ -0,0 +1,58 @@
<?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.BasCrnErrorLogMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasCrnErrorLog">
        <result column="crn_no" property="crnNo" />
        <result column="ib_drive_fault" property="ibDriveFault" />
        <result column="ib_supply_fault" property="ibSupplyFault" />
        <result column="ib_fork_drive_fault" property="ibForkDriveFault" />
        <result column="ib_drive_circuit_fault" property="ibDriveCircuitFault" />
        <result column="ib_lift_circuit_fault" property="ibLiftCircuitFault" />
        <result column="ib_fork_circuit_fault" property="ibForkCircuitFault" />
        <result column="ib_forward_limit" property="ibForwardLimit" />
        <result column="ib_reverse_limit" property="ibReverseLimit" />
        <result column="ib_drive_start" property="ibDriveStart" />
        <result column="ib_forward_brake_speed" property="ibForwardBrakeSpeed" />
        <result column="ib_reverse_brake_speed" property="ibReverseBrakeSpeed" />
        <result column="ib_up_limit" property="ibUpLimit" />
        <result column="ib_down_limit" property="ibDownLimit" />
        <result column="ib_up_origin" property="ibUpOrigin" />
        <result column="ib_up_brake_speed" property="ibUpBrakeSpeed" />
        <result column="ib_down_brake_speed" property="ibDownBrakeSpeed" />
        <result column="create_time" property="createTime" />
        <result column="ib_platform_signal" property="ibPlatformSignal" />
        <result column="ib_fork_mid_signal" property="ibForkMidSignal" />
        <result column="ib_fork_left_limit" property="ibForkLeftLimit" />
        <result column="id" property="id" />
        <result column="ib_fork_right_limit" property="ibForkRightLimit" />
        <result column="ib_front_over_limit" property="ibFrontOverLimit" />
        <result column="ib_rear_over_limit" property="ibRearOverLimit" />
        <result column="ib_left_over_limit" property="ibLeftOverLimit" />
        <result column="ib_right_over_limit" property="ibRightOverLimit" />
        <result column="ib_high_over_limit_1" property="ibHighOverLimit1" />
        <result column="ib_high_over_limit_2" property="ibHighOverLimit2" />
        <result column="ib_high_over_limit_3" property="ibHighOverLimit3" />
        <result column="ib_one_extend_left_load_1" property="ibOneExtendLeftLoad1" />
        <result column="ib_one_extend_left_load_2" property="ibOneExtendLeftLoad2" />
        <result column="ib_one_extend_right_load_1" property="ibOneExtendRightLoad1" />
        <result column="ib_one_extend_right_load_2" property="ibOneExtendRightLoad2" />
        <result column="ib_two_extend_left_load_1" property="ibTwoExtendLeftLoad1" />
        <result column="ib_two_extend_left_load_2" property="ibTwoExtendLeftLoad2" />
        <result column="ib_two_extend_right_load_1" property="ibTwoExtendRightLoad1" />
        <result column="ib_two_extend_right_load_2" property="ibTwoExtendRightLoad2" />
        <result column="ib_speed_signal_1" property="ibSpeedSignal1" />
        <result column="ib_speed_signal_2" property="ibSpeedSignal2" />
        <result column="ib_overweight_signal_1" property="ibOverweightSignal1" />
        <result column="ib_overweight_signal_2" property="ibOverweightSignal2" />
        <result column="ib_rope_release_signal_1" property="ibRopeReleaseSignal1" />
        <result column="ib_rope_release_signal_2" property="ibRopeReleaseSignal2" />
        <result column="ib_safety_clamp" property="ibSafetyClamp" />
        <result column="ib_tightener" property="ibTightener" />
        <result column="ib_speed_limiter" property="ibSpeedLimiter" />
        <result column="ib_safety_door_open" property="ibSafetyDoorOpen" />
    </resultMap>
</mapper>
src/main/resources/mapper/BasDevpErrorLogMapper.xml
@@ -26,6 +26,28 @@
        <result column="out_enable" property="outEnable" />
        <result column="data_error" property="dataError" />
        <result column="id" property="id" />
        <result column="sensorG_arrive" property="sensorGArrive" />
        <result column="sensorG_dec" property="sensorGDec" />
        <result column="sensorG_arrive2" property="sensorGArrive2" />
        <result column="sensor_limit" property="sensorLimit" />
        <result column="emergency" property="emergency" />
        <result column="sensorG_leave" property="sensorGLeave" />
        <result column="sensorG_leave2" property="sensorGLeave2" />
        <result column="sensorC_up" property="sensorCUp" />
        <result column="sensorC_down" property="sensorCDown" />
        <result column="lift_motor_fr" property="liftMotorFr" />
        <result column="line_motor_fr" property="lineMotorFr" />
        <result column="tran_motor_fr" property="tranMotorFr" />
        <result column="rst1" property="rst1" />
        <result column="rst2" property="rst2" />
        <result column="rst3" property="rst3" />
        <result column="rst4" property="rst4" />
        <result column="sensor_arrive_d" property="sensorArriveD" />
        <result column="sensor_dec_d" property="sensorDecD" />
        <result column="sensor_arrive_l" property="sensorArriveL" />
        <result column="sensor_dec_l" property="sensorDecL" />
        <result column="sensor_arrive_r" property="sensorArriveR" />
        <result column="sensor_dec_r" property="sensorDecR" />
    </resultMap>
src/main/resources/mapper/BasRgvErrorLogMapper.xml
New file
@@ -0,0 +1,50 @@
<?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.BasRgvErrorLogMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvErrorLog">
        <result column="rgv_no" property="rgvNo" />
        <result column="emergency_stop" property="emergencyStop" />
        <result column="slot_1_empty_no_data" property="slot1EmptyNoData" />
        <result column="slot_2_empty_no_data" property="slot2EmptyNoData" />
        <result column="command_error_chain_conflict" property="commandErrorChainConflict" />
        <result column="target_position_issue" property="targetPositionIssue" />
        <result column="travel_inverter_error" property="travelInverterError" />
        <result column="photoelectric_1_error" property="photoelectric1Error" />
        <result column="photoelectric_2_error" property="photoelectric2Error" />
        <result column="timeout_connection_with_line" property="timeoutConnectionWithLine" />
        <result column="left_roller_timeout" property="leftRollerTimeout" />
        <result column="right_roller_timeout" property="rightRollerTimeout" />
        <result column="rgv_run_timeout" property="rgvRunTimeout" />
        <result column="position_1_chain_inverter_error" property="position1ChainInverterError" />
        <result column="position_2_chain_inverter_error" property="position2ChainInverterError" />
        <result column="front_rear_limit" property="frontRearLimit" />
        <result column="emergency_button" property="emergencyButton" />
        <result column="create_time" property="createTime" />
        <result column="forward_button" property="forwardButton" />
        <result column="reverse_button" property="reverseButton" />
        <result column="local_remote" property="localRemote" />
        <result column="id" property="id" />
        <result column="reset" property="reset" />
        <result column="travel_brake_switch" property="travelBrakeSwitch" />
        <result column="travel_speed_limit_photoelectric" property="travelSpeedLimitPhotoelectric" />
        <result column="left_overlimit_1" property="leftOverlimit1" />
        <result column="right_overlimit_1" property="rightOverlimit1" />
        <result column="left_at_position_1" property="leftAtPosition1" />
        <result column="right_at_position_1" property="rightAtPosition1" />
        <result column="chain_forward_1" property="chainForward1" />
        <result column="chain_reverse_1" property="chainReverse1" />
        <result column="inverter_alarm" property="inverterAlarm" />
        <result column="left_overlimit_2" property="leftOverlimit2" />
        <result column="right_overlimit_2" property="rightOverlimit2" />
        <result column="left_at_position_2" property="leftAtPosition2" />
        <result column="right_at_position_2" property="rightAtPosition2" />
        <result column="cargo_speed_reduction" property="cargoSpeedReduction" />
        <result column="conveyor_inverter_alarm_2" property="conveyorInverterAlarm2" />
        <result column="left_conveyor_2" property="leftConveyor2" />
        <result column="right_conveyor_2" property="rightConveyor2" />
    </resultMap>
</mapper>
src/main/resources/mapper/WrkMastStaMapper.xml
@@ -187,6 +187,12 @@
        and sta_start = #{staStart}
    </select>
    <select id="selectPakingWrkNum" resultMap="BaseResultMap">
        select * from asr_wrk_mast_sta
        where mk = 1
        and rgv_no = #{rgvNo}
    </select>
</mapper>
src/main/webapp/static/js/basCrnErrorLog/basCrnErrorLog.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: '#basCrnErrorLog',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/basCrnErrorLog/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            ,{field: 'crnNo', align: 'center',title: '编号'}
            ,{field: 'ibDriveFault', align: 'center',title: '行走变频器故障'}
            ,{field: 'ibSupplyFault', align: 'center',title: '提共变频器故障'}
            ,{field: 'ibForkDriveFault', align: 'center',title: '货叉变频器故障'}
            ,{field: 'ibDriveCircuitFault', align: 'center',title: '行走断路器故障'}
            ,{field: 'ibLiftCircuitFault', align: 'center',title: '提升断路器故障'}
            ,{field: 'ibForkCircuitFault', align: 'center',title: '货叉断路器故障'}
            ,{field: 'ibForwardLimit', align: 'center',title: '前进限位'}
            ,{field: 'ibReverseLimit', align: 'center',title: '后退限位'}
            ,{field: 'ibDriveStart', align: 'center',title: '行走原点'}
            ,{field: 'ibForwardBrakeSpeed', align: 'center',title: '前进强制低速'}
            ,{field: 'ibReverseBrakeSpeed', align: 'center',title: '后退强制低速'}
            ,{field: 'ibUpLimit', align: 'center',title: '上升限位'}
            ,{field: 'ibDownLimit', align: 'center',title: '下限限位'}
            ,{field: 'ibUpOrigin', align: 'center',title: '提升原点'}
            ,{field: 'ibUpBrakeSpeed', align: 'center',title: '上升强制低速'}
            ,{field: 'ibDownBrakeSpeed', align: 'center',title: '下降强制低速'}
            ,{field: 'createTime$', align: 'center',title: '创建时间'}
            ,{field: 'ibPlatformSignal', align: 'center',title: '载货台探货'}
            ,{field: 'ibForkMidSignal', align: 'center',title: '货叉中位信号'}
            ,{field: 'ibForkLeftLimit', align: 'center',title: '货叉左极限'}
            ,{field: 'id', align: 'center',title: ''}
            ,{field: 'ibForkRightLimit', align: 'center',title: '货叉右极限'}
            ,{field: 'ibFrontOverLimit', align: 'center',title: '前超限'}
            ,{field: 'ibRearOverLimit', align: 'center',title: '后超限'}
            ,{field: 'ibLeftOverLimit', align: 'center',title: '左超限'}
            ,{field: 'ibRightOverLimit', align: 'center',title: '右超限'}
            ,{field: 'ibHighOverLimit1', align: 'center',title: '高超限1'}
            ,{field: 'ibHighOverLimit2', align: 'center',title: '高超限2'}
            ,{field: 'ibHighOverLimit3', align: 'center',title: '高超限3'}
            ,{field: 'ibOneExtendLeftLoad1', align: 'center',title: '一伸左侧探货1'}
            ,{field: 'ibOneExtendLeftLoad2', align: 'center',title: '一伸左侧探货2'}
            ,{field: 'ibOneExtendRightLoad1', align: 'center',title: '一伸右侧探货1'}
            ,{field: 'ibOneExtendRightLoad2', align: 'center',title: '一伸右侧探货2'}
            ,{field: 'ibTwoExtendLeftLoad1', align: 'center',title: '二伸左侧探货1'}
            ,{field: 'ibTwoExtendLeftLoad2', align: 'center',title: '二伸左侧探货2'}
            ,{field: 'ibTwoExtendRightLoad1', align: 'center',title: '二伸右侧探货1'}
            ,{field: 'ibTwoExtendRightLoad2', align: 'center',title: '二伸右侧探货2'}
            ,{field: 'ibSpeedSignal1', align: 'center',title: '超速信号1'}
            ,{field: 'ibSpeedSignal2', align: 'center',title: '超速信号2'}
            ,{field: 'ibOverweightSignal1', align: 'center',title: '超重信号1'}
            ,{field: 'ibOverweightSignal2', align: 'center',title: '超重信号2'}
            ,{field: 'ibRopeReleaseSignal1', align: 'center',title: '松绳信号1'}
            ,{field: 'ibRopeReleaseSignal2', align: 'center',title: '松绳信号2'}
            ,{field: 'ibSafetyClamp', align: 'center',title: '安全钳'}
            ,{field: 'ibTightener', align: 'center',title: '张紧器'}
            ,{field: 'ibSpeedLimiter', align: 'center',title: '限速器'}
            ,{field: 'ibSafetyDoorOpen', 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(basCrnErrorLog)', 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(basCrnErrorLog)', 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 = {
                        'basCrnErrorLog': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/basCrnErrorLog/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(basCrnErrorLog)', 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+"/basCrnErrorLog/"+(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+"/basCrnErrorLog/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
            });
        }, 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/basDevpErrorLog/basDevpErrorLog.js
@@ -42,7 +42,30 @@
            ,{field: 'createTime$', align: 'center',title: '创建时间'}
            ,{field: 'inEnable', align: 'center',title: ''}
            ,{field: 'outEnable', align: 'center',title: ''}
            ,{field: 'dataError', align: 'center',title: ''}
            ,{field: 'dataError', align: 'center',title: '数据错误'}
            ,{field: 'id', align: 'center',title: ''}
            ,{field: 'sensorGArrive', align: 'center',title: '直线光电'}
            ,{field: 'sensorGDec', align: 'center',title: '减速光电'}
            ,{field: 'sensorGArrive2', align: 'center',title: '直线凸出'}
            ,{field: 'sensorLimit', align: 'center',title: '限位保护光电'}
            ,{field: 'emergency', align: 'center',title: '急停'}
            ,{field: 'sensorGLeave', align: 'center',title: '光电离开1'}
            ,{field: 'sensorGLeave2', align: 'center',title: '光电离开2'}
            ,{field: 'sensorCUp', align: 'center',title: '顶升上升'}
            ,{field: 'sensorCDown', align: 'center',title: '顶升下降'}
            ,{field: 'liftMotorFr', align: 'center',title: '顶升热继'}
            ,{field: 'lineMotorFr', align: 'center',title: '直线热继'}
            ,{field: 'tranMotorFr', align: 'center',title: '移栽热继'}
            ,{field: 'rst1', align: 'center',title: '备用1'}
            ,{field: 'rst2', align: 'center',title: '备用2'}
            ,{field: 'rst3', align: 'center',title: '备用3'}
            ,{field: 'rst4', align: 'center',title: '备用4'}
            ,{field: 'sensorArriveD', align: 'center',title: '直行方向到位'}
            ,{field: 'sensorDecD', align: 'center',title: '直行方向减速'}
            ,{field: 'sensorArriveL', align: 'center',title: '左移方向到位'}
            ,{field: 'sensorDecL', align: 'center',title: '左移方向减速'}
            ,{field: 'sensorArriveR', align: 'center',title: '右移方向到位'}
            ,{field: 'sensorDecR', align: 'center',title: '右移方向减速'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
src/main/webapp/static/js/basRgvErrorLog/basRgvErrorLog.js
New file
@@ -0,0 +1,289 @@
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: '#basRgvErrorLog',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/basRgvErrorLog/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#toolbar',
        cellMinWidth: 50,
        height: 'full-120',
        cols: [[
            {type: 'checkbox'}
            ,{field: 'rgvNo', align: 'center',title: '编号'}
            ,{field: 'emergencyStop', align: 'center',title: '急停触发'}
            ,{field: 'slot1EmptyNoData', align: 'center',title: '1号位有物无资料'}
            ,{field: 'slot2EmptyNoData', align: 'center',title: '2号位有物无资料'}
            ,{field: 'commandErrorChainConflict', align: 'center',title: '命令错误走链条冲突'}
            ,{field: 'targetPositionIssue', align: 'center',title: '目标位下发错误'}
            ,{field: 'travelInverterError', align: 'center',title: '走行变频器异常'}
            ,{field: 'photoelectric1Error', align: 'center',title: '1号光电异常'}
            ,{field: 'photoelectric2Error', align: 'center',title: '2号光电异常'}
            ,{field: 'timeoutConnectionWithLine', align: 'center',title: '与输线时接超时'}
            ,{field: 'leftRollerTimeout', align: 'center',title: '左侧滚筒运行超时'}
            ,{field: 'rightRollerTimeout', align: 'center',title: '右侧滚筒运行超时'}
            ,{field: 'rgvRunTimeout', align: 'center',title: 'rgv运行超时'}
            ,{field: 'position1ChainInverterError', align: 'center',title: '1号工位链条变频器异常'}
            ,{field: 'position2ChainInverterError', align: 'center',title: '2号工位链条变频器异常'}
            ,{field: 'frontRearLimit', align: 'center',title: '前后极限位'}
            ,{field: 'emergencyButton', align: 'center',title: '急停按钮'}
            ,{field: 'createTime$', align: 'center',title: '创建时间'}
            ,{field: 'forwardButton', align: 'center',title: '急停按钮'}
            ,{field: 'reverseButton', align: 'center',title: '后退按钮'}
            ,{field: 'localRemote', align: 'center',title: '本地/远程'}
            ,{field: 'id', align: 'center',title: ''}
            ,{field: 'reset', align: 'center',title: '复位'}
            ,{field: 'travelBrakeSwitch', align: 'center',title: '走行抱闸开关钮'}
            ,{field: 'travelSpeedLimitPhotoelectric', align: 'center',title: '走行强制减速光电'}
            ,{field: 'leftOverlimit1', align: 'center',title: '左超限 1'}
            ,{field: 'rightOverlimit1', align: 'center',title: '右超限 1'}
            ,{field: 'leftAtPosition1', align: 'center',title: '左到位 1'}
            ,{field: 'rightAtPosition1', align: 'center',title: '右到位 1'}
            ,{field: 'chainForward1', align: 'center',title: '链条前进 1'}
            ,{field: 'chainReverse1', align: 'center',title: '链条后退 1'}
            ,{field: 'inverterAlarm', align: 'center',title: '变频器报警'}
            ,{field: 'leftOverlimit2', align: 'center',title: '左超限 2'}
            ,{field: 'rightOverlimit2', align: 'center',title: '右超限 2'}
            ,{field: 'leftAtPosition2', align: 'center',title: '左到位 2'}
            ,{field: 'rightAtPosition2', align: 'center',title: '右到位 2'}
            ,{field: 'cargoSpeedReduction', align: 'center',title: '货物减速'}
            ,{field: 'conveyorInverterAlarm2', align: 'center',title: '输送变频器报警 2'}
            ,{field: 'leftConveyor2', align: 'center',title: '左输送 2'}
            ,{field: 'rightConveyor2', align: 'center',title: '右输送 2'}
            ,{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(basRgvErrorLog)', 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(basRgvErrorLog)', 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 = {
                        'basRgvErrorLog': exportData,
                        'fields': fields
                    };
                    $.ajax({
                        url: baseUrl+"/basRgvErrorLog/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(basRgvErrorLog)', 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+"/basRgvErrorLog/"+(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+"/basRgvErrorLog/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
            });
        }, 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/basCrnErrorLog/basCrnErrorLog.html
New file
@@ -0,0 +1,368 @@
<!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="basCrnErrorLog" lay-filter="basCrnErrorLog"></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/basCrnErrorLog/basCrnErrorLog.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="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="ibDriveFault" placeholder="请输入行走变频器故障">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">提共变频器故障: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibSupplyFault" placeholder="请输入提共变频器故障">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">货叉变频器故障: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibForkDriveFault" placeholder="请输入货叉变频器故障">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">行走断路器故障: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibDriveCircuitFault" placeholder="请输入行走断路器故障">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">提升断路器故障: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibLiftCircuitFault" placeholder="请输入提升断路器故障">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">货叉断路器故障: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibForkCircuitFault" placeholder="请输入货叉断路器故障">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">前进限位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibForwardLimit" placeholder="请输入前进限位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">后退限位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibReverseLimit" placeholder="请输入后退限位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">行走原点: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibDriveStart" placeholder="请输入行走原点">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">前进强制低速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibForwardBrakeSpeed" placeholder="请输入前进强制低速">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">后退强制低速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibReverseBrakeSpeed" placeholder="请输入后退强制低速">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">上升限位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibUpLimit" placeholder="请输入上升限位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">下限限位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibDownLimit" placeholder="请输入下限限位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">提升原点: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibUpOrigin" placeholder="请输入提升原点">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">上升强制低速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibUpBrakeSpeed" placeholder="请输入上升强制低速">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">下降强制低速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibDownBrakeSpeed" 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">
                        <input class="layui-input" name="ibPlatformSignal" placeholder="请输入载货台探货">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">货叉中位信号: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibForkMidSignal" placeholder="请输入货叉中位信号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">货叉左极限: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibForkLeftLimit" placeholder="请输入货叉左极限">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">货叉右极限: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibForkRightLimit" placeholder="请输入货叉右极限">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">前超限: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibFrontOverLimit" placeholder="请输入前超限">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">后超限: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibRearOverLimit" placeholder="请输入后超限">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左超限: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibLeftOverLimit" placeholder="请输入左超限">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右超限: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibRightOverLimit" 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="ibHighOverLimit1" placeholder="请输入高超限1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">高超限2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibHighOverLimit2" placeholder="请输入高超限2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">高超限3: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibHighOverLimit3" placeholder="请输入高超限3">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">一伸左侧探货1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibOneExtendLeftLoad1" placeholder="请输入一伸左侧探货1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">一伸左侧探货2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibOneExtendLeftLoad2" placeholder="请输入一伸左侧探货2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">一伸右侧探货1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibOneExtendRightLoad1" placeholder="请输入一伸右侧探货1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">一伸右侧探货2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibOneExtendRightLoad2" placeholder="请输入一伸右侧探货2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">二伸左侧探货1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibTwoExtendLeftLoad1" placeholder="请输入二伸左侧探货1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">二伸左侧探货2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibTwoExtendLeftLoad2" placeholder="请输入二伸左侧探货2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">二伸右侧探货1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibTwoExtendRightLoad1" placeholder="请输入二伸右侧探货1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">二伸右侧探货2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibTwoExtendRightLoad2" placeholder="请输入二伸右侧探货2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">超速信号1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibSpeedSignal1" placeholder="请输入超速信号1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">超速信号2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibSpeedSignal2" placeholder="请输入超速信号2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">超重信号1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibOverweightSignal1" placeholder="请输入超重信号1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">超重信号2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibOverweightSignal2" placeholder="请输入超重信号2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">松绳信号1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibRopeReleaseSignal1" placeholder="请输入松绳信号1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">松绳信号2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibRopeReleaseSignal2" placeholder="请输入松绳信号2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">安全钳: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibSafetyClamp" placeholder="请输入安全钳">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">张紧器: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibTightener" placeholder="请输入张紧器">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">限速器: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibSpeedLimiter" placeholder="请输入限速器">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">安全门打开: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="ibSafetyDoorOpen" 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/basDevpErrorLog/basDevpErrorLog.html
@@ -193,9 +193,141 @@
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">: </label>
                    <label class="layui-form-label">数据错误: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="dataError" placeholder="请输入">
                        <input class="layui-input" name="dataError" placeholder="请输入数据错误">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">直线光电: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorGArrive" placeholder="请输入直线光电">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">减速光电: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorGDec" placeholder="请输入减速光电">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">直线凸出: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorGArrive2" placeholder="请输入直线凸出">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">限位保护光电: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorLimit" placeholder="请输入限位保护光电">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">急停: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="emergency" 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="sensorGLeave" placeholder="请输入光电离开1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">光电离开2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorGLeave2" placeholder="请输入光电离开2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">顶升上升: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorCUp" placeholder="请输入顶升上升">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">顶升下降: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorCDown" placeholder="请输入顶升下降">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">顶升热继: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="liftMotorFr" placeholder="请输入顶升热继">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">直线热继: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="lineMotorFr" placeholder="请输入直线热继">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">移栽热继: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="tranMotorFr" 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="rst1" placeholder="请输入备用1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">备用2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rst2" placeholder="请输入备用2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">备用3: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rst3" placeholder="请输入备用3">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">备用4: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rst4" placeholder="请输入备用4">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">直行方向到位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorArriveD" placeholder="请输入直行方向到位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">直行方向减速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorDecD" placeholder="请输入直行方向减速">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左移方向到位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorArriveL" placeholder="请输入左移方向到位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左移方向减速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorDecL" placeholder="请输入左移方向减速">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右移方向到位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorArriveR" placeholder="请输入右移方向到位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右移方向减速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="sensorDecR" placeholder="请输入右移方向减速">
                    </div>
                </div>
src/main/webapp/views/basRgvErrorLog/basRgvErrorLog.html
New file
@@ -0,0 +1,320 @@
<!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="basRgvErrorLog" lay-filter="basRgvErrorLog"></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/basRgvErrorLog/basRgvErrorLog.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="rgvNo" placeholder="请输入编号">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">急停触发: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="emergencyStop" 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="slot1EmptyNoData" placeholder="请输入1号位有物无资料">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">2号位有物无资料: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="slot2EmptyNoData" placeholder="请输入2号位有物无资料">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">命令错误走链条冲突: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="commandErrorChainConflict" placeholder="请输入命令错误走链条冲突">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">目标位下发错误: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="targetPositionIssue" placeholder="请输入目标位下发错误">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">走行变频器异常: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="travelInverterError" 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="photoelectric1Error" placeholder="请输入1号光电异常">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">2号光电异常: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="photoelectric2Error" placeholder="请输入2号光电异常">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">与输线时接超时: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="timeoutConnectionWithLine" placeholder="请输入与输线时接超时">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左侧滚筒运行超时: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="leftRollerTimeout" placeholder="请输入左侧滚筒运行超时">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右侧滚筒运行超时: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rightRollerTimeout" placeholder="请输入右侧滚筒运行超时">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">rgv运行超时: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rgvRunTimeout" placeholder="请输入rgv运行超时">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">1号工位链条变频器异常: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="position1ChainInverterError" placeholder="请输入1号工位链条变频器异常">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">2号工位链条变频器异常: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="position2ChainInverterError" placeholder="请输入2号工位链条变频器异常">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">前后极限位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="frontRearLimit" placeholder="请输入前后极限位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">急停按钮: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="emergencyButton" 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">
                        <input class="layui-input" name="forwardButton" placeholder="请输入急停按钮">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">后退按钮: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="reverseButton" placeholder="请输入后退按钮">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">本地/远程: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="localRemote" placeholder="请输入本地/远程">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">复位: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="reset" placeholder="请输入复位">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">走行抱闸开关钮: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="travelBrakeSwitch" placeholder="请输入走行抱闸开关钮">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">走行强制减速光电: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="travelSpeedLimitPhotoelectric" 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="leftOverlimit1" placeholder="请输入左超限 1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右超限 1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rightOverlimit1" placeholder="请输入右超限 1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左到位 1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="leftAtPosition1" placeholder="请输入左到位 1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右到位 1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rightAtPosition1" placeholder="请输入右到位 1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">链条前进 1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="chainForward1" placeholder="请输入链条前进 1">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">链条后退 1: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="chainReverse1" 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="inverterAlarm" placeholder="请输入变频器报警">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左超限 2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="leftOverlimit2" placeholder="请输入左超限 2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右超限 2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rightOverlimit2" placeholder="请输入右超限 2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左到位 2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="leftAtPosition2" placeholder="请输入左到位 2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右到位 2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rightAtPosition2" placeholder="请输入右到位 2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">货物减速: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="cargoSpeedReduction" placeholder="请输入货物减速">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">输送变频器报警 2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="conveyorInverterAlarm2" placeholder="请输入输送变频器报警 2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">左输送 2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="leftConveyor2" placeholder="请输入左输送 2">
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">右输送 2: </label>
                    <div class="layui-input-block">
                        <input class="layui-input" name="rightConveyor2" placeholder="请输入右输送 2">
                    </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>