feat: 同步地大功能至2026年10月20日

This commit is contained in:
2026-10-21 09:26:25 +08:00
parent 6b5d27c68d
commit 88d624172c
198 changed files with 19375 additions and 2128 deletions
+212
View File
@@ -0,0 +1,212 @@
-- 人员数据治理模块初始化脚本(MySQL 8.0,UTF-8)。
-- 人员变更直接复用现有 member_change_record、sys_user_history 及 WF 流程,本脚本不创建替代表。
SET NAMES utf8mb4;
SET @add_person_flag = IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sys_user' AND COLUMN_NAME = 'flag') = 0,
'ALTER TABLE sys_user ADD COLUMN flag int DEFAULT 0 COMMENT ''人员治理同步保护标识:1忽略同步,0或空正常同步''',
'SELECT 1'
);
PREPARE add_person_flag_stmt FROM @add_person_flag;
EXECUTE add_person_flag_stmt;
DEALLOCATE PREPARE add_person_flag_stmt;
CREATE TABLE IF NOT EXISTS person_api_config (
id varchar(32) NOT NULL,
configName varchar(100), sourceType varchar(20), requestUrl varchar(500), requestMethod varchar(10),
timeoutSeconds int, sourceTable varchar(100), targetTable varchar(100), syncMode varchar(20),
identityField varchar(100), bodyType varchar(30), bodyContent text,
tokenRequestUrl varchar(500), tokenRequestMethod varchar(10), tokenTimeoutSeconds int,
tokenBodyType varchar(30), tokenBodyContent text, tokenValuePath varchar(200), tokenExpiresPath varchar(200),
tokenExpiryUnit varchar(20), tokenQueryResult text, dataQueryResult text,
responseCodePath varchar(200), responseSuccessValue varchar(100), responseMessagePath varchar(200),
responseDataPath varchar(200), responseTotalPath varchar(200), enabled tinyint(1), taskCron varchar(100),
matchMemberRules tinyint(1), lastSyncTime datetime, taskId varchar(32), remark varchar(500),
createdBy varchar(32), createdAt bigint, updatedBy varchar(32), updatedAt bigint,
delFlag tinyint(1), opBy varchar(128), opAt varchar(128),
PRIMARY KEY (id), UNIQUE KEY UK_PERSON_API_CONFIG_NAME (configName)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_api_field_mapping (
id varchar(32) NOT NULL, configId varchar(32), sourceField varchar(100), sourceComment varchar(200),
targetField varchar(100), targetComment varchar(200), required tinyint(1), identityFlag tinyint(1), sort int,
PRIMARY KEY (id), UNIQUE KEY UK_PERSON_API_MAPPING_TARGET (configId, targetField)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_api_request_param (
id varchar(32) NOT NULL, configId varchar(32), requestScope varchar(20), paramLocation varchar(20),
paramName varchar(100), paramType varchar(30), paramValue text, required tinyint(1),
description varchar(300), sensitiveFlag int, sort int, PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_api_test_case (
id varchar(32) NOT NULL, configId varchar(32), requestScope varchar(20), caseName varchar(100),
requestSnapshot text, responseStatus int, responseTime bigint, responseBody text, success tinyint(1),
executedAt datetime, createdBy varchar(32), createdAt bigint, updatedBy varchar(32), updatedAt bigint,
delFlag tinyint(1), opBy varchar(128), opAt varchar(128), PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_sync_batch (
id varchar(32) NOT NULL, configId varchar(32), batchNo varchar(50), triggerType varchar(20),
startedAt datetime, finishedAt datetime, status varchar(20), sourceCount int, successCount int,
newCount int, changeCount int, exceptionCount int, errorMessage text, rawFileReid varchar(32),
createdBy varchar(32), createdAt bigint, updatedBy varchar(32), updatedAt bigint,
delFlag tinyint(1), opBy varchar(128), opAt varchar(128),
PRIMARY KEY (id), UNIQUE KEY UK_PERSON_SYNC_BATCH_NO (batchNo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_source_relation (
id varchar(32) NOT NULL, configId varchar(32), sourcePersonKey varchar(150), userId varchar(32),
personNo varchar(120), lastSeenBatchId varchar(32), lastSeenTime datetime, presentFlag tinyint(1),
sourceDataHash varchar(64), createdBy varchar(32), createdAt bigint, updatedBy varchar(32), updatedAt bigint,
delFlag tinyint(1), opBy varchar(128), opAt varchar(128),
PRIMARY KEY (id), UNIQUE KEY UK_PERSON_SOURCE_KEY (configId, sourcePersonKey)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_member_match_config (
id varchar(32) NOT NULL, configName varchar(100), apiConfigId varchar(32), copiedFromId varchar(32),
enabled tinyint(1), groupCount int, lastMatchCount int, lastExecuteTime datetime,
createdBy varchar(32), createdAt bigint, updatedBy varchar(32), updatedAt bigint,
delFlag tinyint(1), opBy varchar(128), opAt varchar(128),
PRIMARY KEY (id), UNIQUE KEY UK_PERSON_MEMBER_API_CONFIG (apiConfigId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_member_match_group (
id varchar(32) NOT NULL, matchConfigId varchar(32), parentGroupId varchar(32),
ruleType varchar(30) DEFAULT 'UNION_MEMBER', groupNo int, joinLogic varchar(3), sort int,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_member_match_condition (
id varchar(32) NOT NULL, groupId varchar(32), dictCode varchar(50), dictItemId varchar(32),
dictItemCode varchar(50), dictItemName varchar(100), mappedField varchar(100), operator varchar(30),
matchValue varchar(500), joinLogic varchar(3), sort int, PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS person_exception (
id varchar(32) NOT NULL, configId varchar(32), relationId varchar(32), discoverBatchId varchar(32),
userId varchar(32), personNo varchar(120), personName varchar(100), unitId varchar(32), unitName varchar(150),
exceptionType varchar(30), exceptionReason varchar(500), lastSyncTime datetime, discoverTime datetime,
status varchar(30), handleResult varchar(30), handleOpinion varchar(500), handlerId varchar(32),
handlerName varchar(100), handleTime datetime, rawFileReid varchar(32),
createdBy varchar(32), createdAt bigint, updatedBy varchar(32), updatedAt bigint,
delFlag tinyint(1), opBy varchar(128), opAt varchar(128), PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- PC 端独立应用菜单。完整页面跳转由布局按 /platform/personGovernance/ 路径处理。
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled,
permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag,
platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT '76725022b0cc11f196a000ff8d9db2e0', '', LPAD(IFNULL(MAX(CAST(path AS UNSIGNED)), 0) + 1, 4, '0'),
'人员数据治理', 'PersonGovernance', 'menu', '', '', 'ti-id-badge', 1, 0,
'data.person.governance', '人员数据接入、会员匹配、人员变更及异常处理', 694, 1,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0,
'PC', NULL, NULL, 'r', 0, 0
FROM sys_menu WHERE (parentId = '' OR parentId IS NULL) AND CHAR_LENGTH(path) = 4
HAVING NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled,
permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag,
platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT '7673d831b0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0001'), 'API配置', 'ApiConfig', 'menu',
'/platform/personGovernance/apiConfig', '', '', 1, 0, 'data.person.governance.api', NULL, 1, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'a', 0, 0
FROM sys_menu p WHERE p.permission = 'data.person.governance'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.api') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled,
permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag,
platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT '76749371b0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0002'), '会员匹配', 'MemberMatch', 'menu',
'/platform/personGovernance/memberMatch', '', '', 1, 0, 'data.person.governance.member', NULL, 2, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'h', 0, 0
FROM sys_menu p WHERE p.permission = 'data.person.governance'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.member') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled,
permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag,
platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT '7674b630b0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0003'), '人员变更', 'PersonChange', 'menu',
'/platform/personGovernance/personChange', '', '', 1, 0, 'data.person.governance.change', NULL, 3, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'r', 0, 0
FROM sys_menu p WHERE p.permission = 'data.person.governance'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.change') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled,
permission, note, location, hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag,
platform, moduleId, picIcon, initialPinyinName, isRecommendApp, isRecommendService)
SELECT '7674d34eb0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0004'), '人员异常', 'PersonException', 'menu',
'/platform/personGovernance/personException', '', '', 1, 0, 'data.person.governance.exception', NULL, 4, 0,
'', UNIX_TIMESTAMP(NOW()) * 1000, '', UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, NULL, 'r', 0, 0
FROM sys_menu p WHERE p.permission = 'data.person.governance'
AND NOT EXISTS (SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.exception') m);
-- 页面按钮权限;type=data 不在左侧菜单展示。
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, showit, disabled, permission, location,
hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId,
initialPinyinName, isRecommendApp, isRecommendService)
SELECT '7674fb04b0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0001'), '保存API配置', 'Edit', 'data',
0, 0, 'data.person.governance.api.edit', 1, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '',
UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, 'b', 0, 0 FROM sys_menu p
WHERE p.permission = 'data.person.governance.api' AND NOT EXISTS
(SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.api.edit') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, showit, disabled, permission, location,
hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId,
initialPinyinName, isRecommendApp, isRecommendService)
SELECT '76750400b0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0002'), '删除API配置', 'Delete', 'data',
0, 0, 'data.person.governance.api.delete', 2, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '',
UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, 's', 0, 0 FROM sys_menu p
WHERE p.permission = 'data.person.governance.api' AND NOT EXISTS
(SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.api.delete') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, showit, disabled, permission, location,
hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId,
initialPinyinName, isRecommendApp, isRecommendService)
SELECT '76750e42b0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0003'), '测试及同步', 'Test', 'data',
0, 0, 'data.person.governance.api.test', 3, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '',
UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, 'c', 0, 0 FROM sys_menu p
WHERE p.permission = 'data.person.governance.api' AND NOT EXISTS
(SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.api.test') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, showit, disabled, permission, location,
hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId,
initialPinyinName, isRecommendApp, isRecommendService)
SELECT '767518e8b0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0001'), '保存会员匹配', 'Edit', 'data',
0, 0, 'data.person.governance.member.edit', 1, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '',
UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, 'b', 0, 0 FROM sys_menu p
WHERE p.permission = 'data.person.governance.member' AND NOT EXISTS
(SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.member.edit') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, showit, disabled, permission, location,
hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId,
initialPinyinName, isRecommendApp, isRecommendService)
SELECT '767523deb0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0002'), '删除会员匹配', 'Delete', 'data',
0, 0, 'data.person.governance.member.delete', 2, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '',
UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, 's', 0, 0 FROM sys_menu p
WHERE p.permission = 'data.person.governance.member' AND NOT EXISTS
(SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.member.delete') m);
INSERT INTO sys_menu (id, parentId, path, name, aliasName, type, showit, disabled, permission, location,
hasChildren, createdBy, createdAt, updatedBy, updatedAt, delFlag, platform, moduleId,
initialPinyinName, isRecommendApp, isRecommendService)
SELECT '76752eacb0cc11f196a000ff8d9db2e0', p.id, CONCAT(p.path, '0001'), '处理人员异常', 'Handle', 'data',
0, 0, 'data.person.governance.exception.handle', 1, 0, '', UNIX_TIMESTAMP(NOW()) * 1000, '',
UNIX_TIMESTAMP(NOW()) * 1000, 0, 'PC', NULL, 'c', 0, 0 FROM sys_menu p
WHERE p.permission = 'data.person.governance.exception' AND NOT EXISTS
(SELECT 1 FROM (SELECT id FROM sys_menu WHERE permission = 'data.person.governance.exception.handle') m);
-- 给系统管理员默认授权,其他角色可在角色管理中按需分配。
INSERT INTO sys_role_menu (roleId, menuId)
SELECT r.id, m.id
FROM sys_role r
JOIN sys_menu m ON m.permission IN (
'data.person.governance', 'data.person.governance.api', 'data.person.governance.member',
'data.person.governance.api.edit', 'data.person.governance.api.delete', 'data.person.governance.api.test',
'data.person.governance.member.edit', 'data.person.governance.member.delete',
'data.person.governance.change', 'data.person.governance.exception',
'data.person.governance.exception.handle')
LEFT JOIN sys_role_menu rm ON rm.roleId = r.id AND rm.menuId = m.id
WHERE r.code = 'SYSADMIN'
AND rm.roleId IS NULL;
@@ -0,0 +1,19 @@
-- 社团缩略图保存系统文件下载地址;保留可空以兼容未上传图片的历史社团。
-- 字段存在时跳过,避免重复执行迁移时报错。
SET @club_thumbnail_column_count = (
SELECT COUNT(*)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'sys_club'
AND COLUMN_NAME = 'thumbnail'
);
SET @club_thumbnail_ddl = IF(
@club_thumbnail_column_count = 0,
'ALTER TABLE sys_club ADD COLUMN thumbnail VARCHAR(1000) NULL COMMENT ''社团缩略图'' AFTER clubName',
'SELECT 1'
);
PREPARE club_thumbnail_stmt FROM @club_thumbnail_ddl;
EXECUTE club_thumbnail_stmt;
DEALLOCATE PREPARE club_thumbnail_stmt;
@@ -0,0 +1,38 @@
-- 社团活动属于报销项目的正式字典配置,两端沿用现有字典接口读取。
-- 仅补充缺失记录;已有记录(包括已禁用记录)不覆盖,不在查询接口中添加兜底项。
INSERT INTO sys_dict (
id, parentId, path, name, remark, code, disabled, location, hasChildren,
createdBy, createdAt, updatedBy, updatedAt, delFlag
)
SELECT
REPLACE(UUID(), '-', ''),
parent.id,
CONCAT(parent.path, LPAD(IFNULL((
SELECT MAX(CAST(RIGHT(child.path, 4) AS UNSIGNED))
FROM sys_dict child
WHERE child.path LIKE CONCAT(parent.path, '____')
), 0) + 1, 4, '0')),
'社团活动',
'',
'UNION_REIMBURSE_PROJECT_5',
0,
IFNULL((SELECT MAX(child.location) FROM sys_dict child WHERE child.parentId = parent.id), 0) + 1,
0,
'', UNIX_TIMESTAMP(NOW()) * 1000,
'', UNIX_TIMESTAMP(NOW()) * 1000,
0
FROM sys_dict parent
WHERE parent.code = 'UNION_REIMBURSE_PROJECT'
AND NOT EXISTS (
SELECT 1
FROM (SELECT code FROM sys_dict WHERE code = 'UNION_REIMBURSE_PROJECT_5') existing_item
);
UPDATE sys_dict parent
SET parent.hasChildren = 1
WHERE parent.code = 'UNION_REIMBURSE_PROJECT'
AND EXISTS (
SELECT 1
FROM (SELECT parentId FROM sys_dict WHERE code = 'UNION_REIMBURSE_PROJECT_5') club_activity
WHERE club_activity.parentId = parent.id
);