xiaoyi
2026-10-30 380b72e9b443c59f2869f8cedea1920eec4b0afa
chore(db): 补充历史数据库变更脚本入库

把先前几个阶段执行过但未入库的 DDL/DML 脚本统一补进来,便于追溯库结构演进:

- chdl_*_20261028.sql(6 个):数采表、索引、菜单、网关重置、MES 缺失列与表
- power_enhancement_phase1~17(19 个):产能/采购/仓储/计划/设备/质量/
工艺/HR/产品设计/CRM/遥测/BPM/缺口功能等阶段脚本
- decision_support_init.sql:决策支持初始化
- rebuild_fk_*.sql 中间版本:外键重建的生成稿与演进记录

均为已在生产执行过的脚本,内容幂等,仅作变更留痕。
已添加27个文件
2636 ■■■■■ 文件已修改
sql/mysql/chdl_collect_indexes_20261028.sql 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/chdl_collect_menu_20261028.sql 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/chdl_collect_tables_20261028.sql 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/chdl_machinery_gateway_reset_20261028.sql 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/chdl_mes_missing_columns_20261028.sql 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/chdl_missing_tables_20261028.sql 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/decision_support_init.sql 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase10_crm_marketing.sql 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase10_menu_reorg.sql 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase11_product_design_ext.sql 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase12_dv_telemetry.sql 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase13_bpm_refund_cancellation.sql 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase14_gap_features.sql 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase15_workhour_parameter_check.sql 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase16_bpm_approval_deploy.sql 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase17_menu_cleanup.sql 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase1_production_control.sql 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase2_purchase_plan.sql 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase3_warehouse.sql 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase4_planning.sql 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase5_equipment.sql 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase6_quality.sql 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase7_process_design.sql 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase8_hrm.sql 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/power_enhancement_phase9_product_design.sql 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/rebuild_fk_mom_chdl_20261030.sql 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/rebuild_fk_v2_20261030.sql 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/chdl_collect_indexes_20261028.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
-- =============================================
-- MES æ•°é‡‡è¡¨ç´¢å¼•补齐
-- ç”Ÿæˆæ—¶é—´ï¼š2026-10-28
-- èƒŒæ™¯ï¼šå»ºè¡¨æ—¶åªåŠ äº†æ™®é€šç´¢å¼•ï¼Œä½†ä»£ç ä¾èµ–å”¯ä¸€çº¦æŸï¼š
--   1. MesCollectRealtimeMapper.selectByDeviceCode ç”¨ selectOne,重复行会抛 TooManyResultsException
--   2. MesCollectDataService.saveRealtime é  DuplicateKeyException å…œå¹¶å‘插入
--   3. saveCycle åŒç†é  DuplicateKeyException åŽ»é‡
-- è¯´æ˜Žï¼šç”¨å­˜å‚¨è¿‡ç¨‹åšå¹‚等(MySQL 8 ä¸æ”¯æŒ ADD INDEX IF NOT EXISTS)
-- =============================================
DELIMITER $$
DROP PROCEDURE IF EXISTS chdl_collect_add_index_20261028$$
CREATE PROCEDURE chdl_collect_add_index_20261028(
    IN p_table_name VARCHAR(64), IN p_index_name VARCHAR(64), IN p_ddl_sql VARCHAR(1000))
BEGIN
    IF NOT EXISTS (SELECT 1 FROM information_schema.STATISTICS
                   WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table_name AND INDEX_NAME = p_index_name) THEN
        SET @collect_idx_ddl = p_ddl_sql;
        PREPARE collect_idx_stmt FROM @collect_idx_ddl;
        EXECUTE collect_idx_stmt;
        DEALLOCATE PREPARE collect_idx_stmt;
    END IF;
END$$
DELIMITER ;
-- 1. å®žæ—¶çŠ¶æ€ï¼šä¸€å°è®¾å¤‡åªæœ‰ä¸€è¡Œï¼Œdevice_code å”¯ä¸€
CALL chdl_collect_add_index_20261028('mes_collect_realtime','uk_device_code',
    'ALTER TABLE mes_collect_realtime ADD UNIQUE KEY uk_device_code (device_code)');
-- 2. å·¥è‰ºå‚数快照:一台设备只有一行
CALL chdl_collect_add_index_20261028('mes_collect_tech','uk_device_code',
    'ALTER TABLE mes_collect_tech ADD UNIQUE KEY uk_device_code (device_code)');
-- 3. å®žæ—¶çŠ¶æ€åŽ†å²ï¼šåŒè®¾å¤‡åŒä¸€ç§’åªç•™ä¸€æ¡
CALL chdl_collect_add_index_20261028('mes_collect_realtime_history','uk_device_collect_time',
    'ALTER TABLE mes_collect_realtime_history ADD UNIQUE KEY uk_device_collect_time (device_code, collect_time)');
-- 4. å‘¨æœŸè¿‡ç¨‹æ•°æ®ï¼šåŒè®¾å¤‡åŒä¸€å‘¨æœŸåªç•™ä¸€æ¡
CALL chdl_collect_add_index_20261028('mes_collect_cycle','uk_device_cycle_no',
    'ALTER TABLE mes_collect_cycle ADD UNIQUE KEY uk_device_cycle_no (device_code, cycle_no)');
