diff --git a/src/main/resources/db/init_branch_union_cadre_role.sql b/src/main/resources/db/init_branch_union_cadre_role.sql index 889a8bf..4ddfdd2 100644 --- a/src/main/resources/db/init_branch_union_cadre_role.sql +++ b/src/main/resources/db/init_branch_union_cadre_role.sql @@ -1,6 +1,13 @@ --- 初始化“基层干部”角色,并为已成功分配分工会干部角色的人员补齐该角色。 +-- 初始化“基层干部”角色,并修复误从角色管理页直接添加的历史分工会干部角色。 +-- 修复对象仅限:BRANCH_UNION_ROLES 的直接子角色、unionId 为空、且其他业务作用域均为空的 sys_user_role 记录。 +-- 人员当前所属分工会以 vw_user.unionId 为准;已有非空 unionId 的角色和已有干部档案均不改写。 +-- 历史修复不补建审核流程。 + SET @now := CAST(UNIX_TIMESTAMP(NOW()) * 1000 AS UNSIGNED); +START TRANSACTION; + +-- 一、初始化“基层干部”角色。 INSERT INTO `sys_role` (`id`, `name`, `code`, `aliasName`, `disabled`, `unitid`, `note`, `sort`, `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`) SELECT @@ -8,12 +15,25 @@ SELECT 0, NULL, '分工会干部统一身份角色', 50, '', @now, '', @now, 0 FROM DUAL WHERE NOT EXISTS ( - SELECT 1 FROM `sys_role` WHERE `code` = 'BRANCH_UNION_CADRE' + SELECT 1 + FROM `sys_role` + WHERE `code` = 'BRANCH_UNION_CADRE' ); -INSERT INTO `sys_user_role` (`roleId`, `userId`, `unionId`) +DROP TEMPORARY TABLE IF EXISTS `tmp_role_manager_branch_cadre`; + +-- 二、识别角色管理页直接添加的分工会干部角色。 +-- 角色管理页只写 roleId、userId,因此这里以 unionId 和其他业务作用域均为空作为历史数据识别条件。 +CREATE TEMPORARY TABLE `tmp_role_manager_branch_cadre` AS SELECT DISTINCT - cadre_role.`id`, assigned_role.`userId`, assigned_role.`unionId` + assigned_role.`roleId`, + assigned_role.`userId`, + business_role.`code` AS `roleCode`, + user_info.`unionId`, + branch_union.`name` AS `unionName`, + user_info.`username`, + user_info.`loginname`, + user_info.`mobile` FROM `sys_user_role` assigned_role INNER JOIN `sys_role` business_role ON business_role.`id` = assigned_role.`roleId` @@ -22,15 +42,127 @@ INNER JOIN `sys_dict` branch_role_parent INNER JOIN `sys_dict` branch_role_item ON branch_role_item.`parentId` = branch_role_parent.`id` AND branch_role_item.`code` = business_role.`code` -INNER JOIN `sys_role` cadre_role - ON cadre_role.`code` = 'BRANCH_UNION_CADRE' +INNER JOIN `vw_user` user_info + ON user_info.`id` = assigned_role.`userId` +INNER JOIN `sys_union` branch_union + ON branch_union.`id` = user_info.`unionId` +WHERE (assigned_role.`unionId` IS NULL OR assigned_role.`unionId` = '') + AND (assigned_role.`unitId` IS NULL OR assigned_role.`unitId` = '') + AND (assigned_role.`unionGroupId` IS NULL OR assigned_role.`unionGroupId` = '') + AND (assigned_role.`tcDelegationId` IS NULL OR assigned_role.`tcDelegationId` = '') + AND (assigned_role.`tcSessionId` IS NULL OR assigned_role.`tcSessionId` = '') + AND (assigned_role.`wcDelegationId` IS NULL OR assigned_role.`wcDelegationId` = '') + AND (assigned_role.`wcSessionId` IS NULL OR assigned_role.`wcSessionId` = '') + AND (assigned_role.`clubId` IS NULL OR assigned_role.`clubId` = '') + AND (assigned_role.`underTakeId` IS NULL OR assigned_role.`underTakeId` = ''); + +-- 将误从角色管理页添加的角色补成当前所属分工会的作用域角色。 +INSERT INTO `sys_user_role` (`roleId`, `userId`, `unionId`) +SELECT + repair.`roleId`, repair.`userId`, repair.`unionId` +FROM `tmp_role_manager_branch_cadre` repair +WHERE NOT EXISTS ( + SELECT 1 + FROM `sys_user_role` existing_role + WHERE existing_role.`roleId` = repair.`roleId` + AND existing_role.`userId` = repair.`userId` + AND existing_role.`unionId` = repair.`unionId` +); + +-- 确认分工会作用域角色存在后,删除同人员、同角色的原空作用域记录。 +DELETE global_role +FROM `sys_user_role` global_role +INNER JOIN `tmp_role_manager_branch_cadre` repair + ON repair.`roleId` = global_role.`roleId` + AND repair.`userId` = global_role.`userId` +INNER JOIN `sys_user_role` scoped_role + ON scoped_role.`roleId` = repair.`roleId` + AND scoped_role.`userId` = repair.`userId` + AND scoped_role.`unionId` = repair.`unionId` +WHERE (global_role.`unionId` IS NULL OR global_role.`unionId` = '') + AND (global_role.`unitId` IS NULL OR global_role.`unitId` = '') + AND (global_role.`unionGroupId` IS NULL OR global_role.`unionGroupId` = '') + AND (global_role.`tcDelegationId` IS NULL OR global_role.`tcDelegationId` = '') + AND (global_role.`tcSessionId` IS NULL OR global_role.`tcSessionId` = '') + AND (global_role.`wcDelegationId` IS NULL OR global_role.`wcDelegationId` = '') + AND (global_role.`wcSessionId` IS NULL OR global_role.`wcSessionId` = '') + AND (global_role.`clubId` IS NULL OR global_role.`clubId` = '') + AND (global_role.`underTakeId` IS NULL OR global_role.`underTakeId` = ''); + +-- 角色管理页不会创建干部档案,为本次识别出的历史数据补建有效干部档案。 +INSERT INTO `sys_union_cadre` + (`id`, `unionId`, `unionName`, `userId`, `userName`, `loginName`, `mobile`, `roleCode`, `applyDate`, `isJoin`, + `createdBy`, `createdAt`, `updatedBy`, `updatedAt`, `delFlag`) +SELECT + LOWER(REPLACE(UUID(), '-', '')), + repair.`unionId`, + repair.`unionName`, + repair.`userId`, + repair.`username`, + repair.`loginname`, + repair.`mobile`, + repair.`roleCode`, + NOW(), + 1, + '', @now, '', @now, 0 +FROM `tmp_role_manager_branch_cadre` repair +WHERE NOT EXISTS ( + SELECT 1 + FROM `sys_union_cadre` existing_cadre + WHERE existing_cadre.`userId` = repair.`userId` + AND existing_cadre.`unionId` = repair.`unionId` + AND existing_cadre.`roleCode` = repair.`roleCode` + AND (existing_cadre.`isJoin` = 1 OR existing_cadre.`isJoin` IS NULL) +); + +DROP TEMPORARY TABLE IF EXISTS `tmp_valid_branch_cadre`; + +-- 三、汇总当前分工会范围内已经生效的干部角色,用于初始化“基层干部”角色。 +CREATE TEMPORARY TABLE `tmp_valid_branch_cadre` AS +SELECT DISTINCT + assigned_role.`userId`, + assigned_role.`unionId` +FROM `sys_user_role` assigned_role +INNER JOIN `sys_role` business_role + ON business_role.`id` = assigned_role.`roleId` +INNER JOIN `sys_dict` branch_role_parent + ON branch_role_parent.`code` = 'BRANCH_UNION_ROLES' +INNER JOIN `sys_dict` branch_role_item + ON branch_role_item.`parentId` = branch_role_parent.`id` + AND branch_role_item.`code` = business_role.`code` +INNER JOIN `vw_user` user_info + ON user_info.`id` = assigned_role.`userId` +INNER JOIN `sys_union` branch_union + ON branch_union.`id` = assigned_role.`unionId` WHERE assigned_role.`userId` IS NOT NULL AND assigned_role.`unionId` IS NOT NULL AND assigned_role.`unionId` <> '' - AND NOT EXISTS ( - SELECT 1 - FROM `sys_user_role` existing_cadre - WHERE existing_cadre.`roleId` = cadre_role.`id` - AND existing_cadre.`userId` = assigned_role.`userId` - AND existing_cadre.`unionId` = assigned_role.`unionId` - ); + AND assigned_role.`unionId` = user_info.`unionId` + AND (assigned_role.`unitId` IS NULL OR assigned_role.`unitId` = '') + AND (assigned_role.`unionGroupId` IS NULL OR assigned_role.`unionGroupId` = '') + AND (assigned_role.`tcDelegationId` IS NULL OR assigned_role.`tcDelegationId` = '') + AND (assigned_role.`tcSessionId` IS NULL OR assigned_role.`tcSessionId` = '') + AND (assigned_role.`wcDelegationId` IS NULL OR assigned_role.`wcDelegationId` = '') + AND (assigned_role.`wcSessionId` IS NULL OR assigned_role.`wcSessionId` = '') + AND (assigned_role.`clubId` IS NULL OR assigned_role.`clubId` = '') + AND (assigned_role.`underTakeId` IS NULL OR assigned_role.`underTakeId` = ''); + +-- 给现有有效分工会干部及本次修复的干部补充同分工会范围的“基层干部”角色。 +INSERT INTO `sys_user_role` (`roleId`, `userId`, `unionId`) +SELECT + cadre_role.`id`, valid_cadre.`userId`, valid_cadre.`unionId` +FROM `tmp_valid_branch_cadre` valid_cadre +INNER JOIN `sys_role` cadre_role + ON cadre_role.`code` = 'BRANCH_UNION_CADRE' +WHERE NOT EXISTS ( + SELECT 1 + FROM `sys_user_role` existing_cadre_role + WHERE existing_cadre_role.`roleId` = cadre_role.`id` + AND existing_cadre_role.`userId` = valid_cadre.`userId` + AND existing_cadre_role.`unionId` = valid_cadre.`unionId` +); + +DROP TEMPORARY TABLE IF EXISTS `tmp_valid_branch_cadre`; +DROP TEMPORARY TABLE IF EXISTS `tmp_role_manager_branch_cadre`; + +COMMIT; diff --git a/src/main/resources/views/platform/sys/union/branchUnionUserManage.js b/src/main/resources/views/platform/sys/union/branchUnionUserManage.js index eb7feb0..a59eb60 100644 --- a/src/main/resources/views/platform/sys/union/branchUnionUserManage.js +++ b/src/main/resources/views/platform/sys/union/branchUnionUserManage.js @@ -49,6 +49,7 @@ const branchUnionUserManage = {