-- SW → Kra 旧框架转换:由程序首次连接旧库时自动执行,随后自动完成增量迁移、校验和清理。 -- 服务设置 admin.system.disable_auto_migrate: true;目标库由下方 USE 配置。 -- 新副本:备份源表、创建 Kra 表、转换框架数据及关联,并归档旧表。 -- 已迁移副本:自动执行菜单调整,不重新导入账号,不重建已存在的表。 -- 检测到部分迁移状态时立即停止,防止覆盖未完成的数据。 -- 首次迁移要求 26 张源表已存在;支持包含真实规则、预警和日志的完整业务副本。 -- 本脚本不包含账号明文、密码哈希或连接凭据;原始业务大表保留在目标副本中。 -- 请使用支持 DELIMITER 的 MySQL 客户端,在同一连接执行,遇错停止,不使用 --force。 -- 工作台复用仪表盘;商务管理、数据分析、预警中心依次排在仪表盘下方。 -- 与当前 Go 版本配套使用;由 -migrate 追加全部业务结构,转换 SQL 导入的任务保持停用。 -- 已迁移分支不依赖已清理的旧源表或备份表;执行前请备份当前菜单及角色元数据。 -- 唯一的库名配置:下方为测试副本 sw10;仅对已备份的目标副本执行,连接地址由数据库客户端选择。 -- MySQL 5.7 不支持 USE @变量,因此只修改下一行,正文自动使用当前数据库。 USE `sw10`; SET @sw_kra_target_db = DATABASE(); SET NAMES utf8mb4; SET SESSION time_zone='+08:00'; DELIMITER $$ DROP PROCEDURE IF EXISTS sw_kra_migrate_20261103$$ CREATE PROCEDURE sw_kra_migrate_20261103() migration_run: BEGIN DECLARE v_actual BIGINT DEFAULT 0; DECLARE v_expected BIGINT DEFAULT 0; DECLARE v_iter INT DEFAULT 0; DECLARE v_lock INT DEFAULT 0; DECLARE v_lock_name VARCHAR(64); DECLARE v_dashboard BIGINT UNSIGNED DEFAULT NULL; DECLARE v_workbench BIGINT UNSIGNED DEFAULT NULL; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; IF v_lock=1 THEN DO RELEASE_LOCK(v_lock_name); END IF; RESIGNAL; END; IF DATABASE() IS NULL OR @sw_kra_target_db IS NULL OR NOT (BINARY DATABASE() <=> BINARY @sw_kra_target_db) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='当前数据库与配置不一致'; END IF; -- 按目标库生成迁移锁,避免不同数据库互相阻塞,名称不超过 MySQL 的 64 字符限制。 SET v_lock_name=CONCAT('sw_to_kra:',MD5(DATABASE())); SELECT GET_LOCK(v_lock_name,10) INTO v_lock; IF COALESCE(v_lock,0)<>1 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Migration lock unavailable'; END IF; -- 一、已迁移库:确认目标表完整、迁移账本已完成,再调整菜单。 IF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='sys_users') THEN IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name IN ('sys_schema_migrations','sys_users','sys_authorities','sys_base_menus','sys_user_authority','sys_authority_menus','sys_base_menu_parameters','sys_apis','sys_ignore_apis','sys_authority_apis','casbin_rule','sys_base_menu_btns','sys_authority_btns','sys_departments','sys_positions','sys_user_departments','sys_user_positions','sys_authority_departments','sys_dictionaries','sys_dictionary_details','sys_params','sys_api_tokens','jwt_blacklists','sys_security_config','sys_versions','sys_export_templates','sys_export_template_condition','sys_export_template_join','sys_operation_records','sys_login_logs','sys_data_access_logs','sys_error','media_file_upload_and_downloads','media_attachment_category','media_uploads','media_upload_chunks','sys_announcements','sys_integration_configs','sys_timed_tasks','sys_timed_task_logs','pay_orders','pay_events','sys_user_bind_platform','sys_user_preference','sys_alert_rule','sys_alert_record','sys_alert_operation_log','sys_message') AND engine='InnoDB')<>48 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Kra target tables incomplete; refusing partial migration'; END IF; IF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='sw_kra_state') THEN IF NOT EXISTS(SELECT 1 FROM sw_kra_state WHERE id=1 AND phase='completed') THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Previous migration not completed'; END IF; ELSEIF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='sys_user') THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Legacy users remain without completed migration state'; END IF; START TRANSACTION; IF (SELECT COUNT(*) FROM sys_base_menus WHERE name='dashboard' AND parent_id=0 AND deleted_at IS NULL)<>1 OR (SELECT COUNT(*) FROM sys_base_menus WHERE name='sw_workbench')>1 OR (SELECT COUNT(DISTINCT name) FROM sys_base_menus WHERE parent_id=0 AND deleted_at IS NULL AND name IN ('sw_BusMgmt','sw_DataAnalysis','sw_AlertCenter'))<>3 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Required menu identities differ'; END IF; SELECT id INTO v_dashboard FROM sys_base_menus WHERE name='dashboard' AND parent_id=0 AND deleted_at IS NULL FOR UPDATE; SET v_workbench=(SELECT id FROM sys_base_menus WHERE name='sw_workbench'); IF EXISTS(SELECT 1 FROM sys_base_menus WHERE parent_id=v_workbench) OR EXISTS(SELECT 1 FROM sys_base_menu_btns WHERE sys_base_menu_id=v_workbench AND name<>'sw:workbench:query') THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Workbench has unexpected children/buttons'; END IF; -- 先补齐仪表盘授权,再移除重复工作台;已有授权不重复插入。 INSERT INTO sys_authority_menus(sys_authority_authority_id,sys_base_menu_id) SELECT a.authority_id,v_dashboard FROM sys_authorities a WHERE (a.default_router IN ('sw_workbench','dashboard') OR EXISTS( SELECT 1 FROM sys_authority_menus x WHERE x.sys_authority_authority_id=a.authority_id AND x.sys_base_menu_id=v_workbench)) AND NOT EXISTS(SELECT 1 FROM sys_authority_menus x WHERE x.sys_authority_authority_id=a.authority_id AND x.sys_base_menu_id=v_dashboard); UPDATE sys_authorities SET default_router='dashboard' WHERE default_router='sw_workbench'; -- 删除工作台页面、查询按钮及其关联,保留业务接口和查询权限。 DELETE x FROM sys_authority_btns x LEFT JOIN sys_base_menu_btns b ON b.id=x.sys_base_menu_btn_id WHERE x.sys_menu_id=v_workbench OR b.sys_base_menu_id=v_workbench; DELETE FROM sys_authority_menus WHERE sys_base_menu_id=v_workbench; DELETE FROM sys_base_menu_parameters WHERE sys_base_menu_id=v_workbench; IF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name='sw_kra_id_map') THEN DELETE m FROM sw_kra_id_map m LEFT JOIN sys_base_menu_btns b ON b.id=m.new_id WHERE m.entity='menu' AND (m.new_id=v_workbench OR b.sys_base_menu_id=v_workbench); END IF; DELETE FROM sys_base_menu_btns WHERE sys_base_menu_id=v_workbench; DELETE FROM sys_base_menus WHERE id=v_workbench; -- 使用固定排序值,确保重复执行结果一致;不调整子菜单排序。 UPDATE sys_base_menus SET sort=CASE name WHEN 'dashboard' THEN 1 WHEN 'sw_BusMgmt' THEN 2 WHEN 'sw_DataAnalysis' THEN 3 WHEN 'sw_AlertCenter' THEN 4 WHEN 'permission' THEN 5 WHEN 'org' THEN 6 WHEN 'systemConfig' THEN 7 WHEN 'monitor' THEN 8 WHEN 'media' THEN 9 WHEN 'extensions' THEN 13 WHEN 'person' THEN 16 ELSE sort END WHERE parent_id=0; -- RuoYi SVG 名称转换为 Kra 已注册图标;只修复旧值,保留后续自定义选择。 UPDATE sys_base_menus SET icon=CASE name WHEN 'sw_BusMgmt' THEN 'Briefcase' WHEN 'sw_BusinessList' THEN 'UserFilled' WHEN 'sw_ChannelList' THEN 'Connection' WHEN 'sw_ChannelActivationList' THEN 'CircleCheck' WHEN 'sw_DataAnalysis' THEN 'DataAnalysis' WHEN 'sw_ChannelDataStatistics' THEN 'Histogram' WHEN 'sw_RechargeDetails' THEN 'Money' WHEN 'sw_RegistrationDetails' THEN 'User' WHEN 'sw_GameAnalytics' THEN 'TrendCharts' WHEN 'sw_ServerAnalysis' THEN 'Monitor' WHEN 'sw_RankingAnalysis' THEN 'Star' WHEN 'sw_AlertCenter' THEN 'Bell' WHEN 'sw_AlertList' THEN 'Warning' WHEN 'sw_AlertRules' THEN 'Setting' ELSE icon END WHERE name IN ('sw_BusMgmt','sw_BusinessList','sw_ChannelList','sw_ChannelActivationList','sw_DataAnalysis','sw_ChannelDataStatistics','sw_RechargeDetails','sw_RegistrationDetails','sw_GameAnalytics','sw_ServerAnalysis','sw_RankingAnalysis','sw_AlertCenter','sw_AlertList','sw_AlertRules') AND (icon IS NULL OR icon IN ('', 'category', 'email', 'chart', 'company', 'international', 'color', 'dict', 'cascader', 'education', 'excel', 'star', 'process-definition', 'documentation', 'example', 'data-analysis', 'user', 'money', 'warn')); IF EXISTS(SELECT 1 FROM sys_base_menus WHERE name='sw_workbench' OR path='sw-index') OR EXISTS(SELECT 1 FROM sys_base_menu_btns WHERE name='sw:workbench:query') THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Duplicate workbench remains'; END IF; IF EXISTS(SELECT 1 FROM sys_authorities a WHERE NOT EXISTS( SELECT 1 FROM sys_base_menus m JOIN sys_authority_menus x ON x.sys_base_menu_id=m.id WHERE x.sys_authority_authority_id=a.authority_id AND m.name=a.default_router AND m.deleted_at IS NULL)) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Role default router not accessible'; END IF; IF EXISTS(SELECT 1 FROM sys_authority_menus x LEFT JOIN sys_base_menus m ON m.id=x.sys_base_menu_id WHERE m.id IS NULL) OR EXISTS(SELECT 1 FROM sys_authority_btns x LEFT JOIN sys_base_menu_btns b ON b.id=x.sys_base_menu_btn_id LEFT JOIN sys_base_menus m ON m.id=x.sys_menu_id WHERE b.id IS NULL OR m.id IS NULL OR b.sys_base_menu_id<>x.sys_menu_id) OR EXISTS(SELECT 1 FROM sys_base_menu_parameters x LEFT JOIN sys_base_menus m ON m.id=x.sys_base_menu_id WHERE m.id IS NULL) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Dangling menu relationship'; END IF; COMMIT; DO RELEASE_LOCK(v_lock_name); SET v_lock=0; SELECT '菜单调整完成,原有框架和业务数据已保留' AS result; LEAVE migration_run; END IF; -- 二、未迁移的新副本:核查源表及迁移状态,再执行完整迁移。 IF EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name IN ('sw_kra_state','sys_users','sys_schema_migrations','bak_sw2kra_20261103_sys_user')) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Target already migrated or partially prepared; do not overwrite'; END IF; SELECT COUNT(*) INTO v_actual FROM information_schema.tables WHERE table_schema=DATABASE() AND table_name IN ('sys_social','sys_dept','sys_user','sys_post','sys_role','sys_menu','sys_user_role','sys_role_menu','sys_role_dept','sys_user_post','sys_oper_log','sys_dict_type','sys_dict_data','sys_config','sys_login_info','sys_notice','sys_message','sys_oss','sys_oss_config','sys_client','sys_user_bind_platform','sys_user_preference','sj_job','sys_alert_rule','sys_alert_record','sys_alert_operation_log') AND engine='InnoDB'; IF v_actual<>26 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Source table set/engine differs'; END IF; IF EXISTS(SELECT 1 FROM sys_user WHERE del_flag='0' AND LEFT(password,4) NOT IN ('$2a$','$2b$','$2y$')) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Unsupported source password format'; END IF; IF EXISTS(SELECT user_name FROM sys_user WHERE del_flag='0' GROUP BY user_name HAVING COUNT(*)>1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Duplicate source username'; END IF; IF EXISTS(SELECT u.user_id FROM sys_user u LEFT JOIN sys_user_role ur ON ur.user_id=u.user_id LEFT JOIN sys_role r ON r.role_id=ur.role_id AND r.del_flag='0' WHERE u.del_flag='0' GROUP BY u.user_id HAVING COUNT(DISTINCT r.role_id)<>1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Source user needs exactly one active role'; END IF; IF EXISTS(SELECT 1 FROM sys_role WHERE del_flag='0' AND data_scope NOT IN ('1','2','3','4','5')) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Unsupported source data scope'; END IF; IF EXISTS(SELECT 1 FROM sys_user u LEFT JOIN sys_user p ON p.user_id=u.parent_id WHERE u.del_flag='0' AND u.parent_id>0 AND (p.user_id IS NULL OR p.del_flag<>'0' OR p.level>=u.level)) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Invalid source business ancestry'; END IF; -- 三、创建迁移账本和批次备份,逐表核对行数与字段内容。 CREATE TABLE sw_kra_state (id INT PRIMARY KEY, version VARCHAR(80) NOT NULL, phase VARCHAR(40) NOT NULL, started_at DATETIME(3), completed_at DATETIME(3)) ENGINE=InnoDB; INSERT INTO sw_kra_state VALUES(1,'20261103_framework_migration_v5','backup',NOW(3),NULL); CREATE TABLE sw_kra_checks (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,stage VARCHAR(32),check_name VARCHAR(160),expected_value BIGINT,actual_value BIGINT,passed TINYINT NOT NULL) ENGINE=InnoDB; CREATE TABLE `bak_sw2kra_20261103_sys_social` LIKE `sys_social`; CREATE TABLE `bak_sw2kra_20261103_sys_dept` LIKE `sys_dept`; CREATE TABLE `bak_sw2kra_20261103_sys_user` LIKE `sys_user`; CREATE TABLE `bak_sw2kra_20261103_sys_post` LIKE `sys_post`; CREATE TABLE `bak_sw2kra_20261103_sys_role` LIKE `sys_role`; CREATE TABLE `bak_sw2kra_20261103_sys_menu` LIKE `sys_menu`; CREATE TABLE `bak_sw2kra_20261103_sys_user_role` LIKE `sys_user_role`; CREATE TABLE `bak_sw2kra_20261103_sys_role_menu` LIKE `sys_role_menu`; CREATE TABLE `bak_sw2kra_20261103_sys_role_dept` LIKE `sys_role_dept`; CREATE TABLE `bak_sw2kra_20261103_sys_user_post` LIKE `sys_user_post`; CREATE TABLE `bak_sw2kra_20261103_sys_oper_log` LIKE `sys_oper_log`; CREATE TABLE `bak_sw2kra_20261103_sys_dict_type` LIKE `sys_dict_type`; CREATE TABLE `bak_sw2kra_20261103_sys_dict_data` LIKE `sys_dict_data`; CREATE TABLE `bak_sw2kra_20261103_sys_config` LIKE `sys_config`; CREATE TABLE `bak_sw2kra_20261103_sys_login_info` LIKE `sys_login_info`; CREATE TABLE `bak_sw2kra_20261103_sys_notice` LIKE `sys_notice`; CREATE TABLE `bak_sw2kra_20261103_sys_message` LIKE `sys_message`; CREATE TABLE `bak_sw2kra_20261103_sys_oss` LIKE `sys_oss`; CREATE TABLE `bak_sw2kra_20261103_sys_oss_config` LIKE `sys_oss_config`; CREATE TABLE `bak_sw2kra_20261103_sys_client` LIKE `sys_client`; CREATE TABLE `bak_sw2kra_20261103_sys_user_bind_platform` LIKE `sys_user_bind_platform`; CREATE TABLE `bak_sw2kra_20261103_sys_user_preference` LIKE `sys_user_preference`; CREATE TABLE `bak_sw2kra_20261103_sj_job` LIKE `sj_job`; CREATE TABLE `bak_sw2kra_20261103_sys_alert_rule` LIKE `sys_alert_rule`; CREATE TABLE `bak_sw2kra_20261103_sys_alert_record` LIKE `sys_alert_record`; CREATE TABLE `bak_sw2kra_20261103_sys_alert_operation_log` LIKE `sys_alert_operation_log`; START TRANSACTION; INSERT INTO `bak_sw2kra_20261103_sys_social` (`id`,`user_id`,`auth_id`,`source`,`open_id`,`user_name`,`nick_name`,`email`,`avatar`,`access_token`,`expire_in`,`refresh_token`,`access_code`,`union_id`,`scope`,`token_type`,`id_token`,`mac_algorithm`,`mac_key`,`code`,`oauth_token`,`oauth_token_secret`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`del_flag`) SELECT `id`,`user_id`,`auth_id`,`source`,`open_id`,`user_name`,`nick_name`,`email`,`avatar`,`access_token`,`expire_in`,`refresh_token`,`access_code`,`union_id`,`scope`,`token_type`,`id_token`,`mac_algorithm`,`mac_key`,`code`,`oauth_token`,`oauth_token_secret`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`del_flag` FROM `sys_social`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_social`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_social`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_social backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_social backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_social` s LEFT JOIN `bak_sw2kra_20261103_sys_social` b ON s.`id`=b.`id` WHERE b.`id` IS NULL OR NOT((BINARY s.`id` <=> BINARY b.`id`) AND (BINARY s.`user_id` <=> BINARY b.`user_id`) AND (BINARY s.`auth_id` <=> BINARY b.`auth_id`) AND (BINARY s.`source` <=> BINARY b.`source`) AND (BINARY s.`open_id` <=> BINARY b.`open_id`) AND (BINARY s.`user_name` <=> BINARY b.`user_name`) AND (BINARY s.`nick_name` <=> BINARY b.`nick_name`) AND (BINARY s.`email` <=> BINARY b.`email`) AND (BINARY s.`avatar` <=> BINARY b.`avatar`) AND (BINARY s.`access_token` <=> BINARY b.`access_token`) AND (BINARY s.`expire_in` <=> BINARY b.`expire_in`) AND (BINARY s.`refresh_token` <=> BINARY b.`refresh_token`) AND (BINARY s.`access_code` <=> BINARY b.`access_code`) AND (BINARY s.`union_id` <=> BINARY b.`union_id`) AND (BINARY s.`scope` <=> BINARY b.`scope`) AND (BINARY s.`token_type` <=> BINARY b.`token_type`) AND (BINARY s.`id_token` <=> BINARY b.`id_token`) AND (BINARY s.`mac_algorithm` <=> BINARY b.`mac_algorithm`) AND (BINARY s.`mac_key` <=> BINARY b.`mac_key`) AND (BINARY s.`code` <=> BINARY b.`code`) AND (BINARY s.`oauth_token` <=> BINARY b.`oauth_token`) AND (BINARY s.`oauth_token_secret` <=> BINARY b.`oauth_token_secret`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`del_flag` <=> BINARY b.`del_flag`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_social backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_social backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_dept` (`dept_id`,`parent_id`,`ancestors`,`dept_name`,`dept_category`,`order_num`,`leader`,`phone`,`email`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`) SELECT `dept_id`,`parent_id`,`ancestors`,`dept_name`,`dept_category`,`order_num`,`leader`,`phone`,`email`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time` FROM `sys_dept`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_dept`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_dept`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_dept backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_dept backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_dept` s LEFT JOIN `bak_sw2kra_20261103_sys_dept` b ON s.`dept_id`=b.`dept_id` WHERE b.`dept_id` IS NULL OR NOT((BINARY s.`dept_id` <=> BINARY b.`dept_id`) AND (BINARY s.`parent_id` <=> BINARY b.`parent_id`) AND (BINARY s.`ancestors` <=> BINARY b.`ancestors`) AND (BINARY s.`dept_name` <=> BINARY b.`dept_name`) AND (BINARY s.`dept_category` <=> BINARY b.`dept_category`) AND (BINARY s.`order_num` <=> BINARY b.`order_num`) AND (BINARY s.`leader` <=> BINARY b.`leader`) AND (BINARY s.`phone` <=> BINARY b.`phone`) AND (BINARY s.`email` <=> BINARY b.`email`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`del_flag` <=> BINARY b.`del_flag`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_dept backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_dept backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_user` (`user_id`,`dept_id`,`user_name`,`nick_name`,`user_type`,`email`,`phone_number`,`gender`,`avatar`,`password`,`status`,`del_flag`,`login_ip`,`login_date`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`,`level`,`parent_id`,`id_path`,`real_name`,`qq_number`,`reject_reason`) SELECT `user_id`,`dept_id`,`user_name`,`nick_name`,`user_type`,`email`,`phone_number`,`gender`,`avatar`,`password`,`status`,`del_flag`,`login_ip`,`login_date`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`,`level`,`parent_id`,`id_path`,`real_name`,`qq_number`,`reject_reason` FROM `sys_user`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_user`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_user`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_user` s LEFT JOIN `bak_sw2kra_20261103_sys_user` b ON s.`user_id`=b.`user_id` WHERE b.`user_id` IS NULL OR NOT((BINARY s.`user_id` <=> BINARY b.`user_id`) AND (BINARY s.`dept_id` <=> BINARY b.`dept_id`) AND (BINARY s.`user_name` <=> BINARY b.`user_name`) AND (BINARY s.`nick_name` <=> BINARY b.`nick_name`) AND (BINARY s.`user_type` <=> BINARY b.`user_type`) AND (BINARY s.`email` <=> BINARY b.`email`) AND (BINARY s.`phone_number` <=> BINARY b.`phone_number`) AND (BINARY s.`gender` <=> BINARY b.`gender`) AND (BINARY s.`avatar` <=> BINARY b.`avatar`) AND (BINARY s.`password` <=> BINARY b.`password`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`del_flag` <=> BINARY b.`del_flag`) AND (BINARY s.`login_ip` <=> BINARY b.`login_ip`) AND (BINARY s.`login_date` <=> BINARY b.`login_date`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`) AND (BINARY s.`level` <=> BINARY b.`level`) AND (BINARY s.`parent_id` <=> BINARY b.`parent_id`) AND (BINARY s.`id_path` <=> BINARY b.`id_path`) AND (BINARY s.`real_name` <=> BINARY b.`real_name`) AND (BINARY s.`qq_number` <=> BINARY b.`qq_number`) AND (BINARY s.`reject_reason` <=> BINARY b.`reject_reason`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_post` (`post_id`,`dept_id`,`post_code`,`post_category`,`post_name`,`post_sort`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `post_id`,`dept_id`,`post_code`,`post_category`,`post_name`,`post_sort`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_post`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_post`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_post`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_post backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_post backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_post` s LEFT JOIN `bak_sw2kra_20261103_sys_post` b ON s.`post_id`=b.`post_id` WHERE b.`post_id` IS NULL OR NOT((BINARY s.`post_id` <=> BINARY b.`post_id`) AND (BINARY s.`dept_id` <=> BINARY b.`dept_id`) AND (BINARY s.`post_code` <=> BINARY b.`post_code`) AND (BINARY s.`post_category` <=> BINARY b.`post_category`) AND (BINARY s.`post_name` <=> BINARY b.`post_name`) AND (BINARY s.`post_sort` <=> BINARY b.`post_sort`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`del_flag` <=> BINARY b.`del_flag`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_post backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_post backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_role` (`role_id`,`role_name`,`role_key`,`role_sort`,`data_scope`,`menu_check_strictly`,`dept_check_strictly`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `role_id`,`role_name`,`role_key`,`role_sort`,`data_scope`,`menu_check_strictly`,`dept_check_strictly`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_role`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_role`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_role`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_role backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_role backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_role` s LEFT JOIN `bak_sw2kra_20261103_sys_role` b ON s.`role_id`=b.`role_id` WHERE b.`role_id` IS NULL OR NOT((BINARY s.`role_id` <=> BINARY b.`role_id`) AND (BINARY s.`role_name` <=> BINARY b.`role_name`) AND (BINARY s.`role_key` <=> BINARY b.`role_key`) AND (BINARY s.`role_sort` <=> BINARY b.`role_sort`) AND (BINARY s.`data_scope` <=> BINARY b.`data_scope`) AND (BINARY s.`menu_check_strictly` <=> BINARY b.`menu_check_strictly`) AND (BINARY s.`dept_check_strictly` <=> BINARY b.`dept_check_strictly`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`del_flag` <=> BINARY b.`del_flag`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_role backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_role backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_menu` (`menu_id`,`menu_name`,`parent_id`,`order_num`,`path`,`component`,`query_param`,`is_frame`,`is_cache`,`menu_type`,`visible`,`status`,`perms`,`icon`,`active_menu`,`ext`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `menu_id`,`menu_name`,`parent_id`,`order_num`,`path`,`component`,`query_param`,`is_frame`,`is_cache`,`menu_type`,`visible`,`status`,`perms`,`icon`,`active_menu`,`ext`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_menu`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_menu`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_menu`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_menu backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_menu backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_menu` s LEFT JOIN `bak_sw2kra_20261103_sys_menu` b ON s.`menu_id`=b.`menu_id` WHERE b.`menu_id` IS NULL OR NOT((BINARY s.`menu_id` <=> BINARY b.`menu_id`) AND (BINARY s.`menu_name` <=> BINARY b.`menu_name`) AND (BINARY s.`parent_id` <=> BINARY b.`parent_id`) AND (BINARY s.`order_num` <=> BINARY b.`order_num`) AND (BINARY s.`path` <=> BINARY b.`path`) AND (BINARY s.`component` <=> BINARY b.`component`) AND (BINARY s.`query_param` <=> BINARY b.`query_param`) AND (BINARY s.`is_frame` <=> BINARY b.`is_frame`) AND (BINARY s.`is_cache` <=> BINARY b.`is_cache`) AND (BINARY s.`menu_type` <=> BINARY b.`menu_type`) AND (BINARY s.`visible` <=> BINARY b.`visible`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`perms` <=> BINARY b.`perms`) AND (BINARY s.`icon` <=> BINARY b.`icon`) AND (BINARY s.`active_menu` <=> BINARY b.`active_menu`) AND (BINARY s.`ext` <=> BINARY b.`ext`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_menu backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_menu backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_user_role` (`user_id`,`role_id`) SELECT `user_id`,`role_id` FROM `sys_user_role`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_user_role`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_user_role`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_role backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_role backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_user_role` s LEFT JOIN `bak_sw2kra_20261103_sys_user_role` b ON s.`user_id`=b.`user_id` AND s.`role_id`=b.`role_id` WHERE b.`user_id` IS NULL OR NOT((BINARY s.`user_id` <=> BINARY b.`user_id`) AND (BINARY s.`role_id` <=> BINARY b.`role_id`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_role backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_role backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_role_menu` (`role_id`,`menu_id`) SELECT `role_id`,`menu_id` FROM `sys_role_menu`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_role_menu`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_role_menu`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_role_menu backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_role_menu backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_role_menu` s LEFT JOIN `bak_sw2kra_20261103_sys_role_menu` b ON s.`role_id`=b.`role_id` AND s.`menu_id`=b.`menu_id` WHERE b.`role_id` IS NULL OR NOT((BINARY s.`role_id` <=> BINARY b.`role_id`) AND (BINARY s.`menu_id` <=> BINARY b.`menu_id`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_role_menu backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_role_menu backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_role_dept` (`role_id`,`dept_id`) SELECT `role_id`,`dept_id` FROM `sys_role_dept`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_role_dept`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_role_dept`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_role_dept backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_role_dept backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_role_dept` s LEFT JOIN `bak_sw2kra_20261103_sys_role_dept` b ON s.`role_id`=b.`role_id` AND s.`dept_id`=b.`dept_id` WHERE b.`role_id` IS NULL OR NOT((BINARY s.`role_id` <=> BINARY b.`role_id`) AND (BINARY s.`dept_id` <=> BINARY b.`dept_id`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_role_dept backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_role_dept backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_user_post` (`user_id`,`post_id`) SELECT `user_id`,`post_id` FROM `sys_user_post`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_user_post`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_user_post`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_post backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_post backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_user_post` s LEFT JOIN `bak_sw2kra_20261103_sys_user_post` b ON s.`user_id`=b.`user_id` AND s.`post_id`=b.`post_id` WHERE b.`user_id` IS NULL OR NOT((BINARY s.`user_id` <=> BINARY b.`user_id`) AND (BINARY s.`post_id` <=> BINARY b.`post_id`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_post backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_post backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_oper_log` (`oper_id`,`title`,`business_type`,`method`,`request_method`,`operator_type`,`oper_name`,`user_id`,`dept_id`,`dept_name`,`client_key`,`device_type`,`browser`,`os`,`oper_url`,`oper_ip`,`oper_location`,`oper_param`,`json_result`,`status`,`error_msg`,`oper_time`,`cost_time`) SELECT `oper_id`,`title`,`business_type`,`method`,`request_method`,`operator_type`,`oper_name`,`user_id`,`dept_id`,`dept_name`,`client_key`,`device_type`,`browser`,`os`,`oper_url`,`oper_ip`,`oper_location`,`oper_param`,`json_result`,`status`,`error_msg`,`oper_time`,`cost_time` FROM `sys_oper_log`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_oper_log`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_oper_log`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_oper_log backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_oper_log backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_oper_log` s LEFT JOIN `bak_sw2kra_20261103_sys_oper_log` b ON s.`oper_id`=b.`oper_id` WHERE b.`oper_id` IS NULL OR NOT((BINARY s.`oper_id` <=> BINARY b.`oper_id`) AND (BINARY s.`title` <=> BINARY b.`title`) AND (BINARY s.`business_type` <=> BINARY b.`business_type`) AND (BINARY s.`method` <=> BINARY b.`method`) AND (BINARY s.`request_method` <=> BINARY b.`request_method`) AND (BINARY s.`operator_type` <=> BINARY b.`operator_type`) AND (BINARY s.`oper_name` <=> BINARY b.`oper_name`) AND (BINARY s.`user_id` <=> BINARY b.`user_id`) AND (BINARY s.`dept_id` <=> BINARY b.`dept_id`) AND (BINARY s.`dept_name` <=> BINARY b.`dept_name`) AND (BINARY s.`client_key` <=> BINARY b.`client_key`) AND (BINARY s.`device_type` <=> BINARY b.`device_type`) AND (BINARY s.`browser` <=> BINARY b.`browser`) AND (BINARY s.`os` <=> BINARY b.`os`) AND (BINARY s.`oper_url` <=> BINARY b.`oper_url`) AND (BINARY s.`oper_ip` <=> BINARY b.`oper_ip`) AND (BINARY s.`oper_location` <=> BINARY b.`oper_location`) AND (BINARY s.`oper_param` <=> BINARY b.`oper_param`) AND (BINARY s.`json_result` <=> BINARY b.`json_result`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`error_msg` <=> BINARY b.`error_msg`) AND (BINARY s.`oper_time` <=> BINARY b.`oper_time`) AND (BINARY s.`cost_time` <=> BINARY b.`cost_time`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_oper_log backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_oper_log backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_dict_type` (`dict_id`,`dict_name`,`dict_type`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `dict_id`,`dict_name`,`dict_type`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_dict_type`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_dict_type`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_dict_type`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_dict_type backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_dict_type backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_dict_type` s LEFT JOIN `bak_sw2kra_20261103_sys_dict_type` b ON s.`dict_id`=b.`dict_id` WHERE b.`dict_id` IS NULL OR NOT((BINARY s.`dict_id` <=> BINARY b.`dict_id`) AND (BINARY s.`dict_name` <=> BINARY b.`dict_name`) AND (BINARY s.`dict_type` <=> BINARY b.`dict_type`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_dict_type backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_dict_type backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_dict_data` (`dict_code`,`dict_sort`,`dict_label`,`dict_value`,`dict_type`,`css_class`,`list_class`,`is_default`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `dict_code`,`dict_sort`,`dict_label`,`dict_value`,`dict_type`,`css_class`,`list_class`,`is_default`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_dict_data`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_dict_data`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_dict_data`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_dict_data backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_dict_data backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_dict_data` s LEFT JOIN `bak_sw2kra_20261103_sys_dict_data` b ON s.`dict_code`=b.`dict_code` WHERE b.`dict_code` IS NULL OR NOT((BINARY s.`dict_code` <=> BINARY b.`dict_code`) AND (BINARY s.`dict_sort` <=> BINARY b.`dict_sort`) AND (BINARY s.`dict_label` <=> BINARY b.`dict_label`) AND (BINARY s.`dict_value` <=> BINARY b.`dict_value`) AND (BINARY s.`dict_type` <=> BINARY b.`dict_type`) AND (BINARY s.`css_class` <=> BINARY b.`css_class`) AND (BINARY s.`list_class` <=> BINARY b.`list_class`) AND (BINARY s.`is_default` <=> BINARY b.`is_default`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_dict_data backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_dict_data backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_config` (`config_id`,`config_name`,`config_key`,`config_value`,`config_type`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `config_id`,`config_name`,`config_key`,`config_value`,`config_type`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_config`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_config`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_config`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_config backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_config backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_config` s LEFT JOIN `bak_sw2kra_20261103_sys_config` b ON s.`config_id`=b.`config_id` WHERE b.`config_id` IS NULL OR NOT((BINARY s.`config_id` <=> BINARY b.`config_id`) AND (BINARY s.`config_name` <=> BINARY b.`config_name`) AND (BINARY s.`config_key` <=> BINARY b.`config_key`) AND (BINARY s.`config_value` <=> BINARY b.`config_value`) AND (BINARY s.`config_type` <=> BINARY b.`config_type`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_config backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_config backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_login_info` (`info_id`,`user_name`,`client_key`,`device_type`,`ipaddr`,`login_location`,`browser`,`os`,`status`,`msg`,`login_time`) SELECT `info_id`,`user_name`,`client_key`,`device_type`,`ipaddr`,`login_location`,`browser`,`os`,`status`,`msg`,`login_time` FROM `sys_login_info`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_login_info`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_login_info`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_login_info backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_login_info backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_login_info` s LEFT JOIN `bak_sw2kra_20261103_sys_login_info` b ON s.`info_id`=b.`info_id` WHERE b.`info_id` IS NULL OR NOT((BINARY s.`info_id` <=> BINARY b.`info_id`) AND (BINARY s.`user_name` <=> BINARY b.`user_name`) AND (BINARY s.`client_key` <=> BINARY b.`client_key`) AND (BINARY s.`device_type` <=> BINARY b.`device_type`) AND (BINARY s.`ipaddr` <=> BINARY b.`ipaddr`) AND (BINARY s.`login_location` <=> BINARY b.`login_location`) AND (BINARY s.`browser` <=> BINARY b.`browser`) AND (BINARY s.`os` <=> BINARY b.`os`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`msg` <=> BINARY b.`msg`) AND (BINARY s.`login_time` <=> BINARY b.`login_time`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_login_info backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_login_info backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_notice` (`notice_id`,`notice_title`,`notice_type`,`notice_content`,`status`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `notice_id`,`notice_title`,`notice_type`,`notice_content`,`status`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_notice`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_notice`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_notice`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_notice backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_notice backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_notice` s LEFT JOIN `bak_sw2kra_20261103_sys_notice` b ON s.`notice_id`=b.`notice_id` WHERE b.`notice_id` IS NULL OR NOT((BINARY s.`notice_id` <=> BINARY b.`notice_id`) AND (BINARY s.`notice_title` <=> BINARY b.`notice_title`) AND (BINARY s.`notice_type` <=> BINARY b.`notice_type`) AND (BINARY s.`notice_content` <=> BINARY b.`notice_content`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_notice backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_notice backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_message` (`message_id`,`category`,`type`,`source`,`title`,`message`,`content`,`data_json`,`path`,`send_user_ids`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`) SELECT `message_id`,`category`,`type`,`source`,`title`,`message`,`content`,`data_json`,`path`,`send_user_ids`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time` FROM `sys_message`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_message`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_message`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_message backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_message backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_message` s LEFT JOIN `bak_sw2kra_20261103_sys_message` b ON s.`message_id`=b.`message_id` WHERE b.`message_id` IS NULL OR NOT((BINARY s.`message_id` <=> BINARY b.`message_id`) AND (BINARY s.`category` <=> BINARY b.`category`) AND (BINARY s.`type` <=> BINARY b.`type`) AND (BINARY s.`source` <=> BINARY b.`source`) AND (BINARY s.`title` <=> BINARY b.`title`) AND (BINARY s.`message` <=> BINARY b.`message`) AND (BINARY s.`content` <=> BINARY b.`content`) AND (BINARY s.`data_json` <=> BINARY b.`data_json`) AND (BINARY s.`path` <=> BINARY b.`path`) AND (BINARY s.`send_user_ids` <=> BINARY b.`send_user_ids`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_message backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_message backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_oss` (`oss_id`,`file_name`,`original_name`,`file_suffix`,`url`,`ext1`,`create_dept`,`create_time`,`create_by`,`update_time`,`update_by`,`service`) SELECT `oss_id`,`file_name`,`original_name`,`file_suffix`,`url`,`ext1`,`create_dept`,`create_time`,`create_by`,`update_time`,`update_by`,`service` FROM `sys_oss`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_oss`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_oss`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_oss backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_oss backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_oss` s LEFT JOIN `bak_sw2kra_20261103_sys_oss` b ON s.`oss_id`=b.`oss_id` WHERE b.`oss_id` IS NULL OR NOT((BINARY s.`oss_id` <=> BINARY b.`oss_id`) AND (BINARY s.`file_name` <=> BINARY b.`file_name`) AND (BINARY s.`original_name` <=> BINARY b.`original_name`) AND (BINARY s.`file_suffix` <=> BINARY b.`file_suffix`) AND (BINARY s.`url` <=> BINARY b.`url`) AND (BINARY s.`ext1` <=> BINARY b.`ext1`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`service` <=> BINARY b.`service`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_oss backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_oss backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_oss_config` (`oss_config_id`,`config_key`,`access_key`,`secret_key`,`bucket_name`,`prefix`,`endpoint`,`domain_url`,`is_https`,`region`,`access_policy`,`status`,`ext1`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) SELECT `oss_config_id`,`config_key`,`access_key`,`secret_key`,`bucket_name`,`prefix`,`endpoint`,`domain_url`,`is_https`,`region`,`access_policy`,`status`,`ext1`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`,`remark` FROM `sys_oss_config`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_oss_config`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_oss_config`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_oss_config backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_oss_config backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_oss_config` s LEFT JOIN `bak_sw2kra_20261103_sys_oss_config` b ON s.`oss_config_id`=b.`oss_config_id` WHERE b.`oss_config_id` IS NULL OR NOT((BINARY s.`oss_config_id` <=> BINARY b.`oss_config_id`) AND (BINARY s.`config_key` <=> BINARY b.`config_key`) AND (BINARY s.`access_key` <=> BINARY b.`access_key`) AND (BINARY s.`secret_key` <=> BINARY b.`secret_key`) AND (BINARY s.`bucket_name` <=> BINARY b.`bucket_name`) AND (BINARY s.`prefix` <=> BINARY b.`prefix`) AND (BINARY s.`endpoint` <=> BINARY b.`endpoint`) AND (BINARY s.`domain_url` <=> BINARY b.`domain_url`) AND (BINARY s.`is_https` <=> BINARY b.`is_https`) AND (BINARY s.`region` <=> BINARY b.`region`) AND (BINARY s.`access_policy` <=> BINARY b.`access_policy`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`ext1` <=> BINARY b.`ext1`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`) AND (BINARY s.`remark` <=> BINARY b.`remark`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_oss_config backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_oss_config backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_client` (`id`,`client_id`,`client_key`,`client_secret`,`grant_type`,`device_type`,`access_path`,`ip_whitelist`,`active_timeout`,`timeout`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time`) SELECT `id`,`client_id`,`client_key`,`client_secret`,`grant_type`,`device_type`,`access_path`,`ip_whitelist`,`active_timeout`,`timeout`,`status`,`del_flag`,`create_dept`,`create_by`,`create_time`,`update_by`,`update_time` FROM `sys_client`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_client`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_client`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_client backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_client backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_client` s LEFT JOIN `bak_sw2kra_20261103_sys_client` b ON s.`id`=b.`id` WHERE b.`id` IS NULL OR NOT((BINARY s.`id` <=> BINARY b.`id`) AND (BINARY s.`client_id` <=> BINARY b.`client_id`) AND (BINARY s.`client_key` <=> BINARY b.`client_key`) AND (BINARY s.`client_secret` <=> BINARY b.`client_secret`) AND (BINARY s.`grant_type` <=> BINARY b.`grant_type`) AND (BINARY s.`device_type` <=> BINARY b.`device_type`) AND (BINARY s.`access_path` <=> BINARY b.`access_path`) AND (BINARY s.`ip_whitelist` <=> BINARY b.`ip_whitelist`) AND (BINARY s.`active_timeout` <=> BINARY b.`active_timeout`) AND (BINARY s.`timeout` <=> BINARY b.`timeout`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`del_flag` <=> BINARY b.`del_flag`) AND (BINARY s.`create_dept` <=> BINARY b.`create_dept`) AND (BINARY s.`create_by` <=> BINARY b.`create_by`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`update_by` <=> BINARY b.`update_by`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_client backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_client backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_user_bind_platform` (`user_id`,`source_db`,`platform_busier_id`,`platform_busier_account`,`status`,`reject_reason`,`create_time`,`review_time`,`review_account`) SELECT `user_id`,`source_db`,`platform_busier_id`,`platform_busier_account`,`status`,`reject_reason`,`create_time`,`review_time`,`review_account` FROM `sys_user_bind_platform`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_user_bind_platform`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_user_bind_platform`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_bind_platform backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_bind_platform backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_user_bind_platform` s LEFT JOIN `bak_sw2kra_20261103_sys_user_bind_platform` b ON s.`user_id`=b.`user_id` AND s.`source_db`=b.`source_db` AND s.`platform_busier_id`=b.`platform_busier_id` WHERE b.`user_id` IS NULL OR NOT((BINARY s.`user_id` <=> BINARY b.`user_id`) AND (BINARY s.`source_db` <=> BINARY b.`source_db`) AND (BINARY s.`platform_busier_id` <=> BINARY b.`platform_busier_id`) AND (BINARY s.`platform_busier_account` <=> BINARY b.`platform_busier_account`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`reject_reason` <=> BINARY b.`reject_reason`) AND (BINARY s.`create_time` <=> BINARY b.`create_time`) AND (BINARY s.`review_time` <=> BINARY b.`review_time`) AND (BINARY s.`review_account` <=> BINARY b.`review_account`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_bind_platform backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_bind_platform backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_user_preference` (`user_id`,`include_sub_promote`,`idcard_dedup`,`update_time`) SELECT `user_id`,`include_sub_promote`,`idcard_dedup`,`update_time` FROM `sys_user_preference`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_user_preference`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_user_preference`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_preference backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_preference backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_user_preference` s LEFT JOIN `bak_sw2kra_20261103_sys_user_preference` b ON s.`user_id`=b.`user_id` WHERE b.`user_id` IS NULL OR NOT((BINARY s.`user_id` <=> BINARY b.`user_id`) AND (BINARY s.`include_sub_promote` <=> BINARY b.`include_sub_promote`) AND (BINARY s.`idcard_dedup` <=> BINARY b.`idcard_dedup`) AND (BINARY s.`update_time` <=> BINARY b.`update_time`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_user_preference backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_user_preference backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sj_job` (`id`,`namespace_id`,`biz_id`,`group_name`,`job_name`,`args_str`,`args_type`,`next_trigger_at`,`job_status`,`task_type`,`route_key`,`executor_type`,`executor_info`,`trigger_type`,`trigger_interval`,`block_strategy`,`executor_timeout`,`max_retry_times`,`parallel_num`,`retry_interval`,`bucket_index`,`resident`,`notify_ids`,`owner_id`,`labels`,`description`,`ext_attrs`,`deleted`,`create_dt`,`update_dt`) SELECT `id`,`namespace_id`,`biz_id`,`group_name`,`job_name`,`args_str`,`args_type`,`next_trigger_at`,`job_status`,`task_type`,`route_key`,`executor_type`,`executor_info`,`trigger_type`,`trigger_interval`,`block_strategy`,`executor_timeout`,`max_retry_times`,`parallel_num`,`retry_interval`,`bucket_index`,`resident`,`notify_ids`,`owner_id`,`labels`,`description`,`ext_attrs`,`deleted`,`create_dt`,`update_dt` FROM `sj_job`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sj_job`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sj_job`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sj_job backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sj_job backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sj_job` s LEFT JOIN `bak_sw2kra_20261103_sj_job` b ON s.`id`=b.`id` WHERE b.`id` IS NULL OR NOT((BINARY s.`id` <=> BINARY b.`id`) AND (BINARY s.`namespace_id` <=> BINARY b.`namespace_id`) AND (BINARY s.`biz_id` <=> BINARY b.`biz_id`) AND (BINARY s.`group_name` <=> BINARY b.`group_name`) AND (BINARY s.`job_name` <=> BINARY b.`job_name`) AND (BINARY s.`args_str` <=> BINARY b.`args_str`) AND (BINARY s.`args_type` <=> BINARY b.`args_type`) AND (BINARY s.`next_trigger_at` <=> BINARY b.`next_trigger_at`) AND (BINARY s.`job_status` <=> BINARY b.`job_status`) AND (BINARY s.`task_type` <=> BINARY b.`task_type`) AND (BINARY s.`route_key` <=> BINARY b.`route_key`) AND (BINARY s.`executor_type` <=> BINARY b.`executor_type`) AND (BINARY s.`executor_info` <=> BINARY b.`executor_info`) AND (BINARY s.`trigger_type` <=> BINARY b.`trigger_type`) AND (BINARY s.`trigger_interval` <=> BINARY b.`trigger_interval`) AND (BINARY s.`block_strategy` <=> BINARY b.`block_strategy`) AND (BINARY s.`executor_timeout` <=> BINARY b.`executor_timeout`) AND (BINARY s.`max_retry_times` <=> BINARY b.`max_retry_times`) AND (BINARY s.`parallel_num` <=> BINARY b.`parallel_num`) AND (BINARY s.`retry_interval` <=> BINARY b.`retry_interval`) AND (BINARY s.`bucket_index` <=> BINARY b.`bucket_index`) AND (BINARY s.`resident` <=> BINARY b.`resident`) AND (BINARY s.`notify_ids` <=> BINARY b.`notify_ids`) AND (BINARY s.`owner_id` <=> BINARY b.`owner_id`) AND (BINARY s.`labels` <=> BINARY b.`labels`) AND (BINARY s.`description` <=> BINARY b.`description`) AND (BINARY s.`ext_attrs` <=> BINARY b.`ext_attrs`) AND (BINARY s.`deleted` <=> BINARY b.`deleted`) AND (BINARY s.`create_dt` <=> BINARY b.`create_dt`) AND (BINARY s.`update_dt` <=> BINARY b.`update_dt`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sj_job backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sj_job backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_alert_rule` (`id`,`rule_name`,`rule_type`,`monitor_metric`,`stat_period_days`,`mom_direction`,`mom_threshold`,`unlogin_days`,`monitor_scope`,`warning_color`,`creator_id`,`enabled`,`is_deleted`,`created_at`,`updated_at`) SELECT `id`,`rule_name`,`rule_type`,`monitor_metric`,`stat_period_days`,`mom_direction`,`mom_threshold`,`unlogin_days`,`monitor_scope`,`warning_color`,`creator_id`,`enabled`,`is_deleted`,`created_at`,`updated_at` FROM `sys_alert_rule`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_alert_rule`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_alert_rule`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_alert_rule backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_alert_rule backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_alert_rule` s LEFT JOIN `bak_sw2kra_20261103_sys_alert_rule` b ON s.`id`=b.`id` WHERE b.`id` IS NULL OR NOT((BINARY s.`id` <=> BINARY b.`id`) AND (BINARY s.`rule_name` <=> BINARY b.`rule_name`) AND (BINARY s.`rule_type` <=> BINARY b.`rule_type`) AND (BINARY s.`monitor_metric` <=> BINARY b.`monitor_metric`) AND (BINARY s.`stat_period_days` <=> BINARY b.`stat_period_days`) AND (BINARY s.`mom_direction` <=> BINARY b.`mom_direction`) AND (BINARY s.`mom_threshold` <=> BINARY b.`mom_threshold`) AND (BINARY s.`unlogin_days` <=> BINARY b.`unlogin_days`) AND (BINARY s.`monitor_scope` <=> BINARY b.`monitor_scope`) AND (BINARY s.`warning_color` <=> BINARY b.`warning_color`) AND (BINARY s.`creator_id` <=> BINARY b.`creator_id`) AND (BINARY s.`enabled` <=> BINARY b.`enabled`) AND (BINARY s.`is_deleted` <=> BINARY b.`is_deleted`) AND (BINARY s.`created_at` <=> BINARY b.`created_at`) AND (BINARY s.`updated_at` <=> BINARY b.`updated_at`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_alert_rule backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_alert_rule backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_alert_record` (`id`,`platform_code`,`platform_name`,`rule_id`,`rule_name`,`rule_type`,`monitor_metric`,`target_promote_id`,`target_promote_name`,`business_id`,`business_name`,`alert_content`,`status`,`alert_date`,`created_at`,`updated_at`) SELECT `id`,`platform_code`,`platform_name`,`rule_id`,`rule_name`,`rule_type`,`monitor_metric`,`target_promote_id`,`target_promote_name`,`business_id`,`business_name`,`alert_content`,`status`,`alert_date`,`created_at`,`updated_at` FROM `sys_alert_record`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_alert_record`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_alert_record`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_alert_record backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_alert_record backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_alert_record` s LEFT JOIN `bak_sw2kra_20261103_sys_alert_record` b ON s.`id`=b.`id` WHERE b.`id` IS NULL OR NOT((BINARY s.`id` <=> BINARY b.`id`) AND (BINARY s.`platform_code` <=> BINARY b.`platform_code`) AND (BINARY s.`platform_name` <=> BINARY b.`platform_name`) AND (BINARY s.`rule_id` <=> BINARY b.`rule_id`) AND (BINARY s.`rule_name` <=> BINARY b.`rule_name`) AND (BINARY s.`rule_type` <=> BINARY b.`rule_type`) AND (BINARY s.`monitor_metric` <=> BINARY b.`monitor_metric`) AND (BINARY s.`target_promote_id` <=> BINARY b.`target_promote_id`) AND (BINARY s.`target_promote_name` <=> BINARY b.`target_promote_name`) AND (BINARY s.`business_id` <=> BINARY b.`business_id`) AND (BINARY s.`business_name` <=> BINARY b.`business_name`) AND (BINARY s.`alert_content` <=> BINARY b.`alert_content`) AND (BINARY s.`status` <=> BINARY b.`status`) AND (BINARY s.`alert_date` <=> BINARY b.`alert_date`) AND (BINARY s.`created_at` <=> BINARY b.`created_at`) AND (BINARY s.`updated_at` <=> BINARY b.`updated_at`) AND (BINARY s.`unclosed_flag` <=> BINARY b.`unclosed_flag`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_alert_record backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_alert_record backup bytes'; END IF; INSERT INTO `bak_sw2kra_20261103_sys_alert_operation_log` (`id`,`alert_id`,`operator_id`,`operator_name`,`log_type`,`action_detail`,`note_content`,`attachment_ids`,`created_at`) SELECT `id`,`alert_id`,`operator_id`,`operator_name`,`log_type`,`action_detail`,`note_content`,`attachment_ids`,`created_at` FROM `sys_alert_operation_log`; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_alert_operation_log`) INTO v_actual; SELECT (SELECT COUNT(*) FROM `sys_alert_operation_log`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_alert_operation_log backup rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_alert_operation_log backup rows'; END IF; SELECT (SELECT COUNT(*) FROM `sys_alert_operation_log` s LEFT JOIN `bak_sw2kra_20261103_sys_alert_operation_log` b ON s.`id`=b.`id` WHERE b.`id` IS NULL OR NOT((BINARY s.`id` <=> BINARY b.`id`) AND (BINARY s.`alert_id` <=> BINARY b.`alert_id`) AND (BINARY s.`operator_id` <=> BINARY b.`operator_id`) AND (BINARY s.`operator_name` <=> BINARY b.`operator_name`) AND (BINARY s.`log_type` <=> BINARY b.`log_type`) AND (BINARY s.`action_detail` <=> BINARY b.`action_detail`) AND (BINARY s.`note_content` <=> BINARY b.`note_content`) AND (BINARY s.`attachment_ids` <=> BINARY b.`attachment_ids`) AND (BINARY s.`created_at` <=> BINARY b.`created_at`))) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('backup','sys_alert_operation_log backup bytes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='sys_alert_operation_log backup bytes'; END IF; COMMIT; SELECT '旧框架备份已校验' AS result; -- 四、按 Kra 当前定义创建目标表,并增加商务账号和岗位扩展字段。 CREATE TABLE `sys_schema_migrations` (`id` varchar(255),PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_users` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`uuid` char(36),`username` varchar(191),`password` longtext,`nick_name` longtext,`header_img` longtext,`authority_id` bigint unsigned,`dept_id` bigint unsigned,`phone` longtext,`email` longtext,`enable` bigint DEFAULT 1,`origin_setting` text,`password_updated_at` datetime(3) NULL,`must_change_password` boolean,PRIMARY KEY (`id`),INDEX `idx_sys_users_deleted_at` (`deleted_at`),INDEX `idx_sys_users_uuid` (`uuid`),INDEX `idx_sys_users_username` (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_authorities` (`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`authority_id` bigint unsigned AUTO_INCREMENT,`authority_name` longtext,`parent_id` bigint unsigned,`data_scope` bigint DEFAULT 1,`default_router` varchar(191) DEFAULT 'dashboard',PRIMARY KEY (`authority_id`),INDEX `idx_sys_authorities_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_base_menus` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`menu_level` bigint unsigned,`parent_id` bigint unsigned,`path` longtext,`name` longtext,`hidden` boolean,`component` longtext,`sort` bigint,`active_name` longtext,`keep_alive` boolean,`default_menu` boolean,`title` longtext,`icon` longtext,`close_tab` boolean,`transition_type` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_base_menus_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_user_authority` (`sys_user_id` bigint unsigned,`sys_authority_authority_id` bigint unsigned) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_authority_menus` (`sys_authority_authority_id` bigint unsigned,`sys_base_menu_id` bigint unsigned) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_base_menu_parameters` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`sys_base_menu_id` bigint unsigned,`type` longtext,`key` longtext,`value` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_base_menu_parameters_deleted_at` (`deleted_at`),INDEX `idx_sys_base_menu_parameters_menu_id` (`sys_base_menu_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_apis` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`path` longtext,`description` longtext,`api_group` longtext,`method` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_apis_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_ignore_apis` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`path` longtext,`method` varchar(191) DEFAULT 'POST',PRIMARY KEY (`id`),INDEX `idx_sys_ignore_apis_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_authority_apis` (`authority_id` bigint unsigned,`api_id` bigint unsigned,PRIMARY KEY (`authority_id`,`api_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `casbin_rule` (`id` bigint unsigned AUTO_INCREMENT,`ptype` varchar(100),`v0` varchar(100),`v1` varchar(100),`v2` varchar(100),`v3` varchar(100),`v4` varchar(100),`v5` varchar(100),PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_base_menu_btns` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` longtext,`desc` longtext,`sys_base_menu_id` bigint unsigned,PRIMARY KEY (`id`),INDEX `idx_sys_base_menu_btns_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_authority_btns` (`authority_id` bigint unsigned,`sys_menu_id` bigint unsigned,`sys_base_menu_btn_id` bigint unsigned) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_departments` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` varchar(191),`parent_id` bigint unsigned,`ancestors` longtext,`sort` bigint,`leader_id` bigint unsigned,`status` boolean DEFAULT true,PRIMARY KEY (`id`),INDEX `idx_sys_departments_deleted_at` (`deleted_at`),INDEX `idx_sys_departments_name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_positions` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` varchar(191),`code` longtext,`sort` bigint,`status` boolean DEFAULT true,`remark` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_positions_deleted_at` (`deleted_at`),INDEX `idx_sys_positions_name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_user_departments` (`sys_user_id` bigint unsigned,`sys_department_id` bigint unsigned) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_user_positions` (`sys_user_id` bigint unsigned,`sys_position_id` bigint unsigned) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_authority_departments` (`sys_authority_authority_id` bigint unsigned,`sys_department_id` bigint unsigned,INDEX `idx_sys_authority_departments_authority_id` (`sys_authority_authority_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_dictionaries` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` longtext,`type` longtext,`status` boolean,`desc` longtext,`parent_id` bigint unsigned,PRIMARY KEY (`id`),INDEX `idx_sys_dictionaries_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_dictionary_details` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`label` longtext,`value` longtext,`extend` longtext,`status` boolean,`sort` bigint,`sys_dictionary_id` bigint unsigned,`parent_id` bigint unsigned,`level` bigint,`path` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_dictionary_details_deleted_at` (`deleted_at`),INDEX `idx_sys_dictionary_details_dictionary_id` (`sys_dictionary_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_params` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` longtext,`key` longtext,`value` longtext,`desc` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_params_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_api_tokens` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`user_id` bigint unsigned,`authority_id` bigint unsigned,`token` text,`status` boolean,`expires_at` datetime(3) NULL,`remark` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_api_tokens_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `jwt_blacklists` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`jwt` text,PRIMARY KEY (`id`),INDEX `idx_jwt_blacklists_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_security_config` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`captcha_open` bigint DEFAULT 0,`captcha_timeout` bigint DEFAULT 3600,`key_long` bigint DEFAULT 6,`img_width` bigint DEFAULT 240,`img_height` bigint DEFAULT 80,`pwd_min_length` bigint DEFAULT 8,`pwd_require_upper` boolean DEFAULT false,`pwd_require_lower` boolean DEFAULT false,`pwd_require_digit` boolean DEFAULT false,`pwd_require_special` boolean DEFAULT false,`limit_enable` boolean DEFAULT false,`limit_window` bigint DEFAULT 60,`limit_count` bigint DEFAULT 30,`lock_enable` boolean DEFAULT false,`lock_threshold` bigint DEFAULT 5,`lock_duration` bigint DEFAULT 30,`pwd_expire_enable` boolean DEFAULT false,`pwd_expire_days` bigint DEFAULT 90,`force_new_user_change_password` boolean DEFAULT false,PRIMARY KEY (`id`),INDEX `idx_sys_security_config_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_versions` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`version_name` longtext,`version_code` longtext,`description` longtext,`version_data` text,PRIMARY KEY (`id`),INDEX `idx_sys_versions_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_export_templates` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`db_name` longtext,`name` longtext,`table_name` longtext,`template_id` longtext,`template_info` text,`sql` text,`import_sql` text,`limit` bigint,`order` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_export_templates_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_export_template_condition` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`template_id` varchar(191),`from` longtext,`column` longtext,`operator` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_export_template_condition_deleted_at` (`deleted_at`),INDEX `idx_sys_export_template_condition_template_id` (`template_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_export_template_join` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`template_id` varchar(191),`joins` longtext,`table` longtext,`on` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_export_template_join_deleted_at` (`deleted_at`),INDEX `idx_sys_export_template_join_template_id` (`template_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_operation_records` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`ip` longtext,`method` longtext,`path` longtext,`status` bigint,`latency_ms` bigint,`agent` text,`error_message` longtext,`body` text,`resp` text,`user_id` bigint unsigned,`request_id` varchar(191),`trace_id` varchar(191),`device_id` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_operation_records_deleted_at` (`deleted_at`),INDEX `idx_sys_operation_records_request_id` (`request_id`),INDEX `idx_sys_operation_records_trace_id` (`trace_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_login_logs` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`username` longtext,`ip` longtext,`status` boolean,`error_message` longtext,`agent` longtext,`user_id` bigint unsigned,PRIMARY KEY (`id`),INDEX `idx_sys_login_logs_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_data_access_logs` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`event_type` longtext,`target_table` longtext,`operation` longtext,`user_id` bigint unsigned,`authority_id` bigint unsigned,`scope` bigint,`request_id` longtext,`method` longtext,`path` longtext,`detail` longtext,PRIMARY KEY (`id`),INDEX `idx_sys_data_access_logs_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_error` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`form` text,`info` text,`level` longtext,`request_id` varchar(191),`trace_id` varchar(191),`solution` text,`status` varchar(191) DEFAULT '未处理',PRIMARY KEY (`id`),INDEX `idx_sys_error_deleted_at` (`deleted_at`),INDEX `idx_sys_error_request_id` (`request_id`),INDEX `idx_sys_error_trace_id` (`trace_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `media_file_upload_and_downloads` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` longtext,`class_id` bigint,`url` longtext,`tag` longtext,`key` varchar(191),`size` bigint,`mime` longtext,`md5` varchar(191),`user_id` bigint unsigned,PRIMARY KEY (`id`),INDEX `idx_media_file_upload_and_downloads_deleted_at` (`deleted_at`),INDEX `idx_media_file_upload_and_downloads_key` (`key`),INDEX `idx_media_file_upload_and_downloads_md5` (`md5`),INDEX `idx_media_file_upload_and_downloads_user_id` (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `media_attachment_category` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` longtext,`pid` bigint unsigned,PRIMARY KEY (`id`),INDEX `idx_media_attachment_category_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `media_uploads` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`user_id` bigint unsigned,`file_name` longtext,`file_hash` varchar(191),`file_size` bigint,`chunk_size` bigint,`chunk_total` bigint,`status` longtext,`storage_key` longtext,`media_id` bigint unsigned,PRIMARY KEY (`id`),INDEX `idx_media_uploads_deleted_at` (`deleted_at`),INDEX `idx_media_uploads_user_id` (`user_id`),INDEX `idx_media_uploads_file_hash` (`file_hash`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `media_upload_chunks` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`upload_id` bigint unsigned,`chunk_index` bigint,`chunk_hash` longtext,`size` bigint,PRIMARY KEY (`id`),INDEX `idx_media_upload_chunks_deleted_at` (`deleted_at`),UNIQUE INDEX `idx_upload_chunk` (`upload_id`,`chunk_index`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_announcements` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`title` longtext,`content` text,`user_id` bigint,`attachments` JSON,PRIMARY KEY (`id`),INDEX `idx_sys_announcements_deleted_at` (`deleted_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_integration_configs` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`kind` varchar(32) NOT NULL,`provider` varchar(64) NOT NULL,`enabled` boolean,`config` text NOT NULL,PRIMARY KEY (`id`),UNIQUE INDEX `idx_integration_kind_provider` (`kind`,`provider`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_timed_tasks` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` varchar(191),`description` longtext,`spec` longtext,`with_seconds` boolean,`executor_type` longtext,`method_name` longtext,`params` JSON,`http_url` longtext,`http_method` longtext,`http_header` JSON,`http_body` text,`http_allow_private` boolean,`enabled` boolean,PRIMARY KEY (`id`),INDEX `idx_sys_timed_tasks_deleted_at` (`deleted_at`),INDEX `idx_sys_timed_tasks_name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_timed_task_logs` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`task_id` bigint unsigned,`task_name` longtext,`trigger_type` longtext,`started_at` datetime(3) NULL,`finished_at` datetime(3) NULL,`duration_ms` bigint,`status` longtext,`error_msg` text,`output` text,PRIMARY KEY (`id`),INDEX `idx_sys_timed_task_logs_deleted_at` (`deleted_at`),INDEX `idx_sys_timed_task_logs_task_id` (`task_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `pay_orders` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`trade_no` varchar(128) NOT NULL,`provider` varchar(64) NOT NULL,`provider_trade_no` varchar(128),`query_id` varchar(128),`business_type` varchar(64) NOT NULL,`business_id` varchar(128) NOT NULL,`subject` varchar(256) NOT NULL,`payment_mode` varchar(32) NOT NULL DEFAULT 'external',`original_amount` bigint NOT NULL DEFAULT 0,`amount` bigint NOT NULL,`paid_amount` bigint NOT NULL DEFAULT 0,`payer_paid_amount` bigint NOT NULL DEFAULT 0,`cash_paid_amount` bigint NOT NULL DEFAULT 0,`point_paid_amount` bigint NOT NULL DEFAULT 0,`discount_amount` bigint NOT NULL DEFAULT 0,`provider_discount_amount` bigint NOT NULL DEFAULT 0,`merchant_discount_amount` bigint NOT NULL DEFAULT 0,`settlement_amount` bigint NOT NULL DEFAULT 0,`currency` varchar(16) NOT NULL,`payer_currency` varchar(16),`amount_breakdown_known` boolean NOT NULL DEFAULT false,`payment_status` varchar(32) NOT NULL,`provider_status` varchar(64),`fulfillment_status` varchar(32) NOT NULL,`refund_status` varchar(32) NOT NULL,`refunded_amount` bigint NOT NULL DEFAULT 0,`refund_requested_amount` bigint NOT NULL DEFAULT 0,`refund_no` varchar(128),`confirmation_id` varchar(36) NOT NULL,`request_fingerprint` varchar(64) NOT NULL,`create_payload` text,`extra` text,`last_event_id` varchar(128),`last_payload_hash` varchar(64),`last_error` varchar(512),`fulfillment_token` varchar(36),`refund_token` varchar(36),`version` bigint unsigned NOT NULL DEFAULT 1,`paid_at` datetime(3) NULL,`fulfilled_at` datetime(3) NULL,`refunded_at` datetime(3) NULL,`fulfillment_lease_until` datetime(3) NULL,`refund_lease_until` datetime(3) NULL,PRIMARY KEY (`id`),UNIQUE INDEX `idx_pay_orders_provider_trade` (`trade_no`,`provider`),UNIQUE INDEX `idx_pay_orders_provider_provider_trade` (`provider`,`provider_trade_no`),INDEX `idx_pay_orders_provider` (`provider`),INDEX `idx_pay_orders_business` (`business_type`,`business_id`),INDEX `idx_pay_orders_payment_mode` (`payment_mode`),INDEX `idx_pay_orders_payment_status` (`payment_status`),INDEX `idx_pay_orders_fulfillment_status` (`fulfillment_status`),INDEX `idx_pay_orders_refund_status` (`refund_status`),INDEX `idx_pay_orders_refund_no` (`refund_no`),UNIQUE INDEX `idx_pay_orders_confirmation_id` (`confirmation_id`),INDEX `idx_pay_orders_request_fingerprint` (`request_fingerprint`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; CREATE TABLE `pay_events` (`id` bigint unsigned AUTO_INCREMENT,`provider` varchar(64) NOT NULL,`trade_no` varchar(128) NOT NULL,`type` varchar(64) NOT NULL,`source` varchar(64) NOT NULL,`status` varchar(64),`provider_status` varchar(64),`message` varchar(512),`event_id` varchar(128),`payload_hash` varchar(64),`amount` bigint NOT NULL DEFAULT 0,`currency` varchar(16),`operator_id` bigint unsigned,`operator_name` varchar(128),`client_ip` varchar(64),`user_agent` varchar(512),`device_id` varchar(128),`created_at` datetime(3) NULL,PRIMARY KEY (`id`),INDEX `idx_pay_events_order` (`provider`,`trade_no`),INDEX `idx_pay_events_type` (`type`),INDEX `idx_pay_events_source` (`source`),INDEX `idx_pay_events_event_id` (`event_id`),INDEX `idx_pay_events_operator_id` (`operator_id`),INDEX `idx_pay_events_created_at` (`created_at`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; ALTER TABLE sys_users ADD COLUMN level TINYINT UNSIGNED NOT NULL DEFAULT 0,ADD COLUMN parent_id BIGINT UNSIGNED NOT NULL DEFAULT 0,ADD COLUMN id_path VARCHAR(255) NOT NULL DEFAULT '0',ADD COLUMN real_name VARCHAR(30) NOT NULL DEFAULT '',ADD COLUMN qq_number VARCHAR(20) NOT NULL DEFAULT '',ADD COLUMN business_status TINYINT UNSIGNED NOT NULL DEFAULT 0,ADD COLUMN reject_reason VARCHAR(200) NOT NULL DEFAULT '',ADD INDEX idx_sys_users_business_parent(parent_id); ALTER TABLE sys_positions ADD COLUMN dept_id BIGINT UNSIGNED NULL,ADD INDEX idx_sys_positions_department(dept_id); CREATE TABLE sw_kra_id_map (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,entity VARCHAR(32) NOT NULL,old_id VARCHAR(64) NOT NULL,new_id BIGINT UNSIGNED NULL,UNIQUE KEY uk_source(entity,old_id),UNIQUE KEY uk_target(entity,new_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; CREATE TABLE sw_kra_menu_permissions (source_menu_id BIGINT UNSIGNED PRIMARY KEY,source_permission VARCHAR(160),button_key VARCHAR(160)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE sw_kra_api_contract (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,method VARCHAR(12),source_path VARCHAR(255),target_path VARCHAR(255),source_permission VARCHAR(160),controller VARCHAR(80),implementation_status VARCHAR(32) NOT NULL DEFAULT 'pending_go_handler') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; START TRANSACTION; -- 五、写入 Kra 必需初始数据,并按 ID 映射转换用户、角色、部门及其他框架数据。 INSERT INTO `casbin_rule` (`id`,`ptype`,`v0`,`v1`,`v2`,`v3`,`v4`,`v5`) VALUES (1,'p','888','/integration/configs/:kind','GET','','',''), (2,'p','888','/integration/configs/:kind/:provider','DELETE','','',''), (3,'p','888','/integration/configs/:kind/:provider','GET','','',''), (4,'p','888','/integration/configs/:kind/:provider','PUT','','',''), (5,'p','888','/integration/configs/:kind/:provider/test','POST','','',''), (6,'p','888','/integration/sms/:provider/send','POST','','',''), (7,'p','888','/payment/create','POST','','',''), (8,'p','888','/payment/fulfill','POST','','',''), (9,'p','888','/payment/order','POST','','',''), (10,'p','888','/payment/orders','GET','','',''), (11,'p','888','/payment/orders/:provider/:tradeNo','GET','','',''), (12,'p','888','/payment/orders/:provider/:tradeNo/events','GET','','',''), (13,'p','888','/payment/orders/:provider/:tradeNo/fulfill','POST','','',''), (14,'p','888','/payment/orders/:provider/:tradeNo/refund','POST','','',''), (15,'p','888','/payment/orders/summary','GET','','',''), (16,'p','888','/payment/providers/:provider/test','POST','','',''), (17,'p','888','/payment/query','POST','','',''), (18,'p','888','/payment/refund','POST','','',''), (19,'p','888','/api/createApi','POST','','',''), (20,'p','888','/api/deleteApi','POST','','',''), (21,'p','888','/api/deleteApisByIds','DELETE','','',''), (22,'p','888','/api/enterSyncApi','POST','','',''), (23,'p','888','/api/getAllApis','POST','','',''), (24,'p','888','/api/getApiById','POST','','',''), (25,'p','888','/api/getApiGroups','GET','','',''), (26,'p','888','/api/getApiList','POST','','',''), (27,'p','888','/api/getApiRoles','GET','','',''), (28,'p','888','/api/ignoreApi','POST','','',''), (29,'p','888','/api/setApiRoles','POST','','',''), (30,'p','888','/api/syncApi','GET','','',''), (31,'p','888','/api/updateApi','POST','','',''), (32,'p','888','/attachmentCategory/addCategory','POST','','',''), (33,'p','888','/attachmentCategory/deleteCategory','POST','','',''), (34,'p','888','/attachmentCategory/getCategoryList','GET','','',''), (35,'p','888','/authority/copyAuthority','POST','','',''), (36,'p','888','/authority/createAuthority','POST','','',''), (37,'p','888','/authority/deleteAuthority','POST','','',''), (38,'p','888','/authority/getAuthorityList','POST','','',''), (39,'p','888','/authority/getDataScopeDepts','GET','','',''), (40,'p','888','/authority/getUsersByAuthority','GET','','',''), (41,'p','888','/authority/setDataScope','POST','','',''), (42,'p','888','/authority/setRoleUsers','POST','','',''), (43,'p','888','/authority/updateAuthority','PUT','','',''), (44,'p','888','/authorityBtn/canRemoveAuthorityBtn','POST','','',''), (45,'p','888','/authorityBtn/getAuthorityBtn','POST','','',''), (46,'p','888','/authorityBtn/setAuthorityBtn','POST','','',''), (47,'p','888','/casbin/getPolicyPathByAuthorityId','POST','','',''), (48,'p','888','/casbin/updateCasbin','POST','','',''), (49,'p','888','/dataAccessLog/deleteDataAccessLogByIds','DELETE','','',''), (50,'p','888','/dataAccessLog/getDataAccessLogList','POST','','',''), (51,'p','888','/department/createDepartment','POST','','',''), (52,'p','888','/department/deleteDepartment','DELETE','','',''), (53,'p','888','/department/findDepartment','GET','','',''), (54,'p','888','/department/getDepartmentList','POST','','',''), (55,'p','888','/department/getDepartmentUsers','GET','','',''), (56,'p','888','/department/setDepartmentUsers','POST','','',''), (57,'p','888','/department/updateDepartment','PUT','','',''), (58,'p','888','/email/emailTest','POST','','',''), (59,'p','888','/email/sendEmail','POST','','',''), (60,'p','888','/fileUploadAndDownload/deleteFile','POST','','',''), (61,'p','888','/fileUploadAndDownload/deleteFiles','POST','','',''), (62,'p','888','/fileUploadAndDownload/editFileName','POST','','',''), (63,'p','888','/fileUploadAndDownload/findFile','GET','','',''), (64,'p','888','/fileUploadAndDownload/getFileList','POST','','',''), (65,'p','888','/fileUploadAndDownload/importURL','POST','','',''), (66,'p','888','/fileUploadAndDownload/listOssFiles','POST','','',''), (67,'p','888','/fileUploadAndDownload/upload','POST','','',''), (68,'p','888','/info/createInfo','POST','','',''), (69,'p','888','/info/deleteInfo','DELETE','','',''), (70,'p','888','/info/deleteInfoByIds','DELETE','','',''), (71,'p','888','/info/findInfo','GET','','',''), (72,'p','888','/info/getInfoDataSource','GET','','',''), (73,'p','888','/info/getInfoList','GET','','',''), (74,'p','888','/info/updateInfo','PUT','','',''), (75,'p','888','/jwt/jsonInBlacklist','POST','','',''), (76,'p','888','/logViewer/content','GET','','',''), (77,'p','888','/logViewer/dates','GET','','',''), (78,'p','888','/logViewer/files','GET','','',''), (79,'p','888','/mediaUpload/:uploadId','DELETE','','',''), (80,'p','888','/mediaUpload/chunk','POST','','',''), (81,'p','888','/mediaUpload/complete','POST','','',''), (82,'p','888','/mediaUpload/init','POST','','',''), (83,'p','888','/menu/addBaseMenu','POST','','',''), (84,'p','888','/menu/addMenuAuthority','POST','','',''), (85,'p','888','/menu/deleteBaseMenu','POST','','',''), (86,'p','888','/menu/getBaseMenuById','POST','','',''), (87,'p','888','/menu/getBaseMenuTree','POST','','',''), (88,'p','888','/menu/getMenu','POST','','',''), (89,'p','888','/menu/getMenuAuthority','POST','','',''), (90,'p','888','/menu/getMenuList','POST','','',''), (91,'p','888','/menu/getMenuRoles','GET','','',''), (92,'p','888','/menu/setMenuRoles','POST','','',''), (93,'p','888','/menu/updateBaseMenu','POST','','',''), (94,'p','888','/payment/callback/:provider','POST','','',''), (95,'p','888','/position/createPosition','POST','','',''), (96,'p','888','/position/deletePosition','DELETE','','',''), (97,'p','888','/position/findPosition','GET','','',''), (98,'p','888','/position/getPositionList','POST','','',''), (99,'p','888','/position/getPositionUsers','GET','','',''), (100,'p','888','/position/setPositionUsers','POST','','',''), (101,'p','888','/position/updatePosition','PUT','','',''), (102,'p','888','/securityConfig/getSecurityConfig','GET','','',''), (103,'p','888','/securityConfig/setSecurityConfig','POST','','',''), (104,'p','888','/sysApiToken/createApiToken','POST','','',''), (105,'p','888','/sysApiToken/deleteApiToken','POST','','',''), (106,'p','888','/sysApiToken/getApiTokenList','POST','','',''), (107,'p','888','/sysDictionary/createSysDictionary','POST','','',''), (108,'p','888','/sysDictionary/deleteSysDictionary','DELETE','','',''), (109,'p','888','/sysDictionary/exportSysDictionary','GET','','',''), (110,'p','888','/sysDictionary/findSysDictionary','GET','','',''), (111,'p','888','/sysDictionary/getSysDictionaryList','GET','','',''), (112,'p','888','/sysDictionary/getSysDictionaryListWithDetails','GET','','',''), (113,'p','888','/sysDictionary/importSysDictionary','POST','','',''), (114,'p','888','/sysDictionary/updateSysDictionary','PUT','','',''), (115,'p','888','/sysDictionaryDetail/createSysDictionaryDetail','POST','','',''), (116,'p','888','/sysDictionaryDetail/deleteSysDictionaryDetail','DELETE','','',''), (117,'p','888','/sysDictionaryDetail/findSysDictionaryDetail','GET','','',''), (118,'p','888','/sysDictionaryDetail/getDictionaryDetailsByParent','GET','','',''), (119,'p','888','/sysDictionaryDetail/getDictionaryPath','GET','','',''), (120,'p','888','/sysDictionaryDetail/getDictionaryTreeList','GET','','',''), (121,'p','888','/sysDictionaryDetail/getDictionaryTreeListByType','GET','','',''), (122,'p','888','/sysDictionaryDetail/getSysDictionaryDetailList','GET','','',''), (123,'p','888','/sysDictionaryDetail/updateSysDictionaryDetail','PUT','','',''), (124,'p','888','/sysError/createSysError','POST','','',''), (125,'p','888','/sysError/deleteSysError','DELETE','','',''), (126,'p','888','/sysError/deleteSysErrorByIds','DELETE','','',''), (127,'p','888','/sysError/findSysError','GET','','',''), (128,'p','888','/sysError/getSysErrorList','GET','','',''), (129,'p','888','/sysError/updateSysError','PUT','','',''), (130,'p','888','/sysExportTemplate/createSysExportTemplate','POST','','',''), (131,'p','888','/sysExportTemplate/deleteSysExportTemplate','DELETE','','',''), (132,'p','888','/sysExportTemplate/deleteSysExportTemplateByIds','DELETE','','',''), (133,'p','888','/sysExportTemplate/exportExcel','GET','','',''), (134,'p','888','/sysExportTemplate/exportExcelByToken','GET','','',''), (135,'p','888','/sysExportTemplate/exportTemplate','GET','','',''), (136,'p','888','/sysExportTemplate/exportTemplateByToken','GET','','',''), (137,'p','888','/sysExportTemplate/findSysExportTemplate','GET','','',''), (138,'p','888','/sysExportTemplate/getSysExportTemplateList','GET','','',''), (139,'p','888','/sysExportTemplate/importExcel','POST','','',''), (140,'p','888','/sysExportTemplate/previewSQL','GET','','',''), (141,'p','888','/sysExportTemplate/updateSysExportTemplate','PUT','','',''), (142,'p','888','/sysLoginLog/deleteLoginLog','DELETE','','',''), (143,'p','888','/sysLoginLog/deleteLoginLogByIds','DELETE','','',''), (144,'p','888','/sysLoginLog/findLoginLog','GET','','',''), (145,'p','888','/sysLoginLog/getLoginLogList','GET','','',''), (146,'p','888','/sysOperationRecord/deleteSysOperationRecord','DELETE','','',''), (147,'p','888','/sysOperationRecord/deleteSysOperationRecordByIds','DELETE','','',''), (148,'p','888','/sysOperationRecord/findSysOperationRecord','GET','','',''), (149,'p','888','/sysOperationRecord/getSysOperationRecordList','GET','','',''), (150,'p','888','/sysParams/createSysParams','POST','','',''), (151,'p','888','/sysParams/deleteSysParams','DELETE','','',''), (152,'p','888','/sysParams/deleteSysParamsByIds','DELETE','','',''), (153,'p','888','/sysParams/findSysParams','GET','','',''), (154,'p','888','/sysParams/getSysParam','GET','','',''), (155,'p','888','/sysParams/getSysParamsList','GET','','',''), (156,'p','888','/sysParams/updateSysParams','PUT','','',''), (157,'p','888','/sysVersion/deleteSysVersion','DELETE','','',''), (158,'p','888','/sysVersion/deleteSysVersionByIds','DELETE','','',''), (159,'p','888','/sysVersion/downloadVersionJson','GET','','',''), (160,'p','888','/sysVersion/exportVersion','POST','','',''), (161,'p','888','/sysVersion/findSysVersion','GET','','',''), (162,'p','888','/sysVersion/getSysVersionList','GET','','',''), (163,'p','888','/sysVersion/importVersion','POST','','',''), (164,'p','888','/system/getServerInfo','POST','','',''), (165,'p','888','/system/getSystemConfig','POST','','',''), (166,'p','888','/system/setSystemConfig','POST','','',''), (167,'p','888','/timedTask/alertStream','GET','','',''), (168,'p','888','/timedTask/createTimedTask','POST','','',''), (169,'p','888','/timedTask/deleteTimedTask','DELETE','','',''), (170,'p','888','/timedTask/getRegisteredMethods','GET','','',''), (171,'p','888','/timedTask/getTimedTaskList','GET','','',''), (172,'p','888','/timedTask/getTimedTaskLogList','GET','','',''), (173,'p','888','/timedTask/toggleTimedTask','POST','','',''), (174,'p','888','/timedTask/triggerTimedTask','POST','','',''), (175,'p','888','/timedTask/updateTimedTask','PUT','','',''), (176,'p','888','/user/admin_register','POST','','',''), (177,'p','888','/user/changePassword','POST','','',''), (178,'p','888','/user/deleteUser','DELETE','','',''), (179,'p','888','/user/getUserInfo','GET','','',''), (180,'p','888','/user/getUserList','POST','','',''), (181,'p','888','/user/resetPassword','POST','','',''), (182,'p','888','/user/setSelfInfo','PUT','','',''), (183,'p','888','/user/setSelfSetting','PUT','','',''), (184,'p','888','/user/setUserAuthorities','POST','','',''), (185,'p','888','/user/setUserAuthority','POST','','',''), (186,'p','888','/user/setUserDepartments','POST','','',''), (187,'p','888','/user/setUserInfo','PUT','','',''), (188,'p','888','/user/setUserPositions','POST','','',''); INSERT INTO `sys_apis` (`api_group`,`created_at`,`deleted_at`,`description`,`id`,`method`,`path`,`updated_at`) VALUES ('集成配置',NOW(3),NULL,'按类型获取集成配置',1,'GET','/integration/configs/:kind',NOW(3)), ('集成配置',NOW(3),NULL,'删除集成配置',2,'DELETE','/integration/configs/:kind/:provider',NOW(3)), ('集成配置',NOW(3),NULL,'获取指定集成配置',3,'GET','/integration/configs/:kind/:provider',NOW(3)), ('集成配置',NOW(3),NULL,'保存集成配置',4,'PUT','/integration/configs/:kind/:provider',NOW(3)), ('集成配置',NOW(3),NULL,'测试通信集成连接',5,'POST','/integration/configs/:kind/:provider/test',NOW(3)), ('短信服务',NOW(3),NULL,'发送单条模板短信',6,'POST','/integration/sms/:provider/send',NOW(3)), ('支付',NOW(3),NULL,'创建支付订单',7,'POST','/payment/create',NOW(3)), ('支付',NOW(3),NULL,'重试支付订单发货',8,'POST','/payment/fulfill',NOW(3)), ('支付',NOW(3),NULL,'查询支付订单',9,'POST','/payment/order',NOW(3)), ('支付',NOW(3),NULL,'分页查询支付订单',10,'GET','/payment/orders',NOW(3)), ('支付',NOW(3),NULL,'按路径查询支付订单',11,'GET','/payment/orders/:provider/:tradeNo',NOW(3)), ('支付',NOW(3),NULL,'查询支付订单事件流水',12,'GET','/payment/orders/:provider/:tradeNo/events',NOW(3)), ('支付',NOW(3),NULL,'按路径重试支付订单发货',13,'POST','/payment/orders/:provider/:tradeNo/fulfill',NOW(3)), ('支付',NOW(3),NULL,'按路径申请支付订单退款',14,'POST','/payment/orders/:provider/:tradeNo/refund',NOW(3)), ('支付',NOW(3),NULL,'汇总支付订单运营指标',15,'GET','/payment/orders/summary',NOW(3)), ('支付',NOW(3),NULL,'测试支付渠道配置与沙箱交易链路',16,'POST','/payment/providers/:provider/test',NOW(3)), ('支付',NOW(3),NULL,'同步支付订单状态',17,'POST','/payment/query',NOW(3)), ('支付',NOW(3),NULL,'申请支付订单退款',18,'POST','/payment/refund',NOW(3)), ('api',NOW(3),NULL,'创建api',19,'POST','/api/createApi',NOW(3)), ('api',NOW(3),NULL,'删除Api',20,'POST','/api/deleteApi',NOW(3)), ('api',NOW(3),NULL,'批量删除api',21,'DELETE','/api/deleteApisByIds',NOW(3)), ('api',NOW(3),NULL,'确认同步API',22,'POST','/api/enterSyncApi',NOW(3)), ('api',NOW(3),NULL,'刷新 Casbin 缓存',23,'GET','/api/freshCasbin',NOW(3)), ('api',NOW(3),NULL,'获取所有api',24,'POST','/api/getAllApis',NOW(3)), ('api',NOW(3),NULL,'获取api详细信息',25,'POST','/api/getApiById',NOW(3)), ('api',NOW(3),NULL,'获取路由组',26,'GET','/api/getApiGroups',NOW(3)), ('api',NOW(3),NULL,'获取api列表',27,'POST','/api/getApiList',NOW(3)), ('api',NOW(3),NULL,'获取指定API关联角色列表',28,'GET','/api/getApiRoles',NOW(3)), ('api',NOW(3),NULL,'忽略API',29,'POST','/api/ignoreApi',NOW(3)), ('api',NOW(3),NULL,'全量覆盖API关联角色列表',30,'POST','/api/setApiRoles',NOW(3)), ('api',NOW(3),NULL,'获取待同步API',31,'GET','/api/syncApi',NOW(3)), ('api',NOW(3),NULL,'更新Api',32,'POST','/api/updateApi',NOW(3)), ('媒体库分类',NOW(3),NULL,'添加/编辑分类',33,'POST','/attachmentCategory/addCategory',NOW(3)), ('媒体库分类',NOW(3),NULL,'删除分类',34,'POST','/attachmentCategory/deleteCategory',NOW(3)), ('媒体库分类',NOW(3),NULL,'分类列表',35,'GET','/attachmentCategory/getCategoryList',NOW(3)), ('角色',NOW(3),NULL,'拷贝角色',36,'POST','/authority/copyAuthority',NOW(3)), ('角色',NOW(3),NULL,'创建角色',37,'POST','/authority/createAuthority',NOW(3)), ('角色',NOW(3),NULL,'删除角色',38,'POST','/authority/deleteAuthority',NOW(3)), ('角色',NOW(3),NULL,'获取角色列表',39,'POST','/authority/getAuthorityList',NOW(3)), ('角色',NOW(3),NULL,'获取角色自定义部门集',40,'GET','/authority/getDataScopeDepts',NOW(3)), ('角色',NOW(3),NULL,'获取角色关联用户ID列表',41,'GET','/authority/getUsersByAuthority',NOW(3)), ('角色',NOW(3),NULL,'设置角色数据权限',42,'POST','/authority/setDataScope',NOW(3)), ('角色',NOW(3),NULL,'全量覆盖角色关联用户',43,'POST','/authority/setRoleUsers',NOW(3)), ('角色',NOW(3),NULL,'更新角色信息',44,'PUT','/authority/updateAuthority',NOW(3)), ('按钮权限',NOW(3),NULL,'删除按钮',45,'POST','/authorityBtn/canRemoveAuthorityBtn',NOW(3)), ('按钮权限',NOW(3),NULL,'获取已有按钮权限',46,'POST','/authorityBtn/getAuthorityBtn',NOW(3)), ('按钮权限',NOW(3),NULL,'设置按钮权限',47,'POST','/authorityBtn/setAuthorityBtn',NOW(3)), ('base',NOW(3),NULL,'获取验证码',48,'POST','/base/captcha',NOW(3)), ('base',NOW(3),NULL,'登录',49,'POST','/base/login',NOW(3)), ('casbin',NOW(3),NULL,'获取权限列表',50,'POST','/casbin/getPolicyPathByAuthorityId',NOW(3)), ('casbin',NOW(3),NULL,'更改角色api权限',51,'POST','/casbin/updateCasbin',NOW(3)), ('数据权限审计',NOW(3),NULL,'批量删除数据权限审计日志',52,'DELETE','/dataAccessLog/deleteDataAccessLogByIds',NOW(3)), ('数据权限审计',NOW(3),NULL,'获取数据权限审计日志',53,'POST','/dataAccessLog/getDataAccessLogList',NOW(3)), ('部门',NOW(3),NULL,'创建部门',54,'POST','/department/createDepartment',NOW(3)), ('部门',NOW(3),NULL,'删除部门',55,'DELETE','/department/deleteDepartment',NOW(3)), ('部门',NOW(3),NULL,'根据ID获取部门',56,'GET','/department/findDepartment',NOW(3)), ('部门',NOW(3),NULL,'获取部门树',57,'POST','/department/getDepartmentList',NOW(3)), ('部门',NOW(3),NULL,'获取部门成员ID列表',58,'GET','/department/getDepartmentUsers',NOW(3)), ('部门',NOW(3),NULL,'设置部门成员(反向分配)',59,'POST','/department/setDepartmentUsers',NOW(3)), ('部门',NOW(3),NULL,'更新部门',60,'PUT','/department/updateDepartment',NOW(3)), ('email',NOW(3),NULL,'发送测试邮件',61,'POST','/email/emailTest',NOW(3)), ('email',NOW(3),NULL,'发送邮件',62,'POST','/email/sendEmail',NOW(3)), ('文件上传与下载',NOW(3),NULL,'删除文件',63,'POST','/fileUploadAndDownload/deleteFile',NOW(3)), ('文件上传与下载',NOW(3),NULL,'批量删除文件',64,'POST','/fileUploadAndDownload/deleteFiles',NOW(3)), ('文件上传与下载',NOW(3),NULL,'文件名或者备注编辑',65,'POST','/fileUploadAndDownload/editFileName',NOW(3)), ('文件上传与下载',NOW(3),NULL,'获取文件详情',66,'GET','/fileUploadAndDownload/findFile',NOW(3)), ('文件上传与下载',NOW(3),NULL,'获取上传文件列表',67,'POST','/fileUploadAndDownload/getFileList',NOW(3)), ('文件上传与下载',NOW(3),NULL,'导入URL',68,'POST','/fileUploadAndDownload/importURL',NOW(3)), ('文件上传与下载',NOW(3),NULL,'获取对象存储文件列表',69,'POST','/fileUploadAndDownload/listOssFiles',NOW(3)), ('文件上传与下载',NOW(3),NULL,'文件上传(建议选择)',70,'POST','/fileUploadAndDownload/upload',NOW(3)), ('base',NOW(3),NULL,'健康检查',71,'GET','/health',NOW(3)), ('公告',NOW(3),NULL,'新建公告',72,'POST','/info/createInfo',NOW(3)), ('公告',NOW(3),NULL,'删除公告',73,'DELETE','/info/deleteInfo',NOW(3)), ('公告',NOW(3),NULL,'批量删除公告',74,'DELETE','/info/deleteInfoByIds',NOW(3)), ('公告',NOW(3),NULL,'根据ID获取公告',75,'GET','/info/findInfo',NOW(3)), ('公告',NOW(3),NULL,'获取公告数据源',76,'GET','/info/getInfoDataSource',NOW(3)), ('公告',NOW(3),NULL,'获取公告列表',77,'GET','/info/getInfoList',NOW(3)), ('公告',NOW(3),NULL,'获取公开公告',78,'GET','/info/getInfoPublic',NOW(3)), ('公告',NOW(3),NULL,'更新公告',79,'PUT','/info/updateInfo',NOW(3)), ('初始化',NOW(3),NULL,'检查数据库',80,'POST','/init/checkdb',NOW(3)), ('初始化',NOW(3),NULL,'初始化数据库',81,'POST','/init/initdb',NOW(3)), ('jwt',NOW(3),NULL,'jwt加入黑名单(退出,必选)',82,'POST','/jwt/jsonInBlacklist',NOW(3)), ('文件日志',NOW(3),NULL,'分块读取日志文件内容',83,'GET','/logViewer/content',NOW(3)), ('文件日志',NOW(3),NULL,'获取存在日志的日期',84,'GET','/logViewer/dates',NOW(3)), ('文件日志',NOW(3),NULL,'获取日期下的日志文件',85,'GET','/logViewer/files',NOW(3)), ('媒体上传',NOW(3),NULL,'取消大文件上传',86,'DELETE','/mediaUpload/:uploadId',NOW(3)), ('媒体上传',NOW(3),NULL,'上传分片',87,'POST','/mediaUpload/chunk',NOW(3)), ('媒体上传',NOW(3),NULL,'完成大文件上传',88,'POST','/mediaUpload/complete',NOW(3)), ('媒体上传',NOW(3),NULL,'初始化大文件上传',89,'POST','/mediaUpload/init',NOW(3)), ('菜单',NOW(3),NULL,'新增菜单',90,'POST','/menu/addBaseMenu',NOW(3)), ('菜单',NOW(3),NULL,'增加menu和角色关联关系',91,'POST','/menu/addMenuAuthority',NOW(3)), ('菜单',NOW(3),NULL,'删除菜单',92,'POST','/menu/deleteBaseMenu',NOW(3)), ('菜单',NOW(3),NULL,'根据id获取菜单',93,'POST','/menu/getBaseMenuById',NOW(3)), ('菜单',NOW(3),NULL,'获取用户动态路由',94,'POST','/menu/getBaseMenuTree',NOW(3)), ('菜单',NOW(3),NULL,'获取菜单树(必选)',95,'POST','/menu/getMenu',NOW(3)), ('菜单',NOW(3),NULL,'获取指定角色menu',96,'POST','/menu/getMenuAuthority',NOW(3)), ('菜单',NOW(3),NULL,'分页获取基础menu列表',97,'POST','/menu/getMenuList',NOW(3)), ('菜单',NOW(3),NULL,'获取菜单关联角色列表',98,'GET','/menu/getMenuRoles',NOW(3)), ('菜单',NOW(3),NULL,'全量覆盖菜单关联角色列表',99,'POST','/menu/setMenuRoles',NOW(3)), ('菜单',NOW(3),NULL,'更新菜单',100,'POST','/menu/updateBaseMenu',NOW(3)), ('支付',NOW(3),NULL,'处理支付回调',101,'POST','/payment/callback/:provider',NOW(3)), ('岗位',NOW(3),NULL,'创建岗位',102,'POST','/position/createPosition',NOW(3)), ('岗位',NOW(3),NULL,'删除岗位',103,'DELETE','/position/deletePosition',NOW(3)), ('岗位',NOW(3),NULL,'根据ID获取岗位',104,'GET','/position/findPosition',NOW(3)), ('岗位',NOW(3),NULL,'获取岗位列表',105,'POST','/position/getPositionList',NOW(3)), ('岗位',NOW(3),NULL,'获取岗位成员ID列表',106,'GET','/position/getPositionUsers',NOW(3)), ('岗位',NOW(3),NULL,'设置岗位成员(反向分配)',107,'POST','/position/setPositionUsers',NOW(3)), ('岗位',NOW(3),NULL,'更新岗位',108,'PUT','/position/updatePosition',NOW(3)), ('安全配置',NOW(3),NULL,'获取安全配置',109,'GET','/securityConfig/getSecurityConfig',NOW(3)), ('安全配置',NOW(3),NULL,'设置安全配置',110,'POST','/securityConfig/setSecurityConfig',NOW(3)), ('base',NOW(3),NULL,'Swagger 文档',111,'GET','/swagger/*any',NOW(3)), ('API Token',NOW(3),NULL,'签发API Token',112,'POST','/sysApiToken/createApiToken',NOW(3)), ('API Token',NOW(3),NULL,'作废API Token',113,'POST','/sysApiToken/deleteApiToken',NOW(3)), ('API Token',NOW(3),NULL,'获取API Token列表',114,'POST','/sysApiToken/getApiTokenList',NOW(3)), ('系统字典',NOW(3),NULL,'新增字典',115,'POST','/sysDictionary/createSysDictionary',NOW(3)), ('系统字典',NOW(3),NULL,'删除字典',116,'DELETE','/sysDictionary/deleteSysDictionary',NOW(3)), ('系统字典',NOW(3),NULL,'导出字典JSON',117,'GET','/sysDictionary/exportSysDictionary',NOW(3)), ('系统字典',NOW(3),NULL,'根据ID获取字典(建议选择)',118,'GET','/sysDictionary/findSysDictionary',NOW(3)), ('系统字典',NOW(3),NULL,'获取字典列表',119,'GET','/sysDictionary/getSysDictionaryList',NOW(3)), ('系统字典',NOW(3),NULL,'获取字典列表(含明细)',120,'GET','/sysDictionary/getSysDictionaryListWithDetails',NOW(3)), ('系统字典',NOW(3),NULL,'导入字典JSON',121,'POST','/sysDictionary/importSysDictionary',NOW(3)), ('系统字典',NOW(3),NULL,'更新字典',122,'PUT','/sysDictionary/updateSysDictionary',NOW(3)), ('系统字典详情',NOW(3),NULL,'新增字典内容',123,'POST','/sysDictionaryDetail/createSysDictionaryDetail',NOW(3)), ('系统字典详情',NOW(3),NULL,'删除字典内容',124,'DELETE','/sysDictionaryDetail/deleteSysDictionaryDetail',NOW(3)), ('系统字典详情',NOW(3),NULL,'根据ID获取字典内容',125,'GET','/sysDictionaryDetail/findSysDictionaryDetail',NOW(3)), ('系统字典详情',NOW(3),NULL,'根据父级ID获取字典详情',126,'GET','/sysDictionaryDetail/getDictionaryDetailsByParent',NOW(3)), ('系统字典详情',NOW(3),NULL,'获取字典详情的完整路径',127,'GET','/sysDictionaryDetail/getDictionaryPath',NOW(3)), ('系统字典详情',NOW(3),NULL,'获取字典数列表',128,'GET','/sysDictionaryDetail/getDictionaryTreeList',NOW(3)), ('系统字典详情',NOW(3),NULL,'根据分类获取字典数列表',129,'GET','/sysDictionaryDetail/getDictionaryTreeListByType',NOW(3)), ('系统字典详情',NOW(3),NULL,'获取字典内容列表',130,'GET','/sysDictionaryDetail/getSysDictionaryDetailList',NOW(3)), ('系统字典详情',NOW(3),NULL,'更新字典内容',131,'PUT','/sysDictionaryDetail/updateSysDictionaryDetail',NOW(3)), ('错误日志',NOW(3),NULL,'新建错误日志',132,'POST','/sysError/createSysError',NOW(3)), ('错误日志',NOW(3),NULL,'删除错误日志',133,'DELETE','/sysError/deleteSysError',NOW(3)), ('错误日志',NOW(3),NULL,'批量删除错误日志',134,'DELETE','/sysError/deleteSysErrorByIds',NOW(3)), ('错误日志',NOW(3),NULL,'根据ID获取错误日志',135,'GET','/sysError/findSysError',NOW(3)), ('错误日志',NOW(3),NULL,'获取错误日志列表',136,'GET','/sysError/getSysErrorList',NOW(3)), ('错误日志',NOW(3),NULL,'更新错误日志',137,'PUT','/sysError/updateSysError',NOW(3)), ('导出模板',NOW(3),NULL,'新增导出模板',138,'POST','/sysExportTemplate/createSysExportTemplate',NOW(3)), ('导出模板',NOW(3),NULL,'删除导出模板',139,'DELETE','/sysExportTemplate/deleteSysExportTemplate',NOW(3)), ('导出模板',NOW(3),NULL,'批量删除导出模板',140,'DELETE','/sysExportTemplate/deleteSysExportTemplateByIds',NOW(3)), ('导出模板',NOW(3),NULL,'导出Excel',141,'GET','/sysExportTemplate/exportExcel',NOW(3)), ('导出模板',NOW(3),NULL,'按令牌导出Excel',142,'GET','/sysExportTemplate/exportExcelByToken',NOW(3)), ('导出模板',NOW(3),NULL,'下载模板',143,'GET','/sysExportTemplate/exportTemplate',NOW(3)), ('导出模板',NOW(3),NULL,'按令牌下载模板',144,'GET','/sysExportTemplate/exportTemplateByToken',NOW(3)), ('导出模板',NOW(3),NULL,'根据ID获取导出模板',145,'GET','/sysExportTemplate/findSysExportTemplate',NOW(3)), ('导出模板',NOW(3),NULL,'获取导出模板列表',146,'GET','/sysExportTemplate/getSysExportTemplateList',NOW(3)), ('导出模板',NOW(3),NULL,'导入Excel',147,'POST','/sysExportTemplate/importExcel',NOW(3)), ('导出模板',NOW(3),NULL,'预览SQL',148,'GET','/sysExportTemplate/previewSQL',NOW(3)), ('导出模板',NOW(3),NULL,'更新导出模板',149,'PUT','/sysExportTemplate/updateSysExportTemplate',NOW(3)), ('登录日志',NOW(3),NULL,'删除登录日志',150,'DELETE','/sysLoginLog/deleteLoginLog',NOW(3)), ('登录日志',NOW(3),NULL,'批量删除登录日志',151,'DELETE','/sysLoginLog/deleteLoginLogByIds',NOW(3)), ('登录日志',NOW(3),NULL,'根据ID获取登录日志',152,'GET','/sysLoginLog/findLoginLog',NOW(3)), ('登录日志',NOW(3),NULL,'获取登录日志列表',153,'GET','/sysLoginLog/getLoginLogList',NOW(3)), ('操作记录',NOW(3),NULL,'删除操作记录',154,'DELETE','/sysOperationRecord/deleteSysOperationRecord',NOW(3)), ('操作记录',NOW(3),NULL,'批量删除操作历史',155,'DELETE','/sysOperationRecord/deleteSysOperationRecordByIds',NOW(3)), ('操作记录',NOW(3),NULL,'根据ID获取操作记录',156,'GET','/sysOperationRecord/findSysOperationRecord',NOW(3)), ('操作记录',NOW(3),NULL,'获取操作记录列表',157,'GET','/sysOperationRecord/getSysOperationRecordList',NOW(3)), ('参数管理',NOW(3),NULL,'新建参数',158,'POST','/sysParams/createSysParams',NOW(3)), ('参数管理',NOW(3),NULL,'删除参数',159,'DELETE','/sysParams/deleteSysParams',NOW(3)), ('参数管理',NOW(3),NULL,'批量删除参数',160,'DELETE','/sysParams/deleteSysParamsByIds',NOW(3)), ('参数管理',NOW(3),NULL,'根据ID获取参数',161,'GET','/sysParams/findSysParams',NOW(3)), ('参数管理',NOW(3),NULL,'按键获取参数',162,'GET','/sysParams/getSysParam',NOW(3)), ('参数管理',NOW(3),NULL,'获取参数列表',163,'GET','/sysParams/getSysParamsList',NOW(3)), ('参数管理',NOW(3),NULL,'更新参数',164,'PUT','/sysParams/updateSysParams',NOW(3)), ('版本控制',NOW(3),NULL,'删除版本',165,'DELETE','/sysVersion/deleteSysVersion',NOW(3)), ('版本控制',NOW(3),NULL,'批量删除版本',166,'DELETE','/sysVersion/deleteSysVersionByIds',NOW(3)), ('版本控制',NOW(3),NULL,'下载版本json',167,'GET','/sysVersion/downloadVersionJson',NOW(3)), ('版本控制',NOW(3),NULL,'创建版本',168,'POST','/sysVersion/exportVersion',NOW(3)), ('版本控制',NOW(3),NULL,'获取单一版本',169,'GET','/sysVersion/findSysVersion',NOW(3)), ('版本控制',NOW(3),NULL,'获取版本列表',170,'GET','/sysVersion/getSysVersionList',NOW(3)), ('版本控制',NOW(3),NULL,'同步版本',171,'POST','/sysVersion/importVersion',NOW(3)), ('系统服务',NOW(3),NULL,'获取服务器信息',172,'POST','/system/getServerInfo',NOW(3)), ('系统服务',NOW(3),NULL,'获取配置文件内容',173,'POST','/system/getSystemConfig',NOW(3)), ('系统服务',NOW(3),NULL,'重载系统配置',174,'POST','/system/reloadSystem',NOW(3)), ('系统服务',NOW(3),NULL,'设置配置文件内容',175,'POST','/system/setSystemConfig',NOW(3)), ('定时任务',NOW(3),NULL,'订阅定时任务失败告警(SSE)',176,'GET','/timedTask/alertStream',NOW(3)), ('定时任务',NOW(3),NULL,'创建定时任务',177,'POST','/timedTask/createTimedTask',NOW(3)), ('定时任务',NOW(3),NULL,'删除定时任务',178,'DELETE','/timedTask/deleteTimedTask',NOW(3)), ('定时任务',NOW(3),NULL,'获取已注册方法列表',179,'GET','/timedTask/getRegisteredMethods',NOW(3)), ('定时任务',NOW(3),NULL,'获取定时任务列表',180,'GET','/timedTask/getTimedTaskList',NOW(3)), ('定时任务',NOW(3),NULL,'获取定时任务执行日志',181,'GET','/timedTask/getTimedTaskLogList',NOW(3)), ('定时任务',NOW(3),NULL,'启用/停用定时任务',182,'POST','/timedTask/toggleTimedTask',NOW(3)), ('定时任务',NOW(3),NULL,'手动触发定时任务',183,'POST','/timedTask/triggerTimedTask',NOW(3)), ('定时任务',NOW(3),NULL,'更新定时任务',184,'PUT','/timedTask/updateTimedTask',NOW(3)), ('系统用户',NOW(3),NULL,'用户注册',185,'POST','/user/admin_register',NOW(3)), ('系统用户',NOW(3),NULL,'修改密码(建议选择)',186,'POST','/user/changePassword',NOW(3)), ('系统用户',NOW(3),NULL,'删除用户',187,'DELETE','/user/deleteUser',NOW(3)), ('系统用户',NOW(3),NULL,'获取自身信息(必选)',188,'GET','/user/getUserInfo',NOW(3)), ('系统用户',NOW(3),NULL,'获取用户列表',189,'POST','/user/getUserList',NOW(3)), ('系统用户',NOW(3),NULL,'重置用户密码',190,'POST','/user/resetPassword',NOW(3)), ('系统用户',NOW(3),NULL,'设置自身信息(必选)',191,'PUT','/user/setSelfInfo',NOW(3)), ('系统用户',NOW(3),NULL,'用户界面配置',192,'PUT','/user/setSelfSetting',NOW(3)), ('系统用户',NOW(3),NULL,'设置权限组',193,'POST','/user/setUserAuthorities',NOW(3)), ('系统用户',NOW(3),NULL,'修改用户角色(必选)',194,'POST','/user/setUserAuthority',NOW(3)), ('系统用户',NOW(3),NULL,'设置用户归属部门',195,'POST','/user/setUserDepartments',NOW(3)), ('系统用户',NOW(3),NULL,'设置用户信息',196,'PUT','/user/setUserInfo',NOW(3)), ('系统用户',NOW(3),NULL,'设置用户岗位',197,'POST','/user/setUserPositions',NOW(3)); INSERT INTO `sys_authorities` (`authority_id`,`authority_name`,`created_at`,`data_scope`,`default_router`,`deleted_at`,`parent_id`,`updated_at`) VALUES (888,'超级管理员',NOW(3),1,'dashboard',NULL,0,NOW(3)); INSERT INTO `sys_authority_menus` (`sys_authority_authority_id`,`sys_base_menu_id`) VALUES (888,1), (888,9), (888,13), (888,16), (888,20), (888,28), (888,2), (888,10), (888,14), (888,17), (888,21), (888,29), (888,3), (888,11), (888,15), (888,18), (888,22), (888,4), (888,12), (888,19), (888,23), (888,30), (888,5), (888,24), (888,31), (888,6), (888,25), (888,34), (888,26), (888,35), (888,27), (888,32), (888,33), (888,7), (888,8); INSERT INTO `sys_base_menus` (`active_name`,`close_tab`,`component`,`created_at`,`default_menu`,`deleted_at`,`hidden`,`icon`,`id`,`keep_alive`,`menu_level`,`name`,`parent_id`,`path`,`sort`,`title`,`transition_type`,`updated_at`) VALUES ('',0,'view/dashboard/index.vue',NOW(3),0,NULL,0,'odometer',1,0,0,'dashboard',0,'dashboard',1,'仪表盘','',NOW(3)), ('',0,'view/routerHolder.vue',NOW(3),0,NULL,0,'perm-kra',2,0,0,'permission',0,'permission',2,'权限管理','',NOW(3)), ('',0,'view/routerHolder.vue',NOW(3),0,NULL,0,'share',3,0,0,'org',0,'org',3,'组织管理','',NOW(3)), ('',0,'view/routerHolder.vue',NOW(3),0,NULL,0,'config-kra',4,0,0,'systemConfig',0,'systemConfig',4,'系统设置','',NOW(3)), ('',0,'view/routerHolder.vue',NOW(3),0,NULL,0,'monitor-kra',5,0,0,'monitor',0,'monitor',5,'运维监控','',NOW(3)), ('',0,'view/routerHolder.vue',NOW(3),0,NULL,0,'folder-opened',6,0,0,'media',0,'media',6,'媒体管理','',NOW(3)), ('',0,'view/routerHolder.vue',NOW(3),0,NULL,0,'cherry',7,0,0,'extensions',0,'extensions',10,'扩展功能','',NOW(3)), ('',0,'view/person/person.vue',NOW(3),0,NULL,1,'postcard',8,0,0,'person',0,'person',13,'个人信息','',NOW(3)), ('',0,'view/superAdmin/authority/authority.vue',NOW(3),0,NULL,0,'role-kra',9,0,1,'authority',2,'authority',1,'角色管理','',NOW(3)), ('',0,'view/superAdmin/menu/menu.vue',NOW(3),0,NULL,0,'tickets',10,1,1,'menu',2,'menu',2,'菜单管理','',NOW(3)), ('',0,'view/superAdmin/api/api.vue',NOW(3),0,NULL,0,'api-kra',11,1,1,'api',2,'api',3,'api管理','',NOW(3)), ('',0,'view/systemTools/apiToken/index.vue',NOW(3),0,NULL,0,'key',12,0,1,'apiToken',2,'apiToken',4,'API Token','',NOW(3)), ('',0,'view/superAdmin/user/user.vue',NOW(3),0,NULL,0,'user',13,0,1,'user',3,'user',1,'用户管理','',NOW(3)), ('',0,'view/superAdmin/department/department.vue',NOW(3),0,NULL,0,'office-building',14,0,1,'department',3,'department',2,'部门管理','',NOW(3)), ('',0,'view/superAdmin/position/position.vue',NOW(3),0,NULL,0,'postcard',15,0,1,'position',3,'position',3,'岗位管理','',NOW(3)), ('',0,'view/systemTools/system/system.vue',NOW(3),0,NULL,0,'config-file-kra',16,0,1,'system',4,'system',1,'配置文件','',NOW(3)), ('',0,'view/superAdmin/dictionary/sysDictionary.vue',NOW(3),0,NULL,0,'notebook',17,0,1,'dictionary',4,'dictionary',2,'字典管理','',NOW(3)), ('',0,'view/superAdmin/params/sysParams.vue',NOW(3),0,NULL,0,'set-up',18,0,1,'sysParams',4,'sysParams',3,'参数管理','',NOW(3)), ('',0,'view/system/security/index.vue',NOW(3),0,NULL,0,'security-kra',19,0,1,'security',4,'security',4,'安全配置','',NOW(3)), ('',0,'view/superAdmin/operation/sysOperationRecord.vue',NOW(3),0,NULL,0,'document',20,0,1,'operation',5,'operation',1,'操作历史','',NOW(3)), ('',0,'view/systemTools/loginLog/index.vue',NOW(3),0,NULL,0,'clock',21,0,1,'loginLog',5,'loginLog',2,'登录日志','',NOW(3)), ('',0,'view/systemTools/sysError/sysError.vue',NOW(3),0,NULL,0,'error-kra',22,0,1,'sysError',5,'sysError',3,'错误日志','',NOW(3)), ('',0,'view/systemTools/version/version.vue',NOW(3),0,NULL,0,'version-kra',23,0,1,'sysVersion',5,'sysVersion',4,'版本管理','',NOW(3)), ('',0,'view/system/state.vue',NOW(3),0,NULL,0,'server',24,0,1,'state',5,'state',5,'服务器状态','',NOW(3)), ('',0,'view/superAdmin/dataAccessLog/dataAccessLog.vue',NOW(3),0,NULL,0,'warning',25,0,1,'dataAccessLog',5,'dataAccessLog',6,'数据权限审计','',NOW(3)), ('',0,'view/systemTools/timedTask/index.vue',NOW(3),0,NULL,0,'timer',26,0,1,'timedTask',5,'timedTask',7,'定时任务','',NOW(3)), ('',0,'view/systemTools/logViewer/index.vue',NOW(3),0,NULL,0,'document',27,0,1,'logViewer',5,'logViewer',8,'文件日志','',NOW(3)), ('',0,'view/media/upload.vue',NOW(3),0,NULL,0,'upload',28,0,1,'upload',6,'upload',1,'媒体库(上传下载)','',NOW(3)), ('',0,'view/media/chunkUpload.vue',NOW(3),0,NULL,0,'folder-add',29,0,1,'chunkUpload',6,'chunkUpload',2,'大文件上传','',NOW(3)), ('',0,'modules/email/view/index.vue',NOW(3),0,NULL,0,'message',30,0,1,'email',7,'email',4,'邮件发送','',NOW(3)), ('',0,'modules/announcement/view/info.vue',NOW(3),0,NULL,0,'bell',31,0,1,'anInfo',7,'anInfo',5,'公告管理','',NOW(3)), ('',0,'view/systemTools/integration/config.vue',NOW(3),0,NULL,0,'connection',32,0,1,'integrationConfig',7,'integrationConfig',8,'通信集成','',NOW(3)), ('',0,'view/systemTools/sms/index.vue',NOW(3),0,NULL,0,'message',33,0,1,'sms',7,'sms',9,'短信服务','',NOW(3)), ('',0,'view/systemTools/payment/orders.vue',NOW(3),0,NULL,0,'wallet',34,0,1,'paymentOrders',7,'paymentOrders',6,'支付订单','',NOW(3)), ('',0,'view/systemTools/payment/config.vue',NOW(3),0,NULL,0,'credit-card',35,0,1,'paymentConfig',7,'paymentConfig',7,'支付配置','',NOW(3)); INSERT INTO `sys_export_templates` (`created_at`,`db_name`,`deleted_at`,`id`,`import_sql`,`limit`,`name`,`order`,`sql`,`table_name`,`template_id`,`template_info`,`updated_at`) VALUES (NOW(3),'',NULL,1,'',NULL,'api','','','sys_apis','api','{ "path":"路径", "method":"方法(大写)", "description":"方法介绍", "api_group":"方法分组" }',NOW(3)); INSERT INTO `sys_ignore_apis` (`created_at`,`deleted_at`,`id`,`method`,`path`,`updated_at`) VALUES (NOW(3),NULL,1,'GET','/api/freshCasbin',NOW(3)), (NOW(3),NULL,2,'GET','/health',NOW(3)), (NOW(3),NULL,3,'GET','/swagger/*any',NOW(3)), (NOW(3),NULL,4,'GET','/uploads/file/*filepath',NOW(3)), (NOW(3),NULL,5,'HEAD','/uploads/file/*filepath',NOW(3)), (NOW(3),NULL,6,'POST','/system/reloadSystem',NOW(3)), (NOW(3),NULL,7,'POST','/base/login',NOW(3)), (NOW(3),NULL,8,'POST','/base/captcha',NOW(3)), (NOW(3),NULL,9,'POST','/init/initdb',NOW(3)), (NOW(3),NULL,10,'POST','/init/checkdb',NOW(3)), (NOW(3),NULL,11,'GET','/info/getInfoPublic',NOW(3)); INSERT INTO `sys_integration_configs` (`config`,`created_at`,`enabled`,`id`,`kind`,`provider`,`updated_at`) VALUES ('{"broker":"tcp://127.0.0.1:1883","clean_session":true,"client_id":"kra","connect_timeout":10,"keep_alive":30,"password":"","reconnect_interval":5,"username":""}',NOW(3),0,1,'mq','emqx',NOW(3)), ('{"allow_auto_topic_creation":false,"brokers":["127.0.0.1:9092"],"client_id":"kra","connect_timeout":10,"group_id":"kra","max_bytes":10485760,"max_wait":1,"min_bytes":1,"password":"","reconnect_interval":5,"start_offset":"earliest","tls":false,"tls_skip_verify":false,"username":""}',NOW(3),0,2,'mq','kafka',NOW(3)), ('{"auto_delete":false,"connect_timeout":10,"durable":true,"exchange":"kra","exchange_type":"topic","heartbeat":10,"host":"127.0.0.1","password":"guest","port":5672,"prefetch_count":10,"queue":"kra","reconnect_interval":5,"routing_key":"#","tls":false,"username":"guest","vhost":"/"}',NOW(3),0,3,'mq','rabbitmq',NOW(3)), ('{"allow_origins":[],"concurrent_message_handling":false,"max_message_size":0,"message_buffer_size":0,"path":"/ws","ping_period":"54s","pong_wait":"60s","write_wait":"10s"}',NOW(3),0,4,'websocket','melody',NOW(3)), ('{"app_id":"","environment":"production","gateway_url":"https://openapi.alipay.com/gateway.do","method":"alipay.trade.create","notify_url":"","private_key":"","public_key":"","return_url":"","sign_type":"RSA2","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,5,'payment','alipay',NOW(3)), ('{"api_base_url":"https://openapi.alipay.com","app_cert":"","app_id":"","environment":"production","gateway_url":"https://openapi.alipay.com/gateway.do","method":"alipay.trade.create","notify_url":"","private_key":"","public_cert":"","return_url":"","root_cert":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,6,'payment','alipay-v3',NOW(3)), ('{"app_id":"","currency":"CNY","cus_id":"","environment":"production","notify_url":"","org_id":"","pay_type":"W02","private_key":"","public_key":"","query_order_type":"reqsn","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,7,'payment','allinpay',NOW(3)), ('{"bundle_id":"","environment":"production","issuer_id":"","key_id":"","notify_url":"","price_divisor":10,"private_key":"","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false,"test_product_id":"","test_transaction_id":""}',NOW(3),0,8,'payment','apple-iap',NOW(3)), ('{"app_id":"","app_key":"","callback_provider_trade_no_field":"","callback_status_field":"","callback_success_values":"","callback_trade_no_field":"","create_url":"","merchant_id":"","notify_url":"","protocol_version":"v1","query_amount_field":"","query_amount_scale":1,"query_currency_field":"","query_provider_trade_no_field":"","query_status_field":"","query_success_values":"","query_trade_no_field":"","query_url":"","refund_failure_values":"","refund_status_field":"","refund_success_values":"","refund_url":"","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,9,'payment','chinaums',NOW(3)), ('{"api_key":"","app_id":"","environment":"production","merchant_id":"","notify_url":"","platform_cert":"","platform_serial_no":"","private_key":"","return_url":"","serial_no":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false,"trade_type":"jsapi"}',NOW(3),0,10,'payment','douyin',NOW(3)), ('{"app_id":"","app_key":"","callback_provider_trade_no_field":"","callback_status_field":"","callback_success_values":"","callback_trade_no_field":"","create_url":"","merchant_id":"","notify_url":"","protocol_version":"v1","query_amount_field":"","query_amount_scale":1,"query_currency_field":"","query_provider_trade_no_field":"","query_status_field":"","query_success_values":"","query_trade_no_field":"","query_url":"","refund_failure_values":"","refund_status_field":"","refund_success_values":"","refund_url":"","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,11,'payment','douyin-game-pay',NOW(3)), ('{"channel":"Wechat","credential_code":"","currency":"CNY","environment":"production","method":"jsapi","notify_url":"","partner_code":"","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,12,'payment','lakala',NOW(3)), ('{"auto_capture":true,"cancel_url":"","client_id":"","client_secret":"","environment":"sandbox","notify_url":"","return_url":"","test_amount":1,"test_currency":"USD","test_extra":"{}","test_mode":false,"webhook_id":""}',NOW(3),0,13,'payment','paypal',NOW(3)), ('{"api_key":"","cert_file":"","environment":"production","key_file":"","mch_id":"","notify_url":"","return_url":"","sign_type":"MD5","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false,"trade_type":"NATIVE"}',NOW(3),0,14,'payment','qq',NOW(3)), ('{"access_token":"","currency":"CNY","environment":"production","inst_no":"","key":"","merchant_no":"","notify_url":"","pay_type":"010","return_url":"","terminal_id":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,15,'payment','saobei',NOW(3)), ('{"app_id":"","app_key":"","callback_provider_trade_no_field":"","callback_status_field":"","callback_success_values":"","callback_trade_no_field":"","create_url":"","merchant_id":"","notify_url":"","protocol_version":"v1","query_amount_field":"","query_amount_scale":1,"query_currency_field":"","query_provider_trade_no_field":"","query_status_field":"","query_success_values":"","query_trade_no_field":"","query_url":"","refund_failure_values":"","refund_status_field":"","refund_success_values":"","refund_url":"","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,16,'payment','sft',NOW(3)), ('{"app_id":"","app_key":"","callback_provider_trade_no_field":"","callback_status_field":"","callback_success_values":"","callback_trade_no_field":"","create_url":"","merchant_id":"","notify_url":"","protocol_version":"v1","query_amount_field":"","query_amount_scale":1,"query_currency_field":"","query_provider_trade_no_field":"","query_status_field":"","query_success_values":"","query_trade_no_field":"","query_url":"","refund_failure_values":"","refund_status_field":"","refund_success_values":"","refund_url":"","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,17,'payment','supper-pay',NOW(3)), ('{"app_id":"","app_key":"","callback_provider_trade_no_field":"","callback_status_field":"","callback_success_values":"","callback_trade_no_field":"","create_url":"","merchant_id":"","notify_url":"","protocol_version":"v1","query_amount_field":"","query_amount_scale":1,"query_currency_field":"","query_provider_trade_no_field":"","query_status_field":"","query_success_values":"","query_trade_no_field":"","query_url":"","refund_failure_values":"","refund_status_field":"","refund_success_values":"","refund_url":"","return_url":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false}',NOW(3),0,18,'payment','wechat-game-pay',NOW(3)), ('{"app_id":"","client_cert":"","client_key":"","mch_key":"","merchant_id":"","notify_url":"","return_url":"","sign_type":"MD5","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false,"trade_type":"NATIVE"}',NOW(3),0,19,'payment','wechat-v2',NOW(3)), ('{"api_v3_key":"","app_id":"","merchant_id":"","notify_url":"","platform_cert":"","platform_serial_no":"","private_key":"","return_url":"","serial_no":"","test_amount":1,"test_currency":"CNY","test_extra":"{}","test_mode":false,"trade_type":"jsapi"}',NOW(3),0,20,'payment','wechat-v3',NOW(3)); INSERT INTO `sys_schema_migrations` (`id`) VALUES ('202608200002_system_schema'), ('202608210002_communication_surface'), ('202608210003_communication_test_surface'), ('202608200001_data_infrastructure'), ('202608210001_communication_integration_defaults'), ('202608200004_payment_defaults'), ('202608290004_kafka_integration_default'), ('202608290005_communication_integration_default_upgrade'), ('202609290001_sms_admin_surface'), ('202608220001_task_schema'), ('202608200003_payment_schema'), ('202608290001_payment_event_schema'), ('202608290002_payment_admin_surface'), ('202608290003_payment_order_read_permissions'); INSERT INTO `sys_security_config` (`captcha_open`,`captcha_timeout`,`created_at`,`deleted_at`,`force_new_user_change_password`,`id`,`img_height`,`img_width`,`key_long`,`limit_count`,`limit_enable`,`limit_window`,`lock_duration`,`lock_enable`,`lock_threshold`,`pwd_expire_days`,`pwd_expire_enable`,`pwd_min_length`,`pwd_require_digit`,`pwd_require_lower`,`pwd_require_special`,`pwd_require_upper`,`updated_at`) VALUES (0,3600,NOW(3),NULL,0,1,80,240,6,30,0,60,30,0,5,90,0,8,0,0,0,0,NOW(3)); INSERT INTO `sys_timed_tasks` (`created_at`,`deleted_at`,`description`,`enabled`,`executor_type`,`http_allow_private`,`http_body`,`http_header`,`http_method`,`http_url`,`id`,`method_name`,`name`,`params`,`spec`,`updated_at`,`with_seconds`) VALUES (NOW(3),NULL,'定时清理数据库过期日志(操作记录/JWT黑名单/定时任务执行日志)',0,'method',0,'',NULL,'','',1,'ClearDB','ClearDB',NULL,'@daily',NOW(3),0), (NOW(3),NULL,'定时清理过期大文件上传会话',0,'method',0,'',NULL,'','',2,'CleanStaleUploads','CleanStaleUploads',NULL,'@hourly',NOW(3),0); INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'user',CAST(`user_id` AS CHAR) FROM `sys_user` WHERE del_flag='0' ORDER BY `user_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'role',CAST(`role_id` AS CHAR) FROM `sys_role` WHERE del_flag='0' ORDER BY `role_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'dept',CAST(`dept_id` AS CHAR) FROM `sys_dept` WHERE del_flag='0' ORDER BY `dept_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'post',CAST(`post_id` AS CHAR) FROM `sys_post` WHERE del_flag='0' ORDER BY `post_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'file',CAST(`oss_id` AS CHAR) FROM `sys_oss` WHERE 1=1 ORDER BY `oss_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'menu',CAST(`menu_id` AS CHAR) FROM `sys_menu` WHERE menu_id IN ('2084194096229949441','2084194830778408961','2084202636386541569','2084224284976246785','2084224583841378306','2084449385185308674','2084453258847350785','2084458436631752706','2084466605093318657','2084475309624684546','2084478005203202049','2084480429515108353','2084480593562726401','2086033702105710593','2086034409621880833','2086621845875916801','2086623544338350082','2086643768701812738','2086643813702500354','2086643981961199618','2086644092393029633','2087069357514440706','2087385085920727041','2087385679095975937','2087385949666332673','2087386325354336258','2087444380922167298','2087447465111326721','2087831493110956033','2095702540414996481','2095702652168032258') ORDER BY `menu_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'dict',CAST(`dict_id` AS CHAR) FROM `sys_dict_type` WHERE 1=1 ORDER BY `dict_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'dict_item',CAST(`dict_code` AS CHAR) FROM `sys_dict_data` WHERE 1=1 ORDER BY `dict_code`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'notice',CAST(`notice_id` AS CHAR) FROM `sys_notice` WHERE 1=1 ORDER BY `notice_id`; INSERT INTO sw_kra_id_map(entity,old_id) SELECT 'task',CAST(`id` AS CHAR) FROM `sj_job` WHERE deleted=0 ORDER BY `id`; UPDATE sw_kra_id_map SET new_id=10000+id; UPDATE sw_kra_id_map m JOIN sys_role r ON m.entity='role' AND m.old_id=CAST(r.role_id AS CHAR) SET m.new_id=888 WHERE r.role_key='superadmin'; INSERT INTO sys_authorities(authority_id,created_at,updated_at,authority_name,parent_id,data_scope,default_router) SELECT m.new_id,r.create_time,r.update_time,r.role_name,888,CASE r.data_scope WHEN '1' THEN 1 WHEN '2' THEN 5 WHEN '3' THEN 3 WHEN '4' THEN 2 WHEN '5' THEN 4 END,'dashboard' FROM sys_role r JOIN sw_kra_id_map m ON m.entity='role' AND m.old_id=CAST(r.role_id AS CHAR) WHERE r.del_flag='0' AND r.role_key<>'superadmin'; INSERT INTO sys_departments(id,created_at,updated_at,name,parent_id,ancestors,sort,leader_id,status) SELECT m.new_id,d.create_time,d.update_time,d.dept_name,COALESCE(p.new_id,0),'0',d.order_num,COALESCE(u.new_id,0),d.status='0' FROM sys_dept d JOIN sw_kra_id_map m ON m.entity='dept' AND m.old_id=CAST(d.dept_id AS CHAR) LEFT JOIN sw_kra_id_map p ON p.entity='dept' AND p.old_id=CAST(d.parent_id AS CHAR) LEFT JOIN sw_kra_id_map u ON u.entity='user' AND u.old_id=CAST(d.leader AS CHAR) WHERE d.del_flag='0'; SET v_iter=0; WHILE v_iter<16 DO UPDATE sys_departments d JOIN sys_departments p ON p.id=d.parent_id SET d.ancestors=CONCAT(p.ancestors,',',p.id); SET v_iter=v_iter+1; END WHILE; INSERT INTO sys_positions(id,created_at,updated_at,name,code,sort,status,remark,dept_id) SELECT m.new_id,p.create_time,p.update_time,p.post_name,p.post_code,p.post_sort,p.status='0',p.remark,d.new_id FROM sys_post p JOIN sw_kra_id_map m ON m.entity='post' AND m.old_id=CAST(p.post_id AS CHAR) LEFT JOIN sw_kra_id_map d ON d.entity='dept' AND d.old_id=CAST(p.dept_id AS CHAR) WHERE p.del_flag='0'; INSERT INTO sys_users(id,created_at,updated_at,uuid,username,password,nick_name,header_img,authority_id,dept_id,phone,email,enable,origin_setting,password_updated_at,must_change_password,level,parent_id,id_path,real_name,qq_number,business_status,reject_reason) SELECT m.new_id,u.create_time,u.update_time,UUID(),u.user_name,u.password,u.nick_name,COALESCE(o.url,''),rm.new_id,COALESCE(dm.new_id,0),u.phone_number,u.email,u.status='0','{}',COALESCE(u.update_time,u.create_time,NOW(3)),0,u.level,COALESCE(pm.new_id,0),'0',COALESCE(u.real_name,''),COALESCE(u.qq_number,''),CAST(u.status AS UNSIGNED),COALESCE(u.reject_reason,'') FROM sys_user u JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(u.user_id AS CHAR) JOIN sys_user_role ur ON ur.user_id=u.user_id JOIN sw_kra_id_map rm ON rm.entity='role' AND rm.old_id=CAST(ur.role_id AS CHAR) LEFT JOIN sw_kra_id_map dm ON dm.entity='dept' AND dm.old_id=CAST(u.dept_id AS CHAR) LEFT JOIN sw_kra_id_map pm ON pm.entity='user' AND pm.old_id=CAST(u.parent_id AS CHAR) LEFT JOIN sys_oss o ON o.oss_id=u.avatar WHERE u.del_flag='0'; SET v_iter=0; WHILE v_iter<4 DO UPDATE sys_users u JOIN sys_users p ON p.id=u.parent_id SET u.id_path=CONCAT(p.id_path,',',p.id); SET v_iter=v_iter+1; END WHILE; INSERT INTO sys_user_authority(sys_user_id,sys_authority_authority_id) SELECT um.new_id,rm.new_id FROM sys_user_role x JOIN sw_kra_id_map um ON um.entity='user' AND um.old_id=CAST(x.user_id AS CHAR) JOIN sw_kra_id_map rm ON rm.entity='role' AND rm.old_id=CAST(x.role_id AS CHAR); INSERT INTO sys_user_departments(sys_user_id,sys_department_id) SELECT id,dept_id FROM sys_users WHERE dept_id<>0; INSERT INTO sys_user_positions(sys_user_id,sys_position_id) SELECT um.new_id,pm.new_id FROM sys_user_post x JOIN sw_kra_id_map um ON um.entity='user' AND um.old_id=CAST(x.user_id AS CHAR) JOIN sw_kra_id_map pm ON pm.entity='post' AND pm.old_id=CAST(x.post_id AS CHAR); INSERT INTO media_file_upload_and_downloads(id,created_at,updated_at,name,class_id,url,tag,`key`,size,mime,md5,user_id) SELECT m.new_id,o.create_time,o.update_time,o.original_name,0,o.url,o.file_suffix,o.file_name,COALESCE(CAST(JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(o.ext1),o.ext1,JSON_OBJECT()),'$.fileSize')) AS UNSIGNED),0),COALESCE(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(o.ext1),o.ext1,JSON_OBJECT()),'$.contentType')),'null'),''),COALESCE(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(o.ext1),o.ext1,JSON_OBJECT()),'$.md5')),'null'),''),COALESCE(um.new_id,0) FROM sys_oss o JOIN sw_kra_id_map m ON m.entity='file' AND m.old_id=CAST(o.oss_id AS CHAR) LEFT JOIN sw_kra_id_map um ON um.entity='user' AND um.old_id=CAST(o.create_by AS CHAR); INSERT INTO sys_dictionaries(id,created_at,updated_at,name,type,status,`desc`,parent_id) SELECT m.new_id,d.create_time,d.update_time,d.dict_name,d.dict_type,1,d.remark,0 FROM sys_dict_type d JOIN sw_kra_id_map m ON m.entity='dict' AND m.old_id=CAST(d.dict_id AS CHAR); INSERT INTO sys_dictionary_details(id,created_at,updated_at,label,value,extend,status,sort,sys_dictionary_id,parent_id,level,path) SELECT m.new_id,d.create_time,d.update_time,d.dict_label,d.dict_value,JSON_OBJECT('cssClass',d.css_class,'listClass',d.list_class,'isDefault',d.is_default),1,d.dict_sort,tm.new_id,0,0,'0' FROM sys_dict_data d JOIN sw_kra_id_map m ON m.entity='dict_item' AND m.old_id=CAST(d.dict_code AS CHAR) JOIN sys_dict_type t ON t.dict_type=d.dict_type JOIN sw_kra_id_map tm ON tm.entity='dict' AND tm.old_id=CAST(t.dict_id AS CHAR); INSERT INTO sys_announcements(id,created_at,updated_at,title,content,user_id,attachments) SELECT m.new_id,n.create_time,n.update_time,n.notice_title,CONVERT(n.notice_content USING utf8mb4),um.new_id,JSON_ARRAY() FROM sys_notice n JOIN sw_kra_id_map m ON m.entity='notice' AND m.old_id=CAST(n.notice_id AS CHAR) LEFT JOIN sw_kra_id_map um ON um.entity='user' AND um.old_id=CAST(n.create_by AS CHAR) WHERE n.status='0'; INSERT INTO sys_params(created_at,updated_at,name,`key`,value,`desc`) SELECT NOW(3),NOW(3),config_name,CONCAT('sw.legacy.',config_key),config_value,'Legacy non-secret setting; application adapter must consume it explicitly' FROM sys_config WHERE config_key IN('sys.account.registerUser','sys.oss.previewListResource'); -- 六、导入新增业务菜单及授权;原工作台页面和查询按钮不再导入。 INSERT INTO sw_kra_menu_permissions(source_menu_id,source_permission,button_key) VALUES ('2084194096229949441','',''), ('2084194830778408961','system:user:list','sw:business:list'), ('2084202636386541569','system:promote:list','sw:promote:list'), ('2084224284976246785','',''), ('2084224583841378306','system:channelData:list','sw:channelData:list'), ('2084449385185308674','system:spend:list','sw:spend:list'), ('2084453258847350785','system:register:list','sw:register:list'), ('2084458436631752706','system:gameData:list','sw:gameData:list'), ('2084466605093318657','system:serverAnalysis:list','sw:serverAnalysis:list'), ('2084475309624684546','system:rank:channel','sw:rank:channel'), ('2084478005203202049','',''), ('2084480429515108353','system:alertRecord:list','sw:alertRecord:list'), ('2084480593562726401','system:alertRule:list','sw:alertRule:list'), ('2086033702105710593','system:alertRecord:audit','sw:alertRecord:audit'), ('2086034409621880833','system:alertRecord:query','sw:alertRecord:query'), ('2086621845875916801','system:alertRecord:process','sw:alertRecord:process'), ('2086623544338350082','system:oss:upload','sw:oss:upload'), ('2086643768701812738','system:alertRule:query','sw:alertRule:query'), ('2086643813702500354','system:alertRule:add','sw:alertRule:add'), ('2086643981961199618','system:alertRule:edit','sw:alertRule:edit'), ('2086644092393029633','system:alertRule:remove','sw:alertRule:remove'), ('2087069357514440706','system:promote:add','sw:promote:add'), ('2087385085920727041','system:user:add','sw:business:add'), ('2087385679095975937','system:user:query','sw:business:query'), ('2087385949666332673','system:user:edit','sw:business:edit'), ('2087386325354336258','system:user:export','sw:business:export'), ('2087444380922167298','system:user:bind','sw:business:bind'), ('2087447465111326721','system:promote:list','sw:promote:list'), ('2087831493110956033','system:register:export','sw:register:export'), ('2095702540414996481','',''), ('2095702652168032258','system:promoteActivePool:list','sw:promoteActivePool:list'), ('2087072517465325569','system:workbench:query','sw:workbench:query'), ('2087365025688768514','system:workbench:query','sw:workbench:query'); INSERT INTO sys_base_menus(id,created_at,updated_at,menu_level,parent_id,path,name,hidden,component,sort,active_name,keep_alive,default_menu,title,icon,close_tab,transition_type) SELECT m.new_id,n.create_time,n.update_time,IF(n.parent_id=0,0,1),COALESCE(pm.new_id,0),IF(n.parent_id=0,CONCAT('sw-',n.path),n.path),CONCAT('sw_',n.path),n.visible='1',IF(n.menu_type='M','view/routerHolder.vue',CONCAT('view/sw/',n.path,'.vue')),n.order_num,'',n.is_cache='Y',0,n.menu_name,CASE n.path WHEN 'BusMgmt' THEN 'Briefcase' WHEN 'BusinessList' THEN 'UserFilled' WHEN 'ChannelList' THEN 'Connection' WHEN 'ChannelActivationList' THEN 'CircleCheck' WHEN 'DataAnalysis' THEN 'DataAnalysis' WHEN 'ChannelDataStatistics' THEN 'Histogram' WHEN 'RechargeDetails' THEN 'Money' WHEN 'RegistrationDetails' THEN 'User' WHEN 'GameAnalytics' THEN 'TrendCharts' WHEN 'ServerAnalysis' THEN 'Monitor' WHEN 'RankingAnalysis' THEN 'Star' WHEN 'AlertCenter' THEN 'Bell' WHEN 'AlertList' THEN 'Warning' WHEN 'AlertRules' THEN 'Setting' ELSE 'Menu' END,0,'' FROM sys_menu n JOIN sw_kra_id_map m ON m.entity='menu' AND m.old_id=CAST(n.menu_id AS CHAR) LEFT JOIN sw_kra_id_map pm ON pm.entity='menu' AND pm.old_id=CAST(n.parent_id AS CHAR) WHERE n.menu_type IN('M','C'); UPDATE sys_base_menus SET sort=CASE name WHEN 'dashboard' THEN 1 WHEN 'sw_BusMgmt' THEN 2 WHEN 'sw_DataAnalysis' THEN 3 WHEN 'sw_AlertCenter' THEN 4 WHEN 'permission' THEN 5 WHEN 'org' THEN 6 WHEN 'systemConfig' THEN 7 WHEN 'monitor' THEN 8 WHEN 'media' THEN 9 WHEN 'extensions' THEN 13 WHEN 'person' THEN 16 ELSE sort END WHERE parent_id=0; INSERT INTO sys_base_menu_btns(id,created_at,updated_at,name,`desc`,sys_base_menu_id) SELECT m.new_id,n.create_time,n.update_time,p.button_key,n.menu_name,pm.new_id FROM sys_menu n JOIN sw_kra_id_map m ON m.entity='menu' AND m.old_id=CAST(n.menu_id AS CHAR) JOIN sw_kra_id_map pm ON pm.entity='menu' AND pm.old_id=CAST(n.parent_id AS CHAR) JOIN sw_kra_menu_permissions p ON p.source_menu_id=n.menu_id WHERE n.menu_type='F'; INSERT INTO sys_authority_menus(sys_authority_authority_id,sys_base_menu_id) SELECT rm.new_id,mm.new_id FROM sys_role_menu x JOIN sw_kra_id_map rm ON rm.entity='role' AND rm.old_id=CAST(x.role_id AS CHAR) JOIN sw_kra_id_map mm ON mm.entity='menu' AND mm.old_id=CAST(x.menu_id AS CHAR) JOIN sys_menu m ON m.menu_id=x.menu_id WHERE m.menu_type IN('M','C'); INSERT INTO sys_authority_btns(authority_id,sys_menu_id,sys_base_menu_btn_id) SELECT rm.new_id,pm.new_id,mm.new_id FROM sys_role_menu x JOIN sw_kra_id_map rm ON rm.entity='role' AND rm.old_id=CAST(x.role_id AS CHAR) JOIN sw_kra_id_map mm ON mm.entity='menu' AND mm.old_id=CAST(x.menu_id AS CHAR) JOIN sys_menu m ON m.menu_id=x.menu_id JOIN sw_kra_id_map pm ON pm.entity='menu' AND pm.old_id=CAST(m.parent_id AS CHAR) WHERE m.menu_type='F'; INSERT INTO sys_authority_menus(sys_authority_authority_id,sys_base_menu_id) SELECT 888,m.new_id FROM sw_kra_id_map m JOIN sys_menu n ON m.entity='menu' AND m.old_id=CAST(n.menu_id AS CHAR) WHERE n.menu_type IN('M','C'); INSERT INTO sys_authority_btns(authority_id,sys_menu_id,sys_base_menu_btn_id) SELECT 888,sys_base_menu_id,id FROM sys_base_menu_btns; INSERT INTO sys_authority_menus(sys_authority_authority_id,sys_base_menu_id) SELECT a.authority_id,m.id FROM sys_authorities a JOIN sys_base_menus m ON m.name='dashboard' WHERE a.authority_id<>888 AND a.default_router='dashboard'; INSERT INTO sw_kra_api_contract(method,source_path,target_path,source_permission,controller) VALUES ('GET','/system/user/preference','/sw/user/preference','__authenticated__','UserPreference'), ('PUT','/system/user/preference','/sw/user/preference','__authenticated__','UserPreference'), ('GET','/system/promote/list','/sw/promote/list','system:promote:list','Promote'), ('GET','/system/promote/portrait','/sw/promote/portrait','system:promote:list','Promote'), ('GET','/system/promote/game-distribution','/sw/promote/game-distribution','system:promote:list','Promote'), ('GET','/system/promote/bindOptions','/sw/promote/bindOptions','system:promote:add','Promote'), ('POST','/system/promote','/sw/promote','system:promote:add','Promote'), ('GET','/system/promoteActivePool/bindList','/sw/promoteActivePool/bindList','system:promoteActivePool:list','PromoteActivePool'), ('GET','/system/promoteActivePool/bindSpendDetail','/sw/promoteActivePool/bindSpendDetail','system:promoteActivePool:list','PromoteActivePool'), ('GET','/system/workbench/summary','/sw/workbench/summary','system:workbench:query','Workbench'), ('GET','/system/workbench/registerTop','/sw/workbench/registerTop','system:workbench:query','Workbench'), ('GET','/system/workbench/payRank','/sw/workbench/payRank','system:workbench:query','Workbench'), ('GET','/system/workbench/unloginTop','/sw/workbench/unloginTop','system:workbench:query','Workbench'), ('GET','/system/rank/channel','/sw/rank/channel','system:rank:channel','Rank'), ('GET','/system/rank/business','/sw/rank/business','system:rank:channel','Rank'), ('GET','/system/rank/game','/sw/rank/game','system:rank:channel','Rank'), ('GET','/system/gameData/list','/sw/gameData/list','system:gameData:list','GameData'), ('GET','/system/channelData/list','/sw/channelData/list','system:channelData:list','ChannelData'), ('GET','/system/register/list','/sw/register/list','system:register:list','Register'), ('POST','/system/register/export','/sw/register/export','system:register:export','Register'), ('GET','/system/spend/list','/sw/spend/list','system:spend:list','Spend'), ('POST','/system/spend/export','/sw/spend/export','system:spend:export','Spend'), ('GET','/system/serverAnalysis/games','/sw/serverAnalysis/games','system:serverAnalysis:list','ServerAnalysis'), ('GET','/system/serverAnalysis/servers','/sw/serverAnalysis/servers','system:serverAnalysis:list','ServerAnalysis'), ('GET','/system/serverAnalysis/list','/sw/serverAnalysis/list','system:serverAnalysis:list','ServerAnalysis'), ('GET','/system/alertRule/list','/sw/alertRule/list','system:alertRule:list','SysAlertRule'), ('GET','/system/alertRule/ruleTypes','/sw/alertRule/ruleTypes','system:alertRule:list','SysAlertRule'), ('GET','/system/alertRule/{id}','/sw/alertRule/:id','system:alertRule:query','SysAlertRule'), ('POST','/system/alertRule/add','/sw/alertRule/add','system:alertRule:add','SysAlertRule'), ('PUT','/system/alertRule/edit','/sw/alertRule/edit','system:alertRule:edit','SysAlertRule'), ('DELETE','/system/alertRule/{id}','/sw/alertRule/:id','system:alertRule:remove','SysAlertRule'), ('PUT','/system/alertRule/toggle/{id}','/sw/alertRule/toggle/:id','system:alertRule:edit','SysAlertRule'), ('GET','/system/alertRecord/list','/sw/alertRecord/list','system:alertRecord:list','SysAlertRecord'), ('GET','/system/alertRecord/detail/{id}','/sw/alertRecord/detail/:id','system:alertRecord:query','SysAlertRecord'), ('POST','/system/alertRecord/startProcess','/sw/alertRecord/startProcess','system:alertRecord:process','SysAlertRecord'), ('POST','/system/alertRecord/submitAudit','/sw/alertRecord/submitAudit','system:alertRecord:process','SysAlertRecord'), ('POST','/system/alertRecord/approve','/sw/alertRecord/approve','system:alertRecord:audit','SysAlertRecord'), ('POST','/system/alertRecord/reject','/sw/alertRecord/reject','system:alertRecord:audit','SysAlertRecord'), ('POST','/system/alertRecord/reProcess','/sw/alertRecord/reProcess','system:alertRecord:process','SysAlertRecord'), ('POST','/system/alertRecord/addNote','/sw/alertRecord/addNote','system:alertRecord:process','SysAlertRecord'), ('GET','/system/user/list','/sw/business/list','system:user:list','SysUser'), ('GET','/system/user/{userId}/promotes','/sw/business/:userId/promotes','system:user:query','SysUser'), ('GET','/system/user/{userId}/portrait','/sw/business/:userId/portrait','system:user:query','SysUser'), ('GET','/system/user/{userId}/bindPlatform','/sw/business/:userId/bindPlatform','system:user:query','SysUser'), ('POST','/system/user/bindPlatform','/sw/business/bindPlatform','system:user:bind','SysUser'), ('GET','/system/user/bindPlatform','/sw/business/bindPlatform','system:user:query','SysUser'), ('GET','/system/user/bindPlatform/portrait','/sw/business/bindPlatform/portrait','system:user:query','SysUser'), ('DELETE','/system/user/bindPlatform','/sw/business/bindPlatform','system:user:bind','SysUser'), ('POST','/system/user/export','/sw/business/export','system:user:export','SysUser'), ('POST','/system/user/importData','/sw/business/importData','system:user:import','SysUser'), ('GET','/system/user/','/sw/business','system:user:query','SysUser'), ('GET','/system/user/{userId}','/sw/business/:userId','system:user:query','SysUser'), ('POST','/system/user','/sw/business','system:user:add','SysUser'), ('PUT','/system/user','/sw/business','system:user:edit','SysUser'), ('DELETE','/system/user/{userIds}','/sw/business/:userIds','system:user:remove','SysUser'), ('GET','/system/user/optionselect','/sw/business/optionselect','system:user:query','SysUser'), ('PUT','/system/user/resetPwd','/sw/business/resetPwd','system:user:resetPwd','SysUser'), ('PUT','/system/user/changeStatus','/sw/business/changeStatus','system:user:edit','SysUser'), ('GET','/system/user/unlock/{userId}','/sw/business/unlock/:userId','system:user:edit','SysUser'), ('GET','/system/user/authRole/{userId}','/sw/business/authRole/:userId','system:user:query','SysUser'), ('PUT','/system/user/authRole','/sw/business/authRole','system:user:edit','SysUser'), ('GET','/system/user/deptTree','/sw/business/deptTree','system:user:list','SysUser'), ('GET','/system/user/list/dept/{deptId}','/sw/business/list/dept/:deptId','system:user:list','SysUser'); INSERT INTO sys_apis(created_at,updated_at,path,description,api_group,method) SELECT NOW(3),NOW(3),target_path,CONCAT('SW ',controller,' - Go handler pending'),'SW business',method FROM sw_kra_api_contract; INSERT INTO casbin_rule(ptype,v0,v1,v2,v3,v4,v5) SELECT DISTINCT 'p',CAST(rm.new_id AS CHAR),c.target_path,c.method,'','','' FROM sw_kra_api_contract c JOIN sw_kra_menu_permissions p ON p.source_permission=c.source_permission JOIN sys_role_menu x ON x.menu_id=p.source_menu_id JOIN sw_kra_id_map rm ON rm.entity='role' AND rm.old_id=CAST(x.role_id AS CHAR); INSERT INTO casbin_rule(ptype,v0,v1,v2,v3,v4,v5) SELECT 'p','888',target_path,method,'','','' FROM sw_kra_api_contract; INSERT INTO casbin_rule(ptype,v0,v1,v2,v3,v4,v5) SELECT 'p',CAST(a.authority_id AS CHAR),p.path,p.method,'','','' FROM sys_authorities a JOIN sys_apis p ON p.path IN('/menu/getMenu','/user/getUserInfo','/user/setSelfInfo','/user/setSelfSetting','/user/setUserAuthority','/user/changePassword') WHERE a.authority_id<>888; INSERT INTO casbin_rule(ptype,v0,v1,v2,v3,v4,v5) SELECT 'p',CAST(a.authority_id AS CHAR),c.target_path,c.method,'','','' FROM sys_authorities a JOIN sw_kra_api_contract c ON c.source_permission='__authenticated__' WHERE a.authority_id<>888; -- 七、转换旧任务定义,保留超时和重试参数;当前 Go 执行器读取 _execution,任务仍保持停用。 INSERT INTO sys_timed_tasks(id,created_at,updated_at,name,description,spec,with_seconds,executor_type,method_name,params,http_allow_private,enabled) SELECT m.new_id,j.create_dt,j.update_dt,CONCAT('SW/',j.job_name),j.description,CASE j.trigger_type WHEN 3 THEN CONCAT('CRON_TZ=Asia/Shanghai ',TRIM(j.trigger_interval)) WHEN 2 THEN CONCAT('@every ',TRIM(j.trigger_interval),'s') END,j.trigger_type=3,'method',j.executor_info,JSON_SET(IF(j.args_str IS NULL OR j.args_str='',JSON_OBJECT(),CAST(j.args_str AS JSON)),'$._execution',JSON_OBJECT('timeoutSeconds',j.executor_timeout,'maxRetryTimes',j.max_retry_times,'retryIntervalSeconds',j.retry_interval)),0,0 FROM sj_job j JOIN sw_kra_id_map m ON m.entity='task' AND m.old_id=CAST(j.id AS CHAR) WHERE j.deleted=0; -- 八、回填业务表中的用户及部门引用,保留业务主键和平台实体 ID。 UPDATE `sys_user_bind_platform` x JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(x.`user_id` AS CHAR) SET x.`user_id`=m.new_id; UPDATE `sys_user_preference` x JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(x.`user_id` AS CHAR) SET x.`user_id`=m.new_id; -- 显式保留更新时间,防止旧表 ON UPDATE CURRENT_TIMESTAMP 把 ID 转换当作业务编辑。 UPDATE `sys_alert_rule` x JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(x.`creator_id` AS CHAR) SET x.`creator_id`=m.new_id,x.`updated_at`=x.`updated_at`; UPDATE `sys_alert_record` x JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(x.`business_id` AS CHAR) SET x.`business_id`=m.new_id,x.`updated_at`=x.`updated_at`; UPDATE `sys_alert_operation_log` x JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(x.`operator_id` AS CHAR) SET x.`operator_id`=m.new_id; UPDATE `sys_message` x JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(x.`create_by` AS CHAR) SET x.`create_by`=m.new_id; UPDATE `sys_message` x JOIN sw_kra_id_map m ON m.entity='user' AND m.old_id=CAST(x.`update_by` AS CHAR) SET x.`update_by`=m.new_id; UPDATE sys_message x JOIN sw_kra_id_map m ON m.entity='dept' AND m.old_id=CAST(x.create_dept AS CHAR) SET x.create_dept=m.new_id; BEGIN DECLARE done INT DEFAULT 0; DECLARE old_user VARCHAR(64); DECLARE new_user BIGINT UNSIGNED; DECLARE users_cursor CURSOR FOR SELECT old_id,new_id FROM sw_kra_id_map WHERE entity='user' ORDER BY id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; OPEN users_cursor; user_loop: LOOP FETCH users_cursor INTO old_user,new_user; IF done=1 THEN LEAVE user_loop; END IF; UPDATE sys_message SET send_user_ids=TRIM(BOTH ',' FROM REPLACE(CONCAT(',',BINARY send_user_ids,','),CONCAT(',',BINARY old_user,','),CONCAT(',',BINARY new_user,','))) WHERE FIND_IN_SET(BINARY old_user,BINARY send_user_ids)>0; END LOOP; CLOSE users_cursor; END; -- 九、核验账号密码、关联、业务引用、菜单和任务;不通过则回滚当前数据事务。 SELECT COUNT(*) INTO v_actual FROM sys_alert_rule n JOIN bak_sw2kra_20261103_sys_alert_rule o ON o.id=n.id WHERE NOT(n.created_at <=> o.created_at) OR NOT(n.updated_at <=> o.updated_at); INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','alert rule timestamps unchanged',0,v_actual,v_actual=0); IF v_actual<>0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='alert rule timestamps changed'; END IF; SELECT COUNT(*) INTO v_actual FROM sys_alert_record n JOIN bak_sw2kra_20261103_sys_alert_record o ON o.id=n.id WHERE NOT(n.created_at <=> o.created_at) OR NOT(n.updated_at <=> o.updated_at); INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','alert record timestamps unchanged',0,v_actual,v_actual=0); IF v_actual<>0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='alert record timestamps changed'; END IF; SELECT (SELECT COUNT(*) FROM sys_users) INTO v_actual; SELECT (SELECT COUNT(*) FROM sys_user WHERE del_flag='0') INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','user count',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='user count'; END IF; SELECT (SELECT COUNT(*) FROM sys_users n JOIN sw_kra_id_map m ON m.entity='user' AND m.new_id=n.id JOIN sys_user o ON CAST(o.user_id AS CHAR)=m.old_id WHERE BINARY n.password=BINARY o.password) INTO v_actual; SELECT (SELECT COUNT(*) FROM sys_user WHERE del_flag='0') INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','password bytes unchanged',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='password bytes unchanged'; END IF; SELECT (SELECT COUNT(*) FROM sys_users n LEFT JOIN sys_authorities a ON a.authority_id=n.authority_id WHERE a.authority_id IS NULL) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','current role references',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='current role references'; END IF; SELECT (SELECT COUNT(*) FROM sys_user_authority) INTO v_actual; SELECT (SELECT COUNT(*) FROM sys_user_role) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','user role links',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='user role links'; END IF; SELECT (SELECT COUNT(*) FROM sys_users n JOIN sw_kra_id_map m ON m.entity='user' AND m.new_id=n.id JOIN sys_user o ON CAST(o.user_id AS CHAR)=m.old_id LEFT JOIN sw_kra_id_map p ON p.entity='user' AND p.old_id=CAST(o.parent_id AS CHAR) WHERE n.parent_id<>COALESCE(p.new_id,0) OR n.level<>o.level) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','business parent and level',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='business parent and level'; END IF; SELECT (SELECT COUNT(*) FROM sys_users u JOIN sys_users p ON p.id=u.parent_id WHERE u.id_path<>CONCAT(p.id_path,',',p.id)) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','business ancestor paths',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='business ancestor paths'; END IF; SELECT (SELECT COUNT(*) FROM sys_user_bind_platform b LEFT JOIN sys_users u ON u.id=b.user_id WHERE u.id IS NULL) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','platform binding users',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='platform binding users'; END IF; SELECT (SELECT COUNT(*) FROM sys_user_bind_platform) INTO v_actual; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_user_bind_platform`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','platform binding rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='platform binding rows'; END IF; SELECT (SELECT COUNT(*) FROM sys_user_preference p LEFT JOIN sys_users u ON u.id=p.user_id WHERE u.id IS NULL) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','preference users',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='preference users'; END IF; SELECT (SELECT COUNT(*) FROM sys_user_preference) INTO v_actual; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_user_preference`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','preference rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='preference rows'; END IF; SELECT (SELECT COUNT(*) FROM media_file_upload_and_downloads) INTO v_actual; SELECT (SELECT COUNT(*) FROM sys_oss) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','file rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='file rows'; END IF; SELECT (SELECT COUNT(*) FROM media_file_upload_and_downloads n JOIN sw_kra_id_map m ON m.entity='file' AND m.new_id=n.id JOIN sys_oss o ON CAST(o.oss_id AS CHAR)=m.old_id WHERE n.size<>COALESCE(CAST(JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(o.ext1),o.ext1,JSON_OBJECT()),'$.fileSize')) AS UNSIGNED),0) OR BINARY n.mime<>BINARY COALESCE(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(o.ext1),o.ext1,JSON_OBJECT()),'$.contentType')),'null'),'') OR BINARY n.md5<>BINARY COALESCE(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(IF(JSON_VALID(o.ext1),o.ext1,JSON_OBJECT()),'$.md5')),'null'),'')) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','file size MIME and MD5',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='file size MIME and MD5'; END IF; SELECT (SELECT COUNT(*) FROM sw_kra_id_map WHERE entity='menu') INTO v_actual; SELECT (31) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','business source menu nodes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='business source menu nodes'; END IF; SELECT (SELECT COUNT(*) FROM sys_base_menus n JOIN sw_kra_id_map m ON m.entity='menu' AND m.new_id=n.id) INTO v_actual; SELECT (14) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','business navigation nodes',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='business navigation nodes'; END IF; SELECT (SELECT COUNT(*) FROM sys_base_menu_btns) INTO v_actual; SELECT (17) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','business buttons',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='business buttons'; END IF; SELECT (SELECT COUNT(*) FROM sys_base_menus WHERE name='sw_workbench' OR path='sw-index') INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','workbench reuses dashboard',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='workbench reuses dashboard'; END IF; SELECT (SELECT COUNT(*) FROM sys_authorities a WHERE NOT EXISTS(SELECT 1 FROM sys_base_menus m JOIN sys_authority_menus x ON x.sys_base_menu_id=m.id WHERE x.sys_authority_authority_id=a.authority_id AND m.name=a.default_router)) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','default routers accessible',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='default routers accessible'; END IF; SELECT (SELECT COUNT(*) FROM sys_base_menus n LEFT JOIN sys_base_menus p ON p.id=n.parent_id WHERE n.parent_id<>0 AND p.id IS NULL) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','menu parent references',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='menu parent references'; END IF; SELECT (SELECT COUNT(*) FROM sys_timed_tasks t JOIN sw_kra_id_map m ON m.entity='task' AND m.new_id=t.id) INTO v_actual; SELECT (7) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','SW task definitions',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='SW task definitions'; END IF; SELECT (SELECT COUNT(*) FROM sys_timed_tasks WHERE enabled=1) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','all tasks disabled for rehearsal',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='all tasks disabled for rehearsal'; END IF; SELECT (SELECT COUNT(*) FROM sys_message) INTO v_actual; SELECT (SELECT COUNT(*) FROM `bak_sw2kra_20261103_sys_message`) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','message rows',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='message rows'; END IF; SELECT (SELECT COUNT(*) FROM (SELECT code FROM sys_positions GROUP BY code HAVING COUNT(*)>1) duplicate_codes) INTO v_actual; SELECT (0) INTO v_expected; INSERT INTO sw_kra_checks(stage,check_name,expected_value,actual_value,passed) VALUES ('migration','position codes unique',v_expected,v_actual,v_expected=v_actual); IF v_expected <> v_actual THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='position codes unique'; END IF; UPDATE sw_kra_state SET phase='data_validated' WHERE id=1; COMMIT; SELECT '框架数据已验证' AS result; -- 十、数据核验通过后归档旧框架表,登记完成状态并释放迁移锁。 RENAME TABLE `sys_social` TO `legacy_sw_20261103_sys_social`, `sys_dept` TO `legacy_sw_20261103_sys_dept`, `sys_user` TO `legacy_sw_20261103_sys_user`, `sys_post` TO `legacy_sw_20261103_sys_post`, `sys_role` TO `legacy_sw_20261103_sys_role`, `sys_menu` TO `legacy_sw_20261103_sys_menu`, `sys_user_role` TO `legacy_sw_20261103_sys_user_role`, `sys_role_menu` TO `legacy_sw_20261103_sys_role_menu`, `sys_role_dept` TO `legacy_sw_20261103_sys_role_dept`, `sys_user_post` TO `legacy_sw_20261103_sys_user_post`, `sys_oper_log` TO `legacy_sw_20261103_sys_oper_log`, `sys_dict_type` TO `legacy_sw_20261103_sys_dict_type`, `sys_dict_data` TO `legacy_sw_20261103_sys_dict_data`, `sys_config` TO `legacy_sw_20261103_sys_config`, `sys_login_info` TO `legacy_sw_20261103_sys_login_info`, `sys_notice` TO `legacy_sw_20261103_sys_notice`, `sys_oss` TO `legacy_sw_20261103_sys_oss`, `sys_oss_config` TO `legacy_sw_20261103_sys_oss_config`, `sys_client` TO `legacy_sw_20261103_sys_client`; UPDATE sw_kra_state SET phase='completed',completed_at=NOW(3) WHERE id=1; DO RELEASE_LOCK(v_lock_name); SET v_lock=0; SELECT '完整框架迁移完成' AS result; SELECT stage,COUNT(*) AS checks,SUM(passed) AS passed FROM sw_kra_checks GROUP BY stage; END migration_run$$ -- 只调用这一个入口,由库的实际状态决定执行完整迁移还是菜单调整。 CALL sw_kra_migrate_20261103()$$ DROP PROCEDURE sw_kra_migrate_20261103$$ DELIMITER ; -- 输出最终根菜单顺序,便于核对页面效果。 SELECT id,name,title,sort FROM sys_base_menus WHERE parent_id=0 ORDER BY sort,id;