DROP PROCEDURE chdl_collect_add_index_20261028;
sql/mysql/chdl_collect_menu_20261028.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
-- =============================================
-- é•¿è¾‰ chdl æ•°é‡‡ç›‘控菜单
-- ç”Ÿæˆæ—¶é—´ï¼š2026-10-28
-- è¯´æ˜Žï¼šåŽç«¯ /mes/collect/* æŽ¥å£å·²å°±ç»ªï¼Œå‰ç«¯é¡µé¢å·²å¼€å‘,这里补菜单入口
-- =============================================
-- 1. è®¾å¤‡æ•°é‡‡ï¼ˆäºŒçº§èœå•,挂在设备管理下)
INSERT INTO system_menu
(id, name, permission, type, sort, parent_id, path, icon, component, component_name,
 status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
VALUES
(5392, '设备数采', '', 2, 2, 5300, 'collect', 'ep:data-line', 'mes/dv/collect/index', 'MesDvCollect',
 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE
 name=VALUES(name), component=VALUES(component), component_name=VALUES(component_name),
 status=0, deleted=b'0', update_time=NOW();
-- 2. æ•°é‡‡æŸ¥è¯¢æŒ‰é’®
INSERT INTO system_menu
(id, name, permission, type, sort, parent_id, path, icon, component, component_name,
 status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
VALUES
(5393, '数采查询', 'mes:collect:query', 3, 1, 5392, '', '', '', NULL,
 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE
 permission=VALUES(permission), status=0, deleted=b'0', update_time=NOW();
-- 3. æŠ¥è­¦ç¡®è®¤æŒ‰é’®
INSERT INTO system_menu
(id, name, permission, type, sort, parent_id, path, icon, component, component_name,
 status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
VALUES
(5394, '报警确认', 'mes:collect-alarm:ack', 3, 2, 5392, '', '', '', NULL,
 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE
 permission=VALUES(permission), status=0, deleted=b'0', update_time=NOW();
-- 4. ç»™å·²æœ‰ã€Œè®¾å¤‡å°è´¦ã€æƒé™çš„角色自动授予数采权限
INSERT INTO system_role_menu
(role_id, menu_id, creator, create_time, updater, update_time, deleted, tenant_id)
SELECT DISTINCT x.role_id, m.id, '1', NOW(), '1', NOW(), b'0', x.tenant_id
FROM system_role_menu x
JOIN system_menu m ON m.id IN (5392, 5393, 5394)
WHERE x.menu_id = 5320 AND x.deleted = b'0'
  AND NOT EXISTS (
    SELECT 1 FROM system_role_menu y
    WHERE y.role_id = x.role_id AND y.menu_id = m.id
      AND y.tenant_id = x.tenant_id AND y.deleted = b'0'
  );
-- 5. æ ¡éªŒ
SELECT id, name, parent_id, permission, component, deleted+0 AS deleted
FROM system_menu WHERE id IN (5392, 5393, 5394) ORDER BY id;
SELECT CONCAT('授权角色数=', COUNT(DISTINCT role_id)) AS grants
FROM system_role_menu WHERE menu_id IN (5392, 5393, 5394) AND deleted = b'0';
sql/mysql/chdl_collect_tables_20261028.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
-- =============================================
-- é•¿è¾‰ chdl çŽ¯å¢ƒ MES æ•°é‡‡æ¨¡å—缺失表补齐
-- ç”Ÿæˆæ—¶é—´ï¼š2026-10-28
-- èƒŒæ™¯ï¼šä»£ç å£°æ˜Ž 7 å¼  mes_collect_* è¡¨ï¼Œåº“中全部缺失;
--       å¯¼è‡´æ¯æ—¥ 03:30 çš„ MesCollectCleanupJob å®šæ—¶ä»»åŠ¡æŠ¥é”™ï¼Œ
--       ä»¥åŠ /mes/collect/* å…¨éƒ¨æŽ¥å£ä¸å¯ç”¨ã€‚
-- è¯´æ˜Žï¼šCREATE TABLE IF NOT EXISTS,可重复执行
-- =============================================
-- 1. åŽŸå§‹æŠ¥æ–‡è¡¨ï¼ˆMQTT ä¸ŠæŠ¥çš„原始消息)
CREATE TABLE IF NOT EXISTS `mes_collect_message` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
    `machinery_id` bigint NULL COMMENT '设备编号',
    `device_code` varchar(64) NULL COMMENT '设备编码',
    `mqtt_topic` varchar(255) NULL COMMENT 'MQTT ä¸»é¢˜',
    `msg_type` varchar(64) NULL COMMENT '报文类型',
    `event_time` datetime NULL COMMENT '事件时间',
    `raw_payload` mediumtext NULL COMMENT '原始报文',
    `process_status` tinyint NULL DEFAULT 0 COMMENT '处理状态:0-待处理,1-已处理,2-失败',
    `error_msg` varchar(500) NULL COMMENT '处理失败原因',
    `receive_time` datetime NULL COMMENT '接收时间',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_receive_time` (`receive_time`),
    KEY `idx_machinery_id` (`machinery_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES æ•°é‡‡-原始报文';
-- 2. å®žæ—¶çŠ¶æ€è¡¨ï¼ˆè®¾å¤‡æœ€æ–°çŠ¶æ€ï¼‰
CREATE TABLE IF NOT EXISTS `mes_collect_realtime` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
    `machinery_id` bigint NULL COMMENT '设备编号',
    `device_code` varchar(64) NULL COMMENT '设备编码',
    `task_id` bigint NULL COMMENT '任务编号',
    `work_order_id` bigint NULL COMMENT '工单编号',
    `collect_time` datetime NULL COMMENT '采集时间',
    `sts` int NULL COMMENT '设备状态',
    `opm` int NULL COMMENT '运行模式',
    `asts` int NULL COMMENT '报警状态',
    `ot` decimal(24,6) NULL COMMENT '运行时长',
    `temps` text NULL COMMENT '温度集合',
    `data_json` mediumtext NULL COMMENT '原始数据 JSON',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_machinery_id` (`machinery_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES æ•°é‡‡-实时状态';
-- 3. å®žæ—¶çŠ¶æ€åŽ†å²è¡¨
CREATE TABLE IF NOT EXISTS `mes_collect_realtime_history` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
    `machinery_id` bigint NULL COMMENT '设备编号',
    `device_code` varchar(64) NULL COMMENT '设备编码',
    `task_id` bigint NULL COMMENT '任务编号',
    `work_order_id` bigint NULL COMMENT '工单编号',
    `collect_time` datetime NULL COMMENT '采集时间',
    `sts` int NULL COMMENT '设备状态',
    `opm` int NULL COMMENT '运行模式',
    `asts` int NULL COMMENT '报警状态',
    `ot` decimal(24,6) NULL COMMENT '运行时长',
    `temps` text NULL COMMENT '温度集合',
    `data_json` mediumtext NULL COMMENT '原始数据 JSON',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_machinery_collect_time` (`machinery_id`, `collect_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES æ•°é‡‡-实时状态历史';
-- 4. å‘¨æœŸè¿‡ç¨‹æ•°æ®è¡¨
CREATE TABLE IF NOT EXISTS `mes_collect_cycle` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
    `machinery_id` bigint NULL COMMENT '设备编号',
    `device_code` varchar(64) NULL COMMENT '设备编码',
    `task_id` bigint NULL COMMENT '任务编号',
    `work_order_id` bigint NULL COMMENT '工单编号',
    `cycle_no` bigint NULL COMMENT '周期序号',
    `collect_time` datetime NULL COMMENT '采集时间',
    `ecyct` decimal(24,6) NULL COMMENT '周期时间',
    `eiss` decimal(24,6) NULL COMMENT '注射速度',
    `eivm` decimal(24,6) NULL COMMENT '注射速度峰值',
    `eipm` decimal(24,6) NULL COMMENT '注射压力峰值',
    `esipt` decimal(24,6) NULL COMMENT '保压时间',
    `esipp` decimal(24,6) NULL COMMENT '保压压力',
    `esips` decimal(24,6) NULL COMMENT '保压速度',
    `eipt` decimal(24,6) NULL COMMENT '塑化时间',
    `eipse` decimal(24,6) NULL COMMENT '塑化终点',
    `eplst` decimal(24,6) NULL COMMENT '冷却时间',
    `eplsse` decimal(24,6) NULL COMMENT '冷却终点',
    `eplspm` decimal(24,6) NULL COMMENT '冷却压力',
    `et_temps` text NULL COMMENT '温度集合',
    `data_json` mediumtext NULL COMMENT '原始数据 JSON',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_machinery_cycle` (`machinery_id`, `cycle_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES æ•°é‡‡-周期过程数据';
-- 5. å·¥è‰ºå‚数快照表
CREATE TABLE IF NOT EXISTS `mes_collect_tech` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
    `machinery_id` bigint NULL COMMENT '设备编号',
    `device_code` varchar(64) NULL COMMENT '设备编码',
    `task_id` bigint NULL COMMENT '任务编号',
    `work_order_id` bigint NULL COMMENT '工单编号',
    `collect_time` datetime NULL COMMENT '采集时间',
    `data_json` mediumtext NULL COMMENT '工艺参数 JSON',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_machinery_id` (`machinery_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES æ•°é‡‡-工艺参数快照';
-- 6. å‚数变更日志表
CREATE TABLE IF NOT EXISTS `mes_collect_operate_log` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
    `machinery_id` bigint NULL COMMENT '设备编号',
    `device_code` varchar(64) NULL COMMENT '设备编码',
    `task_id` bigint NULL COMMENT '任务编号',
    `work_order_id` bigint NULL COMMENT '工单编号',
    `var_id` varchar(64) NULL COMMENT '参数标识',
    `old_value` varchar(255) NULL COMMENT '变更前值',
    `new_value` varchar(255) NULL COMMENT '变更后值',
    `modify_time` datetime NULL COMMENT '修改时间',
    `collect_time` datetime NULL COMMENT '采集时间',
    `data_json` mediumtext NULL COMMENT '原始数据 JSON',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_machinery_modify_time` (`machinery_id`, `modify_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES æ•°é‡‡-参数变更日志';
-- 7. æŠ¥è­¦è®°å½•表
CREATE TABLE IF NOT EXISTS `mes_collect_alarm` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
    `machinery_id` bigint NULL COMMENT '设备编号',
    `device_code` varchar(64) NULL COMMENT '设备编码',
    `task_id` bigint NULL COMMENT '任务编号',
    `work_order_id` bigint NULL COMMENT '工单编号',
    `wm_id` int NULL COMMENT '报警编码',
    `wm_msg` varchar(500) NULL COMMENT '报警信息',
    `wm_time` datetime NULL COMMENT '报警时间',
    `status` tinyint NULL DEFAULT 0 COMMENT '状态:0-未消除,1-已消除',
    `clear_time` datetime NULL COMMENT '消除时间',
    `collect_time` datetime NULL COMMENT '采集时间',
    `data_json` mediumtext NULL COMMENT '原始数据 JSON',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_machinery_wm_time` (`machinery_id`, `wm_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES æ•°é‡‡-报警记录';
sql/mysql/chdl_machinery_gateway_reset_20261028.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
-- =============================================
-- é•¿è¾‰ chdl è®¾å¤‡å°è´¦é‡ç½®ä¸ºç½‘关设备
-- ç”Ÿæˆæ—¶é—´ï¼š2026-10-28
-- èƒŒæ™¯ï¼šè®¾å¤‡ç½‘关实际上报 7 å°è®¾å¤‡ï¼ˆ630框绞机2 / ç®¡ç»žæœº / 70挤出机3 / 1600 /
--       70加90挤出机1 / 150挤出机 / 1250),但台账里只有 3 å°æ— å…³çš„æµ‹è¯•设备
--       ï¼ˆæ¡†ç»žæœº / ç¬”记本电脑 / 678),数采数据无法绑定。
-- åšæ³•:旧设备软删除(deleted=1,可回滚),新增 7 å°ç½‘关设备并配好数采编码。
-- è¯´æ˜Žï¼šè½¦é—´/工位留空,需业务侧按实际产线补全;设备类型统一挂「生产」。
-- =============================================
-- ---------- 1. æ—§è®¾å¤‡è½¯åˆ é™¤ ----------
UPDATE mes_dv_machinery SET deleted = b'1', updater = '1', update_time = NOW()
 WHERE id IN (2, 3, 4) AND deleted = b'0';
-- ---------- 2. æ¸…理指向旧设备的点检计划关联 ----------
UPDATE mes_dv_check_plan_machinery SET deleted = b'1', updater = '1', update_time = NOW()
 WHERE machinery_id IN (2, 3, 4) AND deleted = b'0';
-- ---------- 3. æ¸…理指向旧设备的工作站-设备关联 ----------
UPDATE mes_md_workstation_machine SET deleted = b'1', updater = '1', update_time = NOW()
 WHERE machinery_id IN (2, 3, 4) AND deleted = b'0';
-- ---------- 4. æ–°å¢ž 7 å°ç½‘关设备 ----------
-- collect_device_code å¿…须与 MQTT æŠ¥æ–‡é¦–层 key å®Œå…¨ä¸€è‡´ï¼Œå¦åˆ™åŒ¹é…ä¸åˆ°
INSERT INTO mes_dv_machinery
(code, name, machinery_type_id, workshop_id, status, collect_device_code, collect_enabled,
 creator, create_time, updater, update_time, deleted)
VALUES
('MC_20261028001', '630框绞机2',    1, NULL, 1, '630框绞机2',    b'1', '1', NOW(), '1', NOW(), b'0'),
('MC_20261028002', '管绞机',        1, NULL, 1, '管绞机',        b'1', '1', NOW(), '1', NOW(), b'0'),
('MC_20261028003', '70挤出机3',     1, NULL, 1, '70挤出机3',     b'1', '1', NOW(), '1', NOW(), b'0'),
('MC_20261028004', '1600',          1, NULL, 1, '1600',          b'1', '1', NOW(), '1', NOW(), b'0'),
('MC_20261028005', '70加90挤出机1', 1, NULL, 1, '70加90挤出机1', b'1', '1', NOW(), '1', NOW(), b'0'),
('MC_20261028006', '150挤出机',     1, NULL, 1, '150挤出机',     b'1', '1', NOW(), '1', NOW(), b'0'),
('MC_20261028007', '1250',          1, NULL, 1, '1250',          b'1', '1', NOW(), '1', NOW(), b'0');
-- ---------- 5. æ ¡éªŒ ----------
SELECT id, code, name, collect_device_code, collect_enabled+0 AS collect_enabled, status, deleted+0 AS deleted
  FROM mes_dv_machinery
 ORDER BY id;
sql/mysql/chdl_mes_missing_columns_20261028.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
-- =============================================
-- é•¿è¾‰ chdl çŽ¯å¢ƒ MES æ¨¡å—缺失列补齐
-- ç”Ÿæˆæ—¶é—´ï¼š2026-10-28
-- èƒŒæ™¯ï¼šå…¨æŽ¥å£æ‰«æå‘现 MES å¤šä¸ª DO å­—段在库中无对应列,导致列表查询 500
-- è¯´æ˜Žï¼šMySQL 8 ä¸æ”¯æŒ ADD COLUMN IF NOT EXISTS,这里用存储过程做幂等
-- =============================================
DELIMITER $$
DROP PROCEDURE IF EXISTS chdl_mes_add_column_20261028$$
CREATE PROCEDURE chdl_mes_add_column_20261028(
    IN p_table_name VARCHAR(64), IN p_column_name VARCHAR(64), IN p_ddl_sql VARCHAR(1000))
BEGIN
    IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS
                   WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table_name AND COLUMN_NAME = p_column_name) THEN
        SET @mes_col_ddl = p_ddl_sql;
        PREPARE mes_col_stmt FROM @mes_col_ddl;
        EXECUTE mes_col_stmt;
        DEALLOCATE PREPARE mes_col_stmt;
    END IF;
END$$
DELIMITER ;
-- ---------- 1. è®¾å¤‡å°è´¦ï¼šæ•°é‡‡å­—段 ----------
CALL chdl_mes_add_column_20261028('mes_dv_machinery','collect_device_code',
    'ALTER TABLE mes_dv_machinery ADD COLUMN collect_device_code varchar(64) NULL COMMENT ''数采设备编码''');
CALL chdl_mes_add_column_20261028('mes_dv_machinery','collect_enabled',
    'ALTER TABLE mes_dv_machinery ADD COLUMN collect_enabled bit(1) NULL DEFAULT b''0'' COMMENT ''是否启用数采''');
-- ---------- 2. åº“存盘点任务 ----------
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task','taking_date',
    'ALTER TABLE mes_wm_stock_taking_task ADD COLUMN taking_date datetime NULL COMMENT ''盘点日期''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task','type',
    'ALTER TABLE mes_wm_stock_taking_task ADD COLUMN type tinyint NULL COMMENT ''盘点类型''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task','user_id',
    'ALTER TABLE mes_wm_stock_taking_task ADD COLUMN user_id bigint NULL COMMENT ''盘点人编号''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task','blind_flag',
    'ALTER TABLE mes_wm_stock_taking_task ADD COLUMN blind_flag bit(1) NULL DEFAULT b''0'' COMMENT ''是否盲盘''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task','frozen',
    'ALTER TABLE mes_wm_stock_taking_task ADD COLUMN frozen bit(1) NULL DEFAULT b''0'' COMMENT ''是否冻结库存''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task','start_time',
    'ALTER TABLE mes_wm_stock_taking_task ADD COLUMN start_time datetime NULL COMMENT ''开始时间''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task','end_time',
    'ALTER TABLE mes_wm_stock_taking_task ADD COLUMN end_time datetime NULL COMMENT ''结束时间''');
-- ---------- 3. åº“存盘点明细 ----------
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task_line','batch_code',
    'ALTER TABLE mes_wm_stock_taking_task_line ADD COLUMN batch_code varchar(64) NULL COMMENT ''批次号''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task_line','taking_quantity',
    'ALTER TABLE mes_wm_stock_taking_task_line ADD COLUMN taking_quantity decimal(24,6) NULL COMMENT ''盘点数量''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task_line','status',
    'ALTER TABLE mes_wm_stock_taking_task_line ADD COLUMN status tinyint NULL COMMENT ''盘点状态''');
-- ---------- 4. åº“存盘点结果 ----------
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task_result','batch_code',
    'ALTER TABLE mes_wm_stock_taking_task_result ADD COLUMN batch_code varchar(64) NULL COMMENT ''批次号''');
CALL chdl_mes_add_column_20261028('mes_wm_stock_taking_task_result','taking_quantity',
    'ALTER TABLE mes_wm_stock_taking_task_result ADD COLUMN taking_quantity decimal(24,6) NULL COMMENT ''盘点数量''');
-- ---------- 5. å¤–协发料明细 ----------
CALL chdl_mes_add_column_20261028('mes_wm_outsource_issue_line','material_stock_id',
    'ALTER TABLE mes_wm_outsource_issue_line ADD COLUMN material_stock_id bigint NULL COMMENT ''库存编号''');
CALL chdl_mes_add_column_20261028('mes_wm_outsource_issue_line','batch_id',
    'ALTER TABLE mes_wm_outsource_issue_line ADD COLUMN batch_id bigint NULL COMMENT ''批次编号''');
-- ---------- 6. å¤–协入库明细 ----------
CALL chdl_mes_add_column_20261028('mes_wm_outsource_receipt_line','batch_id',
    'ALTER TABLE mes_wm_outsource_receipt_line ADD COLUMN batch_id bigint NULL COMMENT ''批次编号''');
CALL chdl_mes_add_column_20261028('mes_wm_outsource_receipt_line','batch_code',
    'ALTER TABLE mes_wm_outsource_receipt_line ADD COLUMN batch_code varchar(64) NULL COMMENT ''批次号''');
CALL chdl_mes_add_column_20261028('mes_wm_outsource_receipt_line','production_date',
    'ALTER TABLE mes_wm_outsource_receipt_line ADD COLUMN production_date datetime NULL COMMENT ''生产日期''');
CALL chdl_mes_add_column_20261028('mes_wm_outsource_receipt_line','expire_date',
    'ALTER TABLE mes_wm_outsource_receipt_line ADD COLUMN expire_date datetime NULL COMMENT ''有效期至''');
CALL chdl_mes_add_column_20261028('mes_wm_outsource_receipt_line','lot_number',
    'ALTER TABLE mes_wm_outsource_receipt_line ADD COLUMN lot_number varchar(64) NULL COMMENT ''批号''');
-- ---------- 7. è£…箱管理明细 ----------
CALL chdl_mes_add_column_20261028('mes_wm_package_line','work_order_id',
    'ALTER TABLE mes_wm_package_line ADD COLUMN work_order_id bigint NULL COMMENT ''生产工单编号''');
CALL chdl_mes_add_column_20261028('mes_wm_package_line','expire_date',
    'ALTER TABLE mes_wm_package_line ADD COLUMN expire_date datetime NULL COMMENT ''有效期至''');
DROP PROCEDURE chdl_mes_add_column_20261028;
-- ---------- 8. æ•°æ®è¿ç§»ï¼šé—ç•™ task_date â†’ taking_date ----------
-- mes_wm_stock_taking_task åº“中存在遗留列 task_date(代码从未使用),
-- æ–°åŠ çš„ taking_date éœ€è¦ä»Žå®ƒå›žå¡«ï¼Œå¦åˆ™åŽ†å²ç›˜ç‚¹ä»»åŠ¡çš„æ—¥æœŸä¼šä¸¢ã€‚
UPDATE mes_wm_stock_taking_task
   SET taking_date = task_date
 WHERE taking_date IS NULL AND task_date IS NOT NULL;
sql/mysql/chdl_missing_tables_20261028.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
-- =============================================
-- é•¿è¾‰ chdl çŽ¯å¢ƒç¼ºå¤±è¡¨è¡¥é½
-- ç”Ÿæˆæ—¶é—´ï¼š2026-10-28
-- èƒŒæ™¯ï¼šå…¨æŽ¥å£æ‰«æå‘现 3 å¼ ä»£ç å£°æ˜Žä½†åº“中缺失的表
-- =============================================
-- 1. ç¤¾ä¿å…¬ç§¯é‡‘配置表(来源:sql/mysql/hrm_deduction_init.sql)
CREATE TABLE IF NOT EXISTS `hrm_social_security_config` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID',
    `name` varchar(100) NOT NULL COMMENT '配置名称',
    `effective_date` date NOT NULL COMMENT '生效日期',
    `pension_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.16 COMMENT '养老保险企业缴纳比例',
    `pension_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.08 COMMENT '养老保险个人缴纳比例',
    `medical_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.095 COMMENT '医疗保险企业缴纳比例',
    `medical_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.02 COMMENT '医疗保险个人缴纳比例',
    `unemployment_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '失业保险企业缴纳比例',
    `unemployment_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '失业保险个人缴纳比例',
    `work_injury_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '工伤保险企业缴纳比例',
    `maternity_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '生育保险企业缴纳比例',
    `housing_fund_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.12 COMMENT '公积金企业缴纳比例',
    `housing_fund_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.12 COMMENT '公积金个人缴纳比例',
    `social_security_base_min` decimal(12,2) NOT NULL COMMENT '社保基数下限',
    `social_security_base_max` decimal(12,2) NOT NULL COMMENT '社保基数上限',
    `housing_fund_base_min` decimal(12,2) NOT NULL COMMENT '公积金基数下限',
    `housing_fund_base_max` decimal(12,2) NOT NULL COMMENT '公积金基数上限',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0-启用,1-禁用',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_effective_date` (`effective_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM社保公积金配置表';
-- 2. ç”¨æˆ·æ•°æ®äº¤æŽ¥æ˜ å°„表(来源:sql/mysql/hrm_user_handover_init.sql)
CREATE TABLE IF NOT EXISTS `hrm_user_handover` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '映射ID',
    `from_user_id` bigint NOT NULL COMMENT '离职用户ID',
    `to_user_id` bigint NOT NULL COMMENT '交接目标用户ID',
    `resignation_id` bigint NOT NULL COMMENT '关联的离职申请ID',
    `handover_status` tinyint NOT NULL DEFAULT 0 COMMENT '交接状态:0-进行中,20-已完成',
    `handover_time` datetime DEFAULT NULL COMMENT '交接完成时间',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_from_to_resignation` (`from_user_id`, `to_user_id`, `resignation_id`),
    KEY `idx_from_user_id` (`from_user_id`),
    KEY `idx_to_user_id` (`to_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM用户数据交接映射表';
sql/mysql/decision_support_init.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
-- =========================================
-- å†³ç­–支持模块初始化脚本
-- 4 å¼ æ–°è¡¨ + èœå• + è§’色授权
-- ç”µåŠ›æ•°è½¬ phase11
-- =========================================
-- 1. KPI指标定义表
CREATE TABLE IF NOT EXISTS `bi_kpi_definition` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `code` varchar(100) NOT NULL COMMENT 'KPI编码',
    `name` varchar(200) NOT NULL COMMENT 'KPI名称',
    `category` varchar(50) NOT NULL COMMENT '分类:power_supply/device_operation/production/quality/procurement/safety',
    `unit` varchar(50) DEFAULT NULL COMMENT '单位',
    `data_source` varchar(50) NOT NULL DEFAULT 'sql' COMMENT '数据来源:sql/interface/manual',
    `query_sql` text COMMENT '查询SQL',
    `chart_type` varchar(50) DEFAULT 'number' COMMENT '默认图表类型',
    `threshold_warn` decimal(20,4) DEFAULT NULL COMMENT '预警阈值-警告',
    `threshold_critical` decimal(20,4) DEFAULT NULL COMMENT '预警阈值-严重',
    `comparison_operator` varchar(10) DEFAULT '>' COMMENT '比较运算符:>/</>=/<=',
    `refresh_interval` int DEFAULT 300 COMMENT '刷新间隔(秒)',
    `sort` int DEFAULT 0,
    `status` tinyint DEFAULT 1 COMMENT '状态:0-禁用 1-启用',
    `remark` varchar(500) DEFAULT NULL,
    `creator` varchar(64) DEFAULT '',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updater` varchar(64) DEFAULT '',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `deleted` bit(1) NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`),
    KEY `idx_category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='KPI指标定义表';
-- 2. é¢„警规则表
CREATE TABLE IF NOT EXISTS `bi_alert_rule` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `kpi_id` bigint NOT NULL COMMENT '关联KPI指标ID',
    `name` varchar(200) NOT NULL COMMENT '规则名称',
    `severity` tinyint NOT NULL DEFAULT 1 COMMENT '严重级别:1-警告 2-严重 3-紧急',
    `comparison_operator` varchar(10) NOT NULL DEFAULT '>' COMMENT '比较运算符',
    `threshold_value` decimal(20,4) NOT NULL COMMENT '阈值',
    `notification_type` varchar(100) DEFAULT NULL COMMENT '通知方式:system/message/email(逗号分隔)',
    `enabled` tinyint DEFAULT 1 COMMENT '是否启用:0-禁用 1-启用',
    `remark` varchar(500) DEFAULT NULL,
    `creator` varchar(64) DEFAULT '',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updater` varchar(64) DEFAULT '',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `deleted` bit(1) NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`),
    KEY `idx_kpi_id` (`kpi_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警规则表';
-- 3. é¢„警记录表
CREATE TABLE IF NOT EXISTS `bi_alert_record` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `rule_id` bigint NOT NULL COMMENT '关联规则ID',
    `kpi_id` bigint NOT NULL COMMENT '关联KPI指标ID',
    `kpi_code` varchar(100) NOT NULL COMMENT 'KPI编码(冗余)',
    `kpi_name` varchar(200) NOT NULL COMMENT 'KPI名称(冗余)',
    `actual_value` decimal(20,4) NOT NULL COMMENT '实际值',
    `threshold_value` decimal(20,4) NOT NULL COMMENT '阈值(冗余)',
    `severity` tinyint NOT NULL DEFAULT 1 COMMENT '严重级别',
    `alert_message` varchar(500) DEFAULT NULL COMMENT '预警消息',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态:0-未处理 1-已确认 2-已处理',
    `handler_id` bigint DEFAULT NULL COMMENT '处理人ID',
    `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
    `handle_remark` varchar(500) DEFAULT NULL COMMENT '处理备注',
    `triggered_time` datetime NOT NULL COMMENT '触发时间',
    `creator` varchar(64) DEFAULT '',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updater` varchar(64) DEFAULT '',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `deleted` bit(1) NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`),
    KEY `idx_kpi_code` (`kpi_code`),
    KEY `idx_status` (`status`),
    KEY `idx_triggered_time` (`triggered_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警记录表';
-- 4. è´Ÿè·é¢„测数据表
CREATE TABLE IF NOT EXISTS `bi_forecast_data` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `forecast_code` varchar(100) NOT NULL COMMENT '预测编码,如:load_forecast_daily',
    `forecast_name` varchar(200) NOT NULL COMMENT '预测名称',
    `point_time` datetime NOT NULL COMMENT '预测时间点',
    `forecast_value` decimal(20,4) NOT NULL COMMENT '预测值',
    `actual_value` decimal(20,4) DEFAULT NULL COMMENT '实际值(回填用于校验)',
    `lower_bound` decimal(20,4) DEFAULT NULL COMMENT '置信区间下限',
    `upper_bound` decimal(20,4) DEFAULT NULL COMMENT '置信区间上限',
    `confidence_level` decimal(5,2) DEFAULT 95.00 COMMENT '置信水平(%)',
    `model_version` varchar(50) DEFAULT NULL COMMENT '模型版本',
    `dimension` varchar(100) DEFAULT NULL COMMENT '维度,如:region/line/station',
    `dimension_value` varchar(100) DEFAULT NULL COMMENT '维度值',
    `remark` varchar(500) DEFAULT NULL,
    `creator` varchar(64) DEFAULT '',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updater` varchar(64) DEFAULT '',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `deleted` bit(1) NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`),
    KEY `idx_forecast_code` (`forecast_code`),
    KEY `idx_point_time` (`point_time`),
    KEY `idx_dimension` (`dimension`, `dimension_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='负荷预测数据表';
-- =========================================
-- èœå•
-- =========================================
-- æŒ‚在现有「决策支持」(1063000) ä¸‹
-- èœå• ID ä»Ž 1064000 èµ·
-- å…ˆåˆ é™¤å·²å­˜åœ¨çš„菜单(幂等)
DELETE FROM `system_menu` WHERE `id` BETWEEN 1064000 AND 1064099 AND `deleted` = b'0';
-- ç”µåŠ›KPI看板
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064000, '电力KPI看板', '', 2, 6, 1063000, 'kpi-dashboard', 'ep:data-board', 'bi/decision/kpi-dashboard/index', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- é¢„警中心
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064001, '预警中心', '', 2, 7, 1063000, 'alert-center', 'ep:warning', 'bi/decision/alert-center/index', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- è´Ÿè·é¢„测
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064002, '负荷预测', '', 2, 8, 1063000, 'forecast-analysis', 'ep:trend-charts', 'bi/decision/forecast-analysis/index', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- è¶‹åŠ¿åˆ†æž
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064003, '趋势分析', '', 2, 9, 1063000, 'trend-analysis', 'ep:data-line', 'bi/decision/trend-analysis/index', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- KPI指标定义(挂在配置管理 1063006 ä¸‹ï¼‰
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064004, 'KPI指标定义', '', 2, 3, 1063006, 'kpi-config', 'ep:set-up', 'bi/decision/kpi-config/index', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- é¢„警规则配置(挂在配置管理 1063006 ä¸‹ï¼‰
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064005, '预警规则配置', '', 2, 3, 1063006, 'alert-rule', 'ep:bell', 'bi/decision/alert-rule/index', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- æŒ‰é’®æƒé™
-- KPI指标定义 æŒ‰é’®
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064061, 'KPI指标查询', 'bi:decision:kpi:query', 3, 1, 1064004, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064062, 'KPI指标新增', 'bi:decision:kpi:create', 3, 2, 1064004, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064063, 'KPI指标修改', 'bi:decision:kpi:update', 3, 3, 1064004, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064064, 'KPI指标删除', 'bi:decision:kpi:delete', 3, 4, 1064004, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- é¢„警规则配置 æŒ‰é’®
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064071, '预警规则查询', 'bi:decision:alert-rule:query', 3, 1, 1064005, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064072, '预警规则新增', 'bi:decision:alert-rule:create', 3, 2, 1064005, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064073, '预警规则修改', 'bi:decision:alert-rule:update', 3, 3, 1064005, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064074, '预警规则删除', 'bi:decision:alert-rule:delete', 3, 4, 1064005, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- é¢„警中心 æŒ‰é’®
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064081, '预警记录查询', 'bi:decision:alert:query', 3, 1, 1064001, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064082, '预警确认', 'bi:decision:alert:confirm', 3, 2, 1064001, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1064083, '预警处理', 'bi:decision:alert:handle', 3, 3, 1064001, '', '', '', 0, b'1', b'1', '1', NOW(), '1', NOW(), b'0');
-- =========================================
-- è§’色授权(角色 2=超级管理员, 109/111 å‚见已有配置)
-- =========================================
-- è¶…级管理员 å…¨éƒ¨æŽˆæƒ
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`)
SELECT r.id, m.id, '1', NOW()
FROM `system_role` r CROSS JOIN `system_menu` m
WHERE r.id IN (2) AND m.id BETWEEN 1064000 AND 1064099 AND m.deleted = b'0'
AND NOT EXISTS (SELECT 1 FROM `system_role_menu` rm WHERE rm.role_id = r.id AND rm.menu_id = m.id);
sql/mysql/power_enhancement_phase10_crm_marketing.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
-- =============================================================
-- ç”µåŠ›æ•°è½¬ - è¥é”€ç®¡ç†ï¼ˆCRM æ‰©å±•)阶段十
-- 5 ä¸ªå­é¡¹ï¼šå®¢æˆ·åˆ†ç±» / ä¿¡ç”¨è¯„级 / ç”µåŠ›æŠ¥ä»· / ä¾›ç”¨ç”µåˆåŒ+指令 / é€€è´¹+销户
-- è¯´æ˜Žï¼šALTER TABLE ADD COLUMN ä¸æ”¯æŒ IF NOT EXISTS,重复执行报"字段已存在"可忽略
-- =============================================================
-- 1. å®¢æˆ·æ¡£æ¡ˆæ‰©å±•字段
ALTER TABLE `crm_customer` ADD COLUMN `customer_type` varchar(32) NULL COMMENT '客户分类(政企/工业/居民/商业/农业)' AFTER `remark`;
ALTER TABLE `crm_customer` ADD COLUMN `credit_level` varchar(16) NULL COMMENT '当前信用等级' AFTER `customer_type`;
ALTER TABLE `crm_customer` ADD COLUMN `credit_score` int NULL COMMENT '当前信用分' AFTER `credit_level`;
-- 2. æŠ¥ä»·å•扩展字段(电力/能源服务报价)
ALTER TABLE `crm_sale_quotation` ADD COLUMN `quotation_type` varchar(32) NULL COMMENT '报价类型(general/power/energy)' AFTER `remark`;
ALTER TABLE `crm_sale_quotation` ADD COLUMN `capacity` decimal(12,2) NULL COMMENT '合同容量(kVA)' AFTER `quotation_type`;
ALTER TABLE `crm_sale_quotation` ADD COLUMN `max_demand` decimal(12,2) NULL COMMENT '最大需量(kW)' AFTER `capacity`;
ALTER TABLE `crm_sale_quotation` ADD COLUMN `unit_price` decimal(10,4) NULL COMMENT '电度单价(元/kWh)' AFTER `max_demand`;
ALTER TABLE `crm_sale_quotation` ADD COLUMN `tariff_mode` varchar(32) NULL COMMENT '电价模式(single/two-part/tier/tou)' AFTER `unit_price`;
ALTER TABLE `crm_sale_quotation` ADD COLUMN `power_factor_fee` decimal(12,2) NULL COMMENT '力调电费(元)' AFTER `tariff_mode`;
ALTER TABLE `crm_sale_quotation` ADD COLUMN `billing_cycle` int NULL COMMENT '结算周期(月)' AFTER `power_factor_fee`;
-- 3. åˆåŒæ‰©å±•字段(供用电/能源服务合同)
ALTER TABLE `crm_contract` ADD COLUMN `contract_type` varchar(32) NULL COMMENT '合同类型(power/energy/resident/solar)' AFTER `remark`;
ALTER TABLE `crm_contract` ADD COLUMN `voltage_level` varchar(32) NULL COMMENT '电压等级' AFTER `contract_type`;
ALTER TABLE `crm_contract` ADD COLUMN `electricity_type` varchar(32) NULL COMMENT '用电类型' AFTER `voltage_level`;
ALTER TABLE `crm_contract` ADD COLUMN `contract_capacity` decimal(12,2) NULL COMMENT '合同容量(kVA)' AFTER `electricity_type`;
ALTER TABLE `crm_contract` ADD COLUMN `tariff_mode` varchar(32) NULL COMMENT '电价模式' AFTER `contract_capacity`;
ALTER TABLE `crm_contract` ADD COLUMN `meter_mode` varchar(32) NULL COMMENT '计量方式' AFTER `tariff_mode`;
ALTER TABLE `crm_contract` ADD COLUMN `pay_cycle` int NULL COMMENT '缴费周期(月)' AFTER `meter_mode`;
-- 4. ä¿¡ç”¨è¯„级表
CREATE TABLE IF NOT EXISTS `crm_credit_rating` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `customer_id` bigint NOT NULL COMMENT '客户ID',
  `customer_name` varchar(255) NULL COMMENT '客户名称',
  `level` varchar(16) NULL COMMENT '信用等级(A+/A/B+/B/C/C-/D)',
  `score` int NULL COMMENT '信用分(0-100)',
  `eval_type` varchar(32) NULL COMMENT '评定类型(初评/复评/动态调整)',
  `eval_reason` varchar(500) NULL COMMENT '评定理由',
  `operator_id` bigint NULL COMMENT '操作人ID',
  `operator_name` varchar(64) NULL COMMENT '操作人姓名',
  `operate_time` datetime NULL COMMENT '操作时间',
  `valid_until` datetime NULL COMMENT '有效期至',
  `remark` varchar(500) NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_customer_id` (`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CRM å®¢æˆ·ä¿¡ç”¨è¯„级';
-- 5. åˆåŒæŒ‡ä»¤è¡¨
CREATE TABLE IF NOT EXISTS `crm_contract_command` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `contract_id` bigint NOT NULL COMMENT '合同ID',
  `contract_no` varchar(64) NULL COMMENT '合同编号',
  `command_type` varchar(32) NULL COMMENT '指令类型(下发表/抄表任务/服务工单)',
  `target_module` varchar(64) NULL COMMENT '目标模块',
  `target_id` bigint NULL COMMENT '目标记录ID',
  `biz_no` varchar(64) NULL COMMENT '业务单号',
  `operator_id` bigint NULL COMMENT '操作人ID',
  `operator_name` varchar(64) NULL COMMENT '操作人姓名',
  `operate_time` datetime NULL COMMENT '操作时间',
  `status` int NULL DEFAULT 0 COMMENT '状态(0待执行/10已下发/20已完成/30已取消)',
  `remark` varchar(500) NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_contract_id` (`contract_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CRM åˆåŒæŒ‡ä»¤ä¸‹å‘';
-- 6. é€€è´¹å•表
CREATE TABLE IF NOT EXISTS `crm_refund` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `refund_no` varchar(64) NOT NULL COMMENT '退费单号',
  `customer_id` bigint NOT NULL COMMENT '客户ID',
  `customer_name` varchar(255) NULL COMMENT '客户名称',
  `contract_id` bigint NULL COMMENT '合同ID',
  `contract_no` varchar(64) NULL COMMENT '合同编号',
  `refund_type` varchar(32) NULL COMMENT '退费类型(电费退费/服务退订/容量退费)',
  `refund_amount` decimal(12,2) NULL COMMENT '退费金额',
  `refund_reason` varchar(500) NULL COMMENT '退费原因',
  `apply_user_id` bigint NULL COMMENT '申请用户ID',
  `apply_user_name` varchar(64) NULL COMMENT '申请用户姓名',
  `apply_time` datetime NULL COMMENT '申请时间',
  `audit_status` int NULL DEFAULT 0 COMMENT '审批状态(0草稿/10待审批/20通过/30驳回)',
  `process_instance_id` varchar(64) NULL COMMENT '流程实例ID',
  `remark` varchar(500) NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_refund_no` (`refund_no`),
  KEY `idx_customer_id` (`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CRM é€€è´¹å•';
-- 7. é”€æˆ·ç”³è¯·è¡¨
CREATE TABLE IF NOT EXISTS `crm_cancellation` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `cancellation_no` varchar(64) NOT NULL COMMENT '销户编号',
  `customer_id` bigint NOT NULL COMMENT '客户ID',
  `customer_name` varchar(255) NULL COMMENT '客户名称',
  `contract_id` bigint NULL COMMENT '合同ID',
  `contract_no` varchar(64) NULL COMMENT '合同编号',
  `cancellation_type` varchar(32) NULL COMMENT '销户类型(用电销户/服务终止/合同到期)',
  `cancel_reason` varchar(500) NULL COMMENT '销户原因',
  `expected_cancel_date` date NULL COMMENT '预计销户日期',
  `actual_cancel_date` date NULL COMMENT '实际销户日期',
  `refund_amount` decimal(12,2) NULL COMMENT '退费金额',
  `apply_user_id` bigint NULL COMMENT '申请用户ID',
  `apply_user_name` varchar(64) NULL COMMENT '申请用户姓名',
  `apply_time` datetime NULL COMMENT '申请时间',
  `audit_status` int NULL DEFAULT 0 COMMENT '审批状态(0草稿/10待审批/20通过/30驳回)',
  `process_instance_id` varchar(64) NULL COMMENT '流程实例ID',
  `remark` varchar(500) NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_cancellation_no` (`cancellation_no`),
  KEY `idx_customer_id` (`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CRM é”€æˆ·ç”³è¯·';
-- ==================== å­—å…¸ ====================
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES ('客户分类', 'crm_customer_type', 0, '电力客户分类', '1', NOW(), '1', NOW(), b'0', NULL),
       ('客户信用等级', 'crm_credit_level', 0, '电力客户信用等级', '1', NOW(), '1', NOW(), b'0', NULL),
       ('报价单类型', 'crm_quotation_type', 0, '通用/电力/能源服务报价', '1', NOW(), '1', NOW(), b'0', NULL),
       ('电价模式', 'crm_tariff_mode', 0, '单一制/两部制/阶梯/峰谷分时', '1', NOW(), '1', NOW(), b'0', NULL),
       ('合同类型', 'crm_contract_type', 0, '供用电/能源服务/居配/光伏', '1', NOW(), '1', NOW(), b'0', NULL),
       ('电压等级', 'crm_voltage_level', 0, '电力电压等级', '1', NOW(), '1', NOW(), b'0', NULL),
       ('用电类型', 'crm_electricity_type', 0, '大工业/一般工商业/居民/农业', '1', NOW(), '1', NOW(), b'0', NULL),
       ('计量方式', 'crm_meter_mode', 0, '高供高计/高供低计/低供低计', '1', NOW(), '1', NOW(), b'0', NULL),
       ('合同指令类型', 'crm_command_type', 0, '下发表/抄表任务/服务工单', '1', NOW(), '1', NOW(), b'0', NULL),
       ('合同指令状态', 'crm_command_status', 0, '待执行/已下发/已完成/已取消', '1', NOW(), '1', NOW(), b'0', NULL),
       ('退费类型', 'crm_refund_type', 0, '电费退费/服务退订/容量退费', '1', NOW(), '1', NOW(), b'0', NULL),
       ('销户类型', 'crm_cancellation_type', 0, '用电销户/服务终止/合同到期', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '政企客户', 'government', 'crm_customer_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '工业用户', 'industrial', 'crm_customer_type', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '居民用户', 'resident', 'crm_customer_type', 0, 'default', '', '', '1', NOW(), '1', NOW(), b'0'),
(4, '商业用户', 'commercial', 'crm_customer_type', 0, 'warning', '', '', '1', NOW(), '1', NOW(), b'0'),
(5, '农业用电', 'agricultural', 'crm_customer_type', 0, 'success', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, 'A+', 'A+', 'crm_credit_level', 0, 'success', '', '信用优秀', '1', NOW(), '1', NOW(), b'0'),
(2, 'A', 'A', 'crm_credit_level', 0, 'success', '', '信用良好', '1', NOW(), '1', NOW(), b'0'),
(3, 'B+', 'B+', 'crm_credit_level', 0, 'primary', '', '信用较好', '1', NOW(), '1', NOW(), b'0'),
(4, 'B', 'B', 'crm_credit_level', 0, 'primary', '', '信用一般', '1', NOW(), '1', NOW(), b'0'),
(5, 'C', 'C', 'crm_credit_level', 0, 'warning', '', '信用较差', '1', NOW(), '1', NOW(), b'0'),
(6, 'C-', 'C-', 'crm_credit_level', 0, 'warning', '', '信用差', '1', NOW(), '1', NOW(), b'0'),
(7, 'D', 'D', 'crm_credit_level', 0, 'danger', '', '信用极差', '1', NOW(), '1', NOW(), b'0'),
(1, '通用报价', 'general', 'crm_quotation_type', 0, 'default', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '电力报价', 'power', 'crm_quotation_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '能源服务报价', 'energy', 'crm_quotation_type', 0, 'success', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '单一制', 'single', 'crm_tariff_mode', 0, 'default', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '两部制', 'two-part', 'crm_tariff_mode', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '阶梯', 'tier', 'crm_tariff_mode', 0, 'warning', '', '', '1', NOW(), '1', NOW(), b'0'),
(4, '峰谷分时', 'tou', 'crm_tariff_mode', 0, 'success', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '供用电合同', 'power', 'crm_contract_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '能源服务合同', 'energy', 'crm_contract_type', 0, 'success', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '居配合同', 'resident', 'crm_contract_type', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0'),
(4, '光伏合同', 'solar', 'crm_contract_type', 0, 'warning', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '10kV', '10kV', 'crm_voltage_level', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '35kV', '35kV', 'crm_voltage_level', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '110kV', '110kV', 'crm_voltage_level', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(4, '220kV', '220kV', 'crm_voltage_level', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(5, '380V', '380V', 'crm_voltage_level', 0, 'default', '', '', '1', NOW(), '1', NOW(), b'0'),
(6, '220V', '220V', 'crm_voltage_level', 0, 'default', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '大工业', 'large-industrial', 'crm_electricity_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '一般工商业', 'general-commercial', 'crm_electricity_type', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '居民', 'residential', 'crm_electricity_type', 0, 'default', '', '', '1', NOW(), '1', NOW(), b'0'),
(4, '农业', 'agricultural', 'crm_electricity_type', 0, 'success', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '高供高计', 'high-high', 'crm_meter_mode', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '高供低计', 'high-low', 'crm_meter_mode', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '低供低计', 'low-low', 'crm_meter_mode', 0, 'default', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '下发表', 'meter-issuance', 'crm_command_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '抄表任务', 'meter-read', 'crm_command_type', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '服务工单', 'service-workorder', 'crm_command_type', 0, 'success', '', '', '1', NOW(), '1', NOW(), b'0'),
(0, '待执行', '0', 'crm_command_status', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '已下发', '10', 'crm_command_status', 0, 'warning', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '已完成', '20', 'crm_command_status', 0, 'success', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '已取消', '30', 'crm_command_status', 0, 'danger', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '电费退费', 'electricity', 'crm_refund_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '服务退订', 'service-cancel', 'crm_refund_type', 0, 'warning', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '容量退费', 'capacity', 'crm_refund_type', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0'),
(1, '用电销户', 'electricity', 'crm_cancellation_type', 0, 'danger', '', '', '1', NOW(), '1', NOW(), b'0'),
(2, '服务终止', 'service-terminate', 'crm_cancellation_type', 0, 'warning', '', '', '1', NOW(), '1', NOW(), b'0'),
(3, '合同到期', 'contract-expire', 'crm_cancellation_type', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ==================== èœå•(CRM ç³»ç»Ÿ 2397 ä¸‹ï¼‰ ====================
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065262, '信用评级', '', 2, 1, 2397, 'credit-rating', 'ep:medal', 'crm/credit-rating/index', 'CrmCreditRating', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065263, '信用评级查询', 'crm:credit-rating:query', 3, 1, 1065262, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065264, '信用评级创建', 'crm:credit-rating:create', 3, 2, 1065262, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065265, '信用评级更新', 'crm:credit-rating:update', 3, 3, 1065262, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065266, '信用评级删除', 'crm:credit-rating:delete', 3, 4, 1065262, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065267, '退费单', '', 2, 2, 2397, 'refund', 'ep:refresh-left', 'crm/refund/index', 'CrmRefund', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065268, '退费单查询', 'crm:refund:query', 3, 1, 1065267, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065269, '退费单创建', 'crm:refund:create', 3, 2, 1065267, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065270, '退费单更新', 'crm:refund:update', 3, 3, 1065267, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065271, '退费单删除', 'crm:refund:delete', 3, 4, 1065267, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065272, '退费单导出', 'crm:refund:export', 3, 5, 1065267, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065273, '销户申请', '', 2, 3, 2397, 'cancellation', 'ep:circle-close', 'crm/cancellation/index', 'CrmCancellation', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065274, '销户申请查询', 'crm:cancellation:query', 3, 1, 1065273, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065275, '销户申请创建', 'crm:cancellation:create', 3, 2, 1065273, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065276, '销户申请更新', 'crm:cancellation:update', 3, 3, 1065273, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065277, '销户申请删除', 'crm:cancellation:delete', 3, 4, 1065273, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065278, '销户申请导出', 'crm:cancellation:export', 3, 5, 1065273, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065262 AS menu_id UNION ALL SELECT 1065263 UNION ALL SELECT 1065264 UNION ALL SELECT 1065265 UNION ALL SELECT 1065266
            UNION ALL SELECT 1065267 UNION ALL SELECT 1065268 UNION ALL SELECT 1065269 UNION ALL SELECT 1065270 UNION ALL SELECT 1065271 UNION ALL SELECT 1065272
            UNION ALL SELECT 1065273 UNION ALL SELECT 1065274 UNION ALL SELECT 1065275 UNION ALL SELECT 1065276 UNION ALL SELECT 1065277 UNION ALL SELECT 1065278) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
sql/mysql/power_enhancement_phase10_menu_reorg.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
-- =============================================================
-- ç”µåŠ›æ•°è½¬ - èœå•整理(对齐需求文档 12 æ¨¡å—)
-- 1) å·¥è‰ºè®¾è®¡/产品设计/计划排程 æå‡ä¸ºé¡¶çº§
-- 2) 3 å¤„改名:售后管理→售后服务、排班管理→计划排程、决策BI大屏→决策支持
-- 3) 12 ä¸ªéœ€æ±‚模块 sort ç½® 1-12 ç½®é¡¶
-- 4) éžéœ€æ±‚顶级菜单 sort +1000 åŽç§»
-- 5) ä¿®å¤å­¤å„¿èœå•:信用评级/退费单/销户申请 æŒ‚到营销管理(2617)
-- =============================================================
-- 1. æå‡ä¸ºé¡¶çº§
UPDATE `system_menu` SET `parent_id` = 0 WHERE `id` IN (6809, 602571, 5200) AND `deleted` = b'0';
-- 2. æ”¹å
UPDATE `system_menu` SET `name` = '售后服务' WHERE `id` = 602587 AND `deleted` = b'0';
UPDATE `system_menu` SET `name` = '计划排程' WHERE `id` = 5200 AND `deleted` = b'0';
UPDATE `system_menu` SET `name` = '决策支持' WHERE `id` = 1063000 AND `deleted` = b'0';
-- 3. 12 ä¸ªéœ€æ±‚模块置顶排序 1-12
UPDATE `system_menu` SET `sort` = CASE `id`
  WHEN 5100 THEN 1     -- ç”Ÿäº§ç®¡æŽ§
  WHEN 6809 THEN 2     -- å·¥è‰ºè®¾è®¡
  WHEN 602571 THEN 3   -- äº§å“è®¾è®¡
  WHEN 2617 THEN 4     -- è¥é”€ç®¡ç†
  WHEN 602587 THEN 5   -- å”®åŽæœåŠ¡
  WHEN 5200 THEN 6     -- è®¡åˆ’排程
  WHEN 5500 THEN 7     -- è´¨é‡ç®¡ç†
  WHEN 5300 THEN 8     -- è®¾å¤‡ç®¡ç†
  WHEN 2602 THEN 9     -- é‡‡è´­ç®¡ç†
  WHEN 5780 THEN 10    -- ä»“储物流
  WHEN 6001 THEN 11    -- äººåŠ›èµ„æº
  WHEN 1063000 THEN 12 -- å†³ç­–支持
END
WHERE `id` IN (5100, 6809, 602571, 2617, 602587, 5200, 5500, 5300, 2602, 5780, 6001, 1063000) AND `deleted` = b'0';
-- 4. éžéœ€æ±‚顶级菜单后移(保持相对顺序)
UPDATE `system_menu` SET `sort` = `sort` + 1000
WHERE `deleted` = b'0' AND `parent_id` = 0
  AND `id` NOT IN (5100, 6809, 602571, 2617, 602587, 5200, 5500, 5300, 2602, 5780, 6001, 1063000);
-- 5. ä¿®å¤å­¤å„¿èœå•:信用评级/退费单/销户申请 æŒ‚到营销管理
UPDATE `system_menu` SET `parent_id` = 2617, `sort` = CASE `id`
  WHEN 1065262 THEN 7 -- ä¿¡ç”¨è¯„级
  WHEN 1065267 THEN 8 -- é€€è´¹å•
  WHEN 1065273 THEN 9 -- é”€æˆ·ç”³è¯·
END
WHERE `id` IN (1065262, 1065267, 1065273) AND `deleted` = b'0';
-- 6. é¡¶çº§èœå• path è§„范化(前导 / ä¸Žå…¶å®ƒé¡¶çº§ä¸€è‡´ï¼‰
UPDATE `system_menu` SET `path` = '/process-design' WHERE `id` = 6809 AND `deleted` = b'0';
UPDATE `system_menu` SET `path` = '/pd' WHERE `id` = 602571 AND `deleted` = b'0';
UPDATE `system_menu` SET `path` = '/cal' WHERE `id` = 5200 AND `deleted` = b'0';
-- 7. éšè—éžéœ€æ±‚顶级菜单(保留 ç³»ç»Ÿç®¡ç†1 / åŸºç¡€è®¾æ–½2)
UPDATE `system_menu` SET `visible` = b'0' WHERE `deleted` = b'0' AND `id` IN (602455, 602630, 1185, 2563, 2758, 6500);
-- 8. éšè—ã€ŒåŸºç¡€è®¾æ–½ã€é¡¶çº§èœå•(仅保留 ç³»ç»Ÿç®¡ç†1)
UPDATE `system_menu` SET `visible` = b'0' WHERE `deleted` = b'0' AND `id` = 2;
sql/mysql/power_enhancement_phase11_product_design_ext.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,249 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬åä¸€é˜¶æ®µï¼ˆäº§å“è®¾è®¡æ‰©å±•:产品档案+编码体系+定价)数据库变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šäº§å“æ¡£æ¡ˆï¼ˆå«çŠ¶æ€æœºå®¡æ‰¹ï¼‰+ ç”¨ç”µç±»åž‹/电压等级/服务套餐基础数据
--       + å®šä»·æ ‡å‡† + ä¼˜æƒ ç­–ç•¥ + é˜¶æ¢¯ç”µä»· + ç¼–码规则种子 + å­—å…¸ + èœå•(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. äº§å“æ¡£æ¡ˆè¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pd_product` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `archive_type` tinyint NOT NULL DEFAULT '1' COMMENT '档案类型(1电力服务/2供电产品/3增值能源产品)',
  `code` varchar(50) NOT NULL COMMENT '档案编码(编码规则 PD_PRODUCT_CODE è‡ªåŠ¨ç”Ÿæˆï¼‰',
  `name` varchar(200) NOT NULL COMMENT '档案名称',
  `spec` varchar(200) DEFAULT NULL COMMENT '规格型号',
  `unit` varchar(50) DEFAULT NULL COMMENT '单位',
  `price` decimal(12,2) DEFAULT NULL COMMENT '基准价格',
  `audit_status` tinyint NOT NULL DEFAULT '0' COMMENT '审批状态(0未提交/10审批中/20审核通过/30审核不通过)',
  `audit_remark` varchar(500) DEFAULT NULL COMMENT '审批意见',
  `audit_time` datetime DEFAULT NULL COMMENT '审批时间',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '启用状态(1启用/0禁用)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`),
  KEY `idx_audit_status` (`audit_status`),
  KEY `idx_archive_type` (`archive_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品档案';
-- ---------- 2. ç”¨ç”µç±»åž‹åŸºç¡€ä¿¡æ¯è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pd_electricity_type` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(50) DEFAULT NULL COMMENT '类型编码',
  `name` varchar(100) NOT NULL COMMENT '类型名称',
  `description` varchar(500) DEFAULT NULL COMMENT '类型说明',
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '启用状态(1启用/0禁用)',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用电类型基础信息';
-- ---------- 3. ç”µåŽ‹ç­‰çº§åŸºç¡€ä¿¡æ¯è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pd_voltage_level` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(50) DEFAULT NULL COMMENT '等级编码',
  `name` varchar(100) NOT NULL COMMENT '等级名称',
  `voltage_value` decimal(10,2) DEFAULT NULL COMMENT '电压数值(kV)',
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '启用状态(1启用/0禁用)',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='电压等级基础信息';
-- ---------- 4. æœåŠ¡å¥—é¤åŸºç¡€ä¿¡æ¯è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pd_service_package` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(50) NOT NULL COMMENT '套餐编码(编码规则 PD_PACKAGE_CODE è‡ªåŠ¨ç”Ÿæˆï¼‰',
  `name` varchar(200) NOT NULL COMMENT '套餐名称',
  `description` varchar(500) DEFAULT NULL COMMENT '套餐说明',
  `price` decimal(12,2) DEFAULT NULL COMMENT '套餐价格',
  `effective_date` datetime DEFAULT NULL COMMENT '生效日期',
  `expire_date` datetime DEFAULT NULL COMMENT '失效日期',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '启用状态(1启用/0禁用)',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务套餐基础信息';
-- ---------- 5. å®šä»·æ ‡å‡†è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pd_price_standard` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `object_type` tinyint NOT NULL COMMENT '定价对象类型(1服务套餐/2电压等级/3用电类型)',
  `object_id` bigint NOT NULL COMMENT '定价对象ID',
  `object_name` varchar(200) DEFAULT NULL COMMENT '定价对象名称(冗余,便于展示)',
  `price` decimal(12,2) DEFAULT NULL COMMENT 'ä»·æ ¼',
  `unit` varchar(50) DEFAULT NULL COMMENT '计价单位',
  `effective_date` datetime DEFAULT NULL COMMENT '生效日期',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '启用状态(1启用/0禁用)',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_object` (`object_type`, `object_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='定价标准';
-- ---------- 6. ä¼˜æƒ ç­–略表 ----------
CREATE TABLE IF NOT EXISTS `mes_pd_discount_policy` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(200) NOT NULL COMMENT '策略名称',
  `policy_type` tinyint NOT NULL COMMENT '策略类型(1折扣/2立减)',
  `policy_value` decimal(12,4) DEFAULT NULL COMMENT '策略值(折扣:0-1 æ¯”例;立减:金额)',
  `target_type` tinyint DEFAULT NULL COMMENT '适用对象类型(1服务套餐/2电压等级/3用电类型,可空=全局)',
  `target_id` bigint DEFAULT NULL COMMENT '适用对象ID',
  `start_date` datetime DEFAULT NULL COMMENT '生效日期',
  `end_date` datetime DEFAULT NULL COMMENT '失效日期',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '启用状态(1启用/0禁用)',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_target` (`target_type`, `target_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='优惠策略';
-- ---------- 7. é˜¶æ¢¯ç”µä»·è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pd_tiered_price` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `package_id` bigint DEFAULT NULL COMMENT '服务套餐ID(与电压等级二选一)',
  `voltage_level_id` bigint DEFAULT NULL COMMENT '电压等级ID(与服务套餐二选一)',
  `start_value` decimal(12,2) NOT NULL COMMENT '档位下限(含,kWh)',
  `end_value` decimal(12,2) DEFAULT NULL COMMENT '档位上限(不含,kWh,可空=上不封顶)',
  `price_per_unit` decimal(12,4) NOT NULL COMMENT '档位单价',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '启用状态(1启用/0禁用)',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_package_id` (`package_id`),
  KEY `idx_voltage_level_id` (`voltage_level_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='阶梯电价';
-- ============================================================
-- 8. ç¼–码规则种子(产品档案 + æœåŠ¡å¥—é¤ï¼Œå¤ç”¨çŽ°æœ‰è‡ªåŠ¨ç¼–ç å¼•æ“Žï¼‰
-- ============================================================
-- 8.1 äº§å“æ¡£æ¡ˆç¼–码规则 PD_PRODUCT_CODE(前缀 P_ + æ—¥æœŸ + åˆ†éš”符 + æµæ°´ï¼ŒæŒ‰å¤©å¾ªçŽ¯ï¼‰
INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted)
VALUES (72, 'PD_PRODUCT_CODE', '产品档案编码', '用于生成产品档案编码', 30, b'0', 0, '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE name = VALUES(name), description = VALUES(description);
-- åˆ†æ®µæ— å”¯ä¸€é”®ï¼Œå…ˆæ¸…理本规则旧种子再插入,保证幂等
DELETE FROM mes_md_auto_code_part WHERE rule_id IN (72, 73);
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (72, 1, 3, 2, 'P_', NULL, NULL, NULL, NULL, NULL, '固定前缀', '1', NOW(), '1', NOW(), b'0');
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (72, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, '日期', '1', NOW(), '1', NOW(), b'0');
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (72, 3, 3, 1, '_', NULL, NULL, NULL, NULL, NULL, '分隔符', '1', NOW(), '1', NOW(), b'0');
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (72, 4, 4, 4, NULL, NULL, 1, 1, b'1', 3, '流水号-按天循环', '1', NOW(), '1', NOW(), b'0');
-- 8.2 æœåŠ¡å¥—é¤ç¼–ç è§„åˆ™ PD_PACKAGE_CODE(前缀 PKG_ + æ—¥æœŸ + åˆ†éš”符 + æµæ°´ï¼ŒæŒ‰å¤©å¾ªçŽ¯ï¼‰
INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted)
VALUES (73, 'PD_PACKAGE_CODE', '服务套餐编码', '用于生成服务套餐编码', 30, b'0', 0, '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE name = VALUES(name), description = VALUES(description);
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (73, 1, 3, 4, 'PKG_', NULL, NULL, NULL, NULL, NULL, '固定前缀', '1', NOW(), '1', NOW(), b'0');
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (73, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, '日期', '1', NOW(), '1', NOW(), b'0');
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (73, 3, 3, 1, '_', NULL, NULL, NULL, NULL, NULL, '分隔符', '1', NOW(), '1', NOW(), b'0');
INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted)
VALUES (73, 4, 4, 4, NULL, NULL, 1, 1, b'1', 3, '流水号-按天循环', '1', NOW(), '1', NOW(), b'0');
-- ============================================================
-- 9. å­—å…¸
-- ============================================================
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES
('产品档案类型', 'mes_pd_product_archive_type', 0, '产品档案类型', '1', NOW(), '1', NOW(), b'0', NULL),
('产品设计审批状态', 'mes_pd_audit_status', 0, '产品设计审批状态', '1', NOW(), '1', NOW(), b'0', NULL),
('产品档案启用状态', 'mes_pd_product_status', 0, '产品档案启用状态', '1', NOW(), '1', NOW(), b'0', NULL),
('定价对象类型', 'mes_pd_price_object_type', 0, '定价对象类型', '1', NOW(), '1', NOW(), b'0', NULL),
('优惠策略类型', 'mes_pd_discount_policy_type', 0, '优惠策略类型', '1', NOW(), '1', NOW(), b'0', NULL),
('阶梯电价启用状态', 'mes_pd_tiered_price_status', 0, '阶梯电价启用状态', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '电力服务', '1', 'mes_pd_product_archive_type', 0, 'primary', '', '电力服务', '1', NOW(), '1', NOW(), b'0'),
(2, '供电产品', '2', 'mes_pd_product_archive_type', 0, 'info', '', '供电产品', '1', NOW(), '1', NOW(), b'0'),
(3, '增值能源产品', '3', 'mes_pd_product_archive_type', 0, 'warning', '', '增值能源产品', '1', NOW(), '1', NOW(), b'0'),
(0, '未提交', '0', 'mes_pd_audit_status', 0, 'info', '', '未提交', '1', NOW(), '1', NOW(), b'0'),
(10, '审批中', '10', 'mes_pd_audit_status', 0, 'warning', '', '审批中', '1', NOW(), '1', NOW(), b'0'),
(20, '审核通过', '20', 'mes_pd_audit_status', 0, 'success', '', '审核通过', '1', NOW(), '1', NOW(), b'0'),
(30, '审核不通过', '30', 'mes_pd_audit_status', 0, 'danger', '', '审核不通过', '1', NOW(), '1', NOW(), b'0'),
(0, '禁用', '0', 'mes_pd_product_status', 0, 'danger', '', '禁用', '1', NOW(), '1', NOW(), b'0'),
(1, '启用', '1', 'mes_pd_product_status', 0, 'success', '', '启用', '1', NOW(), '1', NOW(), b'0'),
(1, '服务套餐', '1', 'mes_pd_price_object_type', 0, 'primary', '', '服务套餐', '1', NOW(), '1', NOW(), b'0'),
(2, '电压等级', '2', 'mes_pd_price_object_type', 0, 'info', '', '电压等级', '1', NOW(), '1', NOW(), b'0'),
(3, '用电类型', '3', 'mes_pd_price_object_type', 0, 'warning', '', '用电类型', '1', NOW(), '1', NOW(), b'0'),
(1, '折扣', '1', 'mes_pd_discount_policy_type', 0, 'primary', '', '按比例折扣', '1', NOW(), '1', NOW(), b'0'),
(2, '立减', '2', 'mes_pd_discount_policy_type', 0, 'warning', '', '按金额立减', '1', NOW(), '1', NOW(), b'0'),
(0, '禁用', '0', 'mes_pd_tiered_price_status', 0, 'danger', '', '禁用', '1', NOW(), '1', NOW(), b'0'),
(1, '启用', '1', 'mes_pd_tiered_price_status', 0, 'success', '', '启用', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ==================== 10. èœå•(产品设计下 2 ä¸ªæ–°é¡µé¢ï¼‰ ====================
-- çˆ¶èœå•:602571 äº§å“è®¾è®¡
-- 1) äº§å“æ¡£æ¡ˆ mes/pd/product(含提交审批/审批按钮)
-- 2) äº§å“åŸºç¡€æ•°æ® mes/pd/basedata(用电类型/电压等级/服务套餐/定价标准/优惠策略/阶梯电价 6 ä¸ª Tab)
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065279, '产品档案', '', 2, 4, 602571, 'product', 'ep:box', 'mes/pd/product/index', 'MesPdProduct', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065280, '产品档案查询', 'mes:pd-product:query', 3, 1, 1065279, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065281, '产品档案创建', 'mes:pd-product:create', 3, 2, 1065279, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065282, '产品档案更新', 'mes:pd-product:update', 3, 3, 1065279, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065283, '产品档案删除', 'mes:pd-product:delete', 3, 4, 1065279, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065284, '产品档案导出', 'mes:pd-product:export', 3, 5, 1065279, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065285, '产品档案提交审批', 'mes:pd-product:submit', 3, 6, 1065279, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065286, '产品档案审批', 'mes:pd-product:audit', 3, 7, 1065279, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065287, '产品基础数据', '', 2, 5, 602571, 'basedata', 'ep:data-analysis', 'mes/pd/basedata/index', 'MesPdBaseData', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065288, '产品基础数据查询', 'mes:pd-basedata:query', 3, 1, 1065287, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065289, '产品基础数据创建', 'mes:pd-basedata:create', 3, 2, 1065287, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065290, '产品基础数据更新', 'mes:pd-basedata:update', 3, 3, 1065287, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065291, '产品基础数据删除', 'mes:pd-basedata:delete', 3, 4, 1065287, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065292, '产品基础数据导出', 'mes:pd-basedata:export', 3, 5, 1065287, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065279 AS menu_id UNION ALL SELECT 1065280 UNION ALL SELECT 1065281 UNION ALL SELECT 1065282 UNION ALL SELECT 1065283 UNION ALL SELECT 1065284
            UNION ALL SELECT 1065285 UNION ALL SELECT 1065286
            UNION ALL SELECT 1065287 UNION ALL SELECT 1065288 UNION ALL SELECT 1065289 UNION ALL SELECT 1065290 UNION ALL SELECT 1065291 UNION ALL SELECT 1065292) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
-- ==================== æ‰§è¡Œå®Œæˆæç¤º ====================
SELECT '产品设计扩展(产品档案+编码体系+定价)SQL æ‰§è¡Œå®Œæˆï¼' AS result;
sql/mysql/power_enhancement_phase12_dv_telemetry.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬åäºŒé˜¶æ®µï¼ˆè®¾å¤‡æ•°é‡‡ï¼šè®¾å¤‡æ•°æ®é‡‡é›†ï¼‰æ•°æ®åº“变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šmes_dv_telemetry é¥æµ‹æ•°æ®è¡¨ + è®¾å¤‡å°è´¦ tb_device_id å…³è”字段
--       + å­—å…¸ + èœå• + å®šæ—¶ä»»åŠ¡ç§å­ï¼ˆå¹‚ç­‰ï¼‰
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. è®¾å¤‡æ•°é‡‡é¥æµ‹æ•°æ®è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_dv_telemetry` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `tb_device_id` varchar(100) DEFAULT NULL COMMENT '数采设备ID(外部 tbDeviceId)',
  `device_name` varchar(100) DEFAULT NULL COMMENT '设备名称',
  `param_name` varchar(100) DEFAULT NULL COMMENT '信号名称',
  `param_key_name` varchar(100) DEFAULT NULL COMMENT '设备KEY名称',
  `standard_value` varchar(64) DEFAULT NULL COMMENT '标准值',
  `timely_value` varchar(64) DEFAULT NULL COMMENT '信号值(实时)',
  `avg_value` varchar(64) DEFAULT NULL COMMENT '均值',
  `max_value` varchar(64) DEFAULT NULL COMMENT '最大值',
  `min_value` varchar(64) DEFAULT NULL COMMENT '最小值',
  `whether_anomaly` bit(1) DEFAULT b'0' COMMENT '是否异常',
  `telemetry_data_time` datetime DEFAULT NULL COMMENT '遥测数据时间',
  `bill_no` varchar(64) DEFAULT NULL COMMENT '单据号',
  `shift_name` varchar(64) DEFAULT NULL COMMENT '班次',
  `pull_time` datetime DEFAULT NULL COMMENT '拉取时间',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_tb_device_id` (`tb_device_id`),
  KEY `idx_telemetry_data_time` (`telemetry_data_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES è®¾å¤‡æ•°é‡‡é¥æµ‹æ•°æ®';
-- ---------- 2. è®¾å¤‡å°è´¦å¢žåŠ æ•°é‡‡è®¾å¤‡ID字段(幂等:先判断字段是否存在) ----------
SET @exist_col = (SELECT COUNT(*) FROM information_schema.columns
                  WHERE table_schema = DATABASE() AND table_name = 'mes_dv_machinery' AND column_name = 'tb_device_id');
SET @sql = IF(@exist_col = 0,
              'ALTER TABLE `mes_dv_machinery` ADD COLUMN `tb_device_id` varchar(100) DEFAULT NULL COMMENT ''数采设备ID(外部数采 tbDeviceId)'' AFTER `code`',
              'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ---------- 3. å­—å…¸ ----------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES ('数采是否异常', 'mes_dv_telemetry_anomaly', 0, '设备数采遥测数据是否异常', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(0, '正常', '0', 'mes_dv_telemetry_anomaly', 0, 'success', '', '正常', '1', NOW(), '1', NOW(), b'0'),
(1, '异常', '1', 'mes_dv_telemetry_anomaly', 0, 'danger', '', '异常', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ---------- 4. èœå•(设备管理 5300 ä¸‹æ–°å¢ž è®¾å¤‡æ•°é‡‡ï¼‰ ----------
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065300, '设备数采', '', 2, 3, 5300, 'telemetry', 'ep:data-line', 'mes/dv/telemetry/index', 'MesDvTelemetry', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065301, '设备数采查询', 'mes:dv-telemetry:query', 3, 1, 1065300, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065300 AS menu_id UNION ALL SELECT 1065301) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
-- ---------- 5. å®šæ—¶ä»»åŠ¡ç§å­ï¼ˆæ¯ 5 åˆ†é’Ÿæ‹‰å–一次数采数据) ----------
INSERT INTO `infra_job` (`name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '设备数采数据拉取', 1, 'mesDvTelemetryPullJob', '', '0 */5 * * * ?', 0, 0, 0, '1', NOW(), '1', NOW(), b'0'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `infra_job` WHERE `handler_name` = 'mesDvTelemetryPullJob' AND `deleted` = b'0');
-- ==================== æ‰§è¡Œå®Œæˆæç¤º ====================
SELECT '设备数采(设备数据采集)SQL æ‰§è¡Œå®Œæˆï¼' AS result;
sql/mysql/power_enhancement_phase13_bpm_refund_cancellation.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
-- ============================================================
-- 13. é€€è´¹/销户 BPM å®¡æ‰¹åˆ†ç±»
-- è¯´æ˜Žï¼šä»…种入流程分类;具体 BPMN æµç¨‹éœ€åœ¨ã€ŒBPM ç®¡ç†åŽå° â†’ æµç¨‹æ¨¡åž‹ã€è®¾è®¡å¹¶å‘布,
--       æµç¨‹ key å¼•用分类 refund_approve / cancellation_approve ä¸‹ä»»æ„å·²å‘布流程。
-- ============================================================
INSERT INTO `bpm_category` (`id`, `name`, `code`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (209, '退费审批', 'refund_approve', 0, 209, '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `bpm_category` (`id`, `name`, `code`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (210, '销户审批', 'cancellation_approve', 0, 210, '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- ============================================================
-- åº“存预警自动生成采购计划:定时任务(每 2 å°æ—¶ï¼‰
-- ============================================================
INSERT INTO `infra_job` (`name`, `status`, `handler_name`, `handler_param`, `cron_expression`, `retry_count`, `retry_interval`, `monitor_timeout`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '库存预警自动生成采购计划', 1, 'erpPurchasePlanStockAlertJob', '', '0 0 */2 * * ?', 0, 0, 0, '1', NOW(), '1', NOW(), b'0'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `infra_job` WHERE `handler_name` = 'erpPurchasePlanStockAlertJob' AND `deleted` = b'0');
sql/mysql/power_enhancement_phase14_gap_features.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,273 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬åå››é˜¶æ®µï¼ˆxlsx å¤æ ¸ç¼ºå£è¡¥é½ï¼‰
-- é€‚用:MySQL 8.4+
-- å†…容:
--   1) ç»©æ•ˆè€ƒæ ¸å…¨æµç¨‹ï¼ˆhrm_performance_appraise/_item/_result/_result_item,含 BPM å®¡æ‰¹ï¼‰
--   2) ä½œä¸šæ›¿ä»£æ–¹æ¡ˆ + ç”µåŠ›è¿ç»´æ—¥åŽ†ï¼ˆmes_pro_alternative_plan / mes_pro_maintenance_calendar)
--   3) æ•…障赔付 / æœåŠ¡è¡¥å¿å•ï¼ˆafter_sale_compensation,含 BPM å®¡æ‰¹ï¼‰
--   4) è´Ÿè·é¢„测 -> ç”Ÿæˆå·¥å•联动(mes_pro_work_order_source_type è¿½åŠ  4=负荷预测 + ç”Ÿæˆå·¥å•按钮)
-- è¯´æ˜Žï¼šè´¦åŠ¡è”åŠ¨/成本核算对接依赖财务,仅预留接口字段不接账
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. ç»©æ•ˆè€ƒæ ¸æ–¹æ¡ˆè¡¨ ----------
CREATE TABLE IF NOT EXISTS `hrm_performance_appraise` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(200) NOT NULL COMMENT '方案名称',
  `period_type` tinyint DEFAULT NULL COMMENT '考核周期类型(1月度/2季度/3年度)',
  `period` varchar(50) DEFAULT NULL COMMENT '考核周期描述,如 2026-08',
  `scope_type` tinyint DEFAULT NULL COMMENT '考核范围类型(1全部员工/2指定班组)',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '方案状态(0草稿/10已发布/20进行中/30已完成)',
  `audit_status` tinyint NOT NULL DEFAULT '0' COMMENT '审批状态(0未提交/10审批中/20审批通过/30审批驳回/40已取消)',
  `process_instance_id` varchar(64) DEFAULT NULL COMMENT '审批流程实例编号',
  `audit_user_id` bigint DEFAULT NULL COMMENT '审核人',
  `audit_time` datetime DEFAULT NULL COMMENT '审核时间',
  `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`),
  KEY `idx_audit_status` (`audit_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='绩效考核方案';
-- ---------- 2. ç»©æ•ˆè€ƒæ ¸æŒ‡æ ‡è¡¨ ----------
CREATE TABLE IF NOT EXISTS `hrm_performance_appraise_item` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `appraise_id` bigint NOT NULL COMMENT '考核方案编号',
  `item_name` varchar(200) NOT NULL COMMENT '指标名称',
  `weight` decimal(10,2) DEFAULT NULL COMMENT '权重',
  `scoring_standard` varchar(500) DEFAULT NULL COMMENT '评分标准',
  `scorer_type` tinyint DEFAULT NULL COMMENT '评分人类型(1自评/2上级评)',
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_appraise_id` (`appraise_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='绩效考核指标';
-- ---------- 3. ç»©æ•ˆè€ƒæ ¸ç»“果表(按员工汇总) ----------
CREATE TABLE IF NOT EXISTS `hrm_performance_appraise_result` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `appraise_id` bigint NOT NULL COMMENT '考核方案编号',
  `employee_id` bigint NOT NULL COMMENT '员工编号',
  `self_score` decimal(10,2) DEFAULT NULL COMMENT '自评总分',
  `superior_score` decimal(10,2) DEFAULT NULL COMMENT '上级评总分',
  `final_score` decimal(10,2) DEFAULT NULL COMMENT '综合得分',
  `grade` tinyint DEFAULT NULL COMMENT '档级(1优秀/2良好/3合格/4待改进)',
  `comment` varchar(500) DEFAULT NULL COMMENT '评语',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_appraise_employee` (`appraise_id`, `employee_id`),
  KEY `idx_grade` (`grade`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='绩效考核结果';
-- ---------- 4. ç»©æ•ˆè€ƒæ ¸ç»“果明细表(按员工×指标) ----------
CREATE TABLE IF NOT EXISTS `hrm_performance_appraise_result_item` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `result_id` bigint NOT NULL COMMENT '考核结果编号',
  `item_id` bigint NOT NULL COMMENT '考核指标编号',
  `item_name` varchar(200) DEFAULT NULL COMMENT '指标名称(冗余)',
  `weight` decimal(10,2) DEFAULT NULL COMMENT '权重(冗余)',
  `self_score` decimal(10,2) DEFAULT NULL COMMENT '自评得分',
  `superior_score` decimal(10,2) DEFAULT NULL COMMENT '上级评得分',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_result_id` (`result_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='绩效考核结果明细';
-- ---------- 5. ä½œä¸šæ›¿ä»£æ–¹æ¡ˆè¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pro_alternative_plan` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(50) NOT NULL COMMENT '方案编码',
  `name` varchar(200) NOT NULL COMMENT '方案名称',
  `main_process_id` bigint DEFAULT NULL COMMENT '主工序编号',
  `main_process_name` varchar(200) DEFAULT NULL COMMENT '主工序名称',
  `alt_process_id` bigint DEFAULT NULL COMMENT '替代工序编号',
  `alt_process_name` varchar(200) DEFAULT NULL COMMENT '替代工序名称',
  `alt_condition` varchar(500) DEFAULT NULL COMMENT '替代条件(设备故障/负荷受限/人员不足)',
  `scope` varchar(500) DEFAULT NULL COMMENT '适用范围',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0草稿/10已发布)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='作业替代方案';
-- ---------- 6. ç”µåŠ›è¿ç»´æ—¥åŽ†è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pro_maintenance_calendar` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(50) NOT NULL COMMENT '日历编码',
  `name` varchar(200) NOT NULL COMMENT '日历名称',
  `work_date` date DEFAULT NULL COMMENT '作业日期',
  `shift` tinyint DEFAULT NULL COMMENT '班次(mes_cal_shift_type)',
  `work_type` tinyint DEFAULT NULL COMMENT '作业类型(mes_pro_calendar_work_type)',
  `region` varchar(200) DEFAULT NULL COMMENT '作业区域/线路',
  `team_id` bigint DEFAULT NULL COMMENT '值班班组编号',
  `team_name` varchar(200) DEFAULT NULL COMMENT '值班班组名称',
  `personnel` varchar(500) DEFAULT NULL COMMENT '值班人员',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0草稿/10已发布)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`),
  KEY `idx_work_date` (`work_date`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='电力运维日历';
-- ---------- 7. å”®åŽèµ”付/服务补偿单表 ----------
CREATE TABLE IF NOT EXISTS `after_sale_compensation` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `compensation_no` varchar(50) NOT NULL COMMENT '赔付单号',
  `compensation_type` tinyint NOT NULL COMMENT '赔付类型(1故障赔付/2服务补偿)',
  `ticket_id` bigint DEFAULT NULL COMMENT '关联售后工单编号',
  `customer_id` bigint DEFAULT NULL COMMENT '客户编号',
  `sale_order_id` bigint DEFAULT NULL COMMENT '关联销售订单编号',
  `amount` decimal(12,2) DEFAULT NULL COMMENT '赔付金额',
  `payee` varchar(100) DEFAULT NULL COMMENT '赔付对象',
  `reason` varchar(500) DEFAULT NULL COMMENT '赔付原因',
  `audit_status` tinyint NOT NULL DEFAULT '0' COMMENT '审批状态(0草稿/10审批中/20已通过/30已驳回/40已取消)',
  `process_instance_id` varchar(64) DEFAULT NULL COMMENT '审批流程实例编号',
  `audit_user_id` bigint DEFAULT NULL COMMENT '审核人',
  `audit_time` datetime DEFAULT NULL COMMENT '审核时间',
  `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注',
  `pay_status` tinyint DEFAULT NULL COMMENT '支付状态(账务联动预留)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_compensation_no` (`compensation_no`),
  KEY `idx_audit_status` (`audit_status`),
  KEY `idx_ticket_id` (`ticket_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='售后赔付/服务补偿单';
-- ============================================================
-- 8. å­—å…¸
-- ============================================================
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES
('考核周期类型', 'hrm_performance_period_type', 0, '考核周期类型', '1', NOW(), '1', NOW(), b'0', NULL),
('考核范围类型', 'hrm_performance_scope_type', 0, '考核范围类型', '1', NOW(), '1', NOW(), b'0', NULL),
('评分人类型', 'hrm_performance_scorer_type', 0, '评分人类型', '1', NOW(), '1', NOW(), b'0', NULL),
('考核档级', 'hrm_performance_grade', 0, '考核档级', '1', NOW(), '1', NOW(), b'0', NULL),
('电力运维作业类型', 'mes_pro_calendar_work_type', 0, '电力运维作业类型', '1', NOW(), '1', NOW(), b'0', NULL),
('赔付类型', 'after_sale_compensation_type', 0, '赔付类型', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '月度', '1', 'hrm_performance_period_type', 0, 'primary', '', '月度', '1', NOW(), '1', NOW(), b'0'),
(2, '季度', '2', 'hrm_performance_period_type', 0, 'info', '', '季度', '1', NOW(), '1', NOW(), b'0'),
(3, '年度', '3', 'hrm_performance_period_type', 0, 'warning', '', '年度', '1', NOW(), '1', NOW(), b'0'),
(1, '全部员工', '1', 'hrm_performance_scope_type', 0, 'primary', '', '全部员工', '1', NOW(), '1', NOW(), b'0'),
(2, '指定班组', '2', 'hrm_performance_scope_type', 0, 'info', '', '指定班组', '1', NOW(), '1', NOW(), b'0'),
(1, '自评', '1', 'hrm_performance_scorer_type', 0, 'primary', '', '自评', '1', NOW(), '1', NOW(), b'0'),
(2, '上级评', '2', 'hrm_performance_scorer_type', 0, 'warning', '', '上级评', '1', NOW(), '1', NOW(), b'0'),
(1, '优秀', '1', 'hrm_performance_grade', 0, 'success', '', '优秀(≥90)', '1', NOW(), '1', NOW(), b'0'),
(2, '良好', '2', 'hrm_performance_grade', 0, 'primary', '', '良好(≥80)', '1', NOW(), '1', NOW(), b'0'),
(3, '合格', '3', 'hrm_performance_grade', 0, 'info', '', '合格(≥60)', '1', NOW(), '1', NOW(), b'0'),
(4, '待改进', '4', 'hrm_performance_grade', 0, 'danger', '', '待改进(<60)', '1', NOW(), '1', NOW(), b'0'),
(1, '变电运维', '1', 'mes_pro_calendar_work_type', 0, 'primary', '', '变电运维', '1', NOW(), '1', NOW(), b'0'),
(2, '线路巡检', '2', 'mes_pro_calendar_work_type', 0, 'info', '', '线路巡检', '1', NOW(), '1', NOW(), b'0'),
(3, '发电运维', '3', 'mes_pro_calendar_work_type', 0, 'warning', '', '发电运维', '1', NOW(), '1', NOW(), b'0'),
(4, '储能充放电', '4', 'mes_pro_calendar_work_type', 0, 'danger', '', '储能充放电', '1', NOW(), '1', NOW(), b'0'),
(5, '电网调度', '5', 'mes_pro_calendar_work_type', 0, 'info', '', '电网调度', '1', NOW(), '1', NOW(), b'0'),
(1, '故障赔付', '1', 'after_sale_compensation_type', 0, 'danger', '', '故障赔付', '1', NOW(), '1', NOW(), b'0'),
(2, '服务补偿', '2', 'after_sale_compensation_type', 0, 'warning', '', '服务补偿', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- å·¥å•来源类型追加 4=负荷预测
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (4, '负荷预测', '4', 'mes_pro_work_order_source_type', 0, 'warning', '', '负荷预测', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ============================================================
-- 9. BPM å®¡æ‰¹åˆ†ç±»
-- è¯´æ˜Žï¼šä»…种入流程分类;具体 BPMN æµç¨‹éœ€åœ¨ã€ŒBPM ç®¡ç†åŽå° â†’ æµç¨‹æ¨¡åž‹ã€è®¾è®¡å¹¶å‘布,
--       æµç¨‹ key å¼•用分类 performance_appraise_approve / compensation_approve ä¸‹ä»»æ„å·²å‘布流程。
-- ============================================================
INSERT INTO `bpm_category` (`id`, `name`, `code`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (211, '绩效考核审批', 'performance_appraise_approve', 0, 211, '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `bpm_category` (`id`, `name`, `code`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (212, '赔付审批', 'compensation_approve', 0, 212, '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- ============================================================
-- 10. èœå•(绩效考核 / ä½œä¸šæ›¿ä»£æ–¹æ¡ˆ / ç”µåŠ›è¿ç»´æ—¥åŽ† / æ•…障赔付 / ç”Ÿæˆå·¥å•按钮)
-- ============================================================
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
-- 10.1 ç»©æ•ˆè€ƒæ ¸ï¼ˆçˆ¶ 6001 äººåŠ›èµ„æºï¼‰
(1065302, '绩效考核', '', 2, 1, 6001, 'performance-appraise', 'ep:data-analysis', 'hrm/performance-appraise/index', 'HrmPerformanceAppraise', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065303, '绩效考核查询', 'hrm:performance-appraise:query', 3, 1, 1065302, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065304, '绩效考核创建', 'hrm:performance-appraise:create', 3, 2, 1065302, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065305, '绩效考核更新', 'hrm:performance-appraise:update', 3, 3, 1065302, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065306, '绩效考核删除', 'hrm:performance-appraise:delete', 3, 4, 1065302, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065307, '绩效考核提交审批', 'hrm:performance-appraise:submit', 3, 5, 1065302, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065308, '绩效考核审批', 'hrm:performance-appraise:audit', 3, 6, 1065302, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
-- 10.2 ä½œä¸šæ›¿ä»£æ–¹æ¡ˆï¼ˆçˆ¶ 6809 å·¥è‰ºè®¾è®¡ï¼‰
(1065310, '作业替代方案', '', 2, 6, 6809, 'alternative-plan', 'ep:switch', 'mes/pro/alternativeplan/index', 'MesProAlternativePlan', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065311, '作业替代方案查询', 'mes:pro-alternative-plan:query', 3, 1, 1065310, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065312, '作业替代方案创建', 'mes:pro-alternative-plan:create', 3, 2, 1065310, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065313, '作业替代方案更新', 'mes:pro-alternative-plan:update', 3, 3, 1065310, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065314, '作业替代方案删除', 'mes:pro-alternative-plan:delete', 3, 4, 1065310, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
-- 10.3 ç”µåŠ›è¿ç»´æ—¥åŽ†ï¼ˆçˆ¶ 6809 å·¥è‰ºè®¾è®¡ï¼‰
(1065320, '电力运维日历', '', 2, 7, 6809, 'maintenance-calendar', 'ep:calendar', 'mes/pro/maintenancecalendar/index', 'MesProMaintenanceCalendar', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065321, '电力运维日历查询', 'mes:pro-maintenance-calendar:query', 3, 1, 1065320, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065322, '电力运维日历创建', 'mes:pro-maintenance-calendar:create', 3, 2, 1065320, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065323, '电力运维日历更新', 'mes:pro-maintenance-calendar:update', 3, 3, 1065320, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065324, '电力运维日历删除', 'mes:pro-maintenance-calendar:delete', 3, 4, 1065320, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
-- 10.4 æ•…障赔付/服务补偿单(父 602587 å”®åŽæœåŠ¡ï¼‰
(602650, '故障赔付', '', 2, 1, 602587, 'compensation', 'ep:money', 'aftersales/compensation/index', 'AfterSaleCompensation', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(602651, '故障赔付查询', 'aftersales:compensation:query', 3, 1, 602650, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(602652, '故障赔付创建', 'aftersales:compensation:create', 3, 2, 602650, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(602653, '故障赔付更新', 'aftersales:compensation:update', 3, 3, 602650, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(602654, '故障赔付删除', 'aftersales:compensation:delete', 3, 4, 602650, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(602655, '故障赔付提交审批', 'aftersales:compensation:submit', 3, 5, 602650, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(602656, '故障赔付审批', 'aftersales:compensation:audit', 3, 6, 602650, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
-- 10.5 ç”Ÿæˆå·¥å•按钮(父 1064002 è´Ÿè·é¢„测,type 3)
(1064006, '生成工单', 'bi:decision-forecast:generate-work-order', 3, 1, 1064002, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065302 AS menu_id UNION ALL SELECT 1065303 UNION ALL SELECT 1065304 UNION ALL SELECT 1065305 UNION ALL SELECT 1065306 UNION ALL SELECT 1065307 UNION ALL SELECT 1065308
            UNION ALL SELECT 1065310 UNION ALL SELECT 1065311 UNION ALL SELECT 1065312 UNION ALL SELECT 1065313 UNION ALL SELECT 1065314
            UNION ALL SELECT 1065320 UNION ALL SELECT 1065321 UNION ALL SELECT 1065322 UNION ALL SELECT 1065323 UNION ALL SELECT 1065324
            UNION ALL SELECT 602650 UNION ALL SELECT 602651 UNION ALL SELECT 602652 UNION ALL SELECT 602653 UNION ALL SELECT 602654 UNION ALL SELECT 602655 UNION ALL SELECT 602656
            UNION ALL SELECT 1064006) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
-- ==================== æ‰§è¡Œå®Œæˆæç¤º ====================
SELECT '电力数转第十四阶段(xlsx å¤æ ¸ç¼ºå£è¡¥é½ï¼‰SQL æ‰§è¡Œå®Œæˆï¼' AS result;
sql/mysql/power_enhancement_phase15_workhour_parameter_check.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬ç¬¬åäº”é˜¶æ®µï¼šå·¥æ—¶ç»Ÿè®¡ï¼ˆHRM)+ ä¾›ç”µå‚数比对校验(MES)
-- ä¾æ® éœ€æ±‚文档.xlsx äººåŠ›èµ„æº2「工时统计」、质量管理5「供电参数比对校验」
-- å¹‚等:CREATE TABLE IF NOT EXISTS / ON DUPLICATE KEY UPDATE / LEFT JOIN å®ˆå«
-- ============================================================
-- 1. èœå•
-- 1.1 å·¥æ—¶ç»Ÿè®¡ï¼ˆçˆ¶ 6001 äººåŠ›èµ„æºï¼‰
-- 1.2 å‚数比对校验(父 5300 è®¾å¤‡ç®¡ç†ï¼ŒæŽ¥å£å¤ç”¨ mes:dv-telemetry:query,无需新增按钮)
-- ============================================================
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065330, '工时统计', '', 2, 2, 6001, 'work-hour-statistics', 'ep:clock', 'hrm/workhour/index', 'HrmWorkHourStatistics', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065331, '工时统计查询', 'hrm:work-hour-statistics:query', 3, 1, 1065330, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065340, '参数比对校验', '', 2, 3, 5300, 'parameter-check', 'ep:data-analysis', 'mes/dv/telemetry/check', 'MesDvTelemetryCheck', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- 2. è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
-- ============================================================
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065330 AS menu_id UNION ALL SELECT 1065331 UNION ALL SELECT 1065340) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
-- ==================== æ‰§è¡Œå®Œæˆæç¤º ====================
SELECT '电力数转第十五阶段(工时统计 + å‚数比对校验)SQL æ‰§è¡Œå®Œæˆï¼' AS result;
sql/mysql/power_enhancement_phase16_bpm_approval_deploy.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬ç¬¬åå…­é˜¶æ®µï¼šBPM å®¡æ‰¹æµç¨‹å®šä¹‰éƒ¨ç½²ï¼ˆç›´æ’ Flowable + yudao æµç¨‹å®šä¹‰ä¿¡æ¯ï¼‰
-- è¦†ç›– 4 ä¸ªå·²å»ºåŠŸèƒ½ä½†ç¼ºæµç¨‹å®šä¹‰çš„å®¡æ‰¹ï¼š
--   refund_approve(209 é€€è´¹) / cancellation_approve(210 é”€æˆ·)
--   performance_appraise_approve(211 ç»©æ•ˆ) / compensation_approve(212 èµ”付)
-- æ¨¡æ¿ = purchase_request_approve:3(有 3 ä¸ªè¿è¡Œå®žä¾‹ï¼Œè¢«å®žé™…跑通):
--   å‘起人节点(提交)→ å®¡æ‰¹äººèŠ‚ç‚¹ï¼ˆUSER ç­–略,审批人=超级管理员 id=1)→ ç»“束
-- æ³¨æ„ï¼šç›´æ’后需【重启后端】Flowable å¼•擎才会加载这些流程定义
-- ============================================================
-- 1. act_re_deployment(部署记录)
INSERT INTO `act_re_deployment` (`ID_`, `NAME_`, `CATEGORY_`, `TENANT_ID_`, `DEPLOY_TIME_`) VALUES
('refund-deploy-20260820', 'refund_approve.bpmn', 'refund_approve', '', NOW(3)),
('cancellation-deploy-20260820', 'cancellation_approve.bpmn', 'cancellation_approve', '', NOW(3)),
('performance-deploy-20260820', 'performance_appraise_approve.bpmn', 'performance_appraise_approve', '', NOW(3)),
('compensation-deploy-20260820', 'compensation_approve.bpmn', 'compensation_approve', '', NOW(3));
-- 2. act_ge_bytearray(BPMN æ–‡ä»¶å†…容,refund å®Œæ•´å†…联,其余由它派生)
INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`) VALUES
('refund-byte-20260820', 1, 'refund_approve.bpmn', 'refund-deploy-20260820', '<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.omg.org/spec/BPMN/20100524/MODEL">
  <process id="refund_approve" name="退费审批" isExecutable="true">
    <startEvent id="StartEvent" name="开始"></startEvent>
    <userTask id="StartUserNode" name="发起人">
      <extensionElements>
        <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType>
        <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[36]]></flowable:candidateStrategy>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="提交" enable="true" id="1"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="拒绝" enable="false" id="2"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转办" enable="false" id="3"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="委派" enable="false" id="4"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="加签" enable="false" id="5"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="退回" enable="false" id="6"></flowable:buttonsSetting>
        <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[2]]></flowable:assignStartUserHandlerType>
      </extensionElements>
    </userTask>
    <userTask id="Activity_refund_approve" name="退费审批">
      <extensionElements>
        <flowable:approveType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:approveType>
        <flowable:candidateStrategy xmlns:flowable="http://flowable.org/bpmn"><![CDATA[30]]></flowable:candidateStrategy>
        <flowable:candidateParam xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:candidateParam>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="通过" enable="true" id="1"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="拒绝" enable="true" id="2"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="转办" enable="true" id="3"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="委派" enable="true" id="4"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="加签" enable="true" id="5"></flowable:buttonsSetting>
        <flowable:buttonsSetting xmlns:flowable="http://flowable.org/bpmn" displayName="退回" enable="true" id="6"></flowable:buttonsSetting>
        <flowable:approveMethod xmlns:flowable="http://flowable.org/bpmn"><![CDATA[4]]></flowable:approveMethod>
        <flowable:rejectHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:rejectHandlerType>
        <flowable:assignStartUserHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignStartUserHandlerType>
        <flowable:assignEmptyHandlerType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[1]]></flowable:assignEmptyHandlerType>
        <flowable:signEnable xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:signEnable>
        <flowable:reasonRequire xmlns:flowable="http://flowable.org/bpmn"><![CDATA[false]]></flowable:reasonRequire>
        <flowable:nodeType xmlns:flowable="http://flowable.org/bpmn"><![CDATA[11]]></flowable:nodeType>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="true" flowable:collection="${coll_userList}">
        <loopCardinality>1</loopCardinality>
        <completionCondition>${ nrOfCompletedInstances &gt;= nrOfInstances }</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>
    <endEvent id="EndEvent" name="结束"></endEvent>
    <sequenceFlow id="sf1" sourceRef="StartEvent" targetRef="StartUserNode"></sequenceFlow>
    <sequenceFlow id="sf2" sourceRef="StartUserNode" targetRef="Activity_refund_approve"></sequenceFlow>
    <sequenceFlow id="sf3" sourceRef="Activity_refund_approve" targetRef="EndEvent"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_refund_approve">
    <bpmndi:BPMNPlane bpmnElement="refund_approve" id="BPMNPlane_refund_approve">
      <bpmndi:BPMNShape bpmnElement="StartUserNode" id="BPMNShape_StartUserNode"><omgdc:Bounds height="60.0" width="100.0" x="80.0" y="0.0"></omgdc:Bounds></bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="Activity_refund_approve" id="BPMNShape_Activity_refund_approve"><omgdc:Bounds height="60.0" width="100.0" x="230.0" y="0.0"></omgdc:Bounds></bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="StartEvent" id="BPMNShape_StartEvent"><omgdc:Bounds height="30.0" width="30.0" x="0.0" y="15.0"></omgdc:Bounds></bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="EndEvent" id="BPMNShape_EndEvent"><omgdc:Bounds height="30.0" width="30.0" x="380.0" y="15.0"></omgdc:Bounds></bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sf1" id="BPMNEdge_sf1"><omgdi:waypoint x="30.0" y="30.0"></omgdi:waypoint><omgdi:waypoint x="80.0" y="30.0"></omgdi:waypoint></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sf2" id="BPMNEdge_sf2"><omgdi:waypoint x="180.0" y="30.0"></omgdi:waypoint><omgdi:waypoint x="230.0" y="30.0"></omgdi:waypoint></bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sf3" id="BPMNEdge_sf3"><omgdi:waypoint x="330.0" y="30.0"></omgdi:waypoint><omgdi:waypoint x="380.0" y="30.0"></omgdi:waypoint></bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>', 0);
