云
5 小时以前 cd8b8294fb8e1439342e775f41300a8907cb132d
chore(db): 添加数据库初始化和配置脚本

- 添加排班计划编码规则初始化脚本
- 添加生产报工和入库幂等约束配置
- 添加设备台账主数据修复脚本
- 添加工艺路线产品仓库绑定字段
- 添加BPM流程配置备份和补全脚本
已添加13个文件
21267 ■■■■■ 文件已修改
docs/sql/20261025_add_cal_plan_code_rule.sql 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/20261025_product_receipt_idempotency.sql 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/20261025_restore_equipment_master_data.sql 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/20261025_route_product_output_warehouse.sql 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/backup_bpm_config_20261023.sql 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/bpm_config_fill_20261023.sql 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/clean_business_data_20261023.sql 518 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/config_export_all_20261020.sql 9801 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/config_export_all_20261023.sql 9886 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/drop_cross_schema_fk_20261023.sql 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/mdm_item_category_migration.sql 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/mes_collect_20261020.sql 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/system_agent_import_session_20261022.sql 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/sql/20261025_add_cal_plan_code_rule.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
-- æŽ’班计划编码规则(可重复执行)
-- æ ¼å¼ï¼šPB + yyyyMMdd + 4 ä½æµæ°´å·ï¼Œä¾‹å¦‚ PB202610250001;流水号按天重置。
INSERT INTO `mes_md_auto_code_rule`
    (`code`, `name`, `description`, `max_length`, `padded`, `padded_char`, `padded_method`,
     `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'CAL_PLAN_CODE', '排班计划编码', '排班计划自动编码', 14, b'0', NULL, NULL,
       0, '系统内置规则', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (
    SELECT 1 FROM `mes_md_auto_code_rule` WHERE `code` = 'CAL_PLAN_CODE' AND `deleted` = b'0'
);
SET @cal_plan_rule_id := (
    SELECT `id` FROM `mes_md_auto_code_rule`
    WHERE `code` = 'CAL_PLAN_CODE' AND `deleted` = b'0'
    ORDER BY `id` LIMIT 1
);
INSERT INTO `mes_md_auto_code_part`
    (`rule_id`, `sort`, `type`, `length`, `fix_character`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT @cal_plan_rule_id, 1, 3, 2, 'PB', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (
    SELECT 1 FROM `mes_md_auto_code_part`
    WHERE `rule_id` = @cal_plan_rule_id AND `sort` = 1 AND `deleted` = b'0'
);
INSERT INTO `mes_md_auto_code_part`
    (`rule_id`, `sort`, `type`, `length`, `date_format`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT @cal_plan_rule_id, 2, 2, 8, 'yyyyMMdd', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (
    SELECT 1 FROM `mes_md_auto_code_part`
    WHERE `rule_id` = @cal_plan_rule_id AND `sort` = 2 AND `deleted` = b'0'
);
INSERT INTO `mes_md_auto_code_part`
    (`rule_id`, `sort`, `type`, `length`, `serial_start_no`, `serial_step`, `cycle_flag`, `cycle_method`,
     `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT @cal_plan_rule_id, 3, 4, 4, 1, 1, b'1', 3,
       'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (
    SELECT 1 FROM `mes_md_auto_code_part`
    WHERE `rule_id` = @cal_plan_rule_id AND `sort` = 3 AND `deleted` = b'0'
);
docs/sql/20261025_product_receipt_idempotency.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
-- ç”Ÿäº§æŠ¥å·¥/产出/入库幂等约束:避免接口重试或并发审批生成重复单据。
-- MySQL å”¯ä¸€ç´¢å¼•允许多条 NULL,因此不影响没有 feedback_id çš„历史数据。
SET @has_feedback_unique := (
  SELECT COUNT(*) FROM information_schema.statistics
  WHERE table_schema = DATABASE()
    AND table_name = 'mes_wm_product_produce'
    AND index_name = 'uk_product_produce_feedback'
);
SET @feedback_sql := IF(
  @has_feedback_unique = 0,
  'ALTER TABLE `mes_wm_product_produce` ADD UNIQUE KEY `uk_product_produce_feedback` (`feedback_id`)',
  'SELECT 1'
);
PREPARE feedback_stmt FROM @feedback_sql;
EXECUTE feedback_stmt;
DEALLOCATE PREPARE feedback_stmt;
SET @has_receipt_code_unique := (
  SELECT COUNT(*) FROM information_schema.statistics
  WHERE table_schema = DATABASE()
    AND table_name = 'mes_wm_product_receipt'
    AND index_name = 'uk_product_receipt_code'
);
SET @receipt_sql := IF(
  @has_receipt_code_unique = 0,
  'ALTER TABLE `mes_wm_product_receipt` ADD UNIQUE KEY `uk_product_receipt_code` (`code`)',
  'SELECT 1'
);
PREPARE receipt_stmt FROM @receipt_sql;
EXECUTE receipt_stmt;
DEALLOCATE PREPARE receipt_stmt;
docs/sql/20261025_restore_equipment_master_data.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
-- è®¾å¤‡å°è´¦ -> è®¾å¤‡ç‰©æ–™ -> è®¾å¤‡ä»“入库所需主数据修复
-- å¯é‡å¤æ‰§è¡Œï¼šæœ‰åŽ†å²æ•°æ®æ—¶æ¢å¤ï¼›æ•´è¡Œç¼ºå¤±æ—¶è‡ªåŠ¨åˆ›å»ºã€‚
-- ä¸šåŠ¡ä»£ç æŒ‰ code åˆ†åˆ«æŸ¥è¯¢ MDM/MES ä¸»é”®ï¼Œä¸å†è¦æ±‚两套表 ID å¯¹é½ã€‚
INSERT INTO `mdm_item_category`
    (`parent_id`, `code`, `name`, `item_type`, `item_or_product`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 0, 'EQUIPMENT', '设备', 4, 'ITEM', 1, 0, '系统内置设备分类', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `mdm_item_category` WHERE `code` = 'EQUIPMENT');
INSERT INTO `mes_md_item_type`
    (`parent_id`, `code`, `name`, `item_or_product`, `sort`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 0, 'EQUIPMENT', '设备', 'ITEM', 1, 0, '系统内置设备分类', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `mes_md_item_type` WHERE `code` = 'EQUIPMENT');
INSERT INTO `mdm_unit_measure`
    (`code`, `name`, `primary_flag`, `primary_id`, `change_rate`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'TAI', '台', b'1', NULL, 1, 0, '系统内置设备计量单位', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `mdm_unit_measure` WHERE `code` = 'TAI');
INSERT INTO `mes_md_unit_measure`
    (`code`, `name`, `primary_flag`, `primary_id`, `change_rate`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'TAI', '台', b'1', NULL, 1, 0, '系统内置设备计量单位', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `mes_md_unit_measure` WHERE `code` = 'TAI');
