Skip to content

Commit 7215c6d

Browse files
committed
fix: approval flow detail
1 parent abe02be commit 7215c6d

10 files changed

Lines changed: 127 additions & 28 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package cn.cordys.crm.approval.constants;
2+
3+
/**
4+
* 字段权限类型枚举
5+
*/
6+
public enum FieldPermissionTypeEnum {
7+
8+
/** 隐藏 */
9+
HIDDEN,
10+
/** 查看 */
11+
VIEW,
12+
/** 编辑 */
13+
EDIT
14+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cn.cordys.crm.approval.dto;
2+
3+
import cn.cordys.common.domain.BaseModuleFieldValue;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import lombok.Data;
6+
7+
import java.util.List;
8+
9+
/**
10+
* 审批通过后配置
11+
*/
12+
@Data
13+
public class ApprovalPostConfigDTO {
14+
15+
@Schema(description = "字段更新配置列表")
16+
private List<BaseModuleFieldValue> fieldUpdateConfigs;
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package cn.cordys.crm.approval.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.Data;
5+
6+
/**
7+
* 审批人配置DTO
8+
*/
9+
@Data
10+
public class ApproverConfigDTO {
11+
12+
@Schema(description = "审批人类型:MEMBER/SUPERIOR/DEPT_HEAD/ROLE/FORM_FIELD")
13+
private String type;
14+
15+
@Schema(description = "审批人值")
16+
private String value;
17+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package cn.cordys.crm.approval.dto;
2+
3+
import cn.cordys.crm.approval.constants.FieldPermissionTypeEnum;
4+
import cn.cordys.common.constants.EnumValue;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import lombok.Data;
7+
8+
/**
9+
* 字段权限配置DTO
10+
*/
11+
@Data
12+
public class FieldPermissionDTO {
13+
14+
@Schema(description = "字段ID")
15+
private String fieldId;
16+
17+
@EnumValue(enumClass = FieldPermissionTypeEnum.class)
18+
@Schema(description = "权限类型:HIDDEN/VIEW/EDIT")
19+
private String permissionType;
20+
}

backend/crm/src/main/java/cn/cordys/crm/approval/dto/request/ApprovalFlowAddRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class ApprovalFlowAddRequest {
2222
@Schema(description = "表单类型:QUOTATION/CONTRACT/INVOICE/ORDER")
2323
private String formType;
2424

25-
@Schema(description = "执行时机列表")
25+
@Schema(description = "执行时机列表:CREATE/EDIT")
2626
private List<String> executeTiming;
2727

2828
@Schema(description = "启用状态")

backend/crm/src/main/java/cn/cordys/crm/approval/dto/request/ApprovalFlowUpdateRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class ApprovalFlowUpdateRequest {
2020
@Schema(description = "流程名称")
2121
private String name;
2222

23-
@Schema(description = "执行时机列表")
23+
@Schema(description = "执行时机列表:CREATE/EDIT")
2424
private List<String> executeTiming;
2525

2626
@Schema(description = "启用状态")

backend/crm/src/main/java/cn/cordys/crm/approval/dto/request/ApprovalNodeApproverRequest.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import cn.cordys.crm.approval.constants.EmptyApproverActionEnum;
66
import cn.cordys.crm.approval.constants.MultiApproverModeEnum;
77
import cn.cordys.crm.approval.constants.SameSubmitterActionEnum;
8+
import cn.cordys.crm.approval.dto.ApprovalPostConfigDTO;
9+
import cn.cordys.crm.approval.dto.ApproverConfigDTO;
10+
import cn.cordys.crm.approval.dto.FieldPermissionDTO;
811
import io.swagger.v3.oas.annotations.media.Schema;
912
import lombok.Data;
1013
import lombok.EqualsAndHashCode;
@@ -33,25 +36,17 @@ public class ApprovalNodeApproverRequest extends ApprovalNodeRequest {
3336
private String sameSubmitterAction;
3437

3538
@Schema(description = "抄送人列表")
36-
private List<ApproverConfig> cc;
39+
private List<ApproverConfigDTO> cc;
3740

3841
@Schema(description = "审批人列表")
39-
private List<ApproverConfig> approver;
42+
private List<ApproverConfigDTO> approver;
4043

4144
@Schema(description = "审批通过后配置")
42-
private String passUpdateConfig;
45+
private ApprovalPostConfigDTO passPostConfig;
4346

4447
@Schema(description = "审批驳回后配置")
45-
private String rejectUpdateConfig;
46-
47-
@Schema(description = "字段权限配置")
48-
private String fieldPermissions;
49-
50-
@Data
51-
public static class ApproverConfig {
52-
@Schema(description = "审批人类型:MEMBER/SUPERIOR/DEPT_HEAD/ROLE/FORM_FIELD")
53-
private String type;
54-
@Schema(description = "审批人值")
55-
private String value;
56-
}
48+
private ApprovalPostConfigDTO rejectPostConfig;
49+
50+
@Schema(description = "字段权限配置列表")
51+
private List<FieldPermissionDTO> fieldPermissions;
5752
}

backend/crm/src/main/java/cn/cordys/crm/approval/dto/response/ApprovalNodeApproverResponse.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package cn.cordys.crm.approval.dto.response;
22

3+
import cn.cordys.crm.approval.dto.ApprovalPostConfigDTO;
4+
import cn.cordys.crm.approval.dto.ApproverConfigDTO;
5+
import cn.cordys.crm.approval.dto.FieldPermissionDTO;
36
import io.swagger.v3.oas.annotations.media.Schema;
47
import lombok.Data;
58
import lombok.EqualsAndHashCode;
69

10+
import java.util.List;
11+
712
@Data
813
@EqualsAndHashCode(callSuper = true)
914
@Schema(description = "审批人节点响应")
@@ -27,18 +32,18 @@ public class ApprovalNodeApproverResponse extends ApprovalNodeResponse {
2732
@Schema(description = "审批人与提交人相同时动作")
2833
private String sameSubmitterAction;
2934

30-
@Schema(description = "抄送人")
31-
private String cc;
35+
@Schema(description = "抄送人列表")
36+
private List<ApproverConfigDTO> cc;
3237

33-
@Schema(description = "审批人")
34-
private String approver;
38+
@Schema(description = "审批人列表")
39+
private List<ApproverConfigDTO> approver;
3540

3641
@Schema(description = "审批通过后配置")
37-
private String passUpdateConfig;
42+
private ApprovalPostConfigDTO passPostConfig;
3843

3944
@Schema(description = "审批驳回后配置")
40-
private String rejectUpdateConfig;
45+
private ApprovalPostConfigDTO rejectPostConfig;
4146

42-
@Schema(description = "字段权限配置")
43-
private String fieldPermissions;
47+
@Schema(description = "字段权限配置列表")
48+
private List<FieldPermissionDTO> fieldPermissions;
4449
}

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import cn.cordys.crm.approval.constants.ApprovalFormTypeEnum;
2222
import cn.cordys.crm.approval.constants.ApprovalNodeTypeEnum;
2323
import cn.cordys.crm.approval.domain.*;
24+
import cn.cordys.crm.approval.dto.ApprovalPostConfigDTO;
25+
import cn.cordys.crm.approval.dto.ApproverConfigDTO;
26+
import cn.cordys.crm.approval.dto.FieldPermissionDTO;
2427
import cn.cordys.crm.approval.dto.StatusPermissionDTO;
2528
import cn.cordys.crm.approval.dto.request.*;
2629
import cn.cordys.crm.approval.dto.response.*;
@@ -320,6 +323,8 @@ private List<ApprovalNodeResponse> getNodesByFlowId(String flowId) {
320323
ApprovalNodeApproverResponse approverResponse = BeanUtils.copyBean(
321324
new ApprovalNodeApproverResponse(), node);
322325
BeanUtils.copyBean(approverResponse, approverNode);
326+
// 解析 JSON 字段为对象
327+
parseApproverNodeFields(approverNode, approverResponse);
323328
return approverResponse;
324329
}
325330
}
@@ -342,6 +347,27 @@ private List<ApprovalNodeResponse> getNodesByFlowId(String flowId) {
342347
}).collect(Collectors.toList());
343348
}
344349

350+
/**
351+
* 解析审批人节点 JSON 字段为对象
352+
*/
353+
private void parseApproverNodeFields(ApprovalNodeApprover approverNode, ApprovalNodeApproverResponse response) {
354+
if (StringUtils.isNotBlank(approverNode.getCc())) {
355+
response.setCc(JSON.parseArray(approverNode.getCc(), ApproverConfigDTO.class));
356+
}
357+
if (StringUtils.isNotBlank(approverNode.getApprover())) {
358+
response.setApprover(JSON.parseArray(approverNode.getApprover(), ApproverConfigDTO.class));
359+
}
360+
if (StringUtils.isNotBlank(approverNode.getPassUpdateConfig())) {
361+
response.setPassPostConfig(JSON.parseObject(approverNode.getPassUpdateConfig(), ApprovalPostConfigDTO.class));
362+
}
363+
if (StringUtils.isNotBlank(approverNode.getRejectUpdateConfig())) {
364+
response.setRejectPostConfig(JSON.parseObject(approverNode.getRejectUpdateConfig(), ApprovalPostConfigDTO.class));
365+
}
366+
if (StringUtils.isNotBlank(approverNode.getFieldPermissions())) {
367+
response.setFieldPermissions(JSON.parseArray(approverNode.getFieldPermissions(), FieldPermissionDTO.class));
368+
}
369+
}
370+
345371
/**
346372
* 构建节点树状结构
347373
*/
@@ -438,11 +464,14 @@ private void saveNode(ApprovalNodeRequest nodeRequest, String flowId, String use
438464
if (nodeRequest instanceof ApprovalNodeApproverRequest) {
439465
ApprovalNodeApproverRequest approverRequest = (ApprovalNodeApproverRequest) nodeRequest;
440466
ApprovalNodeApprover approverNode = BeanUtils.copyBean(new ApprovalNodeApprover(), approverRequest,
441-
"cc", "approver");
467+
"cc", "approver", "passPostConfig", "rejectPostConfig", "fieldPermissions");
442468
approverNode.setId(nodeId);
443469
approverNode.setFlowId(flowId);
444470
approverNode.setCc(JSON.toJSONString(approverRequest.getCc()));
445471
approverNode.setApprover(JSON.toJSONString(approverRequest.getApprover()));
472+
approverNode.setPassUpdateConfig(JSON.toJSONString(approverRequest.getPassPostConfig()));
473+
approverNode.setRejectUpdateConfig(JSON.toJSONString(approverRequest.getRejectPostConfig()));
474+
approverNode.setFieldPermissions(JSON.toJSONString(approverRequest.getFieldPermissions()));
446475
approvalNodeApproverMapper.insert(approverNode);
447476
}
448477
// 保存条件节点配置
@@ -803,6 +832,8 @@ public List<ApprovalNodeResponse> getNextNodes(String nodeId) {
803832
ApprovalNodeApproverResponse approverResponse = BeanUtils.copyBean(
804833
new ApprovalNodeApproverResponse(), nextNode);
805834
BeanUtils.copyBean(approverResponse, approverNode);
835+
// 解析 JSON 字段为对象
836+
parseApproverNodeFields(approverNode, approverResponse);
806837
return approverResponse;
807838
}
808839
}

backend/crm/src/main/resources/migration/1.7.0/ddl/V1.7.0_2__ga_ddl.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ CREATE TABLE approval_node_approver(
5757
`same_submitter_action` VARCHAR(20) NOT NULL DEFAULT 'SKIP' COMMENT '审批人与提交人相同时动作:SKIP(自动跳过)/ALLOW(由提交人审批)/ASSIGN_SUPERIOR(转交给直属上级审批)' ,
5858
`cc` VARCHAR(2000) COMMENT '抄送人(JSON数组)' ,
5959
`approver` VARCHAR(2000) COMMENT '审批人(JSON数组)' ,
60-
`pass_update_config` VARCHAR(2000) COMMENT '审批通过后配置(JSON格式)' ,
61-
`reject_update_config` VARCHAR(2000) COMMENT '审批驳回后配置(JSON格式)' ,
60+
`pass_post_config` VARCHAR(2000) COMMENT '审批通过后配置(JSON格式)' ,
61+
`reject_post_config` VARCHAR(2000) COMMENT '审批驳回后配置(JSON格式)' ,
6262
`field_permissions` VARCHAR(2000) COMMENT '字段权限配置(JSON格式)' ,
6363
PRIMARY KEY (id)
6464
) COMMENT = '审批人节点配置表'

0 commit comments

Comments
 (0)