-- å…¶ä½™ 3 ä¸ªæµç¨‹ BPMN ç”± refund_approve æ´¾ç”Ÿï¼ˆä»…替换 process id/name)
INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`)
SELECT 'cancellation-byte-20260820', 1, 'cancellation_approve.bpmn', 'cancellation-deploy-20260820',
       REPLACE(REPLACE(BYTES_, 'refund_approve', 'cancellation_approve'), '退费审批', '销户审批'), 0
FROM act_ge_bytearray WHERE ID_ = 'refund-byte-20260820';
INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`)
SELECT 'performance-byte-20260820', 1, 'performance_appraise_approve.bpmn', 'performance-deploy-20260820',
       REPLACE(REPLACE(BYTES_, 'refund_approve', 'performance_appraise_approve'), '退费审批', '绩效考核审批'), 0
FROM act_ge_bytearray WHERE ID_ = 'refund-byte-20260820';
INSERT INTO `act_ge_bytearray` (`ID_`, `REV_`, `NAME_`, `DEPLOYMENT_ID_`, `BYTES_`, `GENERATED_`)
SELECT 'compensation-byte-20260820', 1, 'compensation_approve.bpmn', 'compensation-deploy-20260820',
       REPLACE(REPLACE(BYTES_, 'refund_approve', 'compensation_approve'), '退费审批', '赔付审批'), 0
