Skip to content

Commit 8674655

Browse files
committed
feat: approval flow get status permission
1 parent 2ba9cc6 commit 8674655

3 files changed

Lines changed: 63 additions & 0 deletions

File tree

backend/crm/src/main/java/cn/cordys/crm/approval/controller/ApprovalFlowController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cn.cordys.common.constants.PermissionConstants;
77
import cn.cordys.common.pager.Pager;
88
import cn.cordys.context.OrganizationContext;
9+
import cn.cordys.crm.approval.dto.StatusPermissionDTO;
910
import cn.cordys.crm.approval.dto.response.ApprovalFlowDetailResponse;
1011
import cn.cordys.crm.approval.dto.response.ApprovalFlowListResponse;
1112
import cn.cordys.crm.approval.dto.request.ApprovalFlowAddRequest;
@@ -79,4 +80,10 @@ public ApprovalFlowDetailResponse get(@PathVariable("id") String id) {
7980
public void updateEnable(@PathVariable("id") String id, @RequestParam("enable") Boolean enable) {
8081
approvalFlowService.updateEnable(id, enable, SessionUtils.getUserId(), OrganizationContext.getOrganizationId());
8182
}
83+
84+
@GetMapping("/status-permissions/{formType}")
85+
@Operation(summary = "根据表单类型获取审批流状态权限配置")
86+
public List<StatusPermissionDTO> getStatusPermissions(@PathVariable("formType") String formType) {
87+
return approvalFlowService.getStatusPermissionsByFormType(formType, OrganizationContext.getOrganizationId());
88+
}
8289
}

backend/crm/src/main/java/cn/cordys/crm/approval/service/ApprovalFlowService.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,38 @@ public class ApprovalFlowService {
6565
@Resource
6666
private RoleService roleService;
6767

68+
/**
69+
* 根据表单类型获取审批流状态权限配置
70+
*/
71+
public List<StatusPermissionDTO> getStatusPermissionsByFormType(String formType, String organizationId) {
72+
// 查询该表单类型对应的审批流
73+
ApprovalFlow criteria = new ApprovalFlow();
74+
criteria.setFormType(formType);
75+
criteria.setEnable(true);
76+
criteria.setOrganizationId(organizationId);
77+
List<ApprovalFlow> flows = approvalFlowMapper.select(criteria);
78+
79+
if (CollectionUtils.isEmpty(flows)) {
80+
return List.of();
81+
}
82+
83+
// 优先使用启用的审批流,如果没有则使用第一个
84+
ApprovalFlow targetFlow = flows.stream()
85+
.filter(ApprovalFlow::getEnable)
86+
.findFirst()
87+
.orElse(flows.get(0));
88+
89+
// 查询大字段表获取状态权限配置
90+
ApprovalFlowBlob blob = approvalFlowBlobMapper.selectByPrimaryKey(targetFlow.getId());
91+
if (blob == null || StringUtils.isBlank(blob.getStatusPermissions())) {
92+
return List.of();
93+
}
94+
95+
// 解析状态权限配置
96+
List<OptionDTO> permissions = getResourcePermissions(getPermissionsByFormType(formType));
97+
return parseStatusPermissions(permissions, blob.getStatusPermissions());
98+
}
99+
68100
/**
69101
* 分页查询审批流列表
70102
*/

backend/crm/src/test/java/cn/cordys/crm/approval/ApprovalFlowControllerTests.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
class ApprovalFlowControllerTests extends BaseTest {
4444
private static final String BASE_PATH = "/approval-flow/";
4545
private static final String ENABLE = "enable/{0}";
46+
private static final String STATUS_PERMISSIONS = "status-permissions/{0}";
4647

4748
/**
4849
* 记录创建的审批流
@@ -446,4 +447,27 @@ private ApprovalFlow getDisabledFlow() {
446447
List<ApprovalFlow> flows = approvalFlowMapper.select(criteria);
447448
return flows.isEmpty() ? null : flows.get(0);
448449
}
450+
451+
@Test
452+
@Order(8)
453+
void testGetStatusPermissions() throws Exception {
454+
// 请求成功 - 获取报价审批流的状态权限配置
455+
MvcResult mvcResult = this.requestGetWithOkAndReturn(STATUS_PERMISSIONS, ApprovalFormTypeEnum.QUOTATION.name());
456+
List<StatusPermissionDTO> permissions = getResultDataArray(mvcResult, StatusPermissionDTO.class);
457+
458+
// 校验返回数据不为空
459+
Assertions.assertFalse(permissions.isEmpty());
460+
461+
// 校验权限数据结构正确
462+
permissions.forEach(p -> {
463+
Assertions.assertNotNull(p.getApprovalStatus());
464+
Assertions.assertNotNull(p.getPermission());
465+
Assertions.assertNotNull(p.getEnabled());
466+
});
467+
468+
// 校验权限 - 不存在的表单类型
469+
MvcResult emptyMvcResult = this.requestGetWithOkAndReturn(STATUS_PERMISSIONS, "NON_EXISTENT_FORM");
470+
List<StatusPermissionDTO> emptyPermissions = getResultDataArray(emptyMvcResult, StatusPermissionDTO.class);
471+
Assertions.assertTrue(emptyPermissions.isEmpty());
472+
}
449473
}

0 commit comments

Comments
 (0)