-- ============================================================ -- 业务数据清理存储过程(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();