FROM act_ge_bytearray WHERE ID_ = 'refund-byte-20260820';
-- 3. act_re_procdef(流程定义,SUSPENSION_STATE_=1 æ¿€æ´»ï¼‰
INSERT INTO `act_re_procdef` (`ID_`, `REV_`, `CATEGORY_`, `NAME_`, `KEY_`, `VERSION_`, `DEPLOYMENT_ID_`, `RESOURCE_NAME_`, `DGRM_RESOURCE_NAME_`, `HAS_START_FORM_KEY_`, `SUSPENSION_STATE_`, `TENANT_ID_`, `DERIVED_VERSION_`) VALUES
('refund_approve:1:refund-proc-20260820', 1, 'refund_approve', '退费审批', 'refund_approve', 1, 'refund-deploy-20260820', 'refund_approve.bpmn', NULL, 0, 1, '', 0),
('cancellation_approve:1:cancellation-proc-20260820', 1, 'cancellation_approve', '销户审批', 'cancellation_approve', 1, 'cancellation-deploy-20260820', 'cancellation_approve.bpmn', NULL, 0, 1, '', 0),
('performance_appraise_approve:1:performance-proc-20260820', 1, 'performance_appraise_approve', '绩效考核审批', 'performance_appraise_approve', 1, 'performance-deploy-20260820', 'performance_appraise_approve.bpmn', NULL, 0, 1, '', 0),
('compensation_approve:1:compensation-proc-20260820', 1, 'compensation_approve', '赔付审批', 'compensation_approve', 1, 'compensation-deploy-20260820', 'compensation_approve.bpmn', NULL, 0, 1, '', 0);
-- 4. bpm_process_definition_info(yudao ä¾§æµç¨‹å®šä¹‰ä¿¡æ¯ï¼šå¯è§ + åˆ†ç±» + é»˜è®¤è¡¨å•)
INSERT INTO `bpm_process_definition_info` (`id`, `process_definition_id`, `model_id`, `model_type`, `category`, `icon`, `description`, `form_type`, `form_id`, `form_conf`, `form_fields`, `form_custom_create_path`, `form_custom_view_path`, `simple_model`, `visible`, `sort`, `start_user_ids`, `start_dept_ids`, `manager_user_ids`, `allow_cancel_running_process`, `allow_withdraw_task`, `process_id_rule`, `auto_approval_type`, `title_setting`, `summary_setting`, `process_before_trigger_setting`, `process_after_trigger_setting`, `task_before_trigger_setting`, `task_after_trigger_setting`, `print_template_setting`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(21, 'refund_approve:1:refund-proc-20260820', 'refund-model-20260820', 20, 'refund_approve', NULL, '', 10, 1, NULL, NULL, '', '', NULL, 1, 1781000000000, '', '', '', 1, 0, '{"infix":"","enable":false,"length":5,"prefix":"","postfix":""}', 0, '{"title":"","enable":false}', '{"enable":false,"summary":[]}', NULL, NULL, NULL, NULL, '{"enable":false,"template":""}', '1', NOW(), '1', NOW(), 0),
(22, 'cancellation_approve:1:cancellation-proc-20260820', 'cancellation-model-20260820', 20, 'cancellation_approve', NULL, '', 10, 1, NULL, NULL, '', '', NULL, 1, 1782000000000, '', '', '', 1, 0, '{"infix":"","enable":false,"length":5,"prefix":"","postfix":""}', 0, '{"title":"","enable":false}', '{"enable":false,"summary":[]}', NULL, NULL, NULL, NULL, '{"enable":false,"template":""}', '1', NOW(), '1', NOW(), 0),
(23, 'performance_appraise_approve:1:performance-proc-20260820', 'performance-model-20260820', 20, 'performance_appraise_approve', NULL, '', 10, 1, NULL, NULL, '', '', NULL, 1, 1783000000000, '', '', '', 1, 0, '{"infix":"","enable":false,"length":5,"prefix":"","postfix":""}', 0, '{"title":"","enable":false}', '{"enable":false,"summary":[]}', NULL, NULL, NULL, NULL, '{"enable":false,"template":""}', '1', NOW(), '1', NOW(), 0),
(24, 'compensation_approve:1:compensation-proc-20260820', 'compensation-model-20260820', 20, 'compensation_approve', NULL, '', 10, 1, NULL, NULL, '', '', NULL, 1, 1784000000000, '', '', '', 1, 0, '{"infix":"","enable":false,"length":5,"prefix":"","postfix":""}', 0, '{"title":"","enable":false}', '{"enable":false,"summary":[]}', NULL, NULL, NULL, NULL, '{"enable":false,"template":""}', '1', NOW(), '1', NOW(), 0);
-- ==================== æ‰§è¡Œå®Œæˆæç¤º ====================
SELECT '电力数转第十六阶段(4 ä¸ª BPM å®¡æ‰¹æµç¨‹éƒ¨ç½²ï¼‰SQL æ‰§è¡Œå®Œæˆï¼è¯·é‡å¯åŽç«¯åŠ è½½æµç¨‹å®šä¹‰ã€‚' AS result;
sql/mysql/power_enhancement_phase17_menu_cleanup.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
-- =====================================================================
-- é˜¶æ®µ 17:对照 éœ€æ±‚文档.xlsx æŠ€æœ¯æ–‡ä»¶ sheet(12 æ¨¡å—)清理菜单
-- éšè—ã€Œæ–‡æ¡£é‡Œæ²¡æœ‰çš„」通用页面(visible=0,可逆,不删除数据)
-- =====================================================================
-- è¥é”€ç®¡ç†ï¼šå¾…办事项(xlsx è¥é”€æ— ï¼‰
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id = 2701;
-- è¥é”€ç®¡ç†ï¼šé”€å”®ç›®æ ‡ï¼ˆç›®å½•)+ é”€å”®è®¡åˆ’ / è¾¾æˆåˆ†æž
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id IN (1065210, 1065000, 1065100);
-- è¥é”€ç®¡ç†ï¼šæ•°æ®ç»Ÿè®¡ï¼ˆç›®å½•)+ å®¢æˆ·åˆ†æž / æŽ’行榜 / å‘˜å·¥ä¸šç»© / å®¢æˆ·ç”»åƒ / é”€å”®æ¼æ–—
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id IN (2560, 2712, 2561, 2736, 2737, 2738);
-- è¥é”€ç®¡ç†ï¼šç³»ç»Ÿé…ç½®ï¼ˆç›®å½•)+ å®¢æˆ·å…¬æµ·é…ç½® / å®¢æˆ·é™åˆ¶é…ç½® / å•†æœºçŠ¶æ€é…ç½® / åˆåŒé…ç½®
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id IN (2524, 2516, 2518, 2703, 2708);
-- å†³ç­–支持:旧通用大屏 5 å±ï¼ˆå·²è¢«ç”µåŠ›KPI看板 1064000 æ›¿ä»£ï¼‰
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id IN (1063001, 1063002, 1063003, 1063004, 1063005);
-- ç”Ÿäº§ç®¡æŽ§ï¼šå·¥å…·ç®¡ç†ï¼ˆç›®å½•)+ å·¥å…·ç±»åž‹è®¾ç½® / å·¥è£…夹具台账(xlsx 12 æ¨¡å—无)
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id IN (5400, 5410, 5420);
-- ç”Ÿäº§ç®¡æŽ§ï¼šå·¥ä½œè®°å½•(与生产报工重叠)
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id = 5981;
-- é‡‡è´­ç®¡ç†ï¼šä»˜æ¬¾ï¼ˆè´¢åŠ¡ç®¡ç†å·²ç§»å‡ºèŒƒå›´ï¼‰
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id = 1063116;
-- äº§å“è®¾è®¡ï¼šè®¾è®¡é¡¹ç›®ï¼ˆå·¥è‰ºé¡¹ç›®ï¼Œå±žå·²ç§»é™¤çš„协同办公语境,xlsx 12 æ¨¡å—无)
UPDATE system_menu SET visible = 0, update_time = NOW()
 WHERE id = 602572;
