CREATE TABLE IF NOT EXISTS `asr_wrk_analysis` ( `wrk_no` int NOT NULL COMMENT '工作号', `wms_wrk_no` varchar(64) DEFAULT NULL COMMENT 'WMS任务号', `io_type` int DEFAULT NULL COMMENT '入出库类型', `final_wrk_sts` bigint DEFAULT NULL COMMENT '最终工作状态', `source_sta_no` int DEFAULT NULL COMMENT '源站', `sta_no` int DEFAULT NULL COMMENT '目标站', `source_loc_no` varchar(64) DEFAULT NULL COMMENT '源库位', `loc_no` varchar(64) DEFAULT NULL COMMENT '目标库位', `crn_no` int DEFAULT NULL COMMENT '堆垛机号', `dual_crn_no` int DEFAULT NULL COMMENT '双工位堆垛机号', `rgv_no` int DEFAULT NULL COMMENT 'RGV号', `appe_time` datetime DEFAULT NULL COMMENT '创建时间', `finish_time` datetime DEFAULT NULL COMMENT '完成时间', `total_duration_ms` bigint DEFAULT NULL COMMENT '总耗时毫秒', `station_start_time` datetime DEFAULT NULL COMMENT '站点开始时间', `station_end_time` datetime DEFAULT NULL COMMENT '站点结束时间', `station_duration_ms` bigint DEFAULT NULL COMMENT '站点耗时毫秒', `crane_start_time` datetime DEFAULT NULL COMMENT '堆垛机开始时间', `crane_end_time` datetime DEFAULT NULL COMMENT '堆垛机结束时间', `crane_duration_ms` bigint DEFAULT NULL COMMENT '堆垛机耗时毫秒', `has_fault` int DEFAULT '0' COMMENT '是否故障', `fault_count` int DEFAULT '0' COMMENT '故障次数', `fault_duration_ms` bigint DEFAULT '0' COMMENT '故障耗时毫秒', `crn_fault_count` int DEFAULT '0' COMMENT '单堆垛机故障次数', `crn_fault_duration_ms` bigint DEFAULT '0' COMMENT '单堆垛机故障耗时毫秒', `dual_crn_fault_count` int DEFAULT '0' COMMENT '双工位堆垛机故障次数', `dual_crn_fault_duration_ms` bigint DEFAULT '0' COMMENT '双工位堆垛机故障耗时毫秒', `rgv_fault_count` int DEFAULT '0' COMMENT 'RGV故障次数', `rgv_fault_duration_ms` bigint DEFAULT '0' COMMENT 'RGV故障耗时毫秒', `metric_completeness` varchar(16) DEFAULT 'PARTIAL' COMMENT '数据完整性', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`wrk_no`), KEY `idx_wrk_analysis_finish_time` (`finish_time`), KEY `idx_wrk_analysis_appe_time` (`appe_time`), KEY `idx_wrk_analysis_io_type` (`io_type`), KEY `idx_wrk_analysis_final_wrk_sts` (`final_wrk_sts`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务执行分析汇总表'; SET @wrk_analysis_inbound_status_migrated := CASE WHEN EXISTS ( SELECT 1 FROM `asr_bas_wrk_status` WHERE `wrk_sts` = 3 AND `wrk_desc` = '站点运行完成' ) THEN 1 ELSE 0 END; UPDATE `asr_wrk_mast` SET `wrk_sts` = CASE WHEN `wrk_sts` = 3 THEN 4 WHEN `wrk_sts` = 4 THEN 5 ELSE `wrk_sts` END WHERE @wrk_analysis_inbound_status_migrated = 0 AND `wrk_sts` IN (3, 4); UPDATE `asr_wrk_mast_log` SET `wrk_sts` = CASE WHEN `wrk_sts` = 3 THEN 4 WHEN `wrk_sts` = 4 THEN 5 ELSE `wrk_sts` END WHERE @wrk_analysis_inbound_status_migrated = 0 AND `wrk_sts` IN (3, 4); UPDATE `asr_bas_crnp_err_log` SET `wrk_sts` = CASE WHEN `wrk_sts` = 3 THEN 4 WHEN `wrk_sts` = 4 THEN 5 ELSE `wrk_sts` END WHERE @wrk_analysis_inbound_status_migrated = 0 AND `wrk_sts` IN (3, 4); UPDATE `asr_bas_dual_crnp_err_log` SET `wrk_sts` = CASE WHEN `wrk_sts` = 3 THEN 4 WHEN `wrk_sts` = 4 THEN 5 ELSE `wrk_sts` END WHERE @wrk_analysis_inbound_status_migrated = 0 AND `wrk_sts` IN (3, 4); UPDATE `asr_bas_rgv_err_log` SET `wrk_sts` = CASE WHEN `wrk_sts` = 3 THEN 4 WHEN `wrk_sts` = 4 THEN 5 ELSE `wrk_sts` END WHERE @wrk_analysis_inbound_status_migrated = 0 AND `wrk_sts` IN (3, 4); INSERT INTO `asr_bas_wrk_status` (`wrk_sts`, `wrk_desc`, `appe_time`, `modi_time`) VALUES (3, '站点运行完成', NOW(), NOW()) ON DUPLICATE KEY UPDATE `wrk_desc` = VALUES(`wrk_desc`), `modi_time` = NOW(); INSERT INTO `asr_bas_wrk_status` (`wrk_sts`, `wrk_desc`, `appe_time`, `modi_time`) VALUES (4, '设备搬运中', NOW(), NOW()) ON DUPLICATE KEY UPDATE `wrk_desc` = VALUES(`wrk_desc`), `modi_time` = NOW(); INSERT INTO `asr_bas_wrk_status` (`wrk_sts`, `wrk_desc`, `appe_time`, `modi_time`) VALUES (5, '设备搬运完成', NOW(), NOW()) ON DUPLICATE KEY UPDATE `wrk_desc` = VALUES(`wrk_desc`), `modi_time` = NOW(); UPDATE `asr_bas_wrk_status` SET `wrk_desc` = '站点运行中', `modi_time` = NOW() WHERE `wrk_sts` = 2; INSERT INTO `asr_wrk_analysis` ( `wrk_no`, `wms_wrk_no`, `io_type`, `final_wrk_sts`, `source_sta_no`, `sta_no`, `source_loc_no`, `loc_no`, `crn_no`, `dual_crn_no`, `rgv_no`, `appe_time`, `finish_time`, `total_duration_ms`, `station_duration_ms`, `crane_duration_ms`, `has_fault`, `fault_count`, `fault_duration_ms`, `crn_fault_count`, `crn_fault_duration_ms`, `dual_crn_fault_count`, `dual_crn_fault_duration_ms`, `rgv_fault_count`, `rgv_fault_duration_ms`, `metric_completeness`, `create_time`, `update_time` ) SELECT l.`wrk_no`, l.`wms_wrk_no`, l.`io_type`, l.`wrk_sts`, l.`source_sta_no`, l.`sta_no`, l.`source_loc_no`, l.`loc_no`, l.`crn_no`, l.`dual_crn_no`, l.`rgv_no`, l.`appe_time`, COALESCE(l.`modi_time`, l.`io_time`, l.`appe_time`) AS `finish_time`, CASE WHEN l.`appe_time` IS NULL OR COALESCE(l.`modi_time`, l.`io_time`, l.`appe_time`) IS NULL THEN NULL ELSE GREATEST(TIMESTAMPDIFF(MICROSECOND, l.`appe_time`, COALESCE(l.`modi_time`, l.`io_time`, l.`appe_time`)), 0) DIV 1000 END AS `total_duration_ms`, CASE WHEN l.`io_type` = 201 THEN 0 ELSE NULL END AS `station_duration_ms`, NULL AS `crane_duration_ms`, CASE WHEN COALESCE(c.`fault_count`, 0) + COALESCE(d.`fault_count`, 0) + COALESCE(r.`fault_count`, 0) > 0 THEN 1 ELSE 0 END AS `has_fault`, COALESCE(c.`fault_count`, 0) + COALESCE(d.`fault_count`, 0) + COALESCE(r.`fault_count`, 0) AS `fault_count`, COALESCE(c.`fault_duration_ms`, 0) + COALESCE(d.`fault_duration_ms`, 0) + COALESCE(r.`fault_duration_ms`, 0) AS `fault_duration_ms`, COALESCE(c.`fault_count`, 0) AS `crn_fault_count`, COALESCE(c.`fault_duration_ms`, 0) AS `crn_fault_duration_ms`, COALESCE(d.`fault_count`, 0) AS `dual_crn_fault_count`, COALESCE(d.`fault_duration_ms`, 0) AS `dual_crn_fault_duration_ms`, COALESCE(r.`fault_count`, 0) AS `rgv_fault_count`, COALESCE(r.`fault_duration_ms`, 0) AS `rgv_fault_duration_ms`, 'PARTIAL' AS `metric_completeness`, NOW(), NOW() FROM `asr_wrk_mast_log` l 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_crnp_err_log` e LEFT JOIN `asr_wrk_mast_log` wl ON wl.`wrk_no` = e.`wrk_no` GROUP BY e.`wrk_no` ) c ON c.`wrk_no` = l.`wrk_no` 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_dual_crnp_err_log` e LEFT JOIN `asr_wrk_mast_log` wl ON wl.`wrk_no` = e.`wrk_no` GROUP BY e.`wrk_no` ) d ON d.`wrk_no` = l.`wrk_no` LEFT JOIN ( SELECT e.`task_no` AS `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_rgv_err_log` e LEFT JOIN `asr_wrk_mast_log` wl ON wl.`wrk_no` = e.`task_no` GROUP BY e.`task_no` ) r ON r.`wrk_no` = l.`wrk_no` ON DUPLICATE KEY UPDATE `wms_wrk_no` = VALUES(`wms_wrk_no`), `io_type` = VALUES(`io_type`), `final_wrk_sts` = VALUES(`final_wrk_sts`), `source_sta_no` = VALUES(`source_sta_no`), `sta_no` = VALUES(`sta_no`), `source_loc_no` = VALUES(`source_loc_no`), `loc_no` = VALUES(`loc_no`), `crn_no` = VALUES(`crn_no`), `dual_crn_no` = VALUES(`dual_crn_no`), `rgv_no` = VALUES(`rgv_no`), `appe_time` = VALUES(`appe_time`), `finish_time` = VALUES(`finish_time`), `total_duration_ms` = VALUES(`total_duration_ms`), `station_duration_ms` = VALUES(`station_duration_ms`), `crane_duration_ms` = VALUES(`crane_duration_ms`), `has_fault` = VALUES(`has_fault`), `fault_count` = VALUES(`fault_count`), `fault_duration_ms` = VALUES(`fault_duration_ms`), `crn_fault_count` = VALUES(`crn_fault_count`), `crn_fault_duration_ms` = VALUES(`crn_fault_duration_ms`), `dual_crn_fault_count` = VALUES(`dual_crn_fault_count`), `dual_crn_fault_duration_ms` = VALUES(`dual_crn_fault_duration_ms`), `rgv_fault_count` = VALUES(`rgv_fault_count`), `rgv_fault_duration_ms` = VALUES(`rgv_fault_duration_ms`), `metric_completeness` = VALUES(`metric_completeness`), `update_time` = NOW(); SET @wrk_analysis_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 'wrkAnalysis/wrkAnalysis.html', '任务执行分析', @wrk_analysis_parent_id, 2, 996, 1 FROM dual WHERE @wrk_analysis_parent_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `sys_resource` WHERE `code` = 'wrkAnalysis/wrkAnalysis.html' AND `level` = 2 ); UPDATE `sys_resource` SET `name` = '任务执行分析', `resource_id` = @wrk_analysis_parent_id, `level` = 2, `sort` = 996, `status` = 1 WHERE `code` = 'wrkAnalysis/wrkAnalysis.html' AND `level` = 2; SET @wrk_analysis_id := ( SELECT `id` FROM `sys_resource` WHERE `code` = 'wrkAnalysis/wrkAnalysis.html' AND `level` = 2 ORDER BY `id` LIMIT 1 ); INSERT INTO `sys_resource`(`code`, `name`, `resource_id`, `level`, `sort`, `status`) SELECT 'wrkAnalysis/wrkAnalysis.html#view', '查看', @wrk_analysis_id, 3, 1, 1 FROM dual WHERE @wrk_analysis_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM `sys_resource` WHERE `code` = 'wrkAnalysis/wrkAnalysis.html#view' AND `level` = 3 ); UPDATE `sys_resource` SET `name` = '查看', `resource_id` = @wrk_analysis_id, `level` = 3, `sort` = 1, `status` = 1 WHERE `code` = 'wrkAnalysis/wrkAnalysis.html#view' AND `level` = 3;