From 8953fc3088c633e28ba670004e8bde064a914521 Mon Sep 17 00:00:00 2001 From: weicw <594098497@qq.com> Date: Sat, 31 Oct 2026 01:57:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=83=A8=E9=97=A8=E5=B2=97=E4=BD=8D?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=A0=87=E8=AF=86=E6=94=B9=E7=94=A8=20organi?= =?UTF-8?q?zation=5Fcode=EF=BC=8C=E7=BC=BA=E7=BC=96=E7=A0=81=E9=98=BB?= =?UTF-8?q?=E6=96=AD=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/03-approval_orgs_roles.sql | 84 +++++++++---------- .../approval/constant/ApprovalConstants.java | 20 ++++- .../service/ApprovalInstanceService.java | 17 ++-- .../approval/service/ApprovalTaskService.java | 16 +++- .../approval/ApprovalCompletionDraftIT.java | 22 ++++- .../approval/ApprovalConfirmArchiveIT.java | 2 +- .../approval/ApprovalCoordinationIT.java | 6 +- .../approval/ApprovalDispatchIT.java | 4 +- .../gxwebsoft/approval/ApprovalPcTodoIT.java | 2 +- .../gxwebsoft/approval/ApprovalQueryIT.java | 2 +- .../gxwebsoft/approval/ApprovalTaskIT.java | 6 +- .../gxwebsoft/support/ApprovalTestData.java | 21 ++++- 12 files changed, 132 insertions(+), 70 deletions(-) diff --git a/sql/03-approval_orgs_roles.sql b/sql/03-approval_orgs_roles.sql index edd55a1..5ab349c 100644 --- a/sql/03-approval_orgs_roles.sql +++ b/sql/03-approval_orgs_roles.sql @@ -4,7 +4,7 @@ -- -- 覆盖 0630 九类线下审批涉及的部门与岗位: -- 部门:场馆部、运营管理部、安全运保部、财务部(均为新建,不复用历史部门) --- 部门岗位:dept_leader_(负责人)、dept_deputy_(分管领导) +-- 部门岗位:dept_leader_(负责人)、dept_deputy_(分管领导) -- 租户岗位:approval_archivist(收文员)、approval_general_manager(总经理/主要领导)、 -- approval_cashier(出纳)、approval_typist(录入员)、approval_issuer(发放人) -- @@ -41,8 +41,7 @@ SELECT @root_id, '运营管理部', '运营管理部', 'APPROVAL_OPS', FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM sys_organization - WHERE tenant_id = @tenant_id AND deleted = 0 - AND (organization_code = 'APPROVAL_OPS' OR organization_name = '运营管理部') + WHERE tenant_id = @tenant_id AND deleted = 0 AND organization_code = 'APPROVAL_OPS' ); INSERT INTO sys_organization @@ -54,8 +53,7 @@ SELECT @root_id, '安全运保部', '安全运保部', 'APPROVAL_SAFETY', FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM sys_organization - WHERE tenant_id = @tenant_id AND deleted = 0 - AND (organization_code = 'APPROVAL_SAFETY' OR organization_name IN ('安全运保部', '运保部')) + WHERE tenant_id = @tenant_id AND deleted = 0 AND organization_code = 'APPROVAL_SAFETY' ); INSERT INTO sys_organization @@ -67,98 +65,94 @@ SELECT @root_id, '财务部', '财务部', 'APPROVAL_FINANCE', FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM sys_organization - WHERE tenant_id = @tenant_id AND deleted = 0 - AND (organization_code = 'APPROVAL_FINANCE' OR organization_name = '财务部') + WHERE tenant_id = @tenant_id AND deleted = 0 AND organization_code = 'APPROVAL_FINANCE' ); -SET @venue_id := ( - SELECT organization_id FROM sys_organization +SET @venue_code := ( + SELECT organization_code FROM sys_organization WHERE tenant_id = @tenant_id AND deleted = 0 AND organization_code = 'APPROVAL_VENUE' ORDER BY organization_id LIMIT 1 ); -SET @ops_id := ( - SELECT organization_id FROM sys_organization - WHERE tenant_id = @tenant_id AND deleted = 0 - AND (organization_code = 'APPROVAL_OPS' OR organization_name = '运营管理部') +SET @ops_code := ( + SELECT organization_code FROM sys_organization + WHERE tenant_id = @tenant_id AND deleted = 0 AND organization_code = 'APPROVAL_OPS' ORDER BY organization_id LIMIT 1 ); -SET @safety_id := ( - SELECT organization_id FROM sys_organization - WHERE tenant_id = @tenant_id AND deleted = 0 - AND (organization_code = 'APPROVAL_SAFETY' OR organization_name IN ('安全运保部', '运保部')) +SET @safety_code := ( + SELECT organization_code FROM sys_organization + WHERE tenant_id = @tenant_id AND deleted = 0 AND organization_code = 'APPROVAL_SAFETY' ORDER BY organization_id LIMIT 1 ); -SET @finance_id := ( - SELECT organization_id FROM sys_organization - WHERE tenant_id = @tenant_id AND deleted = 0 - AND (organization_code = 'APPROVAL_FINANCE' OR organization_name = '财务部') +SET @finance_code := ( + SELECT organization_code FROM sys_organization + WHERE tenant_id = @tenant_id AND deleted = 0 AND organization_code = 'APPROVAL_FINANCE' ORDER BY organization_id LIMIT 1 ); -- ---------------------------------------------------------------- 部门负责人(或签) INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '场馆部负责人', CONCAT('dept_leader_', @venue_id), '审批种子:场馆部负责人,多人或签', 901, @tenant_id, 0 +SELECT '场馆部负责人', CONCAT('dept_leader_', @venue_code), '审批种子:场馆部负责人,多人或签', 901, @tenant_id, 0 FROM DUAL -WHERE @venue_id IS NOT NULL AND NOT EXISTS ( +WHERE @venue_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_leader_', @venue_id) + AND role_code = CONCAT('dept_leader_', @venue_code) ); INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '运营管理部负责人', CONCAT('dept_leader_', @ops_id), '审批种子:运营管理部负责人,多人或签', 902, @tenant_id, 0 +SELECT '运营管理部负责人', CONCAT('dept_leader_', @ops_code), '审批种子:运营管理部负责人,多人或签', 902, @tenant_id, 0 FROM DUAL -WHERE @ops_id IS NOT NULL AND NOT EXISTS ( +WHERE @ops_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_leader_', @ops_id) + AND role_code = CONCAT('dept_leader_', @ops_code) ); INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '安全运保部负责人', CONCAT('dept_leader_', @safety_id), '审批种子:安全运保部负责人,多人或签', 903, @tenant_id, 0 +SELECT '安全运保部负责人', CONCAT('dept_leader_', @safety_code), '审批种子:安全运保部负责人,多人或签', 903, @tenant_id, 0 FROM DUAL -WHERE @safety_id IS NOT NULL AND NOT EXISTS ( +WHERE @safety_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_leader_', @safety_id) + AND role_code = CONCAT('dept_leader_', @safety_code) ); INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '财务部负责人', CONCAT('dept_leader_', @finance_id), '审批种子:财务部负责人,多人或签', 904, @tenant_id, 0 +SELECT '财务部负责人', CONCAT('dept_leader_', @finance_code), '审批种子:财务部负责人,多人或签', 904, @tenant_id, 0 FROM DUAL -WHERE @finance_id IS NOT NULL AND NOT EXISTS ( +WHERE @finance_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_leader_', @finance_id) + AND role_code = CONCAT('dept_leader_', @finance_code) ); -- ---------------------------------------------------------------- 部门分管领导(二期使用,或签) INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '场馆部分管领导', CONCAT('dept_deputy_', @venue_id), '审批种子:场馆部分管领导,多人或签', 911, @tenant_id, 0 +SELECT '场馆部分管领导', CONCAT('dept_deputy_', @venue_code), '审批种子:场馆部分管领导,多人或签', 911, @tenant_id, 0 FROM DUAL -WHERE @venue_id IS NOT NULL AND NOT EXISTS ( +WHERE @venue_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_deputy_', @venue_id) + AND role_code = CONCAT('dept_deputy_', @venue_code) ); INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '运营管理部分管领导', CONCAT('dept_deputy_', @ops_id), '审批种子:运营管理部分管领导,多人或签', 912, @tenant_id, 0 +SELECT '运营管理部分管领导', CONCAT('dept_deputy_', @ops_code), '审批种子:运营管理部分管领导,多人或签', 912, @tenant_id, 0 FROM DUAL -WHERE @ops_id IS NOT NULL AND NOT EXISTS ( +WHERE @ops_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_deputy_', @ops_id) + AND role_code = CONCAT('dept_deputy_', @ops_code) ); INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '安全运保部分管领导', CONCAT('dept_deputy_', @safety_id), '审批种子:安全运保部分管领导,多人或签', 913, @tenant_id, 0 +SELECT '安全运保部分管领导', CONCAT('dept_deputy_', @safety_code), '审批种子:安全运保部分管领导,多人或签', 913, @tenant_id, 0 FROM DUAL -WHERE @safety_id IS NOT NULL AND NOT EXISTS ( +WHERE @safety_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_deputy_', @safety_id) + AND role_code = CONCAT('dept_deputy_', @safety_code) ); INSERT INTO sys_role (role_name, role_code, comments, sort_number, tenant_id, deleted) -SELECT '财务部分管领导', CONCAT('dept_deputy_', @finance_id), '审批种子:财务部分管领导,多人或签', 914, @tenant_id, 0 +SELECT '财务部分管领导', CONCAT('dept_deputy_', @finance_code), '审批种子:财务部分管领导,多人或签', 914, @tenant_id, 0 FROM DUAL -WHERE @finance_id IS NOT NULL AND NOT EXISTS ( +WHERE @finance_code IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sys_role WHERE tenant_id = @tenant_id AND deleted = 0 - AND role_code = CONCAT('dept_deputy_', @finance_id) + AND role_code = CONCAT('dept_deputy_', @finance_code) ); -- ---------------------------------------------------------------- 租户岗位(或签) diff --git a/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java b/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java index cd8b795..e922c47 100644 --- a/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java +++ b/src/main/java/com/gxwebsoft/approval/constant/ApprovalConstants.java @@ -186,7 +186,23 @@ public final class ApprovalConstants { return STATUS_ARCHIVED.equals(status) ? "单据已归档,不能修改" : "当前状态不可修改"; } - public static String departmentLeaderRoleCode(Integer organizationId) { - return organizationId == null ? null : "dept_leader_" + organizationId; + /** + * 部门岗位角色标识:后缀取启用组织的 organization_code。 + * 部门未配置编码时返回 null,由调用方阻断并提示。 + */ + public static String departmentLeaderRoleCode(String organizationCode) { + return departmentRoleCode("dept_leader_", organizationCode); + } + + public static String departmentDeputyRoleCode(String organizationCode) { + return departmentRoleCode("dept_deputy_", organizationCode); + } + + private static String departmentRoleCode(String prefix, String organizationCode) { + if (organizationCode == null) { + return null; + } + String code = organizationCode.trim(); + return code.isEmpty() ? null : prefix + code; } } diff --git a/src/main/java/com/gxwebsoft/approval/service/ApprovalInstanceService.java b/src/main/java/com/gxwebsoft/approval/service/ApprovalInstanceService.java index 0c58f4f..6fd8044 100644 --- a/src/main/java/com/gxwebsoft/approval/service/ApprovalInstanceService.java +++ b/src/main/java/com/gxwebsoft/approval/service/ApprovalInstanceService.java @@ -161,8 +161,11 @@ public class ApprovalInstanceService { if (organization == null) { throw new BusinessException("未归属部门,无法提交"); } - List leaders = directoryService.listRoleMembers( - ApprovalConstants.departmentLeaderRoleCode(organizationId)); + String leaderRoleCode = ApprovalConstants.departmentLeaderRoleCode(organization.getOrganizationCode()); + if (leaderRoleCode == null) { + throw new BusinessException("部门未配置编码,无法提交"); + } + List leaders = directoryService.listRoleMembers(leaderRoleCode); if (leaders.isEmpty()) { throw new BusinessException("报送部门负责人角色缺配"); } @@ -193,13 +196,17 @@ public class ApprovalInstanceService { if (acceptOrgId == null || acceptOrgId <= 0) { throw new BusinessException("请选择受理部门"); } - if (directoryService.listRoleMembers(ApprovalConstants.departmentLeaderRoleCode(acceptOrgId)).isEmpty()) { - throw new BusinessException("受理部门负责人角色缺配"); - } ApprovalOrganizationVO acceptOrganization = directoryService.getOrganization(acceptOrgId); if (acceptOrganization == null) { throw new BusinessException("受理部门已停用"); } + String leaderRoleCode = ApprovalConstants.departmentLeaderRoleCode(acceptOrganization.getOrganizationCode()); + if (leaderRoleCode == null) { + throw new BusinessException("受理部门未配置编码"); + } + if (directoryService.listRoleMembers(leaderRoleCode).isEmpty()) { + throw new BusinessException("受理部门负责人角色缺配"); + } return acceptOrganization; } diff --git a/src/main/java/com/gxwebsoft/approval/service/ApprovalTaskService.java b/src/main/java/com/gxwebsoft/approval/service/ApprovalTaskService.java index 381dd26..0d97c9f 100644 --- a/src/main/java/com/gxwebsoft/approval/service/ApprovalTaskService.java +++ b/src/main/java/com/gxwebsoft/approval/service/ApprovalTaskService.java @@ -13,6 +13,7 @@ import com.gxwebsoft.approval.param.ApprovalTaskDispatchParam; import com.gxwebsoft.approval.support.ApprovalApprover; import com.gxwebsoft.approval.support.ApprovalNode; import com.gxwebsoft.approval.vo.ApprovalAssignVO; +import com.gxwebsoft.approval.vo.ApprovalOrganizationVO; import com.gxwebsoft.approval.vo.ApprovalUserVO; import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.system.entity.User; @@ -545,9 +546,9 @@ public class ApprovalTaskService { } switch (resolver) { case RESOLVER_REPORTER_ORG_LEADER: - return roleApprovers(ApprovalConstants.departmentLeaderRoleCode(instance.getReportOrgId())); + return departmentLeaderApprovers(instance.getReportOrgId()); case RESOLVER_ACCEPT_ORG_LEADER: - return roleApprovers(ApprovalConstants.departmentLeaderRoleCode(instance.getAcceptOrgId())); + return departmentLeaderApprovers(instance.getAcceptOrgId()); case RESOLVER_ARCHIVIST: return roleApprovers(ApprovalConstants.ROLE_ARCHIVIST); case RESOLVER_REPORTER: @@ -561,6 +562,17 @@ public class ApprovalTaskService { } } + /** + * 部门负责人审批人:按部门 organization_code 解析角色;部门或编码缺失时返回空列表, + * 节点保持缺配状态,等待管理员补配置。 + */ + private List departmentLeaderApprovers(Integer organizationId) { + ApprovalOrganizationVO organization = directoryService.getOrganization(organizationId); + String roleCode = organization == null + ? null : ApprovalConstants.departmentLeaderRoleCode(organization.getOrganizationCode()); + return roleCode == null ? Collections.emptyList() : roleApprovers(roleCode); + } + private List confirmCandidateIds(ApprovalInstance instance) { List ids = new ArrayList<>(); if (instance.getReporterId() != null) { diff --git a/src/test/java/com/gxwebsoft/approval/ApprovalCompletionDraftIT.java b/src/test/java/com/gxwebsoft/approval/ApprovalCompletionDraftIT.java index 509b4c0..972a0a0 100644 --- a/src/test/java/com/gxwebsoft/approval/ApprovalCompletionDraftIT.java +++ b/src/test/java/com/gxwebsoft/approval/ApprovalCompletionDraftIT.java @@ -136,6 +136,24 @@ class ApprovalCompletionDraftIT { assertThat(bizNo(instanceId)).isNull(); } + @Test + void rejectsSubmitWhenDepartmentCodeMissing() throws Exception { + Integer noCodeOrg = data.createOrganization("无编码部门" + data.uniqueSuffix(), 136); + data.clearOrganizationCode(noCodeOrg); + ApprovalTestData.TestUser noCodeReporter = + data.createUser("无编码报送人" + data.uniqueSuffix(), noCodeOrg); + long instanceId = createCompletion(noCodeReporter, noCodeOrg, TENANT, "无编码单据"); + + mockMvc.perform(authed(post("/api/approval/instance/" + instanceId + "/submit"), + noCodeReporter, noCodeOrg, TENANT, SUBMIT)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(1)) + .andExpect(jsonPath("$.message").value(org.hamcrest.Matchers.containsString("部门未配置编码"))); + + assertThat(instanceStatus(instanceId)).isEqualTo("DRAFT"); + assertThat(bizNo(instanceId)).isNull(); + } + @Test void rejectsSubmitWhenDepartmentLeaderRoleMissing() throws Exception { long instanceId = createCompletion(reporter, organizationId, TENANT, "缺负责人"); @@ -263,7 +281,7 @@ class ApprovalCompletionDraftIT { int otherTenant = 10023; Integer otherOrg = data.createOrganization("外租户部门" + data.uniqueSuffix(), 136, otherTenant); ApprovalTestData.TestUser otherReporter = data.createUser("外租户报送人" + data.uniqueSuffix(), otherOrg, otherTenant); - ApprovalTestData.TestRole otherLeaderRole = data.createRole("dept_leader_" + otherOrg, "外租户负责人", otherTenant); + ApprovalTestData.TestRole otherLeaderRole = data.createRole(data.leaderRoleCode(otherOrg), "外租户负责人", otherTenant); ApprovalTestData.TestUser otherLeader = data.createUser("外租户负责人" + data.uniqueSuffix(), otherOrg, otherTenant); data.bindTenant(otherLeader.userId, otherLeaderRole.roleId, otherTenant); ApprovalTestData.TestRole otherArchivistRole = data.createRole("approval_archivist", "外租户收文员", otherTenant); @@ -476,7 +494,7 @@ class ApprovalCompletionDraftIT { } private List grantDepartmentLeader(int orgId, int tenant, int memberCount) { - ApprovalTestData.TestRole role = data.createRole("dept_leader_" + orgId, "部门负责人", tenant); + ApprovalTestData.TestRole role = data.createRole(data.leaderRoleCode(orgId), "部门负责人", tenant); List members = new ArrayList<>(); for (int i = 0; i < memberCount; i++) { ApprovalTestData.TestUser member = data.createUser("负责人" + data.uniqueSuffix(), orgId, tenant); diff --git a/src/test/java/com/gxwebsoft/approval/ApprovalConfirmArchiveIT.java b/src/test/java/com/gxwebsoft/approval/ApprovalConfirmArchiveIT.java index c89dc95..1348d78 100644 --- a/src/test/java/com/gxwebsoft/approval/ApprovalConfirmArchiveIT.java +++ b/src/test/java/com/gxwebsoft/approval/ApprovalConfirmArchiveIT.java @@ -69,7 +69,7 @@ class ApprovalConfirmArchiveIT { organizationId = data.createOrganization("归档部门" + data.uniqueSuffix(), 136, TENANT); reporter = data.createUser("归档报送人" + data.uniqueSuffix(), organizationId, TENANT); ApprovalTestData.TestRole leaderRole = - data.createRole("dept_leader_" + organizationId, "部门负责人", TENANT); + data.createRole(data.leaderRoleCode(organizationId), "部门负责人", TENANT); leader = data.createUser("归档负责人" + data.uniqueSuffix(), organizationId, TENANT); data.bindTenant(leader.userId, leaderRole.roleId, TENANT); diff --git a/src/test/java/com/gxwebsoft/approval/ApprovalCoordinationIT.java b/src/test/java/com/gxwebsoft/approval/ApprovalCoordinationIT.java index 78e354a..6f4caa7 100644 --- a/src/test/java/com/gxwebsoft/approval/ApprovalCoordinationIT.java +++ b/src/test/java/com/gxwebsoft/approval/ApprovalCoordinationIT.java @@ -368,8 +368,8 @@ class ApprovalCoordinationIT { @Test void allowsSamePersonToHandleBothApprovalNodes() throws Exception { ApprovalTestData.TestUser both = data.createUser("双部门负责人" + data.uniqueSuffix(), reportOrgId); - ApprovalTestData.TestRole reportRole = data.createRole("dept_leader_" + reportOrgId, "部门负责人"); - ApprovalTestData.TestRole acceptRole = data.createRole("dept_leader_" + acceptOrgId, "部门负责人"); + ApprovalTestData.TestRole reportRole = data.createRole(data.leaderRoleCode(reportOrgId), "部门负责人"); + ApprovalTestData.TestRole acceptRole = data.createRole(data.leaderRoleCode(acceptOrgId), "部门负责人"); data.bind(both.userId, reportRole.roleId); data.bind(both.userId, acceptRole.roleId); grantArchivist(); @@ -523,7 +523,7 @@ class ApprovalCoordinationIT { } private List grantDepartmentLeader(int orgId, int memberCount) { - ApprovalTestData.TestRole role = data.createRole("dept_leader_" + orgId, "部门负责人"); + ApprovalTestData.TestRole role = data.createRole(data.leaderRoleCode(orgId), "部门负责人"); List members = new ArrayList<>(); for (int i = 0; i < memberCount; i++) { ApprovalTestData.TestUser member = data.createUser("协调负责人" + data.uniqueSuffix(), orgId); diff --git a/src/test/java/com/gxwebsoft/approval/ApprovalDispatchIT.java b/src/test/java/com/gxwebsoft/approval/ApprovalDispatchIT.java index 4930675..9851d5f 100644 --- a/src/test/java/com/gxwebsoft/approval/ApprovalDispatchIT.java +++ b/src/test/java/com/gxwebsoft/approval/ApprovalDispatchIT.java @@ -79,12 +79,12 @@ class ApprovalDispatchIT { reporter = data.createUser("派单报送人" + data.uniqueSuffix(), reportOrgId, TENANT); ApprovalTestData.TestRole reportLeaderRole = - data.createRole("dept_leader_" + reportOrgId, "报送部门负责人", TENANT); + data.createRole(data.leaderRoleCode(reportOrgId), "报送部门负责人", TENANT); reportLeader = data.createUser("派单报送负责人" + data.uniqueSuffix(), reportOrgId, TENANT); data.bindTenant(reportLeader.userId, reportLeaderRole.roleId, TENANT); ApprovalTestData.TestRole acceptLeaderRole = - data.createRole("dept_leader_" + acceptOrgId, "受理部门负责人", TENANT); + data.createRole(data.leaderRoleCode(acceptOrgId), "受理部门负责人", TENANT); acceptLeader = data.createUser("派单受理负责人" + data.uniqueSuffix(), acceptOrgId, TENANT); data.bindTenant(acceptLeader.userId, acceptLeaderRole.roleId, TENANT); acceptMember = data.createUser("派单受理成员" + data.uniqueSuffix(), acceptOrgId, TENANT); diff --git a/src/test/java/com/gxwebsoft/approval/ApprovalPcTodoIT.java b/src/test/java/com/gxwebsoft/approval/ApprovalPcTodoIT.java index 8ca1e2d..3ed7220 100644 --- a/src/test/java/com/gxwebsoft/approval/ApprovalPcTodoIT.java +++ b/src/test/java/com/gxwebsoft/approval/ApprovalPcTodoIT.java @@ -66,7 +66,7 @@ class ApprovalPcTodoIT { organizationId = data.createOrganization("PC待办部门" + data.uniqueSuffix(), 136); reporter = data.createUser("PC报送人" + data.uniqueSuffix(), organizationId); ApprovalTestData.TestRole leaderRole = - data.createRole("dept_leader_" + organizationId, "部门负责人"); + data.createRole(data.leaderRoleCode(organizationId), "部门负责人"); leader = data.createUser("PC负责人" + data.uniqueSuffix(), organizationId); data.bind(leader.userId, leaderRole.roleId); ApprovalTestData.TestRole archivistRole = data.createRole("approval_archivist", "收文员"); diff --git a/src/test/java/com/gxwebsoft/approval/ApprovalQueryIT.java b/src/test/java/com/gxwebsoft/approval/ApprovalQueryIT.java index 31f2d62..98bb22a 100644 --- a/src/test/java/com/gxwebsoft/approval/ApprovalQueryIT.java +++ b/src/test/java/com/gxwebsoft/approval/ApprovalQueryIT.java @@ -319,7 +319,7 @@ class ApprovalQueryIT { } private void grantDepartmentLeader() { - ApprovalTestData.TestRole role = data.createRole("dept_leader_" + reportOrgId, "部门负责人"); + ApprovalTestData.TestRole role = data.createRole(data.leaderRoleCode(reportOrgId), "部门负责人"); ApprovalTestData.TestUser leader = data.createUser("负责人" + data.uniqueSuffix(), reportOrgId); data.bind(leader.userId, role.roleId); } diff --git a/src/test/java/com/gxwebsoft/approval/ApprovalTaskIT.java b/src/test/java/com/gxwebsoft/approval/ApprovalTaskIT.java index 4dfc907..2d32581 100644 --- a/src/test/java/com/gxwebsoft/approval/ApprovalTaskIT.java +++ b/src/test/java/com/gxwebsoft/approval/ApprovalTaskIT.java @@ -65,7 +65,7 @@ class ApprovalTaskIT { organizationId = data.createOrganization("任务部门" + data.uniqueSuffix(), 136); reporter = data.createUser("任务报送人" + data.uniqueSuffix(), organizationId); ApprovalTestData.TestRole leaderRole = - data.createRole("dept_leader_" + organizationId, "部门负责人"); + data.createRole(data.leaderRoleCode(organizationId), "部门负责人"); leader = data.createUser("任务负责人" + data.uniqueSuffix(), organizationId); data.bind(leader.userId, leaderRole.roleId); ApprovalTestData.TestRole archivistRole = data.createRole("approval_archivist", "收文员"); @@ -167,7 +167,7 @@ class ApprovalTaskIT { ApprovalTestData.TestUser second = data.createUser("第二负责人" + data.uniqueSuffix(), organizationId); Integer leaderRoleId = data.server().queryForObject("SELECT role_id FROM sys_role WHERE role_code = ? AND tenant_id = ?", - Integer.class, "dept_leader_" + organizationId, TENANT); + Integer.class, data.leaderRoleCode(organizationId), TENANT); data.bind(second.userId, leaderRoleId); long instanceId = createAndSubmit("或签取消"); @@ -243,7 +243,7 @@ class ApprovalTaskIT { @Test void allowsReporterToApproveOwnTask() throws Exception { Integer leaderRoleId = data.server().queryForObject("SELECT role_id FROM sys_role WHERE role_code = ? AND tenant_id = ?", - Integer.class, "dept_leader_" + organizationId, TENANT); + Integer.class, data.leaderRoleCode(organizationId), TENANT); data.bind(reporter.userId, leaderRoleId); long instanceId = createAndSubmit("自审单据"); diff --git a/src/test/java/com/gxwebsoft/support/ApprovalTestData.java b/src/test/java/com/gxwebsoft/support/ApprovalTestData.java index 913b843..884bca9 100644 --- a/src/test/java/com/gxwebsoft/support/ApprovalTestData.java +++ b/src/test/java/com/gxwebsoft/support/ApprovalTestData.java @@ -80,10 +80,11 @@ public class ApprovalTestData { } public Integer createOrganization(String name, int parentId, int tenantId) { + String code = "T_" + uniqueSuffix(); Integer id = insert(server, - "INSERT INTO sys_organization (organization_name, parent_id, organization_type, deleted, tenant_id) " - + "VALUES (?, ?, 'dept', 0, ?)", - name, parentId, tenantId); + "INSERT INTO sys_organization (organization_name, organization_code, parent_id, organization_type, deleted, tenant_id) " + + "VALUES (?, ?, ?, 'dept', 0, ?)", + name, code, parentId, tenantId); organizationIds.add(id); return id; } @@ -92,6 +93,20 @@ public class ApprovalTestData { return createOrganization(name, parentId, TestAuthentication.TENANT_ID); } + public String organizationCode(Integer organizationId) { + return server.queryForObject( + "SELECT organization_code FROM sys_organization WHERE organization_id = ?", + String.class, organizationId); + } + + public String leaderRoleCode(Integer organizationId) { + return "dept_leader_" + organizationCode(organizationId); + } + + public void clearOrganizationCode(int organizationId) { + server.update("UPDATE sys_organization SET organization_code = NULL WHERE organization_id = ?", organizationId); + } + public void disableOrganization(int organizationId) { server.update("UPDATE sys_organization SET deleted = 1 WHERE organization_id = ?", organizationId); }