feat: 同步地大功能至2026年10月20日
This commit is contained in:
@@ -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
|
||||
);
|
||||
Reference in New Issue
Block a user