sql/mysql/power_enhancement_phase1_production_control.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬ä¸€é˜¶æ®µï¼ˆç”Ÿäº§ç®¡æŽ§ï¼‰æ•°æ®åº“变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šå­—段变更使用"先检查再 ALTER"模式,可重复执行(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. ç”Ÿäº§å·¥å•表:关联营销订单 ----------
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_pro_work_order' AND column_name = 'sale_order_id');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_pro_work_order ADD COLUMN sale_order_id BIGINT NULL COMMENT ''关联营销订单(ERP销售订单)编号'' AFTER client_id',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_pro_work_order' AND column_name = 'sale_order_no');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_pro_work_order ADD COLUMN sale_order_no VARCHAR(64) NULL COMMENT ''关联营销订单(ERP销售订单)单号'' AFTER sale_order_id',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------- 2. ç”Ÿäº§é¢†æ–™å•表:单据类型(1=正常领料,2=紧急补料) ----------
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_wm_product_issue' AND column_name = 'issue_type');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_wm_product_issue ADD COLUMN issue_type INT NULL COMMENT ''单据类型(1=正常领料,2=紧急补料)'' AFTER task_id',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------- 3. ç”Ÿäº§ä»»åŠ¡è¡¨ï¼šç­ç»„æ´¾å·¥ ----------
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_pro_task' AND column_name = 'team_id');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_pro_task ADD COLUMN team_id BIGINT NULL COMMENT ''班组编号'' AFTER process_id',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_pro_task' AND column_name = 'team_name');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_pro_task ADD COLUMN team_name VARCHAR(64) NULL COMMENT ''班组名称'' AFTER team_id',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ============================================================
-- 4. æ•°æ®å­—å…¸
-- ============================================================
-- 4.1 å·¥å•来源类型:新增 è¿ç»´è®¡åˆ’(3)
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (3, '运维计划', '3', 'mes_pro_work_order_source_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- 4.2 å·¥å•类型:新增 ç”µåŠ›è¿ç»´(4)/发电(5)/检修(6)
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (4, '电力运维', '4', 'mes_pro_work_order_type', 0, 'primary', '', '', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (5, '发电', '5', 'mes_pro_work_order_type', 0, 'warning', '', '', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (6, '检修', '6', 'mes_pro_work_order_type', 0, 'info', '', '', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- 4.3 æ–°å¢žå­—典类型:MES ç”Ÿäº§é¢†æ–™å•据类型
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES ('MES ç”Ÿäº§é¢†æ–™å•据类型', 'mes_wm_product_issue_type', 0, 'MES ç”Ÿäº§é¢†æ–™å•据类型(1=正常领料,2=紧急补料)', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- 4.4 é¢†æ–™å•据类型:1=正常领料,2=紧急补料
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, '正常领料', '1', 'mes_wm_product_issue_type', 0, 'primary', '', '正常生产领料', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (2, '紧急补料', '2', 'mes_wm_product_issue_type', 0, 'warning', '', '生产现场紧急补料', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
sql/mysql/power_enhancement_phase2_purchase_plan.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬äºŒé˜¶æ®µï¼ˆé‡‡è´­ç®¡ç†ï¼‰æ•°æ®åº“变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šé‡‡è´­è®¡åˆ’模块新表(幂等:已存在则跳过)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. ERP é‡‡è´­è®¡åˆ’主表 ----------
CREATE TABLE IF NOT EXISTS `erp_purchase_plan` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购计划单号',
  `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '计划名称',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0:未提交 10:审批中 20:审核通过 30:审核不通过 40:已取消)',
  `demand_source` tinyint DEFAULT NULL COMMENT '需求来源(1:库存预警 2:运维/生产计划)',
  `plan_date` datetime DEFAULT NULL COMMENT '计划日期',
  `plan_user_id` bigint DEFAULT NULL COMMENT '编制人编号',
  `plan_dept_id` bigint DEFAULT NULL COMMENT '编制部门编号',
  `supplier_id` bigint DEFAULT NULL COMMENT '供应商编号(可选)',
  `total_count` decimal(24,6) NOT NULL DEFAULT '0.000000' COMMENT '合计数量',
  `generated_flag` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已生成采购申请',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
  `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'BPM æµç¨‹å®žä¾‹ç¼–号',
  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_no` (`no`) USING BTREE,
  KEY `idx_status` (`status`) USING BTREE,
  KEY `idx_demand_source` (`demand_source`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ERP é‡‡è´­è®¡åˆ’表';
-- ---------- 2. ERP é‡‡è´­è®¡åˆ’明细表 ----------
CREATE TABLE IF NOT EXISTS `erp_purchase_plan_items` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `plan_id` bigint NOT NULL COMMENT '采购计划编号',
  `product_id` bigint NOT NULL COMMENT '产品编号',
  `product_unit_id` bigint DEFAULT NULL COMMENT '产品单位编号',
  `count` decimal(24,6) NOT NULL COMMENT '计划采购数量',
  `demand_time` datetime DEFAULT NULL COMMENT '需求日期',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_plan_id` (`plan_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ERP é‡‡è´­è®¡åˆ’明细表';
-- ============================================================
-- 3. æ•°æ®å­—典:采购计划需求来源
-- ============================================================
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES ('ERP é‡‡è´­è®¡åˆ’需求来源', 'erp_purchase_plan_demand_source', 0, 'ERP é‡‡è´­è®¡åˆ’需求来源(1=库存预警,2=运维/生产计划)', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '库存预警', '1', 'erp_purchase_plan_demand_source', 0, 'warning', '', '安全库存缺量自动生成', '1', NOW(), '1', NOW(), b'0'),
(2, '运维/生产计划', '2', 'erp_purchase_plan_demand_source', 0, 'primary', '', '运维/生产计划人工编制', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ============================================================
-- 4. BPM å®¡æ‰¹åˆ†ç±»ï¼šé‡‡è´­è®¡åˆ’审核
-- ============================================================
INSERT INTO `bpm_category` (`id`, `name`, `code`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (208, '采购计划审核', 'purchase_plan_approve', 0, 208, '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- ============================================================
-- 5. èœå•:采购计划页面 + æŒ‰é’®æƒé™ï¼ˆçˆ¶èœå• id=2602 é‡‡è´­ç®¡ç†ï¼‰
-- ============================================================
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1065212, '采购计划', '', 2, 1, 2602, 'purchase-plan', 'ep:list', 'erp/purchase/plan/index', 'ErpPurchasePlan', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065213, '采购计划查询', 'erp:purchase-plan:query', 3, 1, 1065212, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065214, '采购计划创建', 'erp:purchase-plan:create', 3, 2, 1065212, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065215, '采购计划更新', 'erp:purchase-plan:update', 3, 3, 1065212, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065216, '采购计划删除', 'erp:purchase-plan:delete', 3, 4, 1065212, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065217, '采购计划导出', 'erp:purchase-plan:export', 3, 5, 1065212, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065218, '采购计划提交审批', 'erp:purchase-plan:submit', 3, 6, 1065212, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065219, '采购计划生成申请', 'erp:purchase-plan:generate-request', 3, 7, 1065212, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
sql/mysql/power_enhancement_phase3_warehouse.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬ä¸‰é˜¶æ®µï¼ˆä»“储物流)数据库变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šä»“库/库区类型 + åºŸæ—§ç‰©èµ„/设备出入库类型(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. ä»“库/库区类型列 ----------
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_wm_warehouse' AND column_name = 'type');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_wm_warehouse ADD COLUMN type INT NULL COMMENT ''仓库类型(字典 mes_wm_warehouse_type)'' AFTER name',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_wm_warehouse_area' AND column_name = 'type');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_wm_warehouse_area ADD COLUMN type INT NULL COMMENT ''库区类型(字典 mes_wm_warehouse_type)'' AFTER name',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------- 2. å­—典:仓库/库区类型 ----------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES ('MES ä»“库/库区类型', 'mes_wm_warehouse_type', 0, 'MES ä»“库/库区类型(1=普通仓库,2=设备仓,3=备件仓,4=耗材仓,5=危化品仓)', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '普通仓库', '1', 'mes_wm_warehouse_type', 0, 'default', '', '通用物资仓库', '1', NOW(), '1', NOW(), b'0'),
(2, '设备仓', '2', 'mes_wm_warehouse_type', 0, 'primary', '', '电力设备仓储', '1', NOW(), '1', NOW(), b'0'),
(3, '备件仓', '3', 'mes_wm_warehouse_type', 0, 'warning', '', '备品备件仓储', '1', NOW(), '1', NOW(), b'0'),
(4, '耗材仓', '4', 'mes_wm_warehouse_type', 0, 'info', '', '日常耗材仓储', '1', NOW(), '1', NOW(), b'0'),
(5, '危化品仓', '5', 'mes_wm_warehouse_type', 0, 'danger', '', '危险化学品专用仓储', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ---------- 3. å­—典:废旧物资/设备出入库类型 ----------
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(3, '废旧物资出库', '3', 'mes_wm_misc_issue_type', 0, 'warning', '', '废旧物资出库', '1', NOW(), '1', NOW(), b'0'),
(4, '设备出库', '4', 'mes_wm_misc_issue_type', 0, 'primary', '', '电力设备出库', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(2, '设备入库', '2', 'mes_wm_misc_receipt_type', 0, 'primary', '', '电力设备入库', '1', NOW(), '1', NOW(), b'0'),
(3, '废旧物资入库', '3', 'mes_wm_misc_receipt_type', 0, 'warning', '', '废旧物资入库', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
sql/mysql/power_enhancement_phase4_planning.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬å››é˜¶æ®µï¼ˆè®¡åˆ’排程:电力作业计划)数据库变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šç”µåŠ›ä½œä¸šè®¡åˆ’æ–°è¡¨ + è®¡åˆ’类型/状态字典(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. ç”µåŠ›ä½œä¸šè®¡åˆ’ä¸»è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pro_maintenance_plan` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(64) NOT NULL COMMENT '计划编码',
  `name` varchar(200) DEFAULT NULL COMMENT '计划名称',
  `plan_type` tinyint DEFAULT NULL COMMENT '计划类型(1=电网运行,2=发电,3=变电运维,4=线路检修)',
  `station` varchar(200) DEFAULT NULL COMMENT '站点',
  `line` varchar(200) DEFAULT NULL COMMENT '线路',
  `team_id` bigint DEFAULT NULL COMMENT '班组编号',
  `team_name` varchar(64) DEFAULT NULL COMMENT '班组名称',
  `plan_date` datetime DEFAULT NULL COMMENT '计划日期',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0=草稿,10=已下发,20=已完成,30=已取消)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`),
  KEY `idx_plan_type` (`plan_type`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES ç”µåŠ›ä½œä¸šè®¡åˆ’è¡¨';
-- ---------- 2. ç”µåŠ›ä½œä¸šè®¡åˆ’å¤‡ä»¶éœ€æ±‚æ˜Žç»†è¡¨ ----------
CREATE TABLE IF NOT EXISTS `mes_pro_maintenance_plan_item` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `plan_id` bigint NOT NULL COMMENT '电力作业计划编号',
  `item_id` bigint NOT NULL COMMENT '物料/备件编号',
  `quantity` decimal(24,6) NOT NULL COMMENT '需求数量',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_plan_id` (`plan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES ç”µåŠ›ä½œä¸šè®¡åˆ’å¤‡ä»¶éœ€æ±‚æ˜Žç»†è¡¨';
-- ---------- 3. å­—典:电力作业计划类型 / çŠ¶æ€ ----------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES
('MES ç”µåŠ›ä½œä¸šè®¡åˆ’ç±»åž‹', 'mes_pro_maintenance_plan_type', 0, 'MES ç”µåŠ›ä½œä¸šè®¡åˆ’ç±»åž‹ï¼ˆ1=电网运行,2=发电,3=变电运维,4=线路检修)', '1', NOW(), '1', NOW(), b'0', NULL),
('MES ç”µåŠ›ä½œä¸šè®¡åˆ’çŠ¶æ€', 'mes_pro_maintenance_plan_status', 0, 'MES ç”µåŠ›ä½œä¸šè®¡åˆ’çŠ¶æ€ï¼ˆ0=草稿,10=已下发,20=已完成,30=已取消)', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '电网运行', '1', 'mes_pro_maintenance_plan_type', 0, 'primary', '', '电网运行计划', '1', NOW(), '1', NOW(), b'0'),
(2, '发电', '2', 'mes_pro_maintenance_plan_type', 0, 'success', '', '发电计划', '1', NOW(), '1', NOW(), b'0'),
(3, '变电运维', '3', 'mes_pro_maintenance_plan_type', 0, 'warning', '', '变电运维计划', '1', NOW(), '1', NOW(), b'0'),
(4, '线路检修', '4', 'mes_pro_maintenance_plan_type', 0, 'info', '', '线路检修计划', '1', NOW(), '1', NOW(), b'0'),
(0, '草稿', '0', 'mes_pro_maintenance_plan_status', 0, 'default', '', '草稿', '1', NOW(), '1', NOW(), b'0'),
(1, '已下发', '10', 'mes_pro_maintenance_plan_status', 0, 'processing', '', '已下发执行', '1', NOW(), '1', NOW(), b'0'),
(2, '已完成', '20', 'mes_pro_maintenance_plan_status', 0, 'success', '', '已完成', '1', NOW(), '1', NOW(), b'0'),
(3, '已取消', '30', 'mes_pro_maintenance_plan_status', 0, 'warning', '', '已取消', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ---------- 4. èœå•:电力作业计划 + æŒ‰é’®æƒé™ï¼ˆçˆ¶èœå• 5700 ç”Ÿäº§ç®¡ç†ï¼‰ ----------
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1065220, '电力作业计划', '', 2, 3, 5700, 'maintenance-plan', 'ep:calendar', 'mes/pro/maintenance-plan/index', 'MesProMaintenancePlan', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065221, '电力作业计划查询', 'mes:pro-maintenance-plan:query', 3, 1, 1065220, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065222, '电力作业计划创建', 'mes:pro-maintenance-plan:create', 3, 2, 1065220, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065223, '电力作业计划更新', 'mes:pro-maintenance-plan:update', 3, 3, 1065220, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065224, '电力作业计划删除', 'mes:pro-maintenance-plan:delete', 3, 4, 1065220, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065225, '电力作业计划导出', 'mes:pro-maintenance-plan:export', 3, 5, 1065220, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065226, '电力作业计划生成采购计划', 'mes:pro-maintenance-plan:generate-purchase-plan', 3, 6, 1065220, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- ---------- 5. è®¡åˆ’表:生成的工单引用 + ç”Ÿæˆå·¥å•按钮权限 ----------
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_pro_maintenance_plan' AND column_name = 'work_order_id');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_pro_maintenance_plan ADD COLUMN work_order_id BIGINT NULL COMMENT ''生成的工单编号'' AFTER status',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_pro_maintenance_plan' AND column_name = 'work_order_code');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_pro_maintenance_plan ADD COLUMN work_order_code VARCHAR(64) NULL COMMENT ''生成的工单编码'' AFTER work_order_id',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1065227, '电力作业计划生成工单', 'mes:pro-maintenance-plan:generate-work-order', 3, 7, 1065220, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)全部新增菜单
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065211 AS menu_id UNION ALL SELECT 1065212 UNION ALL SELECT 1065213 UNION ALL SELECT 1065214 UNION ALL SELECT 1065215 UNION ALL SELECT 1065216 UNION ALL SELECT 1065217 UNION ALL SELECT 1065218 UNION ALL SELECT 1065219 UNION ALL SELECT 1065220 UNION ALL SELECT 1065221 UNION ALL SELECT 1065222 UNION ALL SELECT 1065223 UNION ALL SELECT 1065224 UNION ALL SELECT 1065225 UNION ALL SELECT 1065226 UNION ALL SELECT 1065227) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
sql/mysql/power_enhancement_phase5_equipment.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬äº”阶段(设备管理)数据库变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šç”µåŠ›èµ„äº§ç±»åž‹æ ‘ + é¢„防性试验/大修技改方案类型 + è®¾å¤‡ç»Ÿè®¡èœå•(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. ç”µåŠ›èµ„äº§ç±»åž‹æ ‘ï¼ˆmes_dv_machinery_type) ----------
INSERT INTO `mes_dv_machinery_type` (`id`, `parent_id`, `code`, `name`, `status`, `sort`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(100, 0, 'ELEC_EQUIP', '电力设备', 0, 100, '电力行业设备分类', '1', NOW(), '1', NOW(), b'0'),
(101, 100, 'ELEC_TRANSFORMER', '变压器', 0, 1, '', '1', NOW(), '1', NOW(), b'0'),
(102, 100, 'ELEC_SWITCHGEAR', '开关柜', 0, 2, '', '1', NOW(), '1', NOW(), b'0'),
(103, 100, 'ELEC_LINE', '输电线路', 0, 3, '', '1', NOW(), '1', NOW(), b'0'),
(104, 100, 'ELEC_GENERATOR', '发电机组', 0, 4, '', '1', NOW(), '1', NOW(), b'0'),
(105, 100, 'ELEC_STORAGE', '储能设备', 0, 5, '', '1', NOW(), '1', NOW(), b'0'),
(106, 100, 'ELEC_INSPECT', '巡检设备', 0, 6, '', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- ---------- 2. æ–¹æ¡ˆç±»åž‹ï¼šé¢„防性试验 / å¤§ä¿®æŠ€æ”¹ ----------
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(3, '预防性试验', '3', 'mes_dv_subject_type', 0, 'warning', '', '电力设备预防性试验', '1', NOW(), '1', NOW(), b'0'),
(4, '大修技改', '4', 'mes_dv_subject_type', 0, 'danger', '', '设备大修技改', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ---------- 3. èœå•:设备统计(父菜单 5300 è®¾å¤‡ç®¡ç†ï¼‰ ----------
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065228, '设备统计', '', 2, 99, 5300, 'dv/statistics', 'ep:data-analysis', 'mes/dv/statistics/summary', 'MesDvStatistics', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065229, '设备统计查询', 'mes:dv-machinery:query', 3, 1, 1065228, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065228 AS menu_id UNION ALL SELECT 1065229) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
sql/mysql/power_enhancement_phase6_quality.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬å…­é˜¶æ®µï¼ˆè´¨é‡ç®¡ç†ï¼šå§”外检测/试验)数据库变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šå§”外检测/试验单新表 + ç±»åž‹/结果字典 + èœå•(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. å§”外检测/试验单表 ----------
CREATE TABLE IF NOT EXISTS `mes_qc_outsource_test` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(64) NOT NULL COMMENT '单据编码',
  `name` varchar(200) DEFAULT NULL COMMENT '单据名称',
  `test_type` tinyint DEFAULT NULL COMMENT '检测类型(1=第三方检测,2=委外试验)',
  `item_id` bigint DEFAULT NULL COMMENT '检测对象(物料/设备编号)',
  `test_org` varchar(200) DEFAULT NULL COMMENT '检测机构',
  `test_date` datetime DEFAULT NULL COMMENT '检测日期',
  `result` tinyint DEFAULT NULL COMMENT '检测结果(1=合格,2=不合格)',
  `report_no` varchar(100) DEFAULT NULL COMMENT '检测报告编号',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0=草稿,10=已提交,20=已完成)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES å§”外检测/试验单';
-- ---------- 2. å­—典:检测类型 / ç»“æžœ ----------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES
('MES å§”外检测类型', 'mes_qc_outsource_test_type', 0, 'MES å§”外检测类型(1=第三方检测,2=委外试验)', '1', NOW(), '1', NOW(), b'0', NULL),
('MES å§”外检测结果', 'mes_qc_outsource_test_result', 0, 'MES å§”外检测结果(1=合格,2=不合格)', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '第三方检测', '1', 'mes_qc_outsource_test_type', 0, 'primary', '', '第三方电力检测', '1', NOW(), '1', NOW(), b'0'),
(2, '委外试验', '2', 'mes_qc_outsource_test_type', 0, 'warning', '', '委外试验', '1', NOW(), '1', NOW(), b'0'),
(1, '合格', '1', 'mes_qc_outsource_test_result', 0, 'success', '', '检测合格', '1', NOW(), '1', NOW(), b'0'),
(2, '不合格', '2', 'mes_qc_outsource_test_result', 0, 'error', '', '检测不合格', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ---------- 3. èœå•:委外检测/试验(父菜单 5500 è´¨é‡ç®¡ç†ï¼‰ ----------
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065230, '委外检测/试验', '', 2, 12, 5500, 'qc/outsource-test', 'ep:files', 'mes/qc/outsourcetest/index', 'MesQcOutsourceTest', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065231, '委外检测查询', 'mes:qc-outsource-test:query', 3, 1, 1065230, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065232, '委外检测创建', 'mes:qc-outsource-test:create', 3, 2, 1065230, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065233, '委外检测更新', 'mes:qc-outsource-test:update', 3, 3, 1065230, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065234, '委外检测删除', 'mes:qc-outsource-test:delete', 3, 4, 1065230, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065230 AS menu_id UNION ALL SELECT 1065231 UNION ALL SELECT 1065232 UNION ALL SELECT 1065233 UNION ALL SELECT 1065234) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
sql/mysql/power_enhancement_phase7_process_design.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬ä¸ƒé˜¶æ®µï¼ˆå·¥è‰ºè®¾è®¡ï¼‰æ•°æ®åº“变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šå·¥åºç”µåŠ›å·¥è‰ºåˆ†ç±» + åº”急处置预案新表 + å­—å…¸ + èœå•(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. å·¥åºè¡¨ï¼šç”µåŠ›å·¥è‰ºåˆ†ç±» ----------
SET @col = (SELECT COUNT(*) FROM information_schema.columns
            WHERE table_schema = DATABASE() AND table_name = 'mes_pro_process' AND column_name = 'type');
SET @sql = IF(@col = 0,
  'ALTER TABLE mes_pro_process ADD COLUMN type INT NULL COMMENT ''电力工艺分类(字典 mes_pro_process_type)'' AFTER name',
  'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------- 2. åº”急处置预案表 ----------
CREATE TABLE IF NOT EXISTS `mes_pro_emergency_plan` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `code` varchar(64) NOT NULL COMMENT '预案编码',
  `name` varchar(200) DEFAULT NULL COMMENT '预案名称',
  `plan_type` tinyint DEFAULT NULL COMMENT '预案类型(1=停电,2=设备故障,3=火灾,4=自然灾害,5=其他)',
  `content` text COMMENT '处置内容',
  `org_unit` varchar(200) DEFAULT NULL COMMENT '责任单位/部门',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0=草稿,10=已发布)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='MES åº”急处置预案';
-- ---------- 3. å­—典:电力工艺分类 / é¢„案类型 ----------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES
('MES ç”µåŠ›å·¥è‰ºåˆ†ç±»', 'mes_pro_process_type', 0, 'MES ç”µåŠ›å·¥è‰ºåˆ†ç±»ï¼ˆ1=电网调度,2=变电运维,3=线路巡检,4=发电运维,5=储能充放电)', '1', NOW(), '1', NOW(), b'0', NULL),
('MES åº”急处置预案类型', 'mes_pro_emergency_plan_type', 0, 'MES åº”急处置预案类型(1=停电,2=设备故障,3=火灾,4=自然灾害,5=其他)', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '电网调度', '1', 'mes_pro_process_type', 0, 'primary', '', '电网调度工艺', '1', NOW(), '1', NOW(), b'0'),
(2, '变电运维', '2', 'mes_pro_process_type', 0, 'warning', '', '变电运维工艺', '1', NOW(), '1', NOW(), b'0'),
(3, '线路巡检', '3', 'mes_pro_process_type', 0, 'info', '', '线路巡检工艺', '1', NOW(), '1', NOW(), b'0'),
(4, '发电运维', '4', 'mes_pro_process_type', 0, 'success', '', '发电运维工艺', '1', NOW(), '1', NOW(), b'0'),
(5, '储能充放电', '5', 'mes_pro_process_type', 0, 'danger', '', '储能充放电工艺', '1', NOW(), '1', NOW(), b'0'),
(1, '停电', '1', 'mes_pro_emergency_plan_type', 0, 'danger', '', '停电处置', '1', NOW(), '1', NOW(), b'0'),
(2, '设备故障', '2', 'mes_pro_emergency_plan_type', 0, 'warning', '', '设备故障处置', '1', NOW(), '1', NOW(), b'0'),
(3, '火灾', '3', 'mes_pro_emergency_plan_type', 0, 'error', '', '火灾处置', '1', NOW(), '1', NOW(), b'0'),
(4, '自然灾害', '4', 'mes_pro_emergency_plan_type', 0, 'processing', '', '自然灾害处置', '1', NOW(), '1', NOW(), b'0'),
(5, '其他', '5', 'mes_pro_emergency_plan_type', 0, 'default', '', '其他应急', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ---------- 4. èœå•:应急处置预案(父菜单 6809 å·¥è‰ºè®¾è®¡ï¼‰ ----------
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065235, '应急处置预案', '', 2, 99, 6809, 'emergency-plan', 'ep:warning', 'mes/pro/emergencyplan/index', 'MesProEmergencyPlan', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065236, '应急预案查询', 'mes:pro-emergency-plan:query', 3, 1, 1065235, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065237, '应急预案创建', 'mes:pro-emergency-plan:create', 3, 2, 1065235, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065238, '应急预案更新', 'mes:pro-emergency-plan:update', 3, 3, 1065235, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065239, '应急预案删除', 'mes:pro-emergency-plan:delete', 3, 4, 1065235, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065235 AS menu_id UNION ALL SELECT 1065236 UNION ALL SELECT 1065237 UNION ALL SELECT 1065238 UNION ALL SELECT 1065239) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
sql/mysql/power_enhancement_phase8_hrm.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬å…«é˜¶æ®µï¼ˆäººåŠ›èµ„æºï¼šè¯ä¹¦èµ„è´¨ï¼‰æ•°æ®åº“å˜æ›´
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šè¯ä¹¦èµ„质新表 + ç±»åž‹å­—å…¸ + èœå•(幂等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. è¯ä¹¦èµ„质表 ----------
CREATE TABLE IF NOT EXISTS `hrm_certificate` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `employee_id` bigint NOT NULL COMMENT '员工编号',
  `cert_type` tinyint DEFAULT NULL COMMENT '证书类型(1=特种作业证书,2=从业资质,3=技能等级证书,4=安全培训合格证)',
  `cert_name` varchar(200) NOT NULL COMMENT '证书名称',
  `cert_no` varchar(100) DEFAULT NULL COMMENT '证书编号',
  `issue_org` varchar(200) DEFAULT NULL COMMENT '发证机构',
  `issue_date` date DEFAULT NULL COMMENT '发证日期',
  `expire_date` date NOT NULL COMMENT '有效期至',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_employee_id` (`employee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM è¯ä¹¦èµ„è´¨';
-- ---------- 2. å­—典:证书资质类型 ----------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES ('HRM è¯ä¹¦èµ„质类型', 'hrm_certificate_type', 0, 'HRM è¯ä¹¦èµ„质类型(1=特种作业证书,2=从业资质,3=技能等级证书,4=安全培训合格证)', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '特种作业证书', '1', 'hrm_certificate_type', 0, 'danger', '', '特种作业操作证', '1', NOW(), '1', NOW(), b'0'),
(2, '从业资质', '2', 'hrm_certificate_type', 0, 'warning', '', '从业资格', '1', NOW(), '1', NOW(), b'0'),
(3, '技能等级证书', '3', 'hrm_certificate_type', 0, 'primary', '', '技能等级', '1', NOW(), '1', NOW(), b'0'),
(4, '安全培训合格证', '4', 'hrm_certificate_type', 0, 'success', '', '安全培训合格', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ---------- 3. èœå•:证书资质(父菜单 6001 äººåŠ›èµ„æºï¼‰ ----------
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065240, '证书资质', '', 2, 99, 6001, 'certificate', 'ep:medal', 'hrm/certificate/index', 'HrmCertificate', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065241, '证书资质查询', 'hrm:certificate:query', 3, 1, 1065240, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065242, '证书资质创建', 'hrm:certificate:create', 3, 2, 1065240, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065243, '证书资质更新', 'hrm:certificate:update', 3, 3, 1065240, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065244, '证书资质删除', 'hrm:certificate:delete', 3, 4, 1065240, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065240 AS menu_id UNION ALL SELECT 1065241 UNION ALL SELECT 1065242 UNION ALL SELECT 1065243 UNION ALL SELECT 1065244) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
sql/mysql/power_enhancement_phase9_product_design.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
-- ============================================================
-- ç”µåŠ›æ•°è½¬å¢žå¼º - ç¬¬ä¹é˜¶æ®µï¼ˆäº§å“è®¾è®¡ï¼šæ¢ä½å¯¼çº¿æŠ€æœ¯æ–‡æ¡£ï¼‰æ•°æ®åº“变更
-- é€‚用:MySQL 8.4+
-- è¯´æ˜Žï¼šæ¢ä½å¯¼çº¿äº§å“æŠ€æœ¯å‚æ•° + ç›˜å…·è®¡ç®— + æŠ€æœ¯ç¡®è®¤å‡½ï¼ˆå¹‚等)
-- æ³¨æ„ï¼šæœ¬è„šæœ¬ä¸åŒ…å« tenant_id(项目未启用多租户)
-- ============================================================
-- ---------- 1. æ¢ä½å¯¼çº¿äº§å“æŠ€æœ¯å‚数表 ----------
CREATE TABLE IF NOT EXISTS `product_ctc` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `item_id` bigint NOT NULL COMMENT '物料ID(关联 mdm_item.id)',
  `order_spec` varchar(200) DEFAULT NULL COMMENT '订货规格',
  `bare_conductor_spec` varchar(200) DEFAULT NULL COMMENT '裸导线规格',
  `enameled_spec` varchar(200) DEFAULT NULL COMMENT '漆包线规格',
  `transposition_spec` varchar(200) DEFAULT NULL COMMENT '换位规格',
  `conductor_type` varchar(100) DEFAULT NULL COMMENT '导体类型(铜/铝)',
  `cross_section` decimal(10,2) DEFAULT NULL COMMENT '截面积(mm²)',
  `outer_diameter` decimal(10,2) DEFAULT NULL COMMENT '外径(mm)',
  `resistance_20c` decimal(10,6) DEFAULT NULL COMMENT '20℃直流电阻(Ω/km)',
  `wrapping_angle` decimal(10,2) DEFAULT NULL COMMENT '绕包角度(°)',
  `insulation_thickness` decimal(10,2) DEFAULT NULL COMMENT '绝缘厚度(mm)',
  `rated_voltage` varchar(50) DEFAULT NULL COMMENT '额定电压(kV)',
  `test_voltage` varchar(50) DEFAULT NULL COMMENT '试验电压(kV)',
  `min_bending_radius` decimal(10,2) DEFAULT NULL COMMENT '最小弯曲半径(mm)',
  `weight_per_km` decimal(10,2) DEFAULT NULL COMMENT '每公里重量(kg/km)',
  `standard_code` varchar(100) DEFAULT NULL COMMENT '执行标准代号',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_item_id` (`item_id`) USING BTREE COMMENT '一个物料只能有一条技术参数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='换位导线产品技术参数';
-- ---------- 2. ç›˜å…·è®¡ç®—表 ----------
CREATE TABLE IF NOT EXISTS `product_ctc_reel` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `ctc_id` bigint NOT NULL COMMENT '换位导线产品ID(关联 product_ctc.id)',
  `reel_type` varchar(50) DEFAULT NULL COMMENT '盘具类型(木盘/铁盘/钢盘)',
  `reel_inner_diameter` decimal(10,2) DEFAULT NULL COMMENT '盘芯内径(mm)',
  `reel_outer_diameter` decimal(10,2) DEFAULT NULL COMMENT '盘具外径(mm)',
  `reel_width` decimal(10,2) DEFAULT NULL COMMENT '盘宽(mm)',
  `max_capacity` decimal(10,2) DEFAULT NULL COMMENT '最大容量(km)',
  `recommended_length` decimal(10,2) DEFAULT NULL COMMENT '推荐每盘长度(km)',
  `net_weight` decimal(10,2) DEFAULT NULL COMMENT '净重(kg)',
  `gross_weight` decimal(10,2) DEFAULT NULL COMMENT '毛重(kg)',
  `calc_formula` varchar(500) DEFAULT NULL COMMENT '计算公式(保存计算逻辑)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  KEY `idx_ctc_id` (`ctc_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='换位导线盘具计算';
-- ---------- 3. æŠ€æœ¯ç¡®è®¤å‡½è¡¨ ----------
CREATE TABLE IF NOT EXISTS `product_tech_confirm` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `confirm_no` varchar(50) NOT NULL COMMENT '确认函编号',
  `customer_id` bigint DEFAULT NULL COMMENT '客户ID(关联 crm_customer.id)',
  `customer_name` varchar(200) DEFAULT NULL COMMENT '客户名称',
  `product_name` varchar(200) DEFAULT NULL COMMENT '产品名称',
  `specification` varchar(500) DEFAULT NULL COMMENT '规格型号',
  `tech_params` text COMMENT '技术参数(JSON æ ¼å¼ï¼‰',
  `template_type` varchar(50) DEFAULT NULL COMMENT '模板类型(奥地利/日本/通用)',
  `drafter_id` bigint DEFAULT NULL COMMENT '编制人ID',
  `drafter_name` varchar(100) DEFAULT NULL COMMENT '编制人姓名',
  `draft_time` datetime DEFAULT NULL COMMENT '编制时间',
  `reviewer_id` bigint DEFAULT NULL COMMENT '审核人ID',
  `reviewer_name` varchar(100) DEFAULT NULL COMMENT '审核人姓名',
  `review_time` datetime DEFAULT NULL COMMENT '审核时间',
  `customer_confirm_user` varchar(100) DEFAULT NULL COMMENT '客户确认人',
  `customer_confirm_time` datetime DEFAULT NULL COMMENT '客户确认时间',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0=草稿,1=待审核,2=已审核,3=客户已确认)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `creator` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_confirm_no` (`confirm_no`),
  KEY `idx_customer_id` (`customer_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品技术确认函';
-- ---------- 4. å­—典:换位导线相关 ----------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`)
VALUES
('导体类型', 'product_conductor_type', 0, '换位导线导体类型', '1', NOW(), '1', NOW(), b'0', NULL),
('盘具类型', 'product_reel_type', 0, '换位导线盘具类型', '1', NOW(), '1', NOW(), b'0', NULL),
('技术确认函模板类型', 'product_tech_confirm_template', 0, '技术确认函模板类型', '1', NOW(), '1', NOW(), b'0', NULL),
('技术确认函状态', 'product_tech_confirm_status', 0, '技术确认函状态', '1', NOW(), '1', NOW(), b'0', NULL)
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1, '铜', 'copper', 'product_conductor_type', 0, 'primary', '', '铜导体', '1', NOW(), '1', NOW(), b'0'),
(2, '铝', 'aluminum', 'product_conductor_type', 0, 'info', '', '铝导体', '1', NOW(), '1', NOW(), b'0'),
(1, '木盘', 'wood', 'product_reel_type', 0, 'default', '', '木制盘具', '1', NOW(), '1', NOW(), b'0'),
(2, '铁盘', 'iron', 'product_reel_type', 0, 'info', '', '铁制盘具', '1', NOW(), '1', NOW(), b'0'),
(3, '钢盘', 'steel', 'product_reel_type', 0, 'primary', '', '钢制盘具', '1', NOW(), '1', NOW(), b'0'),
(1, '通用模板', 'general', 'product_tech_confirm_template', 0, 'default', '', '通用技术确认函模板', '1', NOW(), '1', NOW(), b'0'),
(2, '奥地利客户模板', 'austria', 'product_tech_confirm_template', 0, 'primary', '', '奥地利客户专用模板', '1', NOW(), '1', NOW(), b'0'),
(3, '日本客户模板', 'japan', 'product_tech_confirm_template', 0, 'warning', '', '日本客户专用模板', '1', NOW(), '1', NOW(), b'0'),
(0, '草稿', '0', 'product_tech_confirm_status', 0, 'info', '', '草稿状态', '1', NOW(), '1', NOW(), b'0'),
(1, '待审核', '1', 'product_tech_confirm_status', 0, 'warning', '', '待审核状态', '1', NOW(), '1', NOW(), b'0'),
(2, '已审核', '2', 'product_tech_confirm_status', 0, 'primary', '', '已审核状态', '1', NOW(), '1', NOW(), b'0'),
(3, '客户已确认', '3', 'product_tech_confirm_status', 0, 'success', '', '客户已确认', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `label` = VALUES(`label`), `sort` = VALUES(`sort`);
-- ==================== èœå•(产品设计下 3 ä¸ªæ–°é¡µé¢ï¼‰ ====================
-- çˆ¶èœå•:602571 äº§å“è®¾è®¡
-- 1) æ¢ä½å¯¼çº¿æŠ€æœ¯å‚æ•° mes/pd/ctc
-- 2) æ¢ä½å¯¼çº¿ç›˜å…·è®¡ç®— mes/pd/ctc-reel
-- 3) äº§å“æŠ€æœ¯ç¡®è®¤å‡½ mes/pd/tech-confirm
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES
(1065245, '换位导线技术参数', '', 2, 1, 602571, 'ctc', 'ep:files', 'mes/pd/ctc/index', 'MesPdCtc', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065246, '换位导线技术参数查询', 'mes:pd-ctc:query', 3, 1, 1065245, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065247, '换位导线技术参数创建', 'mes:pd-ctc:create', 3, 2, 1065245, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065248, '换位导线技术参数更新', 'mes:pd-ctc:update', 3, 3, 1065245, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065249, '换位导线技术参数删除', 'mes:pd-ctc:delete', 3, 4, 1065245, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065250, '换位导线技术参数导出', 'mes:pd-ctc:export', 3, 5, 1065245, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065251, '换位导线盘具计算', '', 2, 2, 602571, 'ctc-reel', 'ep:odometer', 'mes/pd/ctc-reel/index', 'MesPdCtcReel', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065252, '换位导线盘具计算查询', 'mes:pd-ctc-reel:query', 3, 1, 1065251, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065253, '换位导线盘具计算创建', 'mes:pd-ctc-reel:create', 3, 2, 1065251, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065254, '换位导线盘具计算更新', 'mes:pd-ctc-reel:update', 3, 3, 1065251, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065255, '换位导线盘具计算删除', 'mes:pd-ctc-reel:delete', 3, 4, 1065251, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065256, '产品技术确认函', '', 2, 3, 602571, 'tech-confirm', 'ep:document-checked', 'mes/pd/tech-confirm/index', 'MesPdTechConfirm', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065257, '产品技术确认函查询', 'mes:pd-tech-confirm:query', 3, 1, 1065256, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065258, '产品技术确认函创建', 'mes:pd-tech-confirm:create', 3, 2, 1065256, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065259, '产品技术确认函更新', 'mes:pd-tech-confirm:update', 3, 3, 1065256, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065260, '产品技术确认函删除', 'mes:pd-tech-confirm:delete', 3, 4, 1065256, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'),
(1065261, '产品技术确认函导出', 'mes:pd-tech-confirm:export', 3, 5, 1065256, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`);
-- è§’色授权(普通角色2 / ç§Ÿæˆ·ç®¡ç†å‘˜109、111)
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`)
SELECT r.role_id, m.menu_id, '1', NOW(), '1', NOW(), b'0', 1
FROM (SELECT 2 AS role_id UNION ALL SELECT 109 UNION ALL SELECT 111) r
CROSS JOIN (SELECT 1065245 AS menu_id UNION ALL SELECT 1065246 UNION ALL SELECT 1065247 UNION ALL SELECT 1065248 UNION ALL SELECT 1065249 UNION ALL SELECT 1065250
            UNION ALL SELECT 1065251 UNION ALL SELECT 1065252 UNION ALL SELECT 1065253 UNION ALL SELECT 1065254 UNION ALL SELECT 1065255
            UNION ALL SELECT 1065256 UNION ALL SELECT 1065257 UNION ALL SELECT 1065258 UNION ALL SELECT 1065259 UNION ALL SELECT 1065260 UNION ALL SELECT 1065261) m
LEFT JOIN `system_role_menu` existing ON existing.role_id = r.role_id AND existing.menu_id = m.menu_id AND existing.deleted = b'0'
WHERE existing.id IS NULL;
sql/mysql/rebuild_fk_mom_chdl_20261030.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
-- é‡å»º mom-chdl åº“中错误指向 ruoyi-vue-pro çš„外键
-- ç”Ÿæˆæ—¶é—´: 2026-10-30
-- è¯´æ˜Ž: è¿™äº›è¡¨çš„ DDL æ˜¯ä»Žæ¨¡æ¿åº“复制来的,外键仍指向 ruoyi-vue-pro,
--       å¯¼è‡´ Flowable å‘起流程时报 Foreign key constraint fails。
ALTER TABLE `act_ge_bytearray` DROP FOREIGN KEY `ACT_FK_BYTEARR_DEPL`;
ALTER TABLE `act_ge_bytearray` ADD CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_GROUP`;
ALTER TABLE `act_id_membership` ADD CONSTRAINT `ACT_FK_MEMB_GROUP` FOREIGN KEY (`GROUP_ID_`) REFERENCES `act_id_group` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_USER`;
ALTER TABLE `act_id_membership` ADD CONSTRAINT `ACT_FK_MEMB_USER` FOREIGN KEY (`USER_ID_`) REFERENCES `act_id_user` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_id_priv_mapping` DROP FOREIGN KEY `ACT_FK_PRIV_MAPPING`;
ALTER TABLE `act_id_priv_mapping` ADD CONSTRAINT `ACT_FK_PRIV_MAPPING` FOREIGN KEY (`PRIV_ID_`) REFERENCES `act_id_priv` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_JSON_BA`;
ALTER TABLE `act_procdef_info` ADD CONSTRAINT `ACT_FK_INFO_JSON_BA` FOREIGN KEY (`INFO_JSON_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_PROCDEF`;
ALTER TABLE `act_procdef_info` ADD CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_DEPLOYMENT`;
ALTER TABLE `act_re_model` ADD CONSTRAINT `ACT_FK_MODEL_DEPLOYMENT` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE`;
ALTER TABLE `act_re_model` ADD CONSTRAINT `ACT_FK_MODEL_SOURCE` FOREIGN KEY (`EDITOR_SOURCE_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE_EXTRA`;
ALTER TABLE `act_re_model` ADD CONSTRAINT `ACT_FK_MODEL_SOURCE_EXTRA` FOREIGN KEY (`EDITOR_SOURCE_EXTRA_VALUE_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES`;
ALTER TABLE `act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXCEPTION`;
ALTER TABLE `act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXECUTION`;
ALTER TABLE `act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF`;
ALTER TABLE `act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_event_subscr` DROP FOREIGN KEY `ACT_FK_EVENT_EXEC`;
ALTER TABLE `act_ru_event_subscr` ADD CONSTRAINT `ACT_FK_EVENT_EXEC` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PARENT`;
ALTER TABLE `act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_PARENT` FOREIGN KEY (`PARENT_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE `act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCDEF`;
ALTER TABLE `act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCINST`;
ALTER TABLE `act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_SUPER`;
ALTER TABLE `act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_SUPER` FOREIGN KEY (`SUPER_EXEC_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE `act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES`;
ALTER TABLE `act_ru_external_job` ADD CONSTRAINT `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_EXCEPTION`;
ALTER TABLE `act_ru_external_job` ADD CONSTRAINT `ACT_FK_EXTERNAL_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_ATHRZ_PROCEDEF`;
ALTER TABLE `act_ru_identitylink` ADD CONSTRAINT `ACT_FK_ATHRZ_PROCEDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_IDL_PROCINST`;
ALTER TABLE `act_ru_identitylink` ADD CONSTRAINT `ACT_FK_IDL_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_TSKASS_TASK`;
ALTER TABLE `act_ru_identitylink` ADD CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `act_ru_task` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_CUSTOM_VALUES`;
ALTER TABLE `act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXCEPTION`;
ALTER TABLE `act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXECUTION`;
ALTER TABLE `act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROC_DEF`;
ALTER TABLE `act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROCESS_INSTANCE`;
ALTER TABLE `act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES`;
ALTER TABLE `act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXCEPTION`;
ALTER TABLE `act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXECUTION`;
ALTER TABLE `act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF`;
ALTER TABLE `act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE`;
ALTER TABLE `act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_EXE`;
ALTER TABLE `act_ru_task` ADD CONSTRAINT `ACT_FK_TASK_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCDEF`;
ALTER TABLE `act_ru_task` ADD CONSTRAINT `ACT_FK_TASK_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCINST`;
ALTER TABLE `act_ru_task` ADD CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_CUSTOM_VALUES`;
ALTER TABLE `act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXCEPTION`;
ALTER TABLE `act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXECUTION`;
ALTER TABLE `act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROC_DEF`;
ALTER TABLE `act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_BYTEARRAY`;
ALTER TABLE `act_ru_variable` ADD CONSTRAINT `ACT_FK_VAR_BYTEARRAY` FOREIGN KEY (`BYTEARRAY_ID_`) REFERENCES `act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_EXE`;
ALTER TABLE `act_ru_variable` ADD CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_PROCINST`;
ALTER TABLE `act_ru_variable` ADD CONSTRAINT `ACT_FK_VAR_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `flw_event_resource` DROP FOREIGN KEY `FLW_FK_EVENT_RSRC_DPL`;
ALTER TABLE `flw_event_resource` ADD CONSTRAINT `FLW_FK_EVENT_RSRC_DPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `flw_event_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `flw_ru_batch_part` DROP FOREIGN KEY `FLW_FK_BATCH_PART_PARENT`;
ALTER TABLE `flw_ru_batch_part` ADD CONSTRAINT `FLW_FK_BATCH_PART_PARENT` FOREIGN KEY (`BATCH_ID_`) REFERENCES `flw_ru_batch` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `qrtz_blob_triggers` DROP FOREIGN KEY `qrtz_blob_triggers_ibfk_1`;
ALTER TABLE `qrtz_blob_triggers` ADD CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `qrtz_cron_triggers` DROP FOREIGN KEY `qrtz_cron_triggers_ibfk_1`;
ALTER TABLE `qrtz_cron_triggers` ADD CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `qrtz_simple_triggers` DROP FOREIGN KEY `qrtz_simple_triggers_ibfk_1`;
ALTER TABLE `qrtz_simple_triggers` ADD CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `qrtz_simprop_triggers` DROP FOREIGN KEY `qrtz_simprop_triggers_ibfk_1`;
ALTER TABLE `qrtz_simprop_triggers` ADD CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `qrtz_triggers` DROP FOREIGN KEY `qrtz_triggers_ibfk_1`;
ALTER TABLE `qrtz_triggers` ADD CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
sql/mysql/rebuild_fk_v2_20261030.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
-- é‡å»ºå¤–键:显式限定库名 mom-chdl,避免解析到 ruoyi-vue-pro
SET FOREIGN_KEY_CHECKS = 0;
ALTER TABLE `mom-chdl`.`act_ge_bytearray` DROP FOREIGN KEY `ACT_FK_BYTEARR_DEPL`;
ALTER TABLE `mom-chdl`.`act_ge_bytearray` ADD CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `mom-chdl`.`act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_GROUP`;
ALTER TABLE `mom-chdl`.`act_id_membership` ADD CONSTRAINT `ACT_FK_MEMB_GROUP` FOREIGN KEY (`GROUP_ID_`) REFERENCES `mom-chdl`.`act_id_group` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_USER`;
ALTER TABLE `mom-chdl`.`act_id_membership` ADD CONSTRAINT `ACT_FK_MEMB_USER` FOREIGN KEY (`USER_ID_`) REFERENCES `mom-chdl`.`act_id_user` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_id_priv_mapping` DROP FOREIGN KEY `ACT_FK_PRIV_MAPPING`;
ALTER TABLE `mom-chdl`.`act_id_priv_mapping` ADD CONSTRAINT `ACT_FK_PRIV_MAPPING` FOREIGN KEY (`PRIV_ID_`) REFERENCES `mom-chdl`.`act_id_priv` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_JSON_BA`;
ALTER TABLE `mom-chdl`.`act_procdef_info` ADD CONSTRAINT `ACT_FK_INFO_JSON_BA` FOREIGN KEY (`INFO_JSON_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_PROCDEF`;
ALTER TABLE `mom-chdl`.`act_procdef_info` ADD CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_DEPLOYMENT`;
ALTER TABLE `mom-chdl`.`act_re_model` ADD CONSTRAINT `ACT_FK_MODEL_DEPLOYMENT` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `mom-chdl`.`act_re_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE`;
ALTER TABLE `mom-chdl`.`act_re_model` ADD CONSTRAINT `ACT_FK_MODEL_SOURCE` FOREIGN KEY (`EDITOR_SOURCE_VALUE_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE_EXTRA`;
ALTER TABLE `mom-chdl`.`act_re_model` ADD CONSTRAINT `ACT_FK_MODEL_SOURCE_EXTRA` FOREIGN KEY (`EDITOR_SOURCE_EXTRA_VALUE_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXCEPTION`;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXECUTION`;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF`;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-chdl`.`act_ru_deadletter_job` ADD CONSTRAINT `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_event_subscr` DROP FOREIGN KEY `ACT_FK_EVENT_EXEC`;
ALTER TABLE `mom-chdl`.`act_ru_event_subscr` ADD CONSTRAINT `ACT_FK_EVENT_EXEC` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PARENT`;
ALTER TABLE `mom-chdl`.`act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_PARENT` FOREIGN KEY (`PARENT_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCDEF`;
ALTER TABLE `mom-chdl`.`act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCINST`;
ALTER TABLE `mom-chdl`.`act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `mom-chdl`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_SUPER`;
ALTER TABLE `mom-chdl`.`act_ru_execution` ADD CONSTRAINT `ACT_FK_EXE_SUPER` FOREIGN KEY (`SUPER_EXEC_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE CASCADE ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-chdl`.`act_ru_external_job` ADD CONSTRAINT `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_EXCEPTION`;
ALTER TABLE `mom-chdl`.`act_ru_external_job` ADD CONSTRAINT `ACT_FK_EXTERNAL_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_ATHRZ_PROCEDEF`;
ALTER TABLE `mom-chdl`.`act_ru_identitylink` ADD CONSTRAINT `ACT_FK_ATHRZ_PROCEDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_IDL_PROCINST`;
ALTER TABLE `mom-chdl`.`act_ru_identitylink` ADD CONSTRAINT `ACT_FK_IDL_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_TSKASS_TASK`;
ALTER TABLE `mom-chdl`.`act_ru_identitylink` ADD CONSTRAINT `ACT_FK_TSKASS_TASK` FOREIGN KEY (`TASK_ID_`) REFERENCES `mom-chdl`.`act_ru_task` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-chdl`.`act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXCEPTION`;
ALTER TABLE `mom-chdl`.`act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXECUTION`;
ALTER TABLE `mom-chdl`.`act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROC_DEF`;
ALTER TABLE `mom-chdl`.`act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-chdl`.`act_ru_job` ADD CONSTRAINT `ACT_FK_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXCEPTION`;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXECUTION`;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF`;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-chdl`.`act_ru_suspended_job` ADD CONSTRAINT `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_EXE`;
ALTER TABLE `mom-chdl`.`act_ru_task` ADD CONSTRAINT `ACT_FK_TASK_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCDEF`;
ALTER TABLE `mom-chdl`.`act_ru_task` ADD CONSTRAINT `ACT_FK_TASK_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCINST`;
ALTER TABLE `mom-chdl`.`act_ru_task` ADD CONSTRAINT `ACT_FK_TASK_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_CUSTOM_VALUES` FOREIGN KEY (`CUSTOM_VALUES_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXCEPTION`;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_EXCEPTION` FOREIGN KEY (`EXCEPTION_STACK_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXECUTION`;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_EXECUTION` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROC_DEF`;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_PROC_DEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `mom-chdl`.`act_re_procdef` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-chdl`.`act_ru_timer_job` ADD CONSTRAINT `ACT_FK_TIMER_JOB_PROCESS_INSTANCE` FOREIGN KEY (`PROCESS_INSTANCE_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_BYTEARRAY`;
ALTER TABLE `mom-chdl`.`act_ru_variable` ADD CONSTRAINT `ACT_FK_VAR_BYTEARRAY` FOREIGN KEY (`BYTEARRAY_ID_`) REFERENCES `mom-chdl`.`act_ge_bytearray` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_EXE`;
ALTER TABLE `mom-chdl`.`act_ru_variable` ADD CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_PROCINST`;
ALTER TABLE `mom-chdl`.`act_ru_variable` ADD CONSTRAINT `ACT_FK_VAR_PROCINST` FOREIGN KEY (`PROC_INST_ID_`) REFERENCES `mom-chdl`.`act_ru_execution` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`flw_event_resource` DROP FOREIGN KEY `FLW_FK_EVENT_RSRC_DPL`;
ALTER TABLE `mom-chdl`.`flw_event_resource` ADD CONSTRAINT `FLW_FK_EVENT_RSRC_DPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `mom-chdl`.`flw_event_deployment` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`flw_ru_batch_part` DROP FOREIGN KEY `FLW_FK_BATCH_PART_PARENT`;
ALTER TABLE `mom-chdl`.`flw_ru_batch_part` ADD CONSTRAINT `FLW_FK_BATCH_PART_PARENT` FOREIGN KEY (`BATCH_ID_`) REFERENCES `mom-chdl`.`flw_ru_batch` (`ID_`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`qrtz_blob_triggers` DROP FOREIGN KEY `qrtz_blob_triggers_ibfk_1`;
ALTER TABLE `mom-chdl`.`qrtz_blob_triggers` ADD CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `mom-chdl`.`qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`qrtz_cron_triggers` DROP FOREIGN KEY `qrtz_cron_triggers_ibfk_1`;
ALTER TABLE `mom-chdl`.`qrtz_cron_triggers` ADD CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `mom-chdl`.`qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`qrtz_simple_triggers` DROP FOREIGN KEY `qrtz_simple_triggers_ibfk_1`;
ALTER TABLE `mom-chdl`.`qrtz_simple_triggers` ADD CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `mom-chdl`.`qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`qrtz_simprop_triggers` DROP FOREIGN KEY `qrtz_simprop_triggers_ibfk_1`;
ALTER TABLE `mom-chdl`.`qrtz_simprop_triggers` ADD CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `mom-chdl`.`qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE `mom-chdl`.`qrtz_triggers` DROP FOREIGN KEY `qrtz_triggers_ibfk_1`;
ALTER TABLE `mom-chdl`.`qrtz_triggers` ADD CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `mom-chdl`.`qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT;
SET FOREIGN_KEY_CHECKS = 1;