| | |
| | | import org.flowable.engine.impl.util.CommandContextUtil; |
| | | import org.flowable.engine.runtime.ProcessInstance; |
| | | import org.flowable.task.api.TaskInfo; |
| | | import tools.jackson.databind.JsonNode; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | |
| | | } |
| | | |
| | | // 解析表单配置 |
| | | Map<String, BpmFormFieldVO> formFieldsMap = new HashMap<>(); |
| | | Map<String, BpmFormFieldVO> formFieldsMap = new LinkedHashMap<>(); |
| | | processDefinitionInfo.getFormFields().forEach(formFieldStr -> { |
| | | BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class); |
| | | parseFormField(formField, formFieldsMap); |
| | | JsonNode formFieldNode = JsonUtils.parseObject(formFieldStr, JsonNode.class); |
| | | parseFormField(formFieldNode, formFieldsMap); |
| | | }); |
| | | |
| | | // 情况一:当自定义了摘要 |
| | |
| | | /** |
| | | * 递归解析表单字段 |
| | | */ |
| | | private static void parseFormField(BpmFormFieldVO formField, Map<String, BpmFormFieldVO> formFieldsMap) { |
| | | if (formField == null) { |
| | | private static void parseFormField(JsonNode formFieldNode, Map<String, BpmFormFieldVO> formFieldsMap) { |
| | | if (formFieldNode == null || !formFieldNode.isObject()) { |
| | | return; |
| | | } |
| | | // 如果存在 children -> 说明是布局组件 |
| | | if (formField.getChildren() != null && !formField.getChildren().isEmpty()) { |
| | | for (BpmFormFieldVO child : formField.getChildren()) { |
| | | |
| | | // 如果 children 里存在对象节点,说明是布局组件;字符串节点是分割线、标签、文字等展示组件内容,直接跳过。 |
| | | JsonNode children = formFieldNode.get("children"); |
| | | if (children != null && children.isArray() && children.size() > 0) { |
| | | boolean hasObjectChild = false; |
| | | for (JsonNode child : children) { |
| | | if (!child.isObject()) { |
| | | continue; |
| | | } |
| | | hasObjectChild = true; |
| | | parseFormField(child, formFieldsMap); |
| | | } |
| | | return; |
| | | if (hasObjectChild) { |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // 真实字段才加入 map |
| | | BpmFormFieldVO formField = new BpmFormFieldVO() |
| | | .setType(JsonUtils.getText(formFieldNode, "type")) |
| | | .setField(JsonUtils.getText(formFieldNode, "field")) |
| | | .setTitle(JsonUtils.getText(formFieldNode, "title")); |
| | | if (StrUtil.isNotBlank(formField.getField())) { |
| | | formFieldsMap.put(formField.getField(), formField); |
| | | } |