INSERT INTO `mes_wm_warehouse`
    (`code`, `name`, `type`, `frozen`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'SYS-EQUIPMENT', '设备仓', 2, b'0', '设备台账自动入库专用仓', 'system', NOW(), 'system', NOW(), b'0'
WHERE NOT EXISTS (SELECT 1 FROM `mes_wm_warehouse` WHERE `code` = 'SYS-EQUIPMENT');
INSERT INTO `mes_wm_warehouse_location`
    (`code`, `name`, `warehouse_id`, `frozen`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'SYS-EQUIP-LOC-01', '设备仓默认库区', w.`id`, b'0', '设备台账自动入库默认库区', 'system', NOW(), 'system', NOW(), b'0'
FROM `mes_wm_warehouse` w
WHERE w.`code` = 'SYS-EQUIPMENT'
  AND NOT EXISTS (SELECT 1 FROM `mes_wm_warehouse_location` WHERE `code` = 'SYS-EQUIP-LOC-01')
LIMIT 1;
INSERT INTO `mes_wm_warehouse_area`
    (`code`, `name`, `type`, `location_id`, `status`, `frozen`, `allow_item_mixing`, `allow_batch_mixing`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'SYS-EQUIP-BIN-01', '设备仓默认库位', 1, l.`id`, 0, b'0', b'1', b'1',
       '设备台账自动入库默认库位', 'system', NOW(), 'system', NOW(), b'0'
FROM `mes_wm_warehouse_location` l
WHERE l.`code` = 'SYS-EQUIP-LOC-01'
  AND NOT EXISTS (SELECT 1 FROM `mes_wm_warehouse_area` WHERE `code` = 'SYS-EQUIP-BIN-01')
LIMIT 1;
UPDATE `mdm_item_category`
SET `deleted` = b'0', `status` = 0, `updater` = 'system', `update_time` = NOW()
WHERE `code` = 'EQUIPMENT';
UPDATE `mes_md_item_type`
SET `deleted` = b'0', `status` = 0, `updater` = 'system', `update_time` = NOW()
WHERE `code` = 'EQUIPMENT';
UPDATE `mdm_unit_measure`
SET `deleted` = b'0', `status` = 0, `updater` = 'system', `update_time` = NOW()
WHERE `code` = 'TAI';
UPDATE `mes_md_unit_measure`
SET `deleted` = b'0', `status` = 0, `updater` = 'system', `update_time` = NOW()
WHERE `code` = 'TAI';
UPDATE `mes_wm_warehouse`
SET `deleted` = b'0', `type` = 2, `frozen` = b'0',
    `updater` = 'system', `update_time` = NOW()
WHERE `code` = 'SYS-EQUIPMENT';
UPDATE `mes_wm_warehouse_location` l
JOIN `mes_wm_warehouse` w ON w.`code` = 'SYS-EQUIPMENT' AND w.`deleted` = b'0'
SET l.`warehouse_id` = w.`id`, l.`deleted` = b'0', l.`frozen` = b'0',
    l.`updater` = 'system', l.`update_time` = NOW()
WHERE l.`code` = 'SYS-EQUIP-LOC-01';
UPDATE `mes_wm_warehouse_area` a
JOIN `mes_wm_warehouse_location` l ON l.`code` = 'SYS-EQUIP-LOC-01' AND l.`deleted` = b'0'
SET a.`location_id` = l.`id`, a.`deleted` = b'0', a.`status` = 0,
    a.`frozen` = b'0', a.`allow_item_mixing` = b'1', a.`allow_batch_mixing` = b'1',
    a.`updater` = 'system', a.`update_time` = NOW()
WHERE a.`code` = 'SYS-EQUIP-BIN-01';
-- éƒ¨ç½²æ ¡éªŒï¼šä»¥ä¸‹æŸ¥è¯¢åº”各返回 1 æ¡ä¸” deleted=0。
SELECT `id`, `code`, `deleted` FROM `mdm_item_category` WHERE `code` = 'EQUIPMENT';
SELECT `id`, `code`, `deleted` FROM `mes_md_item_type` WHERE `code` = 'EQUIPMENT';
SELECT `id`, `code`, `deleted` FROM `mdm_unit_measure` WHERE `code` = 'TAI';
SELECT `id`, `code`, `deleted` FROM `mes_md_unit_measure` WHERE `code` = 'TAI';
SELECT `id`, `code`, `deleted` FROM `mes_wm_warehouse` WHERE `code` = 'SYS-EQUIPMENT';
SELECT `id`, `code`, `deleted` FROM `mes_wm_warehouse_location` WHERE `code` = 'SYS-EQUIP-LOC-01';
SELECT `id`, `code`, `deleted` FROM `mes_wm_warehouse_area` WHERE `code` = 'SYS-EQUIP-BIN-01';
docs/sql/20261025_route_product_output_warehouse.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
-- å·¥è‰ºè·¯çº¿äº§å“å¢žåŠ æŠ¥å·¥äº§å‡ºä»“åº“ç»‘å®šï¼ˆå¯é‡å¤æ‰§è¡Œï¼‰
SET @ddl := IF(
    (SELECT COUNT(*) FROM information_schema.COLUMNS
     WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mes_pro_route_product' AND COLUMN_NAME = 'warehouse_id') = 0,
    'ALTER TABLE `mes_pro_route_product` ADD COLUMN `warehouse_id` bigint NULL COMMENT ''报工产出仓库ID'' AFTER `item_id`',
    'SELECT 1'
);
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl := IF(
    (SELECT COUNT(*) FROM information_schema.COLUMNS
     WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mes_pro_route_product' AND COLUMN_NAME = 'location_id') = 0,
    'ALTER TABLE `mes_pro_route_product` ADD COLUMN `location_id` bigint NULL COMMENT ''报工产出库区ID'' AFTER `warehouse_id`',
    'SELECT 1'
);
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl := IF(
    (SELECT COUNT(*) FROM information_schema.COLUMNS
     WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mes_pro_route_product' AND COLUMN_NAME = 'area_id') = 0,
    'ALTER TABLE `mes_pro_route_product` ADD COLUMN `area_id` bigint NULL COMMENT ''报工产出库位ID'' AFTER `location_id`',
    'SELECT 1'
);
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- åŽ†å²è·¯çº¿äº§å“ä½¿ç”¨è™šæ‹Ÿçº¿è¾¹åº“å…œåº•ï¼Œæ–°å»º/编辑时由接口强制选择具体仓库、库区、库位。
UPDATE `mes_pro_route_product` p
JOIN `mes_wm_warehouse` w ON w.`code` = 'WIP_VIRTUAL_WAREHOUSE' AND w.`deleted` = b'0'
JOIN `mes_wm_warehouse_location` l ON l.`code` = 'WIP_VIRTUAL_LOCATION' AND l.`deleted` = b'0'
JOIN `mes_wm_warehouse_area` a ON a.`code` = 'WIP_VIRTUAL_AREA' AND a.`deleted` = b'0'
SET p.`warehouse_id` = COALESCE(p.`warehouse_id`, w.`id`),
    p.`location_id` = COALESCE(p.`location_id`, l.`id`),
    p.`area_id` = COALESCE(p.`area_id`, a.`id`),
    p.`updater` = 'system', p.`update_time` = NOW()
WHERE p.`deleted` = b'0'
  AND (p.`warehouse_id` IS NULL OR p.`location_id` IS NULL OR p.`area_id` IS NULL);
docs/sql/backup_bpm_config_20261023.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS `bpm_category`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `bpm_category` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类编号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类名',
  `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类标志',
  `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分类描述',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '分类状态(0正常 1停用)',
  `sort` int NOT NULL DEFAULT '0' 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='BPM æµç¨‹åˆ†ç±»è¡¨';
/*!40101 SET character_set_client = @saved_cs_client */;
LOCK TABLES `bpm_category` WRITE;
/*!40000 ALTER TABLE `bpm_category` DISABLE KEYS */;
/*!40000 ALTER TABLE `bpm_category` ENABLE KEYS */;
UNLOCK TABLES;
DROP TABLE IF EXISTS `bpm_form`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `bpm_form` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表单名',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
  `conf` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表单的配置',
  `fields` json NOT 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='BPM å·¥ä½œæµè¡¨å•定义表';
/*!40101 SET character_set_client = @saved_cs_client */;
LOCK TABLES `bpm_form` WRITE;
/*!40000 ALTER TABLE `bpm_form` DISABLE KEYS */;
/*!40000 ALTER TABLE `bpm_form` ENABLE KEYS */;
UNLOCK TABLES;
DROP TABLE IF EXISTS `bpm_user_group`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `bpm_user_group` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '组名',
  `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
  `user_ids` json NOT 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='BPM ç”¨æˆ·ç»„表';
/*!40101 SET character_set_client = @saved_cs_client */;
LOCK TABLES `bpm_user_group` WRITE;
/*!40000 ALTER TABLE `bpm_user_group` DISABLE KEYS */;
/*!40000 ALTER TABLE `bpm_user_group` ENABLE KEYS */;
UNLOCK TABLES;
DROP TABLE IF EXISTS `bpm_process_listener`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `bpm_process_listener` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '监听器名字',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
  `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '监听类型(execution执行监听器、task任务监听器)',
  `event` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '监听事件',
  `value_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '值类型(class类、delegateExpression委托表达式、expression表达式)',
  `value` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='BPM æµç¨‹ç›‘听器表';
/*!40101 SET character_set_client = @saved_cs_client */;
LOCK TABLES `bpm_process_listener` WRITE;
/*!40000 ALTER TABLE `bpm_process_listener` DISABLE KEYS */;
/*!40000 ALTER TABLE `bpm_process_listener` ENABLE KEYS */;
UNLOCK TABLES;
DROP TABLE IF EXISTS `bpm_process_expression`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `bpm_process_expression` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表达式名字',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '表达式状态(0正常 1停用)',
  `expression` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='BPM æµç¨‹è¡¨è¾¾å¼è¡¨';
/*!40101 SET character_set_client = @saved_cs_client */;
LOCK TABLES `bpm_process_expression` WRITE;
/*!40000 ALTER TABLE `bpm_process_expression` DISABLE KEYS */;
/*!40000 ALTER TABLE `bpm_process_expression` ENABLE KEYS */;
UNLOCK TABLES;
DROP TABLE IF EXISTS `bpm_process_definition_info`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `bpm_process_definition_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `process_definition_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程定义的编号',
  `model_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程模型的编号',
  `model_type` tinyint NOT NULL DEFAULT '10' COMMENT '流程模型的类型',
  `category` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '流程分类的编码',
  `icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '图标',
  `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述',
  `form_type` tinyint NOT NULL DEFAULT '10' COMMENT '表单类型(10普通表单 20自定义表单)',
  `form_id` bigint DEFAULT NULL COMMENT '动态表单编号',
  `form_conf` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '表单的配置',
  `form_fields` json DEFAULT NULL COMMENT '表单项的数组',
  `form_custom_create_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自定义表单的提交路径',
  `form_custom_view_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自定义表单的查看路径',
  `simple_model` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'SIMPLE è®¾è®¡å™¨æ¨¡åž‹æ•°æ®',
  `visible` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否可见',
  `sort` bigint NOT NULL DEFAULT '0' COMMENT '排序值',
  `start_user_ids` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可发起用户编号数组',
  `start_dept_ids` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可发起部门编号数组',
  `manager_user_ids` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '可管理用户编号数组',
  `allow_cancel_running_process` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否允许撤销审批中的申请',
  `allow_withdraw_task` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否允许审批人撤回任务',
  `process_id_rule` json DEFAULT NULL COMMENT '流程 ID è§„则',
  `auto_approval_type` tinyint DEFAULT NULL COMMENT '自动去重类型',
  `title_setting` json DEFAULT NULL COMMENT '标题设置',
  `summary_setting` json DEFAULT NULL COMMENT '摘要设置',
  `process_before_trigger_setting` json DEFAULT NULL COMMENT '流程前置通知设置',
  `process_after_trigger_setting` json DEFAULT NULL COMMENT '流程后置通知设置',
  `task_before_trigger_setting` json DEFAULT NULL COMMENT '任务前置通知设置',
  `task_after_trigger_setting` json DEFAULT NULL COMMENT '任务后置通知设置',
  `print_template_setting` json 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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='BPM æµç¨‹å®šä¹‰æ‹“展信息表';
/*!40101 SET character_set_client = @saved_cs_client */;
LOCK TABLES `bpm_process_definition_info` WRITE;
/*!40000 ALTER TABLE `bpm_process_definition_info` DISABLE KEYS */;
/*!40000 ALTER TABLE `bpm_process_definition_info` ENABLE KEYS */;
UNLOCK TABLES;
DROP TABLE IF EXISTS `bpm_business_attach`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `bpm_business_attach` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `process_definition_key` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程定义的 Key',
  `business_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '业务类型,例如 erp_purchase_order',
  `component_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务详情组件路径,例如 /erp/purchase/order/detail/index.vue',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0开启 1关闭)',
  `remark` varchar(255) 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,
  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `deleted` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `uk_process_definition_key` (`process_definition_key`,`deleted`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='BPM ä¸šåŠ¡é™„ä»¶é…ç½®è¡¨';
/*!40101 SET character_set_client = @saved_cs_client */;
LOCK TABLES `bpm_business_attach` WRITE;
/*!40000 ALTER TABLE `bpm_business_attach` DISABLE KEYS */;
INSERT INTO `bpm_business_attach` VALUES (1,'purchase_order_approve','erp_purchase_order','/erp/purchase/order/detail/index.vue',0,'采购订单审批业务详情组件','1','2026-08-25 11:27:28','1','2026-08-25 11:27:28',_binary '\0'),(2,'sale_order_approve','erp_sale_order','/erp/sale/order/detail/index.vue',0,'销售订单审批业务详情组件','1','2026-08-28 16:54:09','1','2026-08-28 16:54:09',_binary '\0'),(3,'supplier_apply_approve','srm_supplier_apply','/srm/supplierApply/detail/index.vue',0,'供应商准入审批业务详情组件','1','2026-08-29 02:08:12','1','2026-08-29 02:08:12',_binary '\0'),(4,'1','1','1',0,NULL,'1','2026-09-18 16:28:34','1','2026-10-23 17:07:13',_binary '');
/*!40000 ALTER TABLE `bpm_business_attach` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
docs/sql/bpm_config_fill_20261023.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,155 @@
-- ============================================================
-- æµç¨‹ç®¡ç†åŸºç¡€é…ç½®è¡¥é½ï¼ˆæœ¬åœ° ruoyi-vue-pro)
-- ç”Ÿæˆæ—¥æœŸï¼š2026-10-23
-- å†…容:流程分类、流程表单、用户分组、流程监听器、流程表达式、
--       æµç¨‹å®šä¹‰æ‰©å±•信息、业务附件配置
-- è¯´æ˜Žï¼šå¹‚等脚本,重复执行不会产生重复数据
-- å¤‡ä»½ï¼šdocs/sql/backup_bpm_config_20261023.sql
-- ============================================================
START TRANSACTION;
-- ------------------------------------------------------------
-- 1. æµç¨‹åˆ†ç±»ï¼šæŒ‰æµç¨‹å®šä¹‰/模型实际使用的 category è¡¥é½
-- ------------------------------------------------------------
INSERT INTO `bpm_category` (`name`,`code`,`description`,`status`,`sort`,`creator`,`create_time`,`updater`,`update_time`,`deleted`)
SELECT t.name,t.code,t.description,0,t.sort,'1',NOW(),'1',NOW(),b'0'
FROM (
            SELECT '合同审批'        AS name,'contract_approve'             AS code,'合同审批流程'            AS description,10 AS sort
  UNION ALL SELECT '采购审核'                  ,'purchase_request_approve'                  ,'采购申请审批',22
  UNION ALL SELECT '采购订单审批'              ,'purchase_order_approve'                    ,'ERP é‡‡è´­è®¢å•审批',25
  UNION ALL SELECT '销售订单审批'              ,'sale_order_approve'                        ,'ERP é”€å”®è®¢å•审批',26
  UNION ALL SELECT '供应商准入审批'            ,'supplier_apply_approve'                    ,'SRM ä¾›åº”商准入审批',27
  UNION ALL SELECT '销售报价审批'              ,'sale_quotation_approve'                    ,'销售报价审批',30
  UNION ALL SELECT '请假审批'                  ,'分类2'                                     ,'请假审批',40
  UNION ALL SELECT '回款审批'                  ,'1111'                                      ,'CRM å›žæ¬¾å®¡æ‰¹',50
  UNION ALL SELECT '开票审批'                  ,'crm_invoice_approve'                       ,'CRM å¼€ç¥¨å®¡æ‰¹',51
  UNION ALL SELECT '付款审批'                  ,'erp_finance_payment_approve'               ,'ERP ä»˜æ¬¾å•审批',60
  UNION ALL SELECT '来票审批'                  ,'erp_purchase_invoice_approve'              ,'ERP é‡‡è´­æ¥ç¥¨å®¡æ‰¹',61
  UNION ALL SELECT '产品项目审批'              ,'mes_pd_project_approve'                    ,'产品项目最终审批',70
  UNION ALL SELECT '报工审批'                  ,'mes_pro_feedback_audit'                    ,'MES ç”Ÿäº§æŠ¥å·¥å®¡æ‰¹',71
  UNION ALL SELECT '考勤异常审批'              ,'hrm_attendance_approve'                    ,'HRM è€ƒå‹¤å¼‚常审批',80
  UNION ALL SELECT '分类1'                     ,'分类1'                                     ,'历史分类',99
) t
WHERE NOT EXISTS (SELECT 1 FROM `bpm_category` c WHERE c.code = t.code AND c.deleted = 0);
-- 1.1 åŽ†å²/脏分类 code å½’并到规范 code(否则模型列表按名称分组会出现重复分组)
UPDATE `ACT_RE_MODEL` SET `CATEGORY_`='contract_approve'
 WHERE `CATEGORY_` IN ('contract approve','审批标志');
UPDATE `ACT_RE_PROCDEF` SET `CATEGORY_`='contract_approve'
 WHERE `CATEGORY_` IN ('contract approve','审批标志');
UPDATE `bpm_process_definition_info` SET `category`='contract_approve'
 WHERE `category` IN ('contract approve','审批标志');
UPDATE `ACT_RE_MODEL` SET `CATEGORY_`='purchase_request_approve'
 WHERE `CATEGORY_` IN ('purchase_ request approve','purchase_request approve','purchase_approve','采购审核');
UPDATE `ACT_RE_PROCDEF` SET `CATEGORY_`='purchase_request_approve'
 WHERE `CATEGORY_` IN ('purchase_ request approve','purchase_request approve','purchase_approve','采购审核');
UPDATE `bpm_process_definition_info` SET `category`='purchase_request_approve'
 WHERE `category` IN ('purchase_ request approve','purchase_request approve','purchase_approve','采购审核');
-- 1.2 å½’并后逻辑删除重复分类
UPDATE `bpm_category` SET `deleted`=b'1', `updater`='1', `update_time`=NOW()
 WHERE `deleted`=0 AND `code` IN ('contract approve','审批标志','purchase_ request approve','purchase_request approve','purchase_approve','采购审核');
-- ------------------------------------------------------------
-- 2. æµç¨‹è¡¨å•:恢复 SIMPLE æ¨¡åž‹å¼•用的表单 1/2/3
-- ------------------------------------------------------------
INSERT IGNORE INTO `bpm_form` (`id`, `name`, `status`, `conf`, `fields`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1,'合同审批表单',0,'{\"form\":{\"layout\":\"horizontal\",\"labelAlign\":\"right\",\"size\":\"middle\",\"colon\":false,\"labelCol\":{\"style\":{\"width\":\"125px\"}},\"wrapperCol\":{\"span\":24},\"labelWidth\":\"100px\"},\"resetBtn\":{\"show\":false,\"innerText\":\"重置\"},\"submitBtn\":{\"show\":true,\"innerText\":\"提交\"}}','[\"{\\\"type\\\":\\\"DeptSelect\\\",\\\"field\\\":\\\"69b19b45e6be46f0a922100fe0a2589c\\\",\\\"title\\\":\\\"部门选择器\\\",\\\"info\\\":\\\"\\\",\\\"$required\\\":false,\\\"props\\\":{\\\"returnType\\\":\\\"id\\\",\\\"defaultCurrentDept\\\":false},\\\"_fc_id\\\":\\\"id_Fq6ymssi7cb9ajc\\\",\\\"name\\\":\\\"ref_F6ljmssi7cb9akc\\\",\\\"display\\\":true,\\\"hidden\\\":false,\\\"_fc_drag_tag\\\":\\\"DeptSelect\\\"}\", \"{\\\"type\\\":\\\"UserSelect\\\",\\\"field\\\":\\\"711fdcb037f440c3a51c3054e1ac2ea7\\\",\\\"title\\\":\\\"用户选择器\\\",\\\"info\\\":\\\"\\\",\\\"$required\\\":false,\\\"props\\\":{\\\"defaultCurrentUser\\\":false},\\\"_fc_id\\\":\\\"id_Fz0zmssi7f4salc\\\",\\\"name\\\":\\\"ref_F1xsmssi7f4samc\\\",\\\"display\\\":true,\\\"hidden\\\":false,\\\"_fc_drag_tag\\\":\\\"UserSelect\\\"}\"]','表单备注','1','2026-08-14 13:26:09','1','2026-08-14 13:26:09',0x00),(2,'采购申请',0,'{\"form\":{\"layout\":\"horizontal\",\"labelAlign\":\"right\",\"size\":\"middle\",\"colon\":false,\"labelCol\":{\"style\":{\"width\":\"125px\"}},\"wrapperCol\":{\"span\":24},\"labelWidth\":\"100px\"},\"resetBtn\":{\"show\":false,\"innerText\":\"重置\"},\"submitBtn\":{\"show\":true,\"innerText\":\"提交\"}}','[\"{\\\"type\\\":\\\"UserSelect\\\",\\\"field\\\":\\\"82ccf29e136942d09a220f2a2a54d641\\\",\\\"title\\\":\\\"用户选择器\\\",\\\"info\\\":\\\"\\\",\\\"$required\\\":false,\\\"props\\\":{\\\"defaultCurrentUser\\\":false},\\\"_fc_id\\\":\\\"id_Fvf4mswjxhkzabc\\\",\\\"name\\\":\\\"ref_Fvgxmswjxhkzacc\\\",\\\"display\\\":true,\\\"hidden\\\":false,\\\"_fc_drag_tag\\\":\\\"UserSelect\\\"}\", \"{\\\"type\\\":\\\"DeptSelect\\\",\\\"field\\\":\\\"3093d2424e284c31b963a94fa12305ee\\\",\\\"title\\\":\\\"部门选择器\\\",\\\"info\\\":\\\"\\\",\\\"$required\\\":false,\\\"props\\\":{\\\"returnType\\\":\\\"id\\\",\\\"defaultCurrentDept\\\":false},\\\"_fc_id\\\":\\\"id_Fytcmswjxj0ladc\\\",\\\"name\\\":\\\"ref_Fh9emswjxj0laec\\\",\\\"display\\\":true,\\\"hidden\\\":false,\\\"_fc_drag_tag\\\":\\\"DeptSelect\\\"}\"]',NULL,'1','2026-08-17 09:25:13','1','2026-08-17 09:25:13',0x00),(3,'请假',0,'{\"form\":{\"layout\":\"horizontal\",\"labelAlign\":\"right\",\"size\":\"middle\",\"colon\":false,\"labelCol\":{\"style\":{\"width\":\"125px\"}},\"wrapperCol\":{\"span\":24},\"labelWidth\":\"100px\"},\"resetBtn\":{\"show\":false,\"innerText\":\"重置\"},\"submitBtn\":{\"show\":true,\"innerText\":\"提交\"}}','[\"{\\\"type\\\":\\\"input\\\",\\\"field\\\":\\\"Fl55mt725q5yabc\\\",\\\"title\\\":\\\"申请人\\\",\\\"info\\\":\\\"\\\",\\\"$required\\\":true,\\\"_fc_id\\\":\\\"id_Fgnhmt725q5yacc\\\",\\\"name\\\":\\\"ref_F43dmt725q5yadc\\\",\\\"display\\\":true,\\\"hidden\\\":false,\\\"_fc_drag_tag\\\":\\\"input\\\"}\", \"{\\\"type\\\":\\\"datePicker\\\",\\\"field\\\":\\\"F5eqmt725u3naec\\\",\\\"title\\\":\\\"请假时间\\\",\\\"info\\\":\\\"\\\",\\\"$required\\\":true,\\\"props\\\":{\\\"range\\\":true},\\\"_fc_id\\\":\\\"id_Fvj1mt725u3nafc\\\",\\\"name\\\":\\\"ref_Fv1umt725u3nagc\\\",\\\"display\\\":true,\\\"hidden\\\":false,\\\"_fc_drag_tag\\\":\\\"dateRange\\\"}\", \"{\\\"type\\\":\\\"inputNumber\\\",\\\"field\\\":\\\"F8wtmt726c3zahc\\\",\\\"title\\\":\\\"天数\\\",\\\"info\\\":\\\"\\\",\\\"$required\\\":true,\\\"_fc_id\\\":\\\"id_Fekpmt726c3zaic\\\",\\\"name\\\":\\\"ref_F6wumt726c3zajc\\\",\\\"display\\\":true,\\\"hidden\\\":false,\\\"_fc_drag_tag\\\":\\\"inputNumber\\\"}\"]',NULL,'1','2026-08-18 16:18:20','1','2026-08-24 17:53:56',0x00);
-- ------------------------------------------------------------
-- 3. ç”¨æˆ·åˆ†ç»„:按本地已存在用户初始化
-- ------------------------------------------------------------
INSERT INTO `bpm_user_group` (`name`,`description`,`status`,`user_ids`,`creator`,`create_time`,`updater`,`update_time`,`deleted`)
SELECT t.name,t.description,0,t.user_ids,'1',NOW(),'1',NOW(),b'0'
FROM (
            SELECT '流程组' AS name,'流程管理员' AS description,'[1]' AS user_ids
  UNION ALL SELECT '经营组'          ,'经营管理组'            ,'[247]'
  UNION ALL SELECT '经营部'          ,'经营部成员'            ,'[1,247]'
) t
WHERE NOT EXISTS (SELECT 1 FROM `bpm_user_group` g WHERE g.name = t.name AND g.deleted = 0);
-- ------------------------------------------------------------
-- 4. æµç¨‹ç›‘听器:写入代码中现成的示例监听器
-- ------------------------------------------------------------
INSERT INTO `bpm_process_listener` (`name`,`status`,`type`,`event`,`value_type`,`value`,`creator`,`create_time`,`updater`,`update_time`,`deleted`)
SELECT t.name,0,t.type,t.event,t.value_type,t.value,'1',NOW(),'1',NOW(),b'0'
FROM (
            SELECT '任务监听器-创建(类示例)' AS name,'task' AS type,'create' AS event,'class' AS value_type,
                   'cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.demo.task.DemoDelegateClassTaskListener' AS value
  UNION ALL SELECT '任务监听器-创建(委托表达式示例)','task','create','delegateExpression','${demoDelegateExpressionTaskListener}'
  UNION ALL SELECT '执行监听器-开始(类示例)','execution','start','class',
                   'cn.iocoder.yudao.module.bpm.framework.flowable.core.listener.demo.exection.DemoDelegateClassExecutionListener'
  UNION ALL SELECT '执行监听器-开始(委托表达式示例)','execution','start','delegateExpression','${demoDelegateExpressionExecutionListener}'
) t
WHERE NOT EXISTS (SELECT 1 FROM `bpm_process_listener` l WHERE l.name = t.name AND l.deleted = 0);
-- ------------------------------------------------------------
-- 5. æµç¨‹è¡¨è¾¾å¼ï¼šè¡¥å……常用条件示例
-- ------------------------------------------------------------
INSERT INTO `bpm_process_expression` (`name`,`status`,`expression`,`creator`,`create_time`,`updater`,`update_time`,`deleted`)
SELECT t.name,0,t.expression,'1',NOW(),'1',NOW(),b'0'
FROM (
            SELECT '金额大于1000' AS name,'${amount > 1000}' AS expression
  UNION ALL SELECT '发起人为超级管理员','${initiator == "1"}'
) t
WHERE NOT EXISTS (SELECT 1 FROM `bpm_process_expression` e WHERE e.name = t.name AND e.deleted = 0);
-- ------------------------------------------------------------
-- 6. æµç¨‹å®šä¹‰æ‰©å±•信息:为每个流程定义补齐
--    model_type ç»Ÿä¸€ä¸º 10(BPMN),避免 SIMPLE æ¨¡å¼ simple_model ä¸ºç©ºå¯¼è‡´ NPE
-- ------------------------------------------------------------
INSERT INTO `bpm_process_definition_info`
( `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` )
SELECT p.ID_,
       COALESCE(m.ID_, ''),
       10,
       p.CATEGORY_,
       NULL,
       IF(JSON_VALID(m.META_INFO_), JSON_UNQUOTE(JSON_EXTRACT(m.META_INFO_, '$.description')), NULL),
       10,
       IF(JSON_VALID(m.META_INFO_), CAST(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(m.META_INFO_, '$.formId')), 'null') AS SIGNED), NULL),
       NULL,NULL,NULL,NULL,NULL,
       b'1',
       COALESCE(IF(JSON_VALID(m.META_INFO_), CAST(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(m.META_INFO_, '$.sort')), 'null') AS SIGNED), 0), 0),
       NULL,NULL,
       -- è¯¥åˆ—ç”± LongListTypeHandler è¯»å–,要求逗号分隔(不能是 JSON æ•°ç»„文本 [1])
       CASE WHEN JSON_VALID(m.META_INFO_)
            THEN NULLIF(NULLIF(REPLACE(REPLACE(REPLACE(JSON_UNQUOTE(JSON_EXTRACT(m.META_INFO_, '$.managerUserIds')), '[', ''), ']', ''), ' ', ''), 'null'), '')
            ELSE NULL END,
       b'1',
       b'0',
       NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
       '1',NOW(),'1',NOW(),b'0'
FROM `ACT_RE_PROCDEF` p
LEFT JOIN `ACT_RE_MODEL` m ON m.KEY_ = p.KEY_
WHERE NOT EXISTS (SELECT 1 FROM `bpm_process_definition_info` i WHERE i.process_definition_id = p.ID_);
-- 6.1 ä¿®æ­£å·²å†™å…¥çš„ JSON æ•°ç»„形式(该列由 LongListTypeHandler è¯»å–,只接受逗号分隔)
UPDATE `bpm_process_definition_info`
SET `manager_user_ids` = TRIM(REPLACE(REPLACE(REPLACE(`manager_user_ids`, '[', ''), ']', ''), ' ', '')),
    `update_time` = NOW(), `updater` = '1'
WHERE `manager_user_ids` LIKE '[%';
-- ------------------------------------------------------------
-- 7. ä¸šåŠ¡é™„ä»¶é…ç½®ï¼šè¡¥é½æœ¬åœ°å·²æœ‰ä¸šåŠ¡è¯¦æƒ…é¡µçš„æµç¨‹
-- ------------------------------------------------------------
INSERT INTO `bpm_business_attach` (`process_definition_key`,`business_type`,`component_path`,`status`,`remark`,`creator`,`create_time`,`updater`,`update_time`,`deleted`)
SELECT t.process_definition_key,t.business_type,t.component_path,0,t.remark,'1',NOW(),'1',NOW(),b'0'
FROM (
            SELECT 'contract_approve' AS process_definition_key,'crm_contract' AS business_type,
                   '/crm/contract/detail/approve/index.vue' AS component_path,'合同审批展示合同详情' AS remark
  UNION ALL SELECT 'crm-invoice-audit','crm_invoice','/crm/invoice/detail/approve/index.vue','开票审批展示开票详情'
  UNION ALL SELECT 'crm-receivable-audit','crm_receivable','/crm/receivable/detail/approve/index.vue','回款审批展示回款详情'
  UNION ALL SELECT 'erp-finance-payment-audit','erp_finance_payment','/erp/finance/payment/detail/approve/index.vue','付款审批展示付款单详情'
  UNION ALL SELECT 'erp-purchase-invoice-audit','erp_purchase_invoice','/erp/purchase/invoice/detail/approve/index.vue','来票审批展示来票详情'
  UNION ALL SELECT 'purchase_request_approve','erp_purchase_request','/erp/purchase/request/detail/index.vue','采购申请审批展示采购申请详情'
) t
WHERE NOT EXISTS (SELECT 1 FROM `bpm_business_attach` a WHERE a.process_definition_key = t.process_definition_key AND a.deleted = 0);
COMMIT;
docs/sql/clean_business_data_20261023.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,518 @@
-- ============================================================
-- ä¸šåŠ¡æ•°æ®æ¸…ç†å­˜å‚¨è¿‡ç¨‹ï¼ˆ2026-10-23 ç‰ˆï¼‰
--
-- æ¸…理范围:基础数据、采购、销售、设备、仓储、工艺设计、产品设计、
--           ç”Ÿäº§ã€è´¨é‡ã€ååŒå®¡æ ¸è®°å½•、能耗、售后、系统日志/Token/附件
-- ä¿ç•™ï¼šç³»ç»Ÿç”¨æˆ·/角色/菜单/字典、基础设施配置、编码规则、
--       æµç¨‹é…ç½®ï¼ˆåˆ†ç±»/表单/分组/监听器/表达式/定义扩展/业务附件/免审批配置)、
--       æµç¨‹å®šä¹‰ä¸Žå¼•擎元数据(act_re_*/act_ge_*/act_id_*/flw_event_*)
-- æ³¨æ„ï¼šTRUNCATE ä¸å¯å›žæ»šï¼Œæ‰§è¡Œå‰åŠ¡å¿…å¤‡ä»½
--
-- ç”¨æ³•:
--   CALL sp_clean_business_data_check();  -- é¢„检:只统计各表行数,不删数据
--   CALL sp_clean_business_data();        -- æ‰§è¡Œï¼šçœŸæ­£æ¸…空
--
-- ä¼˜åŒ–点:
--   1. ç›®æ ‡è¡¨é›†ä¸­åœ¨ä¸´æ—¶è¡¨ç»´æŠ¤ï¼Œæ–°å¢ž/改名时只改清单,避免大段重复 SQL
--   2. è‡ªåŠ¨è·³è¿‡ä¸å­˜åœ¨çš„è¡¨ï¼ˆå…¼å®¹ä¸åŒçŽ¯å¢ƒçš„åº“ç»“æž„æ¼‚ç§»ï¼‰
--   3. é¢„检模式输出每个分区待清理行数,便于执行前评估
--   4. ç»Ÿä¸€å…³é—­/恢复 FOREIGN_KEY_CHECKS,杜绝外键阻塞
-- ============================================================
DELIMITER $$
DROP PROCEDURE IF EXISTS sp_clean_business_data_core$$
DROP PROCEDURE IF EXISTS sp_clean_business_data$$
DROP PROCEDURE IF EXISTS sp_clean_business_data_check$$
-- ------------------------------------------------------------
-- æ ¸å¿ƒè¿‡ç¨‹ï¼šp_dry_run = 0 æ‰§è¡Œï¼›1 ä»…预检
-- ------------------------------------------------------------
CREATE PROCEDURE sp_clean_business_data_core(IN p_dry_run TINYINT)
BEGIN
    DECLARE v_done INT DEFAULT 0;
    DECLARE v_section VARCHAR(64);
    DECLARE v_table VARCHAR(64);
    DECLARE v_status VARCHAR(16);
    DECLARE v_exists INT DEFAULT 0;
    DECLARE v_rows BIGINT DEFAULT NULL;
    DECLARE cur CURSOR FOR
        SELECT section, table_name FROM tmp_clean_targets ORDER BY section, table_name;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1;
    -- ä¸­é€”出错时兜底:恢复外键检查并清理临时表
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        SET FOREIGN_KEY_CHECKS = 1;
        DROP TEMPORARY TABLE IF EXISTS tmp_clean_targets;
        DROP TEMPORARY TABLE IF EXISTS tmp_clean_result;
        RESIGNAL;
    END;
    DROP TEMPORARY TABLE IF EXISTS tmp_clean_targets;
    DROP TEMPORARY TABLE IF EXISTS tmp_clean_result;
    CREATE TEMPORARY TABLE tmp_clean_targets (
        table_name VARCHAR(64) NOT NULL PRIMARY KEY,
        section VARCHAR(64) NOT NULL DEFAULT ''
    ) ENGINE = MEMORY;
    CREATE TEMPORARY TABLE tmp_clean_result (
        section VARCHAR(64) NOT NULL,
        table_name VARCHAR(64) NOT NULL,
        status VARCHAR(16) NOT NULL,
        rows_before BIGINT NULL
    ) ENGINE = MEMORY;
    INSERT INTO tmp_clean_targets (table_name) VALUES
    -- 01 ç³»ç»Ÿæ—¥å¿— / Token / æ¶ˆæ¯è®°å½•
    ('system_login_log'),
    ('system_operate_log'),
    ('system_notify_message'),
    ('system_oauth2_access_token'),
    ('system_oauth2_refresh_token'),
    ('system_oauth2_code'),
    ('system_oauth2_approve'),
    ('system_sms_code'),
    ('system_sms_log'),
    ('system_mail_log'),
    ('system_social_user'),
    ('system_social_user_bind'),
    ('infra_api_access_log'),
    ('infra_api_error_log'),
    ('infra_job_log'),
    -- 02 ç³»ç»Ÿé™„ä»¶
    ('system_storage_attachment'),
    ('system_storage_blob'),
    ('storage_attachment'),
    ('storage_blob'),
    ('infra_file'),
    ('infra_file_content'),
    -- 03 åŸºç¡€æ•°æ® - MDM ä¸»æ•°æ®
    ('mdm_item'),
    ('mdm_item_sku'),
    ('mdm_item_model'),
    ('mdm_item_batch_config'),
    ('mdm_item_migration_map'),
    ('mdm_item_category'),
    ('mdm_brand'),
    ('mdm_unit_measure'),
    ('mdm_warehouse'),
    -- 04 åŸºç¡€æ•°æ® - MES ç‰©æ–™ / BOM
    ('mes_md_item'),
    ('mes_md_item_type'),
    ('mes_md_item_batch_config'),
    ('mes_md_unit_measure'),
    ('mes_md_vendor'),
    ('mes_md_product_bom'),
    ('mes_md_product_sop'),
    ('mes_md_product_sip'),
    ('mes_md_auto_code_record'),
    -- 05 åŸºç¡€æ•°æ® - MES è½¦é—´ / äº§çº¿ / ç­ç»„排班
    ('mes_md_workshop'),
    ('mes_md_workstation'),
    ('mes_md_workstation_machine'),
    ('mes_md_workstation_tool'),
    ('mes_md_workstation_worker'),
    ('mes_pro_line'),
    ('mes_cal_holiday'),
    ('mes_cal_team'),
    ('mes_cal_team_member'),
    ('mes_cal_team_shift'),
    ('mes_cal_plan'),
    ('mes_cal_plan_shift'),
    ('mes_cal_plan_team'),
    -- 06 åŸºç¡€æ•°æ® - MES è®¾å¤‡ / å·¥å…·å°è´¦
    ('mes_dv_machinery'),
    ('mes_dv_machinery_type'),
    ('mes_dv_subject'),
    ('mes_dv_check_plan'),
    ('mes_dv_check_plan_machinery'),
    ('mes_dv_check_plan_subject'),
    ('mes_dv_metering'),
    ('mes_tm_tool'),
    ('mes_tm_tool_type'),
    -- 07 åŸºç¡€æ•°æ® - MES å·¥è‰º / å‚数配置
    ('mes_pro_route'),
    ('mes_pro_route_process'),
    ('mes_pro_route_product'),
    ('mes_pro_route_product_bom'),
    ('mes_pro_process'),
    ('mes_pro_process_content'),
    ('mes_pro_process_param'),
    ('mes_pd_process_param'),
    ('mes_pd_process_param_template'),
    ('mes_pd_process_param_template_detail'),
    ('mes_pro_andon_config'),
    -- 08 åŸºç¡€æ•°æ® - MES è´¨æ£€åŸºç¡€ï¼ˆæ–¹æ¡ˆ / ç¼ºé™· / æŒ‡æ ‡ï¼‰
    ('mes_qc_template'),
    ('mes_qc_template_indicator'),
    ('mes_qc_template_item'),
    ('mes_qc_defect'),
    ('mes_qc_indicator'),
    -- 09 åŸºç¡€æ•°æ® - MES ä»“库档案
    ('mes_wm_warehouse'),
    ('mes_wm_warehouse_area'),
    ('mes_wm_warehouse_location'),
    ('mes_wm_barcode_config'),
    -- 10 é‡‡è´­ - ERP
    ('erp_purchase_request'),
    ('erp_purchase_request_items'),
    ('erp_purchase_order'),
    ('erp_purchase_order_items'),
    ('erp_purchase_invoice'),
    ('erp_finance_payment'),
    ('erp_finance_payment_item'),
    -- 11 é‡‡è´­ - SRM
    ('srm_tender_project'),
    ('srm_tender_material'),
    ('srm_tender_bid'),
    ('srm_bid_open'),
    ('srm_bid_evaluation'),
    ('srm_bid_award'),
    ('srm_supplier_apply'),
    ('srm_supplier_quote'),
    ('srm_supplier_evaluation'),
    ('srm_supplier_certificate'),
    ('srm_delivery_plan'),
    ('srm_purchase_collaboration'),
    -- 12 é”€å”® - ERP
    ('erp_sale_order'),
    ('erp_sale_order_items'),
    ('erp_finance_receipt'),
    ('erp_finance_receipt_item'),
    -- 13 é”€å”® - CRM(保留客户/联系人)
    ('crm_clue'),
    ('crm_business'),
    ('crm_business_product'),
    ('crm_contact_business'),
    ('crm_follow_up_record'),
    ('crm_sale_quotation'),
    ('crm_sale_quotation_product'),
    ('crm_contract'),
    ('crm_contract_product'),
    ('crm_receivable'),
    ('crm_receivable_plan'),
    ('crm_invoice'),
    ('crm_sales_target'),
    ('crm_permission'),
    -- 14 è®¾å¤‡ - ç‚¹æ£€ / ä¿å…» / ç»´ä¿® / è®¡é‡è®°å½•
    ('mes_dv_check_record'),
    ('mes_dv_check_record_line'),
    ('mes_dv_mainten_record'),
    ('mes_dv_mainten_record_line'),
    ('mes_dv_repair'),
    ('mes_dv_repair_line'),
    ('mes_dv_metering_check'),
    -- 15 ä»“储 - ä¸šåŠ¡å•æ®
    ('mes_wm_transaction'),
    ('mes_wm_stock_reserve'),
    ('mes_wm_material_stock'),
    ('mes_wm_sn'),
    ('mes_wm_batch'),
    ('mes_wm_barcode'),
    ('mes_wm_stock_taking_task_result'),
    ('mes_wm_stock_taking_task_line'),
    ('mes_wm_stock_taking_task'),
    ('mes_wm_stock_taking_plan_param'),
    ('mes_wm_stock_taking_plan'),
    ('mes_wm_package_line'),
    ('mes_wm_package'),
    ('mes_wm_item_receipt_detail'),
    ('mes_wm_item_receipt_line'),
    ('mes_wm_item_receipt'),
    ('mes_wm_item_consume_detail'),
    ('mes_wm_item_consume_line'),
    ('mes_wm_item_consume'),
    ('mes_wm_product_produce_detail'),
    ('mes_wm_product_produce_line'),
    ('mes_wm_product_produce'),
    ('mes_wm_product_issue_detail'),
    ('mes_wm_product_issue_line'),
    ('mes_wm_product_issue'),
    ('mes_wm_product_receipt_detail'),
    ('mes_wm_product_receipt_line'),
    ('mes_wm_product_receipt'),
    ('mes_wm_product_sales_detail'),
    ('mes_wm_product_sales_line'),
    ('mes_wm_product_sales'),
    ('mes_wm_misc_receipt_detail'),
    ('mes_wm_misc_receipt_line'),
    ('mes_wm_misc_receipt'),
    ('mes_wm_misc_issue_detail'),
    ('mes_wm_misc_issue_line'),
    ('mes_wm_misc_issue'),
    ('mes_wm_outsource_receipt_detail'),
    ('mes_wm_outsource_receipt_line'),
    ('mes_wm_outsource_receipt'),
    ('mes_wm_outsource_issue_detail'),
    ('mes_wm_outsource_issue_line'),
    ('mes_wm_outsource_issue'),
    ('mes_wm_return_vendor_detail'),
    ('mes_wm_return_vendor_line'),
    ('mes_wm_return_vendor'),
    ('mes_wm_return_issue_detail'),
    ('mes_wm_return_issue_line'),
    ('mes_wm_return_issue'),
    ('mes_wm_return_sales_detail'),
    ('mes_wm_return_sales_line'),
    ('mes_wm_return_sales'),
    ('mes_wm_sales_notice_line'),
    ('mes_wm_sales_notice'),
    ('mes_wm_transfer_detail'),
    ('mes_wm_transfer_line'),
    ('mes_wm_transfer'),
    ('mes_wm_arrival_notice_line'),
    ('mes_wm_arrival_notice'),
    -- 16 å·¥è‰ºè®¾è®¡ / äº§å“è®¾è®¡ - ä¸šåŠ¡å•æ®
    ('mes_pd_project'),
    ('mes_pd_document'),
    ('mes_pd_document_audit'),
    ('mes_pd_archive'),
    -- 17 ç”Ÿäº§ - ä¸šåŠ¡å•æ®
    ('mes_pro_work_order_param_record_detail'),
    ('mes_pro_work_order_param_record'),
    ('mes_pro_work_order_process'),
    ('mes_pro_work_order_bom'),
    ('mes_pro_work_order'),
    ('mes_pro_task_issue'),
    ('mes_pro_task_assignee'),
    ('mes_pro_task_pause_record'),
    ('mes_pro_task'),
    ('mes_pro_feedback'),
    ('mes_pro_mps_merge_item'),
    ('mes_pro_mps'),
    ('mes_pro_card_process'),
    ('mes_pro_card'),
    ('mes_pro_work_record_log'),
    ('mes_pro_work_record'),
    ('mes_pro_andon_record'),
    ('mes_pro_batch_worker'),
    ('mes_pro_batch'),
    ('mes_pro_pallet'),
    ('mes_pro_bag_code_replace'),
    ('mes_pro_bag_code'),
    -- 18 è´¨é‡ - æ£€éªŒå•据 / æŠ¥å‘Šå®žä¾‹
    ('mes_qc_indicator_result_detail'),
    ('mes_qc_indicator_result'),
    ('mes_qc_defect_record'),
    ('mes_qc_ncr'),
    ('mes_qc_iqc_line'),
    ('mes_qc_iqc'),
    ('mes_qc_ipqc_line'),
    ('mes_qc_ipqc'),
    ('mes_qc_oqc_line'),
    ('mes_qc_oqc'),
    ('mes_qc_rqc_line'),
    ('mes_qc_rqc'),
    ('qc_report_instance'),
    ('qc_report_render_record'),
    -- 19 ååŒ - å®¡æ ¸è®°å½•与运行态(流程配置/定义保留)
    ('bpm_oa_leave'),
    ('bpm_process_instance_copy'),
    ('act_hi_procinst'),
    ('act_hi_taskinst'),
    ('act_hi_actinst'),
    ('act_hi_varinst'),
    ('act_hi_identitylink'),
    ('act_hi_comment'),
    ('act_hi_detail'),
    ('act_hi_attachment'),
    ('act_hi_entitylink'),
    ('act_hi_tsk_log'),
    ('act_ru_task'),
    ('act_ru_execution'),
    ('act_ru_actinst'),
    ('act_ru_variable'),
    ('act_ru_identitylink'),
    ('act_ru_job'),
    ('act_ru_timer_job'),
    ('act_ru_deadletter_job'),
    ('act_ru_suspended_job'),
    ('act_ru_external_job'),
    ('act_ru_history_job'),
    ('act_ru_event_subscr'),
    ('act_ru_entitylink'),
    ('act_evt_log'),
    ('flw_ru_batch'),
    ('flw_ru_batch_part'),
    -- 20 èƒ½è€— - é‡‡é›†è®°å½•与告警日志(告警规则保留)
    ('mes_energy_record'),
    ('mes_energy_alert_log'),
    -- 21 å”®åŽ
    ('after_sale_return_item'),
    ('after_sale_return'),
    ('after_sale_ticket_item'),
    ('after_sale_ticket'),
    ('after_sale_repair'),
    ('after_sale_permission'),
    ('after_sale_problem'),
    ('after_sale_visit'),
    -- 22 æ™ºèƒ½ä½“导入会话(临时数据)
    ('system_agent_import_session'),
    ('agent_import_command'),
    ('agent_import_command_row'),
    ('mdm_agent_import_command'),
    ('mdm_agent_import_command_row');
    -- è¡¥å……分区名称(顺序敏感:先匹配特殊表,再按前缀兜底)
    UPDATE tmp_clean_targets SET section = CASE
        WHEN table_name LIKE 'agent_import%' OR table_name LIKE 'mdm_agent_import%'
             OR table_name = 'system_agent_import_session'
            THEN '22 æ™ºèƒ½ä½“导入会话'
        WHEN table_name IN ('system_storage_attachment','system_storage_blob','storage_attachment',
                            'storage_blob','infra_file','infra_file_content')
            THEN '02 ç³»ç»Ÿé™„ä»¶'
        WHEN table_name LIKE 'system_%'
             OR table_name IN ('infra_api_access_log','infra_api_error_log','infra_job_log')
            THEN '01 ç³»ç»Ÿæ—¥å¿—与令牌'
        WHEN table_name LIKE 'mdm_%'
            THEN '03 åŸºç¡€æ•°æ®-MDM'
        WHEN table_name IN ('mes_md_workshop','mes_md_workstation','mes_md_workstation_machine',
                            'mes_md_workstation_tool','mes_md_workstation_worker','mes_pro_line')
             OR table_name LIKE 'mes_cal_%'
            THEN '05 åŸºç¡€æ•°æ®-MES车间班组'
        WHEN table_name LIKE 'mes_md_%'
            THEN '04 åŸºç¡€æ•°æ®-MES物料BOM'
        WHEN table_name IN ('mes_dv_check_record','mes_dv_check_record_line','mes_dv_mainten_record',
                            'mes_dv_mainten_record_line','mes_dv_repair','mes_dv_repair_line','mes_dv_metering_check')
            THEN '14 è®¾å¤‡-业务记录'
        WHEN table_name LIKE 'mes_dv_%' OR table_name LIKE 'mes_tm_%'
            THEN '06 åŸºç¡€æ•°æ®-MES设备工具台账'
        WHEN table_name LIKE 'mes_pro_route%' OR table_name IN ('mes_pro_process','mes_pro_process_content',
                            'mes_pro_process_param','mes_pd_process_param','mes_pd_process_param_template',
                            'mes_pd_process_param_template_detail','mes_pro_andon_config')
            THEN '07 åŸºç¡€æ•°æ®-MES工艺参数'
        WHEN table_name IN ('mes_qc_template','mes_qc_template_indicator','mes_qc_template_item',
                            'mes_qc_defect','mes_qc_indicator')
            THEN '08 åŸºç¡€æ•°æ®-MES质检基础'
        WHEN table_name IN ('mes_wm_warehouse','mes_wm_warehouse_area','mes_wm_warehouse_location','mes_wm_barcode_config')
            THEN '09 åŸºç¡€æ•°æ®-MES仓库档案'
        WHEN table_name LIKE 'erp_purchase%' OR table_name LIKE 'erp_finance_payment%'
            THEN '10 é‡‡è´­-ERP'
        WHEN table_name LIKE 'srm_%'
            THEN '11 é‡‡è´­-SRM'
        WHEN table_name LIKE 'erp_sale%' OR table_name LIKE 'erp_finance_receipt%'
            THEN '12 é”€å”®-ERP'
        WHEN table_name LIKE 'crm_%'
            THEN '13 é”€å”®-CRM'
        WHEN table_name LIKE 'mes_wm_%'
            THEN '15 ä»“储-业务单据'
        WHEN table_name LIKE 'mes_pd_%'
            THEN '16 å·¥è‰ºè®¾è®¡äº§å“è®¾è®¡'
        WHEN table_name LIKE 'mes_pro_%'
            THEN '17 ç”Ÿäº§'
        WHEN table_name LIKE 'mes_qc_%' OR table_name LIKE 'qc_report_%'
            THEN '18 è´¨é‡'
        WHEN table_name LIKE 'act_%' OR table_name LIKE 'flw_%' OR table_name LIKE 'bpm_%'
            THEN '19 ååŒ-审核记录'
        WHEN table_name LIKE 'mes_energy%'
            THEN '20 èƒ½è€—'
        WHEN table_name LIKE 'after_sale%'
            THEN '21 å”®åŽ'
        ELSE '99 æœªåˆ†ç±»'
    END;
    SET FOREIGN_KEY_CHECKS = 0;
    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO v_section, v_table;
        IF v_done = 1 THEN
            LEAVE read_loop;
        END IF;
        SELECT COUNT(*) INTO v_exists
        FROM information_schema.TABLES
        WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = v_table AND TABLE_TYPE = 'BASE TABLE';
        IF v_exists = 0 THEN
            SET v_status = 'SKIP';
            SET v_rows = NULL;
        ELSEIF p_dry_run = 1 THEN
            SET v_status = 'DRY-RUN';
            SET @row_count = 0;
            SET @sql = CONCAT('SELECT COUNT(*) INTO @row_count FROM `', v_table, '`');
            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
            SET v_rows = @row_count;
        ELSE
            SET v_status = 'TRUNCATED';
            SET v_rows = NULL;
            SET @sql = CONCAT('TRUNCATE TABLE `', v_table, '`');
            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;
        INSERT INTO tmp_clean_result (section, table_name, status, rows_before)
        VALUES (v_section, v_table, v_status, v_rows);
    END LOOP;
    CLOSE cur;
    SET FOREIGN_KEY_CHECKS = 1;
    -- åˆ†åŒºæ±‡æ€»
    SELECT section AS section_name,
           SUM(status = 'TRUNCATED') AS truncated_tables,
           SUM(status = 'DRY-RUN')   AS planned_tables,
           SUM(status = 'SKIP')      AS skipped_tables,
           IFNULL(SUM(rows_before), 0) AS rows_before
    FROM tmp_clean_result
    GROUP BY section
    ORDER BY section;
    -- ä¸å­˜åœ¨è€Œè¢«è·³è¿‡çš„表
    SELECT section AS section_name, table_name
    FROM tmp_clean_result
    WHERE status = 'SKIP'
    ORDER BY section, table_name;
    SELECT IF(p_dry_run = 1, '预检完成:未删除任何数据', '业务数据清理完成') AS result;
    DROP TEMPORARY TABLE IF EXISTS tmp_clean_targets;
    DROP TEMPORARY TABLE IF EXISTS tmp_clean_result;
END$$
-- ------------------------------------------------------------
-- å¯¹å¤–入口
-- ------------------------------------------------------------
CREATE PROCEDURE sp_clean_business_data()
BEGIN
    CALL sp_clean_business_data_core(0);
END$$
CREATE PROCEDURE sp_clean_business_data_check()
BEGIN
    CALL sp_clean_business_data_core(1);
END$$
DELIMITER ;
-- ============================================================
-- ä¿ç•™æ¸…单(不会被清理)
-- ã€ç³»ç»Ÿã€‘system_users/system_dept/system_post/system_role/system_role_menu/
--         system_menu/system_dict_type/system_dict_data/system_tenant*/
--         system_user_post/system_user_role/system_oauth2_client/
--         system_notice/system_notify_template/system_mail_*/system_sms_template/
--         system_social_client/system_company_config
-- ã€åŸºç¡€è®¾æ–½ã€‘infra_config/infra_job/infra_codegen_*/infra_data_source_config/infra_file_config
-- ã€ç¼–码规则】mes_md_auto_code_rule/mes_md_auto_code_part
-- ã€æµç¨‹é…ç½®ã€‘bpm_category/bpm_form/bpm_user_group/bpm_process_listener/
--            bpm_process_expression/bpm_process_definition_info/
--            bpm_business_attach/bpm_process_auto_approve_config
-- ã€æµç¨‹å®šä¹‰ã€‘act_re_deployment/act_re_model/act_re_procdef/act_ge_bytearray/
--            act_ge_property/act_id_*/act_procdef_info/flw_event_*/flw_channel_definition
-- ã€ä¸»æ•°æ®ã€‘crm_customer/crm_contact/erp_supplier/erp_account/
--          srm_supplier/srm_supplier_contact/srm_supplier_category/srm_tender_config
-- ã€è´¨é‡å¹³å°é…ç½®ã€‘qc_report_template/qc_report_template_version/qc_report_rule/
--                qc_report_data_source
-- ã€èƒ½è€—规则】mes_energy_alert_rule
-- ã€ä¸šåŠ¡æœªæ¶‰åŠæ¨¡å—ã€‘HRM/AI/IM/OA å…¬å‘Šæ•°æ®
-- ============================================================
-- æ‰§è¡Œï¼š
-- CALL sp_clean_business_data_check();
-- CALL sp_clean_business_data();
docs/sql/config_export_all_20261020.sql
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
docs/sql/config_export_all_20261023.sql
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
docs/sql/drop_cross_schema_fk_20261023.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,216 @@
-- æ¸…理误建的跨库外键:mom-hm/mom-jhhg/mom-jssm/mom-kyzn/mom-thzy ç­‰æ‹·è´åº“中存在
-- æŒ‡å‘ ruoyi-vue-pro çš„ FK,会阻止运行库删除流程模型(如 ACT_FK_MODEL_SOURCE)。
-- ä»…删除约束,不修改任何数据。执行后运行库模型/定义可正常删除。
ALTER TABLE `mom-hm`.`act_ge_bytearray` DROP FOREIGN KEY `ACT_FK_BYTEARR_DEPL`;
ALTER TABLE `mom-hm`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_GROUP`;
ALTER TABLE `mom-hm`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_USER`;
ALTER TABLE `mom-hm`.`act_id_priv_mapping` DROP FOREIGN KEY `ACT_FK_PRIV_MAPPING`;
ALTER TABLE `mom-hm`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_JSON_BA`;
ALTER TABLE `mom-hm`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_PROCDEF`;
ALTER TABLE `mom-hm`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_DEPLOYMENT`;
ALTER TABLE `mom-hm`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE`;
ALTER TABLE `mom-hm`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE_EXTRA`;
ALTER TABLE `mom-hm`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-hm`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXCEPTION`;
ALTER TABLE `mom-hm`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXECUTION`;
ALTER TABLE `mom-hm`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF`;
ALTER TABLE `mom-hm`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-hm`.`act_ru_event_subscr` DROP FOREIGN KEY `ACT_FK_EVENT_EXEC`;
ALTER TABLE `mom-hm`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PARENT`;
ALTER TABLE `mom-hm`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCDEF`;
ALTER TABLE `mom-hm`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCINST`;
ALTER TABLE `mom-hm`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_SUPER`;
ALTER TABLE `mom-hm`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-hm`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_EXCEPTION`;
ALTER TABLE `mom-hm`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_ATHRZ_PROCEDEF`;
ALTER TABLE `mom-hm`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_IDL_PROCINST`;
ALTER TABLE `mom-hm`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_TSKASS_TASK`;
ALTER TABLE `mom-hm`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-hm`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXCEPTION`;
ALTER TABLE `mom-hm`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXECUTION`;
ALTER TABLE `mom-hm`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROC_DEF`;
ALTER TABLE `mom-hm`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-hm`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-hm`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXCEPTION`;
ALTER TABLE `mom-hm`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXECUTION`;
ALTER TABLE `mom-hm`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF`;
ALTER TABLE `mom-hm`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-hm`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_EXE`;
ALTER TABLE `mom-hm`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCDEF`;
ALTER TABLE `mom-hm`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCINST`;
ALTER TABLE `mom-hm`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-hm`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXCEPTION`;
ALTER TABLE `mom-hm`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXECUTION`;
ALTER TABLE `mom-hm`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROC_DEF`;
ALTER TABLE `mom-hm`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-hm`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_BYTEARRAY`;
ALTER TABLE `mom-hm`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_EXE`;
ALTER TABLE `mom-hm`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_PROCINST`;
ALTER TABLE `mom-hm`.`flw_event_resource` DROP FOREIGN KEY `FLW_FK_EVENT_RSRC_DPL`;
ALTER TABLE `mom-hm`.`flw_ru_batch_part` DROP FOREIGN KEY `FLW_FK_BATCH_PART_PARENT`;
ALTER TABLE `mom-hm`.`qrtz_blob_triggers` DROP FOREIGN KEY `qrtz_blob_triggers_ibfk_1`;
ALTER TABLE `mom-hm`.`qrtz_cron_triggers` DROP FOREIGN KEY `qrtz_cron_triggers_ibfk_1`;
ALTER TABLE `mom-hm`.`qrtz_simple_triggers` DROP FOREIGN KEY `qrtz_simple_triggers_ibfk_1`;
ALTER TABLE `mom-hm`.`qrtz_simprop_triggers` DROP FOREIGN KEY `qrtz_simprop_triggers_ibfk_1`;
ALTER TABLE `mom-hm`.`qrtz_triggers` DROP FOREIGN KEY `qrtz_triggers_ibfk_1`;
ALTER TABLE `mom-jhhg`.`act_ge_bytearray` DROP FOREIGN KEY `ACT_FK_BYTEARR_DEPL`;
ALTER TABLE `mom-jhhg`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_GROUP`;
ALTER TABLE `mom-jhhg`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_USER`;
ALTER TABLE `mom-jhhg`.`act_id_priv_mapping` DROP FOREIGN KEY `ACT_FK_PRIV_MAPPING`;
ALTER TABLE `mom-jhhg`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_JSON_BA`;
ALTER TABLE `mom-jhhg`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_PROCDEF`;
ALTER TABLE `mom-jhhg`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_DEPLOYMENT`;
ALTER TABLE `mom-jhhg`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE`;
ALTER TABLE `mom-jhhg`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE_EXTRA`;
ALTER TABLE `mom-jhhg`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-jhhg`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXCEPTION`;
ALTER TABLE `mom-jhhg`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXECUTION`;
ALTER TABLE `mom-jhhg`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF`;
ALTER TABLE `mom-jhhg`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-jhhg`.`act_ru_event_subscr` DROP FOREIGN KEY `ACT_FK_EVENT_EXEC`;
ALTER TABLE `mom-jhhg`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PARENT`;
ALTER TABLE `mom-jhhg`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCDEF`;
ALTER TABLE `mom-jhhg`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCINST`;
ALTER TABLE `mom-jhhg`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_SUPER`;
ALTER TABLE `mom-jhhg`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-jhhg`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_EXCEPTION`;
ALTER TABLE `mom-jhhg`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_ATHRZ_PROCEDEF`;
ALTER TABLE `mom-jhhg`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_IDL_PROCINST`;
ALTER TABLE `mom-jhhg`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_TSKASS_TASK`;
ALTER TABLE `mom-jhhg`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-jhhg`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXCEPTION`;
ALTER TABLE `mom-jhhg`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXECUTION`;
ALTER TABLE `mom-jhhg`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROC_DEF`;
ALTER TABLE `mom-jhhg`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-jhhg`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-jhhg`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXCEPTION`;
ALTER TABLE `mom-jhhg`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXECUTION`;
ALTER TABLE `mom-jhhg`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF`;
ALTER TABLE `mom-jhhg`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-jhhg`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_EXE`;
ALTER TABLE `mom-jhhg`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCDEF`;
ALTER TABLE `mom-jhhg`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCINST`;
ALTER TABLE `mom-jhhg`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-jhhg`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXCEPTION`;
ALTER TABLE `mom-jhhg`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXECUTION`;
ALTER TABLE `mom-jhhg`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROC_DEF`;
ALTER TABLE `mom-jhhg`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-jhhg`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_BYTEARRAY`;
ALTER TABLE `mom-jhhg`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_EXE`;
ALTER TABLE `mom-jhhg`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_PROCINST`;
ALTER TABLE `mom-jhhg`.`flw_event_resource` DROP FOREIGN KEY `FLW_FK_EVENT_RSRC_DPL`;
ALTER TABLE `mom-jhhg`.`flw_ru_batch_part` DROP FOREIGN KEY `FLW_FK_BATCH_PART_PARENT`;
ALTER TABLE `mom-jhhg`.`qrtz_blob_triggers` DROP FOREIGN KEY `qrtz_blob_triggers_ibfk_1`;
ALTER TABLE `mom-jhhg`.`qrtz_cron_triggers` DROP FOREIGN KEY `qrtz_cron_triggers_ibfk_1`;
ALTER TABLE `mom-jhhg`.`qrtz_simple_triggers` DROP FOREIGN KEY `qrtz_simple_triggers_ibfk_1`;
ALTER TABLE `mom-jhhg`.`qrtz_simprop_triggers` DROP FOREIGN KEY `qrtz_simprop_triggers_ibfk_1`;
ALTER TABLE `mom-jhhg`.`qrtz_triggers` DROP FOREIGN KEY `qrtz_triggers_ibfk_1`;
ALTER TABLE `mom-jssm`.`qrtz_blob_triggers` DROP FOREIGN KEY `qrtz_blob_triggers_ibfk_1`;
ALTER TABLE `mom-jssm`.`qrtz_cron_triggers` DROP FOREIGN KEY `qrtz_cron_triggers_ibfk_1`;
ALTER TABLE `mom-jssm`.`qrtz_simple_triggers` DROP FOREIGN KEY `qrtz_simple_triggers_ibfk_1`;
ALTER TABLE `mom-jssm`.`qrtz_simprop_triggers` DROP FOREIGN KEY `qrtz_simprop_triggers_ibfk_1`;
ALTER TABLE `mom-jssm`.`qrtz_triggers` DROP FOREIGN KEY `qrtz_triggers_ibfk_1`;
ALTER TABLE `mom-kyzn`.`act_ge_bytearray` DROP FOREIGN KEY `ACT_FK_BYTEARR_DEPL`;
ALTER TABLE `mom-kyzn`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_GROUP`;
ALTER TABLE `mom-kyzn`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_USER`;
ALTER TABLE `mom-kyzn`.`act_id_priv_mapping` DROP FOREIGN KEY `ACT_FK_PRIV_MAPPING`;
ALTER TABLE `mom-kyzn`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_JSON_BA`;
ALTER TABLE `mom-kyzn`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_PROCDEF`;
ALTER TABLE `mom-kyzn`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_DEPLOYMENT`;
ALTER TABLE `mom-kyzn`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE`;
ALTER TABLE `mom-kyzn`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE_EXTRA`;
ALTER TABLE `mom-kyzn`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-kyzn`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXCEPTION`;
ALTER TABLE `mom-kyzn`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXECUTION`;
ALTER TABLE `mom-kyzn`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF`;
ALTER TABLE `mom-kyzn`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-kyzn`.`act_ru_event_subscr` DROP FOREIGN KEY `ACT_FK_EVENT_EXEC`;
ALTER TABLE `mom-kyzn`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PARENT`;
ALTER TABLE `mom-kyzn`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCDEF`;
ALTER TABLE `mom-kyzn`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCINST`;
ALTER TABLE `mom-kyzn`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_SUPER`;
ALTER TABLE `mom-kyzn`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-kyzn`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_EXCEPTION`;
ALTER TABLE `mom-kyzn`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_ATHRZ_PROCEDEF`;
ALTER TABLE `mom-kyzn`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_IDL_PROCINST`;
ALTER TABLE `mom-kyzn`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_TSKASS_TASK`;
ALTER TABLE `mom-kyzn`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-kyzn`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXCEPTION`;
ALTER TABLE `mom-kyzn`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXECUTION`;
ALTER TABLE `mom-kyzn`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROC_DEF`;
ALTER TABLE `mom-kyzn`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-kyzn`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-kyzn`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXCEPTION`;
ALTER TABLE `mom-kyzn`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXECUTION`;
ALTER TABLE `mom-kyzn`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF`;
ALTER TABLE `mom-kyzn`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-kyzn`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_EXE`;
ALTER TABLE `mom-kyzn`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCDEF`;
ALTER TABLE `mom-kyzn`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCINST`;
ALTER TABLE `mom-kyzn`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-kyzn`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXCEPTION`;
ALTER TABLE `mom-kyzn`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXECUTION`;
ALTER TABLE `mom-kyzn`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROC_DEF`;
ALTER TABLE `mom-kyzn`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-kyzn`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_BYTEARRAY`;
ALTER TABLE `mom-kyzn`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_EXE`;
ALTER TABLE `mom-kyzn`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_PROCINST`;
ALTER TABLE `mom-kyzn`.`flw_event_resource` DROP FOREIGN KEY `FLW_FK_EVENT_RSRC_DPL`;
ALTER TABLE `mom-kyzn`.`flw_ru_batch_part` DROP FOREIGN KEY `FLW_FK_BATCH_PART_PARENT`;
ALTER TABLE `mom-kyzn`.`qrtz_blob_triggers` DROP FOREIGN KEY `qrtz_blob_triggers_ibfk_1`;
ALTER TABLE `mom-kyzn`.`qrtz_cron_triggers` DROP FOREIGN KEY `qrtz_cron_triggers_ibfk_1`;
ALTER TABLE `mom-kyzn`.`qrtz_simple_triggers` DROP FOREIGN KEY `qrtz_simple_triggers_ibfk_1`;
ALTER TABLE `mom-kyzn`.`qrtz_simprop_triggers` DROP FOREIGN KEY `qrtz_simprop_triggers_ibfk_1`;
ALTER TABLE `mom-kyzn`.`qrtz_triggers` DROP FOREIGN KEY `qrtz_triggers_ibfk_1`;
ALTER TABLE `mom-thzy`.`act_ge_bytearray` DROP FOREIGN KEY `ACT_FK_BYTEARR_DEPL`;
ALTER TABLE `mom-thzy`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_GROUP`;
ALTER TABLE `mom-thzy`.`act_id_membership` DROP FOREIGN KEY `ACT_FK_MEMB_USER`;
ALTER TABLE `mom-thzy`.`act_id_priv_mapping` DROP FOREIGN KEY `ACT_FK_PRIV_MAPPING`;
ALTER TABLE `mom-thzy`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_JSON_BA`;
ALTER TABLE `mom-thzy`.`act_procdef_info` DROP FOREIGN KEY `ACT_FK_INFO_PROCDEF`;
ALTER TABLE `mom-thzy`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_DEPLOYMENT`;
ALTER TABLE `mom-thzy`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE`;
ALTER TABLE `mom-thzy`.`act_re_model` DROP FOREIGN KEY `ACT_FK_MODEL_SOURCE_EXTRA`;
ALTER TABLE `mom-thzy`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-thzy`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXCEPTION`;
ALTER TABLE `mom-thzy`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_EXECUTION`;
ALTER TABLE `mom-thzy`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROC_DEF`;
ALTER TABLE `mom-thzy`.`act_ru_deadletter_job` DROP FOREIGN KEY `ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-thzy`.`act_ru_event_subscr` DROP FOREIGN KEY `ACT_FK_EVENT_EXEC`;
ALTER TABLE `mom-thzy`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PARENT`;
ALTER TABLE `mom-thzy`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCDEF`;
ALTER TABLE `mom-thzy`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_PROCINST`;
ALTER TABLE `mom-thzy`.`act_ru_execution` DROP FOREIGN KEY `ACT_FK_EXE_SUPER`;
ALTER TABLE `mom-thzy`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-thzy`.`act_ru_external_job` DROP FOREIGN KEY `ACT_FK_EXTERNAL_JOB_EXCEPTION`;
ALTER TABLE `mom-thzy`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_ATHRZ_PROCEDEF`;
ALTER TABLE `mom-thzy`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_IDL_PROCINST`;
ALTER TABLE `mom-thzy`.`act_ru_identitylink` DROP FOREIGN KEY `ACT_FK_TSKASS_TASK`;
ALTER TABLE `mom-thzy`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-thzy`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXCEPTION`;
ALTER TABLE `mom-thzy`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_EXECUTION`;
ALTER TABLE `mom-thzy`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROC_DEF`;
ALTER TABLE `mom-thzy`.`act_ru_job` DROP FOREIGN KEY `ACT_FK_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-thzy`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-thzy`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXCEPTION`;
ALTER TABLE `mom-thzy`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_EXECUTION`;
ALTER TABLE `mom-thzy`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROC_DEF`;
ALTER TABLE `mom-thzy`.`act_ru_suspended_job` DROP FOREIGN KEY `ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-thzy`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_EXE`;
ALTER TABLE `mom-thzy`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCDEF`;
ALTER TABLE `mom-thzy`.`act_ru_task` DROP FOREIGN KEY `ACT_FK_TASK_PROCINST`;
ALTER TABLE `mom-thzy`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_CUSTOM_VALUES`;
ALTER TABLE `mom-thzy`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXCEPTION`;
ALTER TABLE `mom-thzy`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_EXECUTION`;
ALTER TABLE `mom-thzy`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROC_DEF`;
ALTER TABLE `mom-thzy`.`act_ru_timer_job` DROP FOREIGN KEY `ACT_FK_TIMER_JOB_PROCESS_INSTANCE`;
ALTER TABLE `mom-thzy`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_BYTEARRAY`;
ALTER TABLE `mom-thzy`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_EXE`;
ALTER TABLE `mom-thzy`.`act_ru_variable` DROP FOREIGN KEY `ACT_FK_VAR_PROCINST`;
ALTER TABLE `mom-thzy`.`flw_event_resource` DROP FOREIGN KEY `FLW_FK_EVENT_RSRC_DPL`;
ALTER TABLE `mom-thzy`.`flw_ru_batch_part` DROP FOREIGN KEY `FLW_FK_BATCH_PART_PARENT`;
ALTER TABLE `mom-thzy`.`qrtz_blob_triggers` DROP FOREIGN KEY `qrtz_blob_triggers_ibfk_1`;
ALTER TABLE `mom-thzy`.`qrtz_cron_triggers` DROP FOREIGN KEY `qrtz_cron_triggers_ibfk_1`;
ALTER TABLE `mom-thzy`.`qrtz_simple_triggers` DROP FOREIGN KEY `qrtz_simple_triggers_ibfk_1`;
ALTER TABLE `mom-thzy`.`qrtz_simprop_triggers` DROP FOREIGN KEY `qrtz_simprop_triggers_ibfk_1`;
ALTER TABLE `mom-thzy`.`qrtz_triggers` DROP FOREIGN KEY `qrtz_triggers_ibfk_1`;
docs/sql/mdm_item_category_migration.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
-- ============================================================
-- ç‰©æ–™åˆ†ç±»ç»Ÿä¸€è¿ç§»ï¼šmes_md_item_type -> mdm_item_category
--
-- æ‰§è¡Œæ—¶æœºï¼šä¸Šçº¿å‰æ‰§è¡Œä¸€æ¬¡ï¼ˆMES åˆ†ç±»æŽ¥å£åˆ‡æ¢åº•层存储之前)
-- ç‰¹æ€§ï¼š
--   1. æŒ‰åŽŸ ID è¿ç§»ï¼Œä¿è¯ mes_md_item.item_type_id、mdm_item.category_id ç­‰åŽ†å²å¼•ç”¨ç»§ç»­æœ‰æ•ˆ
--   2. åŒ…含已逻辑删除记录,避免引用断链
--   3. å¯é‡å¤æ‰§è¡Œï¼ˆä¸»é”®å†²çªæ—¶æ›´æ–°ä¸šåŠ¡å­—æ®µï¼Œä¸ä¼šäº§ç”Ÿé‡å¤æ•°æ®ï¼‰
-- ============================================================
INSERT INTO mdm_item_category
    (id, parent_id, code, name, item_type, item_or_product, sort, status, remark,
     creator, create_time, updater, update_time, deleted)
SELECT new.id,
       COALESCE(new.parent_id, 0),
       new.code,
       new.name,
       CASE WHEN UPPER(new.item_or_product) = 'PRODUCT' THEN 2 ELSE 1 END,
       new.item_or_product,
       COALESCE(new.sort, 0),
       COALESCE(new.status, 0),
       new.remark,
       COALESCE(new.creator, ''),
       COALESCE(new.create_time, CURRENT_TIMESTAMP),
       COALESCE(new.updater, ''),
       COALESCE(new.update_time, CURRENT_TIMESTAMP),
       COALESCE(new.deleted, b'0')
FROM mes_md_item_type AS new
WHERE new.name IS NOT NULL
ON DUPLICATE KEY UPDATE
    parent_id       = COALESCE(new.parent_id, 0),
    code            = new.code,
    name            = new.name,
    item_type       = CASE WHEN UPPER(new.item_or_product) = 'PRODUCT' THEN 2 ELSE 1 END,
    item_or_product = new.item_or_product,
    sort            = COALESCE(new.sort, 0),
    status          = COALESCE(new.status, 0),
    remark          = new.remark,
    deleted         = COALESCE(new.deleted, b'0');
-- è¿ç§»ç»“果核对:两侧 ID åº”完全一致
-- SELECT (SELECT COUNT(*) FROM mes_md_item_type) AS mes_cnt,
--        (SELECT COUNT(*) FROM mdm_item_category) AS mdm_cnt,
--        (SELECT COUNT(*) FROM mes_md_item_type t
--         WHERE NOT EXISTS (SELECT 1 FROM mdm_item_category c WHERE c.id = t.id)) AS missing_cnt;
docs/sql/mes_collect_20261020.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,227 @@
-- ============================================================
-- MES æ³¨å¡‘机数采对接
-- æ•°æ®åº“:mom-kyzn
-- æ—¥æœŸï¼š2026-10-20
-- è¯´æ˜Žï¼š
--   1. è®¾å¤‡å°è´¦å¢žåŠ æ•°é‡‡è®¾å¤‡ç¼–å·/启用标记
--   2. æ–°å»ºå®žæ—¶ã€å‘¨æœŸã€å·¥è‰ºã€å‚数变更、报警、原始报文表
--   3. æ–°å¢žæ•°é‡‡ç›‘控菜单与权限
--   è„šæœ¬å¯é‡å¤æ‰§è¡Œã€‚
-- ============================================================
-- ---------- 1. è®¾å¤‡å°è´¦æ‰©å±• ----------
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_dv_machinery' AND column_name = 'collect_device_code');
SET @sql = IF(@exists = 0,
    'ALTER TABLE mes_dv_machinery ADD COLUMN collect_device_code VARCHAR(64) NULL COMMENT ''数采设备编号(MQTT devId,如 C01)'' AFTER workstation_id',
    'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_dv_machinery' AND column_name = 'collect_enabled');
SET @sql = IF(@exists = 0,
    'ALTER TABLE mes_dv_machinery ADD COLUMN collect_enabled BIT(1) NOT NULL DEFAULT b''0'' COMMENT ''是否启用数采'' AFTER collect_device_code',
    'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @exists = (SELECT COUNT(*) FROM information_schema.statistics
               WHERE table_schema = DATABASE() AND table_name = 'mes_dv_machinery' AND index_name = 'uk_collect_device_code');
SET @sql = IF(@exists = 0,
    'ALTER TABLE mes_dv_machinery ADD UNIQUE INDEX uk_collect_device_code (collect_device_code)',
    'SELECT 1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ---------- 2. æ•°é‡‡è¡¨ ----------
CREATE TABLE IF NOT EXISTS mes_collect_realtime (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
    machinery_id BIGINT DEFAULT NULL COMMENT '设备台账编号',
    device_code VARCHAR(64) NOT NULL COMMENT '数采设备编号',
    task_id BIGINT DEFAULT NULL COMMENT '生产任务编号',
    work_order_id BIGINT DEFAULT NULL COMMENT '生产工单编号',
    collect_time DATETIME(3) NOT NULL COMMENT '采集时间',
    sts INT DEFAULT NULL COMMENT '运行状态:1待机 2生产',
    opm INT DEFAULT NULL COMMENT '运行模式:0手动 1半自动 2电眼自动 3时间自动 4调模使用',
    asts INT DEFAULT NULL COMMENT '附加状态',
    ot DECIMAL(10,2) DEFAULT NULL COMMENT '油温',
    temps JSON DEFAULT NULL COMMENT '各段温度 T1..Tn',
    data_json JSON 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_collect_realtime_device (device_code),
    KEY idx_collect_realtime_machinery (machinery_id),
    KEY idx_collect_realtime_work_order (work_order_id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES æ•°é‡‡-设备实时状态';
CREATE TABLE IF NOT EXISTS mes_collect_realtime_history (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
    machinery_id BIGINT DEFAULT NULL COMMENT '设备台账编号',
    device_code VARCHAR(64) NOT NULL COMMENT '数采设备编号',
    task_id BIGINT DEFAULT NULL COMMENT '生产任务编号',
    work_order_id BIGINT DEFAULT NULL COMMENT '生产工单编号',
    collect_time DATETIME(3) NOT NULL COMMENT '采集时间',
    sts INT DEFAULT NULL COMMENT '运行状态:1待机 2生产',
    opm INT DEFAULT NULL COMMENT '运行模式:0手动 1半自动 2电眼自动 3时间自动 4调模使用',
    asts INT DEFAULT NULL COMMENT '附加状态',
    ot DECIMAL(10,2) DEFAULT NULL COMMENT '油温',
    temps JSON DEFAULT NULL COMMENT '各段温度 T1..Tn',
    data_json JSON 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_collect_realtime_history (device_code, collect_time),
    KEY idx_collect_realtime_history_device_time (device_code, collect_time),
    KEY idx_collect_realtime_history_work_order (work_order_id, collect_time),
    KEY idx_collect_realtime_history_collect_time (collect_time)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES æ•°é‡‡-实时状态历史';
CREATE TABLE IF NOT EXISTS mes_collect_cycle (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
    machinery_id BIGINT DEFAULT NULL COMMENT '设备台账编号',
    device_code VARCHAR(64) NOT NULL COMMENT '数采设备编号',
    task_id BIGINT DEFAULT NULL COMMENT '生产任务编号',
    work_order_id BIGINT DEFAULT NULL COMMENT '生产工单编号',
    cycle_no BIGINT NOT NULL DEFAULT 0 COMMENT '周期序号(CYCN)',
    collect_time DATETIME(3) NOT NULL COMMENT '采集时间',
    ecyct DECIMAL(14,4) DEFAULT NULL COMMENT '周期时间(ECYCT)',
    eiss DECIMAL(14,4) DEFAULT NULL COMMENT '射出起点(EISS)',
    eivm DECIMAL(14,4) DEFAULT NULL COMMENT '最大射速(EIVM)',
    eipm DECIMAL(14,4) DEFAULT NULL COMMENT '最大射压(EIPM)',
    esipt DECIMAL(14,4) DEFAULT NULL COMMENT '转保压时间(ESIPT)',
    esipp DECIMAL(14,4) DEFAULT NULL COMMENT '转保压压力(ESIPP)',
    esips DECIMAL(14,4) DEFAULT NULL COMMENT '转保压位置(ESIPS)',
    eipt DECIMAL(14,4) DEFAULT NULL COMMENT '射出时间(EIPT)',
    eipse DECIMAL(14,4) DEFAULT NULL COMMENT '射出终点位置(EIPSE)',
    eplst DECIMAL(14,4) DEFAULT NULL COMMENT '储料时间(EPLST)',
    eplsse DECIMAL(14,4) DEFAULT NULL COMMENT '储料终点(EPLSSE)',
    eplspm DECIMAL(14,4) DEFAULT NULL COMMENT '最大储料压力(EPLSPM)',
    et_temps JSON DEFAULT NULL COMMENT '生产温度 ET1..ETn',
    data_json JSON 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_collect_cycle (device_code, cycle_no, collect_time),
    KEY idx_collect_cycle_device_time (device_code, collect_time),
    KEY idx_collect_cycle_work_order (work_order_id, collect_time)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES æ•°é‡‡-周期过程数据';
CREATE TABLE IF NOT EXISTS mes_collect_tech (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
    machinery_id BIGINT DEFAULT NULL COMMENT '设备台账编号',
    device_code VARCHAR(64) NOT NULL COMMENT '数采设备编号',
    task_id BIGINT DEFAULT NULL COMMENT '生产任务编号',
    work_order_id BIGINT DEFAULT NULL COMMENT '生产工单编号',
    collect_time DATETIME(3) NOT NULL COMMENT '采集时间',
    data_json JSON 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_collect_tech_device (device_code),
    KEY idx_collect_tech_work_order (work_order_id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES æ•°é‡‡-工艺参数快照';
CREATE TABLE IF NOT EXISTS mes_collect_operate_log (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
    machinery_id BIGINT DEFAULT NULL COMMENT '设备台账编号',
    device_code VARCHAR(64) NOT NULL COMMENT '数采设备编号',
    task_id BIGINT DEFAULT NULL COMMENT '生产任务编号',
    work_order_id BIGINT DEFAULT NULL COMMENT '生产工单编号',
    var_id VARCHAR(64) DEFAULT NULL COMMENT '变量编码',
    old_value VARCHAR(512) DEFAULT NULL COMMENT '修改前的值',
    new_value VARCHAR(512) DEFAULT NULL COMMENT '修改后的值',
    modify_time DATETIME(3) DEFAULT NULL COMMENT '参数修改时间',
    collect_time DATETIME(3) NOT NULL COMMENT '报文采集时间',
    data_json JSON 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_collect_operate_log_device_time (device_code, modify_time),
    KEY idx_collect_operate_log_work_order (work_order_id, modify_time),
    KEY idx_collect_operate_log_var (var_id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES æ•°é‡‡-参数变更日志';
CREATE TABLE IF NOT EXISTS mes_collect_alarm (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
    machinery_id BIGINT DEFAULT NULL COMMENT '设备台账编号',
    device_code VARCHAR(64) NOT NULL COMMENT '数采设备编号',
    task_id BIGINT DEFAULT NULL COMMENT '生产任务编号',
    work_order_id BIGINT DEFAULT NULL COMMENT '生产工单编号',
    wm_id INT DEFAULT NULL COMMENT '报警标识:2产生 0消失',
    wm_msg VARCHAR(512) DEFAULT NULL COMMENT '报警内容',
    wm_time DATETIME(3) DEFAULT NULL COMMENT '报警时间',
    status TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0未消除 1已消除',
    clear_time DATETIME(3) DEFAULT NULL COMMENT '消除时间',
    collect_time DATETIME(3) NOT NULL COMMENT '报文采集时间',
    data_json JSON 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_collect_alarm_device_status (device_code, status),
    KEY idx_collect_alarm_time (wm_time),
    KEY idx_collect_alarm_work_order (work_order_id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES æ•°é‡‡-报警记录';
CREATE TABLE IF NOT EXISTS mes_collect_message (
    id BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
    machinery_id BIGINT DEFAULT NULL COMMENT '设备台账编号',
    device_code VARCHAR(64) DEFAULT NULL COMMENT '数采设备编号',
    mqtt_topic VARCHAR(255) DEFAULT NULL COMMENT 'MQTT ä¸»é¢˜',
    msg_type VARCHAR(32) DEFAULT NULL COMMENT '数据类型:realtime/spc/tech/opLog/alarm/unknown',
    event_time DATETIME(3) DEFAULT NULL COMMENT '设备数据时间',
    raw_payload LONGTEXT COMMENT '原始报文',
    process_status TINYINT NOT NULL DEFAULT 0 COMMENT '处理状态:0成功 1失败',
    error_msg VARCHAR(1024) DEFAULT NULL COMMENT '失败原因',
    receive_time DATETIME(3) NOT 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_collect_message_device_time (device_code, receive_time),
    KEY idx_collect_message_type_time (msg_type, receive_time),
    KEY idx_collect_message_receive_time (receive_time)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES æ•°é‡‡-原始报文';
-- ---------- 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 (5392, '数采监控', 'mes:collect:query', 2, 9, 5300, 'collect/monitor', 'ep:monitor',
        'mes/collect/monitor/index', 'MesCollectMonitor', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE name = VALUES(name), permission = VALUES(permission), parent_id = VALUES(parent_id),
                        path = VALUES(path), component = VALUES(component), component_name = VALUES(component_name),
                        status = VALUES(status), visible = VALUES(visible), deleted = b'0';
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-alarm:ack', 3, 1, 5392, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0')
ON DUPLICATE KEY UPDATE name = VALUES(name), permission = VALUES(permission), parent_id = VALUES(parent_id),
                        status = VALUES(status), deleted = b'0';
INSERT IGNORE INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted)
VALUES (1, 5392, '1', NOW(), '1', NOW(), b'0'),
       (1, 5393, '1', NOW(), '1', NOW(), b'0');
docs/sql/system_agent_import_session_20261022.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
-- Java Bridge è¡¥å½•会话。执行前备份目标库,并在应用发布前完成迁移。
CREATE TABLE IF NOT EXISTS `system_agent_import_session` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '补录会话 ID',
  `owner_user_id` bigint NOT NULL COMMENT '创建用户 ID',
  `status` varchar(20) NOT NULL DEFAULT 'active' COMMENT '会话状态',
  `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户 ID',
  `creator` varchar(64) DEFAULT NULL,
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updater` varchar(64) DEFAULT NULL,
  `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_agent_import_owner` (`tenant_id`, `owner_user_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能体数据补录会话';