feat: 解析器下拉返回客户可读名称,标识只用于提交(ADR 0016)

This commit is contained in:
2026-11-01 16:37:42 +08:00
parent c7adae386d
commit 7f72162b5b
5 changed files with 69 additions and 6 deletions
@@ -205,6 +205,26 @@ public final class ApprovalConstants {
action.put(ACTION_ASSIGN, "改派"); action.put(ACTION_ASSIGN, "改派");
ACTION_NAMES = Collections.unmodifiableMap(action); ACTION_NAMES = Collections.unmodifiableMap(action);
// 流程配置页下拉用:客户能看懂的岗位/部门说法,不是解析器标识
Map<String, String> resolver = new LinkedHashMap<>();
resolver.put(RESOLVER_REPORTER_ORG_LEADER, "报送部门负责人");
resolver.put(RESOLVER_REPORTER_ORG_DEPUTY, "报送部门分管领导");
resolver.put(RESOLVER_ACCEPT_ORG_LEADER, "受理部门负责人");
resolver.put(RESOLVER_ACCEPT_ORG_DEPUTY, "受理部门分管领导");
resolver.put(RESOLVER_ARCHIVIST, "收文员");
resolver.put(RESOLVER_ROLE_ARCHIVIST, "收文员岗位");
resolver.put(RESOLVER_REPORTER, "报送人本人");
resolver.put(RESOLVER_REPORTER_AND_DISPATCH_TARGET, "报送人与派单对象");
resolver.put(RESOLVER_ACCEPT_ORG_MEMBERS, "受理部门成员");
resolver.put(RESOLVER_ORG_LEADER_BY_CODE, "指定部门负责人");
resolver.put(RESOLVER_ORG_DEPUTY_BY_CODE, "指定部门分管领导");
resolver.put(RESOLVER_ROLE_CASHIER, "出纳");
resolver.put(RESOLVER_ROLE_TYPIST, "录入员");
resolver.put(RESOLVER_ROLE_ISSUER, "发放人");
resolver.put(RESOLVER_ROLE_GENERAL_MANAGER, "总经理");
resolver.put(RESOLVER_ROLE_RELATED_DEPT, "相关部门");
RESOLVER_NAMES = Collections.unmodifiableMap(resolver);
Map<String, String> category = new LinkedHashMap<>(); Map<String, String> category = new LinkedHashMap<>();
category.put(CATEGORY_SIGNED, "签字件"); category.put(CATEGORY_SIGNED, "签字件");
category.put(CATEGORY_VOUCHER, "凭证"); category.put(CATEGORY_VOUCHER, "凭证");
@@ -212,6 +232,14 @@ public final class ApprovalConstants {
CATEGORY_NAMES = Collections.unmodifiableMap(category); CATEGORY_NAMES = Collections.unmodifiableMap(category);
} }
/** 解析器的客户可读名称(流程配置页下拉,ADR 0016)。 */
private static final Map<String, String> RESOLVER_NAMES;
/** 解析器显示名;未登记的标识原样返回。 */
public static String resolverName(String resolver) {
return RESOLVER_NAMES.getOrDefault(resolver, resolver);
}
/** 附件分类白名单(上传与提交预检共用)。 */ /** 附件分类白名单(上传与提交预检共用)。 */
public static final List<String> ATTACHMENT_CATEGORIES = public static final List<String> ATTACHMENT_CATEGORIES =
Collections.unmodifiableList(Arrays.asList(CATEGORY_SIGNED, CATEGORY_VOUCHER, CATEGORY_OTHER)); Collections.unmodifiableList(Arrays.asList(CATEGORY_SIGNED, CATEGORY_VOUCHER, CATEGORY_OTHER));
@@ -134,7 +134,7 @@ public class ApprovalFlowConfigService {
vo.setFlowName(type.flowName()); vo.setFlowName(type.flowName());
vo.setFactoryVersion(type.latestVersion()); vo.setFactoryVersion(type.latestVersion());
vo.setFactoryNodes(parseNodes(type.nodesJson())); vo.setFactoryNodes(parseNodes(type.nodesJson()));
vo.setResolvers(nodeValidator.resolvers()); vo.setResolvers(nodeValidator.resolverOptions());
List<ApprovalFieldSpec> specs = type.fieldSpecs(); List<ApprovalFieldSpec> specs = type.fieldSpecs();
vo.setFieldSpecs(specs == null ? Collections.emptyList() : specs); vo.setFieldSpecs(specs == null ? Collections.emptyList() : specs);
if (latest != null) { if (latest != null) {
@@ -7,6 +7,7 @@ import com.gxwebsoft.approval.document.ApprovalDocumentRegistry;
import com.gxwebsoft.approval.document.ApprovalDocumentType; import com.gxwebsoft.approval.document.ApprovalDocumentType;
import com.gxwebsoft.approval.support.ApprovalFieldSpec; import com.gxwebsoft.approval.support.ApprovalFieldSpec;
import com.gxwebsoft.approval.support.ApprovalNode; import com.gxwebsoft.approval.support.ApprovalNode;
import com.gxwebsoft.approval.vo.ApprovalResolverVO;
import com.gxwebsoft.common.core.exception.BusinessException; import com.gxwebsoft.common.core.exception.BusinessException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -79,9 +80,13 @@ public class ApprovalNodeValidator {
@Resource @Resource
private ApprovalDirectoryService directoryService; private ApprovalDirectoryService directoryService;
/** 前端下拉用的解析器清单。 */ /** 前端下拉用的解析器清单:值 + 客户可读名称。 */
public List<String> resolvers() { public List<ApprovalResolverVO> resolverOptions() {
return RESOLVERS; List<ApprovalResolverVO> options = new java.util.ArrayList<>();
for (String resolver : RESOLVERS) {
options.add(new ApprovalResolverVO(resolver, ApprovalConstants.resolverName(resolver)));
}
return options;
} }
/** /**
@@ -45,6 +45,6 @@ public class ApprovalFlowVO implements Serializable {
@ApiModelProperty("可写字段元数据") @ApiModelProperty("可写字段元数据")
private List<ApprovalFieldSpec> fieldSpecs = new ArrayList<>(); private List<ApprovalFieldSpec> fieldSpecs = new ArrayList<>();
@ApiModelProperty("可用审批人解析器") @ApiModelProperty("可用审批人解析器(含客户可读名称)")
private List<String> resolvers = new ArrayList<>(); private List<ApprovalResolverVO> resolvers = new ArrayList<>();
} }
@@ -0,0 +1,30 @@
package com.gxwebsoft.approval.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 审批人解析器选项:流程配置页下拉用,label 是客户可读的说法(ADR 0016)。
*/
@Data
@ApiModel(description = "审批人解析器选项")
public class ApprovalResolverVO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("解析器标识")
private String value;
@ApiModelProperty("客户可读名称")
private String label;
public ApprovalResolverVO() {
}
public ApprovalResolverVO(String value, String label) {
this.value = value;
this.label = label;
}
}