feat: 部门岗位角色标识改用 organization_code,缺编码阻断提交
This commit is contained in:
@@ -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<ApprovalTestData.TestUser> 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<ApprovalTestData.TestUser> members = new ArrayList<>();
|
||||
for (int i = 0; i < memberCount; i++) {
|
||||
ApprovalTestData.TestUser member = data.createUser("负责人" + data.uniqueSuffix(), orgId, tenant);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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<ApprovalTestData.TestUser> grantDepartmentLeader(int orgId, int memberCount) {
|
||||
ApprovalTestData.TestRole role = data.createRole("dept_leader_" + orgId, "部门负责人");
|
||||
ApprovalTestData.TestRole role = data.createRole(data.leaderRoleCode(orgId), "部门负责人");
|
||||
List<ApprovalTestData.TestUser> members = new ArrayList<>();
|
||||
for (int i = 0; i < memberCount; i++) {
|
||||
ApprovalTestData.TestUser member = data.createUser("协调负责人" + data.uniqueSuffix(), orgId);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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", "收文员");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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("自审单据");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user