diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java index f31c1bdcc9..83812ee1ab 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java @@ -85,10 +85,6 @@ public class BpmTaskRespVO { @Schema(description = "是否填写审批意见", example = "false") private Boolean reasonRequire; - // TODO @lesan:要不放到 processInstance 里面?因为摘要是流程实例的,不是流程任务的 - @Schema(description = "流程摘要", example = "[]") - private List> summary; // 只有流程表单,才有摘要! - @Data @Schema(description = "流程实例") public static class ProcessInstance { @@ -105,6 +101,9 @@ public class BpmTaskRespVO { @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") private String processDefinitionId; + @Schema(description = "流程摘要", example = "[]") + private List> summary; // 只有流程表单,才有摘要! + /** * 发起人的用户信息 */ diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java index ac6b91bbd7..2fce9ef0dc 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java @@ -54,7 +54,7 @@ public interface BpmTaskConvert { AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); // 摘要 - taskVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), + taskVO.getProcessInstance().setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), processInstance.getProcessVariables())); }); } @@ -80,7 +80,7 @@ public interface BpmTaskConvert { taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); // 摘要 - taskVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), + taskVO.getProcessInstance().setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), processInstance.getProcessVariables())); } return taskVO; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java index e80bba5029..305380158c 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java @@ -27,6 +27,8 @@ import org.flowable.task.api.TaskInfo; import java.util.*; import java.util.concurrent.Callable; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; + /** * Flowable 相关的工具方法 * @@ -193,7 +195,6 @@ public class FlowableUtils { BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES); } - // TODO @lesan:如果值是 null 的情况,可能要调研下飞书、钉钉,是不是不返回哈! /** * 获得流程实例的摘要 * @@ -206,53 +207,39 @@ public class FlowableUtils { */ public static List> getSummary(BpmProcessDefinitionInfoDO processDefinitionInfo, Map processVariables) { - // TODO @lesan:建议 if return,减少 { 层级 - if (ObjectUtil.isNotNull(processDefinitionInfo) - && BpmModelFormTypeEnum.NORMAL.getType().equals(processDefinitionInfo.getFormType())) { - List> summaryList = new ArrayList<>(); - // TODO @lesan:可以使用 CollUtils.convertMap 简化工作量哈。 - Map formFieldsMap = new HashMap<>(); - processDefinitionInfo.getFormFields().forEach(formFieldStr -> { - BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class); - if (formField != null) { - formFieldsMap.put(formField.getField(), formField); - } - }); - - // TODO @lesan:这里也可以 if return,还是为了减少括号哈。这样,就可以写注释,情况一:;情况二: - if (ObjectUtil.isNotNull(processDefinitionInfo.getSummarySetting()) - && Boolean.TRUE.equals(processDefinitionInfo.getSummarySetting().getEnable())) { - // TODO @lesan:这里,也可以通过 CollUtils.convertList 简化哈。 - for (String item : processDefinitionInfo.getSummarySetting().getSummary()) { - BpmFormFieldVO formField = formFieldsMap.get(item); - if (formField != null) { - summaryList.add(new KeyValue<>(formField.getTitle(), - processVariables.getOrDefault(item, "").toString())); - } - } - } else { - // 默认展示前三个 - /* TODO @lesan:stream 简化 - * summaryList.addAll(formFieldsMap.entrySet().stream() - * .limit(3) - * .map(entry -> new KeyValue<>(entry.getValue().getTitle(), - * processVariables.getOrDefault(entry.getValue().getField(), "").toString())) - * .collect(Collectors.toList())); - */ - int j = 0; - for (Map.Entry entry : formFieldsMap.entrySet()) { - BpmFormFieldVO formField = entry.getValue(); - if (j > 2) { - break; - } - summaryList.add(new KeyValue<>(formField.getTitle(), - processVariables.getOrDefault(formField.getField(), "").toString())); - j++; - } - } - return summaryList; + // 只有流程表单才会显示摘要! + if (ObjectUtil.isNull(processDefinitionInfo) + || !BpmModelFormTypeEnum.NORMAL.getType().equals(processDefinitionInfo.getFormType())) { + return null; } - return null; + List> summaryList; + Map formFieldsMap = new HashMap<>(); + processDefinitionInfo.getFormFields().forEach(formFieldStr -> { + BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class); + if (formField != null) { + formFieldsMap.put(formField.getField(), formField); + } + }); + if (ObjectUtil.isNotNull(processDefinitionInfo.getSummarySetting()) + && Boolean.TRUE.equals(processDefinitionInfo.getSummarySetting().getEnable())) { + // 情况一:当自定义了摘要 + summaryList = convertList(processDefinitionInfo.getSummarySetting().getSummary(), item -> { + BpmFormFieldVO formField = formFieldsMap.get(item); + if (formField != null) { + return new KeyValue(formField.getTitle(), + processVariables.getOrDefault(item, "").toString()); + } + return null; + }); + } else { + // 情况二:默认摘要展示前三个表单字段 + summaryList = new ArrayList<>(formFieldsMap.entrySet().stream() + .limit(3) + .map(entry -> new KeyValue<>(entry.getValue().getTitle(), + processVariables.getOrDefault(entry.getValue().getField(), "").toString())) + .toList()); + } + return summaryList; } // ========== Task 相关的工具方法 ========== @@ -317,9 +304,9 @@ public class FlowableUtils { private static Object getExpressionValue(VariableContainer variableContainer, String expressionString, ProcessEngineConfigurationImpl processEngineConfiguration) { - assert processEngineConfiguration!= null; + assert processEngineConfiguration != null; ExpressionManager expressionManager = processEngineConfiguration.getExpressionManager(); - assert expressionManager!= null; + assert expressionManager != null; Expression expression = expressionManager.createExpression(expressionString); return expression.getValue(variableContainer); }