2023-08-21 更新告警周期
ALTER TABLE `pc_monitoring_task_rule`
ADD COLUMN `alarm_cycle` int(11) NULL DEFAULT 0 COMMENT '告警周期 单位秒' AFTER `compare_type`;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
丰益氯碱新需求数据库设计
-- 添加复合检测字段
ALTER TABLE `pc_monitoring_task`
ADD COLUMN `complex_detection` tinyint(1) NULL DEFAULT 0 COMMENT '是否进行复合检测 1:是 0: 不是' AFTER `recognition_mode`;
ALTER TABLE `pc_monitoring_task_rule_model`
ADD COLUMN `task_id` int(11) DEFAULT NULL COMMENT '任务ID' AFTER `model_id`;
CREATE TABLE `pc_monitoring_task_rule` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`task_id` int(11) DEFAULT NULL COMMENT '任务ID',
`rule` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '检测规则',
`rule_type` tinyint(1) DEFAULT NULL COMMENT '规则类型 1:正常 2:告警',
`compare_type` tinyint(1) DEFAULT '1' COMMENT '比较方式 1:数量比较 2:检测结果比较',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务检测规则';
CREATE TABLE `pc_monitoring_task_rule_model` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`task_rule_id` int(11) DEFAULT NULL COMMENT '任务规则ID',
`model_id` int(11) DEFAULT NULL COMMENT '规则关联模型',
`task_id` int(11) DEFAULT NULL COMMENT '任务ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务规则关联模型';
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务检测规则', '3000', '1', '/pc/pc_monitoring_task_rule', 'C', '1', 'pc:pc_monitoring_task_rule:view', '#', 'admin', sysdate(), '', null, '任务检测规则菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务检测规则查询', @parentId, '1', '#', 'F', '0', 'pc:pc_monitoring_task_rule:list', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务检测规则新增', @parentId, '2', '#', 'F', '0', 'pc:pc_monitoring_task_rule:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务检测规则修改', @parentId, '3', '#', 'F', '0', 'pc:pc_monitoring_task_rule:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务检测规则删除', @parentId, '4', '#', 'F', '0', 'pc:pc_monitoring_task_rule:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务检测规则导出', @parentId, '5', '#', 'F', '0', 'pc:pc_monitoring_task_rule:export', '#', 'admin', sysdate(), '', null, '');
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务规则关联模型', '3000', '1', '/pc/pc_monitoring_task_rule_model', 'C', '1', 'pc:pc_monitoring_task_rule_model:view', '#', 'admin', sysdate(), '', null, '任务规则关联模型菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务规则关联模型查询', @parentId, '1', '#', 'F', '0', 'pc:pc_monitoring_task_rule_model:list', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务规则关联模型新增', @parentId, '2', '#', 'F', '0', 'pc:pc_monitoring_task_rule_model:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务规则关联模型修改', @parentId, '3', '#', 'F', '0', 'pc:pc_monitoring_task_rule_model:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务规则关联模型删除', @parentId, '4', '#', 'F', '0', 'pc:pc_monitoring_task_rule_model:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('任务规则关联模型导出', @parentId, '5', '#', 'F', '0', 'pc:pc_monitoring_task_rule_model:export', '#', 'admin', sysdate(), '', null, '');
SOP流程数据库
数据库SQL
-- 流程表
CREATE TABLE `pc_process` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(255) NOT NULL COMMENT '流程名称',
`time_interval` int NOT NULL COMMENT '检测频率 秒/次',
`state` tinyint NULL COMMENT '状态 1:开启 非 1:关闭',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',,
`update_time` timestamp NULL COMMENT '更新时间',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`)
) COMMENT = '流程表'
-- 流程详情步骤
CREATE TABLE `pc_process_detail` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`process_id` int(11) NOT NULL COMMENT '流程 ID',
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '流程步骤名称',
`model_id` int(11) NOT NULL COMMENT '模型ID',
`step_num` int(11) NOT NULL COMMENT '第几步骤',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` tinyint(4) DEFAULT '0' COMMENT '删除标记',
`must_do` tinyint(1) DEFAULT '2' COMMENT '是否必做:1:必做 2:非必做',
`result_rule` tinyint(1) DEFAULT NULL COMMENT '检测结果规则: 1:有结果 0: 没有结果',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程详情步骤';
-- 流程步骤关联通道
CREATE TABLE `pc_process_detail_device` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`process_detail_id` int(11) NOT NULL COMMENT '流程详情步骤 ID',
`device_id` int(11) NOT NULL COMMENT '设备 ID',
`coordinate` text COLLATE utf8mb4_unicode_ci COMMENT 'ROI',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` tinyint(1) DEFAULT '0' COMMENT '删除标记',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='流程步骤关联通道';
-- 流程步骤检测结果
CREATE TABLE `pc_process_result` (
`id` int NOT NULL COMMENT 'ID',
`process_id` int NOT NULL COMMENT '流程 ID',
`deal_state` tinyint(1) NOT NULL DEFAULT 1 COMMENT '处理状态 1:无需处理 2:未处理 3:已处理',
`remark` varchar(255) NULL COMMENT '备注',
`state` tinyint(1) NOT NULL DEFAULT 1 COMMENT '结果状态 1:正常 2:异常',
`process_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '此次流程检测状态 1:正在进行中 2:完成',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL COMMENT '更新时间',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`)
) COMMENT = '流程步骤检测结果'
-- 步骤任务检测结果详情
CREATE TABLE `pc_process_result_detail` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`process_result_id` int NOT NULL COMMENT '步骤任务检测结果ID',
`state` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:1:正常 2:异常',
`img_path` varchar(255) NOT NULL COMMENT '检测结果图片地址',
`step_num` int NOT NULL COMMENT '第几步骤',
`step_name` varchar(50) NOT NULL COMMENT '步骤名称',
`create_time` timestamp NULL COMMENT '创建时间',
`update_time` timestamp NULL COMMENT '更新时间',
`del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (`id`)
) COMMENT = '步骤任务检测结果详情'
-- 抓拍配置表
CREATE TABLE `pc_capture_setting` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`process_id` int NOT NULL COMMENT '流程 ID',
`name` varchar(255) NOT NULL COMMENT '抓拍配置名称',
`begin_step_id` int NOT NULL COMMENT '开始步骤 ID',
`end_step_id` int NOT NULL COMMENT '结束步骤 ID',
`state` tinyint(1) NOT NULL COMMENT '抓拍任务状态 1:开启 非 1:关闭',
`capture_rule` integer NOT NULL COMMENT '抓拍时间间隔',
`device_id` int NOT NULL COMMENT '设置抓拍设备',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL COMMENT '更新时间',
`del_flag` tinyint(1) NULL COMMENT '删除标记',
PRIMARY KEY (`id`)
) COMMENT = '抓拍配置表'
-- 抓拍结果
CREATE TABLE `pc_capture_setting_result` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`capture_setting_id` int NOT NULL COMMENT '抓拍配置 ID',
`capture_setting_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '此次抓拍状态 1:正在进行中 2:完成',
`create_time` timestamp NULL COMMENT '创建时间',
`update_time` datetime NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) COMMENT = '抓拍结果'
-- 抓拍结果详情
CREATE TABLE `pc_capture_setting_result_detail` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`capture_setting_result_id` int NOT NULL COMMENT '步骤任务检测结果详情ID',
`img_path` varchar(255) NOT NULL COMMENT '抓拍图片地址',
`create_time` timestamp NULL COMMENT '创建时间',
`update_time` timestamp NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) COMMENT = '抓拍结果详情'
---------------------
-- 菜单sql
---------------------
-- 流程列表
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `url`, `target`, `menu_type`, `visible`, `is_refresh`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('丰益氯碱流程管理', 0, 99, '#', 'menuItem', 'M', '0', '1', NULL, 'fa fa-shield', 'admin', '2023-05-24 08:29:38', '', NULL, '');
SELECT @topPparentId := LAST_INSERT_ID();
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程列表管理', @topPparentId, '1', '/pc/pc_process', 'C', '0', 'pc:pc_process:view', '#', 'admin', sysdate(), '', null, '流程菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程查询', @parentId, '1', '#', 'F', '0', 'pc:pc_process:list','#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程新增', @parentId, '2', '#', 'F', '0', 'pc:pc_process:add','#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程修改', @parentId, '3', '#', 'F', '0', 'pc:pc_process:edit','#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程删除', @parentId, '4', '#', 'F', '0', 'pc:pc_process:remove','#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程导出', @parentId, '5', '#', 'F', '0', 'pc:pc_process:export','#', 'admin', sysdate(), '', null, '');
-- 流程步骤管理
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤管理', @topPparentId, '1', '/pc/process_detail', 'C', '0', 'pc:process_detail:view', '#', 'admin', sysdate(), '', null, '流程步骤管理菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤管理查询', @parentId, '1', '#', 'F', '0', 'pc:process_detail:list', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤管理新增', @parentId, '2', '#', 'F', '0', 'pc:process_detail:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤管理修改', @parentId, '3', '#', 'F', '0', 'pc:process_detail:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤管理删除', @parentId, '4', '#', 'F', '0', 'pc:process_detail:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤管理导出', @parentId, '5', '#', 'F', '0', 'pc:process_detail:export', '#', 'admin', sysdate(), '', null, '');
-- 流程步骤检测结果
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤检测结果', @topPparentId, '1', '/pc/process_result', 'C', '0', 'pc:process_result:view', '#', 'admin', sysdate(), '', null, '流程步骤检测结果菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤检测结果查询', @parentId, '1', '#', 'F', '0', 'pc:process_result:list', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤检测结果新增', @parentId, '2', '#', 'F', '0', 'pc:process_result:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤检测结果修改', @parentId, '3', '#', 'F', '0', 'pc:process_result:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤检测结果删除', @parentId, '4', '#', 'F', '0', 'pc:process_result:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('流程步骤检测结果导出', @parentId, '5', '#', 'F', '0', 'pc:process_result:export', '#', 'admin', sysdate(), '', null, '');
-- 抓拍配置
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍配置管理', '3259', '1', '/pc/capture_setting', 'C', '0', 'pc:capture_setting:view', '#', 'admin', sysdate(), '', null, '抓拍配置管理菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍配置管理查询', @parentId, '1', '#', 'F', '0', 'pc:capture_setting:list', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍配置管理新增', @parentId, '2', '#', 'F', '0', 'pc:capture_setting:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍配置管理修改', @parentId, '3', '#', 'F', '0', 'pc:capture_setting:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍配置管理删除', @parentId, '4', '#', 'F', '0', 'pc:capture_setting:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍配置管理导出', @parentId, '5', '#', 'F', '0', 'pc:capture_setting:export', '#', 'admin', sysdate(), '', null, '');
-- 抓拍记录
-- 菜单 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍记录', '3259', '1', '/pc/capture_setting_result', 'C', '0', 'pc:capture_setting_result:view', '#', 'admin', sysdate(), '', null, '抓拍记录菜单');
-- 按钮父菜单ID
SELECT @parentId := LAST_INSERT_ID();
-- 按钮 SQL
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍记录查询', @parentId, '1', '#', 'F', '0', 'pc:capture_setting_result:list', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍记录新增', @parentId, '2', '#', 'F', '0', 'pc:capture_setting_result:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍记录修改', @parentId, '3', '#', 'F', '0', 'pc:capture_setting_result:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍记录删除', @parentId, '4', '#', 'F', '0', 'pc:capture_setting_result:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_name, parent_id, order_num, url, menu_type, visible, perms, icon, create_by, create_time, update_by, update_time, remark)
values('抓拍记录导出', @parentId, '5', '#', 'F', '0', 'pc:capture_setting_result:export', '#', 'admin', sysdate(), '', null, '');
CREATE TABLE `pc_coordinate_staging` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`coordinate` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '坐标信息',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ROI 坐标暂存';
数据库设计
流程表
process
id
ID
name
流程名称
time_interval
检测频率 秒/次
state
状态 1:开启 非 1:关闭
create_time
创建时间
update_time
更新时间
del_flag
删除标记
流程详情
process_detail
id
ID
process_id
流程 ID process
表 ID
name
流程名称
model_id
模型 ID
step_num
步骤 第几步
create_time
创建时间
update_time
更新时间
del_flag
删除标记
步骤关联通道
process_device
id
ID
process_detail_id
流程详情 ID
device_id
设备 ID
coordinate
ROI
create_time
创建时间
update_time
更新时间
del_flag
删除标记
步骤任务检测结果
process_result
id
process_id
流程 ID process
表 ID
deal_state
1:无需处理 2:未处理 3:已处理
remark
备注
state
1:正常 2:异常
process_type
此次流程检测状态 1:正在进行中 2:完成
create_time
创建时间
update_time
更新时间
del_flag
删除标记
步骤任务检测结果详情
process_result_detail
id
process_result_id
步骤任务检测结果ID
state
状态:1:正常 2:异常
img_path
图片路径
step_num
第几步
step_name
步骤名称
create_time
创建时间
update_time
更新时间
抓拍配置表
capture_setting
id
ID
process_id
流程 ID process
表 ID
name
抓拍任务名称
begin_step
开始步骤
end_step
结束步骤
state
抓拍任务状态 1:开启 非 1:关闭
capture_rules
抓拍规则(设置保存时间间隔)
device_id
抓拍摄像头
del_flag
删除标记
create_time
创建时间
update_time
更新时间
步骤任务检测结果详情
capture_setting_result
id
capture_setting_id
抓拍配置ID
capture_setting_type
此次抓拍状态 1:正在进行中 2:完成
create_time
创建时间
update_time
更新时间
步骤任务检测结果详情
capture_setting_result_detail
id
capture_setting_result_id
步骤任务检测结果详情ID
img_path
图片路径
create_time
创建时间
update_time
更新时间
package com.ruoyi.asynchronous;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.pc.domain.*;
import com.ruoyi.pc.domain.dto.InferResultDetailDTO;
import com.ruoyi.pc.domain.dto.PcProcessResultCallbackDTO;
import com.ruoyi.pc.domain.dto.ResultDetailDTO;
import com.ruoyi.pc.mapper.*;
import com.ruoyi.pc.service.IPcProcessDetailDeviceService;
import com.ruoyi.pc.util.FileUtil;
import com.ruoyi.pc.util.ImageConcatenationUtils;
import com.ruoyi.system.service.ISysConfigService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.io.File;
import java.sql.Time;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Component
@Log4j2
public class PcProcessCallbackAsync {
@Autowired
private PcProcessMapper pcProcessMapper;
@Autowired
private PcProcessDetailMapper pcProcessDetailMapper;
@Autowired
private PcProcessDetailDeviceMapper pcProcessDetailDeviceMapper;
@Autowired
private PcProcessResultMapper pcProcessResultMapper;
@Autowired
private PcProcessResultDetailMapper pcProcessResultDetailMapper;
@Autowired
private ISysConfigService configService;
@Autowired
private IPcProcessDetailDeviceService pcProcessDetailDeviceService;
// @Async
public void callback(PcProcessResultCallbackDTO callback) {
Long processId = callback.getTaskId();
List<ResultDetailDTO> result = callback.getResult();
//这次请求的所有图片
List<String> resultImages = result.stream().map(ResultDetailDTO::getImagePath).collect(Collectors.toList());
String concatenationImgPath = "/Users/jeffrey/Desktop/ffmpeg/" + System.currentTimeMillis() + ".jpg";
boolean concatenation = ImageConcatenationUtils.concatenation(resultImages, 1, concatenationImgPath);
boolean alarm = true;
if (concatenation) {
//获取所有的流程步骤
PcProcessDetail pcProcessDetail = new PcProcessDetail();
pcProcessDetail.setProcessId(processId);
//获取当前流程的所有步骤
List<PcProcessDetail> pcProcessDetails = pcProcessDetailMapper.selectPcProcessDetailList(pcProcessDetail);
Map<Long, List<PcProcessDetail>> allSteps = pcProcessDetails.stream().collect(Collectors.groupingBy(PcProcessDetail::getStepNum));
//先查询有没有记录
PcProcessResult pcProcessResult = new PcProcessResult();
pcProcessResult.setProcessId(processId);
pcProcessResult.setProcessType(1);
PcProcessResult pcProcessResultInfo = pcProcessResultMapper.selectPcProcessResultByProcessType(pcProcessResult);
outer:
for (int i = 0; i < pcProcessDetails.size(); i++) { //遍历步骤
//当前步骤是否是必做项目
boolean mustDo = pcProcessDetails.get(i).getMustDo() == 1;
//当前步骤检测结果的规则
boolean resultRule = pcProcessDetails.get(i).getResultRule() == 1;
//查询当前步骤的通道信息
PcProcessDetailDevice pcProcessDetailDevice = new PcProcessDetailDevice();
pcProcessDetailDevice.setProcessDetailId(pcProcessDetails.get(i).getId());
List<PcProcessDetailDevice> pcProcessDetailDevices = pcProcessDetailDeviceMapper.selectPcProcessDetailDeviceList(pcProcessDetailDevice);
log.info(pcProcessDetailDevices);
//先看当前步骤有没有结果
for (PcProcessDetailDevice processDetailDevice : pcProcessDetailDevices) {
List<ResultDetailDTO> collect = result.stream().filter(o -> o.getId().equals(processDetailDevice.getDeviceId())).collect(Collectors.toList());
//判断有没有当前通道的结果返回,如果没有直接跳过,不告警【数据异常】
if (collect.isEmpty()) {
alarm = false;
if (mustDo){
break outer;
}
continue ;
}
//判断没有结果的情况
ResultDetailDTO resultDetailDTO = collect.get(0);
//判断告警条件
if (resultRule){
// 有结果
//有结果才算是正常
if (resultDetailDTO.getInferResult().isEmpty()){
alarm = false;
if (mustDo){
break outer;
}
continue;
}
}else {
//没结果
//没有结果才算是正常
if (!resultDetailDTO.getInferResult().isEmpty()) {
alarm = false;
if (mustDo){
break outer;
}
continue;
}
}
PcProcessDetail pcProcessDetail2 = pcProcessDetails.get(i);
//有结果
List<InferResultDetailDTO> inferResult = resultDetailDTO.getInferResult();
List<InferResultDetailDTO> InferResultDetailDTOs = inferResult.stream().filter(o -> o.getCategory().equals(pcProcessDetail2.getLabel())).collect(Collectors.toList());
if (InferResultDetailDTOs.isEmpty()) {
alarm = false;
if (mustDo){
break outer;
}
continue;
}
//第一步
if (pcProcessResultInfo == null && pcProcessDetails.get(i).getStepNum() == 1) {
//流程信息
PcProcess pcProcess = pcProcessMapper.selectPcProcessById(processId);
pcProcessResultInfo = new PcProcessResult();
pcProcessResultInfo.setProcessId(processId);
pcProcessResultInfo.setProcessType(1);
pcProcessResultInfo.setProcessName(pcProcess.getName());
pcProcessResultInfo.setDealState(1);
pcProcessResultInfo.setState(1);
pcProcessResultInfo.setCreateTime(DateUtils.getNowDate());
pcProcessResultInfo.setDelFlag(0);
pcProcessResultMapper.insertPcProcessResult(pcProcessResultInfo);
}
//查询当钱检测到第几步骤
PcProcessResultDetail pcProcessResultDetailParam = new PcProcessResultDetail();
pcProcessResultDetailParam.setProcessResultId(pcProcessResultInfo.getId());
List<PcProcessResultDetail> pcProcessResultDetails = pcProcessResultDetailMapper.selectPcProcessResultDetailList(pcProcessResultDetailParam);
//已经检查过的步骤
int size = pcProcessResultDetails.size();
//当前步骤已经检测过了
if (size > pcProcessDetails.get(i).getStepNum()){
break ;
}
//当前步骤检测到结果,查看之前步骤,存在没有告警的步骤,直接告警
//已经存在的步骤 ID
List<Long> alarmStepList = pcProcessResultDetails.stream().map(PcProcessResultDetail::getStepNum).collect(Collectors.toList());
Long processStepId = pcProcessDetails.get(i).getId();
//查询出所有的通道信息
List<PcProcessDetailDevice> pcProcessDetailDevicesList = pcProcessDetailDeviceService.selectPcProcessDetailDeviceListByProcessDetailId(processStepId);
String deviceName = pcProcessDetailDevicesList.stream().map(PcProcessDetailDevice::getDeviceName).collect(Collectors.joining(","));
String deviceImei = pcProcessDetailDevicesList.stream().map(PcProcessDetailDevice::getDeviceImei).collect(Collectors.joining(","));
List<Long> deviceIds = pcProcessDetailDevicesList.stream().map(PcProcessDetailDevice::getDeviceId).collect(Collectors.toList());
String deviceIdStr = StringUtils.join(deviceIds, ",");
for (int j = 1; j <= pcProcessDetails.get(i).getStepNum(); j++) {
if (!alarmStepList.contains(j)){
//j 步骤需要告警
PcProcessResultDetail pcProcessResultDetail = new PcProcessResultDetail();
pcProcessResultDetail.setProcessResultId(pcProcessResultInfo.getId());
pcProcessResultDetail.setState(2);
pcProcessResultDetail.setImgPath(concatenationImgPath);
pcProcessResultDetail.setStepNum((long) j);
pcProcessResultDetail.setStepName(allSteps.get(j).get(0).getName());
pcProcessResultDetail.setCreateTime(DateUtils.getNowDate());
pcProcessResultDetail.setUpdateTime(DateUtils.getNowDate());
pcProcessResultDetail.setDelFlag(0);
pcProcessResultDetail.setModelId(Math.toIntExact(allSteps.get(j).get(0).getModelId()));
pcProcessResultDetail.setModelName(allSteps.get(j).get(0).getModelName());
pcProcessResultDetail.setDeviceId(deviceIdStr);
pcProcessResultDetail.setDeviceImei(deviceImei);
pcProcessResultDetail.setDeviceName(deviceName);
pcProcessResultDetail.setDealState(2);
pcProcessResultDetailMapper.insertPcProcessResultDetail(pcProcessResultDetail);
}
}
//当前步骤大于已有的保存结果,证明该步骤未保存,进行结果保存
// PcProcessResultDetail pcProcessResultDetail = new PcProcessResultDetail();
// pcProcessResultDetail.setProcessResultId(pcProcessResultInfo.getId());
// pcProcessResultDetail.setState(1);
}
//有结果的情况
}
if (!alarm){
//删除保存的结果 + 拼接的图片
resultImages.add(concatenationImgPath);
for (String resultImage : resultImages) {
File file = new File(resultImage);
boolean delete = file.delete();
}
}
log.info(pcProcessDetails);
try {
log.info("正在进行流程开关请求");
Thread.sleep(1000 * 5);
log.info("异步请求操作执行完成");
} catch (Exception e) {
log.info("123");
}
}
}
}
for (PcProcessDetailDevice processDetailDevice : pcProcessDetailDevices) {
//result =》 回调结果中的所有通道结果信息
//根据步骤的通道信息 获取回调结果中的通道结果信息
List<ResultDetailDTO> collect = result.stream().filter(
o -> o.getId().equals(processDetailDevice.getDeviceId())
).collect(Collectors.toList());
//判断有没有当前通道的结果返回,如果没有直接跳过,不告警【数据异常】
if (collect.isEmpty()) {
alarm = false;
if (mustDo){
break outer;
}
continue ;
}
//判断没有结果的情况
ResultDetailDTO resultDetailDTO = collect.get(0);
//判断告警条件
if (resultRule){
// 有结果
//有结果才算是正常
if (resultDetailDTO.getInferResult().isEmpty()){
alarm = false;
if (mustDo){
break outer;
}
continue;
}
}else {
//没结果
//没有结果才算是正常
if (!resultDetailDTO.getInferResult().isEmpty()) {
alarm = false;
if (mustDo){
break outer;
}
continue;
}
}
PcProcessDetail pcProcessDetail2 = pcProcessDetails.get(i);
//有结果
List<InferResultDetailDTO> inferResult = resultDetailDTO.getInferResult();
List<InferResultDetailDTO> InferResultDetailDTOs = inferResult.stream().filter(o -> o.getCategory().equals(pcProcessDetail2.getLabel())).collect(Collectors.toList());
if (InferResultDetailDTOs.isEmpty()) {
alarm = false;
if (mustDo){
break outer;
}
continue;
}
//第一步
if (pcProcessResultInfo == null && pcProcessDetails.get(i).getStepNum() == 1) {
//流程信息
PcProcess pcProcess = pcProcessMapper.selectPcProcessById(processId);
pcProcessResultInfo = new PcProcessResult();
pcProcessResultInfo.setProcessId(processId);
pcProcessResultInfo.setProcessType(1);
pcProcessResultInfo.setProcessName(pcProcess.getName());
pcProcessResultInfo.setDealState(1);
pcProcessResultInfo.setState(1);
pcProcessResultInfo.setCreateTime(DateUtils.getNowDate());
pcProcessResultInfo.setDelFlag(0);
pcProcessResultMapper.insertPcProcessResult(pcProcessResultInfo);
}
//查询当钱检测到第几步骤
PcProcessResultDetail pcProcessResultDetailParam = new PcProcessResultDetail();
pcProcessResultDetailParam.setProcessResultId(pcProcessResultInfo.getId());
List<PcProcessResultDetail> pcProcessResultDetails = pcProcessResultDetailMapper.selectPcProcessResultDetailList(pcProcessResultDetailParam);
//已经检查过的步骤
int size = pcProcessResultDetails.size();
//当前步骤已经检测过了
if (size > pcProcessDetails.get(i).getStepNum()){
break ;
}
//当前步骤检测到结果,查看之前步骤,存在没有告警的步骤,直接告警
//已经存在的步骤 ID
List<Long> alarmStepList = pcProcessResultDetails.stream().map(PcProcessResultDetail::getStepNum).collect(Collectors.toList());
Long processStepId = pcProcessDetails.get(i).getId();
//查询出所有的通道信息
List<PcProcessDetailDevice> pcProcessDetailDevicesList = pcProcessDetailDeviceService.selectPcProcessDetailDeviceListByProcessDetailId(processStepId);
String deviceName = pcProcessDetailDevicesList.stream().map(PcProcessDetailDevice::getDeviceName).collect(Collectors.joining(","));
String deviceImei = pcProcessDetailDevicesList.stream().map(PcProcessDetailDevice::getDeviceImei).collect(Collectors.joining(","));
List<Long> deviceIds = pcProcessDetailDevicesList.stream().map(PcProcessDetailDevice::getDeviceId).collect(Collectors.toList());
String deviceIdStr = StringUtils.join(deviceIds, ",");
for (int j = 1; j <= pcProcessDetails.get(i).getStepNum(); j++) {
if (!alarmStepList.contains(j)){
//j 步骤需要告警
PcProcessResultDetail pcProcessResultDetail = new PcProcessResultDetail();
pcProcessResultDetail.setProcessResultId(pcProcessResultInfo.getId());
pcProcessResultDetail.setState(2);
pcProcessResultDetail.setImgPath(concatenationImgPath);
pcProcessResultDetail.setStepNum((long) j);
pcProcessResultDetail.setStepName(allSteps.get(j).get(0).getName());
pcProcessResultDetail.setCreateTime(DateUtils.getNowDate());
pcProcessResultDetail.setUpdateTime(DateUtils.getNowDate());
pcProcessResultDetail.setDelFlag(0);
pcProcessResultDetail.setModelId(Math.toIntExact(allSteps.get(j).get(0).getModelId()));
pcProcessResultDetail.setModelName(allSteps.get(j).get(0).getModelName());
pcProcessResultDetail.setDeviceId(deviceIdStr);
pcProcessResultDetail.setDeviceImei(deviceImei);
pcProcessResultDetail.setDeviceName(deviceName);
pcProcessResultDetail.setDealState(2);
pcProcessResultDetailMapper.insertPcProcessResultDetail(pcProcessResultDetail);
}
}
//当前步骤大于已有的保存结果,证明该步骤未保存,进行结果保存
// PcProcessResultDetail pcProcessResultDetail = new PcProcessResultDetail();
// pcProcessResultDetail.setProcessResultId(pcProcessResultInfo.getId());
// pcProcessResultDetail.setState(1);
}