CREATE TABLE IF NOT EXISTS `asr_bas_station_err_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `wrk_no` int DEFAULT NULL COMMENT '工作号', `start_time` datetime DEFAULT NULL COMMENT '发生时间', `end_time` datetime DEFAULT NULL COMMENT '结束时间', `wrk_sts` bigint DEFAULT NULL COMMENT '工作状态', `io_type` int DEFAULT NULL COMMENT '入出库类型', `station_id` int DEFAULT NULL COMMENT '站点号', `loc_no` varchar(64) DEFAULT NULL COMMENT '目标库位', `sta_no` int DEFAULT NULL COMMENT '目标站', `source_sta_no` int DEFAULT NULL COMMENT '源站', `source_loc_no` varchar(64) DEFAULT NULL COMMENT '源库位', `barcode` varchar(128) DEFAULT NULL COMMENT '条码', `err_code` int DEFAULT NULL COMMENT '异常码', `error` text COMMENT '异常描述', `status` int DEFAULT NULL COMMENT '异常情况 1未处理 2已修复', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `create_by` bigint DEFAULT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `update_by` bigint DEFAULT NULL COMMENT '更新人', `memo` varchar(255) DEFAULT NULL COMMENT '备注', `system_status` longtext COMMENT '系统状态快照', PRIMARY KEY (`id`), KEY `idx_station_err_log_wrk_no` (`wrk_no`), KEY `idx_station_err_log_station_id` (`station_id`), KEY `idx_station_err_log_status` (`status`), KEY `idx_station_err_log_start_time` (`start_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='输送站点异常日志'; SET @wrk_analysis_table_exists := ( SELECT COUNT(*) FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = 'asr_wrk_analysis' ); SET @station_fault_count_exists := ( SELECT COUNT(*) FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = 'asr_wrk_analysis' AND `COLUMN_NAME` = 'station_fault_count' ); SET @station_fault_duration_exists := ( SELECT COUNT(*) FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = 'asr_wrk_analysis' AND `COLUMN_NAME` = 'station_fault_duration_ms' ); SET @sql_station_fault_count := IF( @wrk_analysis_table_exists = 1 AND @station_fault_count_exists = 0, 'ALTER TABLE `asr_wrk_analysis` ADD COLUMN `station_fault_count` int DEFAULT 0 COMMENT ''输送站点故障次数'' AFTER `rgv_fault_duration_ms`', 'SELECT 1' ); PREPARE stmt_station_fault_count FROM @sql_station_fault_count; EXECUTE stmt_station_fault_count; DEALLOCATE PREPARE stmt_station_fault_count; SET @sql_station_fault_duration := IF( @wrk_analysis_table_exists = 1 AND @station_fault_duration_exists = 0, 'ALTER TABLE `asr_wrk_analysis` ADD COLUMN `station_fault_duration_ms` bigint DEFAULT 0 COMMENT ''输送站点故障耗时毫秒'' AFTER `station_fault_count`', 'SELECT 1' ); PREPARE stmt_station_fault_duration FROM @sql_station_fault_duration; EXECUTE stmt_station_fault_duration; DEALLOCATE PREPARE stmt_station_fault_duration; UPDATE `asr_wrk_analysis` a LEFT JOIN ( SELECT e.`wrk_no`, COUNT(*) AS `fault_count`, SUM( CASE WHEN e.`start_time` IS NULL THEN 0 ELSE GREATEST( TIMESTAMPDIFF( MICROSECOND, e.`start_time`, COALESCE(e.`end_time`, wl.`modi_time`, wl.`io_time`, wl.`appe_time`, e.`start_time`) ), 0 ) DIV 1000 END ) AS `fault_duration_ms` FROM `asr_bas_station_err_log` e LEFT JOIN `asr_wrk_mast_log` wl ON wl.`wrk_no` = e.`wrk_no` GROUP BY e.`wrk_no` ) s ON s.`wrk_no` = a.`wrk_no` SET a.`station_fault_count` = COALESCE(s.`fault_count`, 0), a.`station_fault_duration_ms` = COALESCE(s.`fault_duration_ms`, 0), a.`fault_count` = COALESCE(a.`crn_fault_count`, 0) + COALESCE(a.`dual_crn_fault_count`, 0) + COALESCE(a.`rgv_fault_count`, 0) + COALESCE(s.`fault_count`, 0), a.`fault_duration_ms` = COALESCE(a.`crn_fault_duration_ms`, 0) + COALESCE(a.`dual_crn_fault_duration_ms`, 0) + COALESCE(a.`rgv_fault_duration_ms`, 0) + COALESCE(s.`fault_duration_ms`, 0), a.`has_fault` = CASE WHEN COALESCE(a.`crn_fault_count`, 0) + COALESCE(a.`dual_crn_fault_count`, 0) + COALESCE(a.`rgv_fault_count`, 0) + COALESCE(s.`fault_count`, 0) > 0 THEN 1 ELSE 0 END, a.`update_time` = NOW() WHERE @wrk_analysis_table_exists = 1; SET @station_err_log_parent_id := COALESCE( ( SELECT `id` FROM `sys_resource` WHERE `code` = 'logReport' AND `level` = 1 ORDER BY `id` LIMIT 1 ), ( SELECT `id` FROM `sys_resource` WHERE `code` = 'develop' AND `level` = 1 ORDER BY `id` LIMIT 1 ) ); INSERT INTO `sys_resource`(`code`, `name`, `resource_id`, `level`, `sort`, `status`) SELECT 'basStationErrLog/basStationErrLog.html', '输送站点异常日志', @station_err_log_parent_id, 2, 995, 1 FROM dual WHERE @station_err_log_parent_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `sys_resource` WHERE `code` = 'basStationErrLog/basStationErrLog.html' AND `level` = 2 ); UPDATE `sys_resource` SET `name` = '输送站点异常日志', `resource_id` = @station_err_log_parent_id, `level` = 2, `sort` = 995, `status` = 1 WHERE `code` = 'basStationErrLog/basStationErrLog.html' AND `level` = 2; SET @station_err_log_id := ( SELECT `id` FROM `sys_resource` WHERE `code` = 'basStationErrLog/basStationErrLog.html' AND `level` = 2 ORDER BY `id` LIMIT 1 ); INSERT INTO `sys_resource`(`code`, `name`, `resource_id`, `level`, `sort`, `status`) SELECT 'basStationErrLog/basStationErrLog.html#view', '查看', @station_err_log_id, 3, 1, 1 FROM dual WHERE @station_err_log_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `sys_resource` WHERE `code` = 'basStationErrLog/basStationErrLog.html#view' AND `level` = 3 ); UPDATE `sys_resource` SET `name` = '查看', `resource_id` = @station_err_log_id, `level` = 3, `sort` = 1, `status` = 1 WHERE `code` = 'basStationErrLog/basStationErrLog.html#view' AND `level` = 3;