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);


                }
文档更新时间: 2023-12-18 03:25   作者:JeffreyCheung