test(approval): 覆盖流程定义幂等;核心库服务显式标注 server 数据源

This commit is contained in:
2026-10-30 20:27:11 +08:00
parent 370d8a6d36
commit 3b599efb3b
3 changed files with 17 additions and 0 deletions
@@ -1,6 +1,7 @@
package com.gxwebsoft.approval.service; package com.gxwebsoft.approval.service;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.gxwebsoft.approval.support.ApprovalTenantContext; import com.gxwebsoft.approval.support.ApprovalTenantContext;
import com.gxwebsoft.approval.vo.ApprovalOrganizationVO; import com.gxwebsoft.approval.vo.ApprovalOrganizationVO;
import com.gxwebsoft.approval.vo.ApprovalUserVO; import com.gxwebsoft.approval.vo.ApprovalUserVO;
@@ -20,6 +21,7 @@ import java.util.List;
* 所有 SQL 显式带 tenant_id。</p> * 所有 SQL 显式带 tenant_id。</p>
*/ */
@Service @Service
@DS("server")
public class ApprovalDirectoryService { public class ApprovalDirectoryService {
private static final RowMapper<ApprovalOrganizationVO> ORGANIZATION_MAPPER = (resultSet, rowNum) -> { private static final RowMapper<ApprovalOrganizationVO> ORGANIZATION_MAPPER = (resultSet, rowNum) -> {
@@ -1,6 +1,7 @@
package com.gxwebsoft.approval.service; package com.gxwebsoft.approval.service;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.gxwebsoft.approval.support.ApprovalTenantContext; import com.gxwebsoft.approval.support.ApprovalTenantContext;
import com.gxwebsoft.common.system.entity.FileRecord; import com.gxwebsoft.common.system.entity.FileRecord;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
@@ -24,6 +25,7 @@ import java.util.List;
* 不依赖文件管理权限,审批上传/详情均通过本服务复用既有文件记录。</p> * 不依赖文件管理权限,审批上传/详情均通过本服务复用既有文件记录。</p>
*/ */
@Service @Service
@DS("server")
public class ApprovalFileService { public class ApprovalFileService {
private static final RowMapper<FileRecord> FILE_MAPPER = (resultSet, rowNum) -> { private static final RowMapper<FileRecord> FILE_MAPPER = (resultSet, rowNum) -> {
@@ -96,6 +96,19 @@ class ApprovalCompletionDraftIT {
.andExpect(jsonPath("$.data.list[0].bizNo").doesNotExist()); .andExpect(jsonPath("$.data.list[0].bizNo").doesNotExist());
} }
@Test
void publishesSingleFlowDefinitionPerTenant() throws Exception {
createCompletion(reporter, organizationId, TENANT, "流程一");
createCompletion(reporter, organizationId, TENANT, "流程二");
Integer count = data.countMaster("SELECT COUNT(*) FROM approval_flow_definition "
+ "WHERE tenant_id = ? AND flow_code = 'completion' AND version = 1", TENANT);
assertThat(count).isEqualTo(1);
assertThat(data.queryMaster("SELECT nodes_json FROM approval_flow_definition "
+ "WHERE tenant_id = ? AND flow_code = 'completion' AND version = 1", String.class, TENANT))
.contains("deptLeader").contains("confirm").contains("archive");
}
@Test @Test
void validatesCompletionFields() throws Exception { void validatesCompletionFields() throws Exception {
expectSaveFailure(body("", "实施单位", "10.00", "服务内容"), "名称不能为空"); expectSaveFailure(body("", "实施单位", "10.00", "服务内容"), "名称不能为空");