diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/pojo/request/FlowCreateRequest.java b/flow-engine-framework/src/main/java/com/codingapi/flow/pojo/request/FlowCreateRequest.java index 74712de4..ff58b4c8 100644 --- a/flow-engine-framework/src/main/java/com/codingapi/flow/pojo/request/FlowCreateRequest.java +++ b/flow-engine-framework/src/main/java/com/codingapi/flow/pojo/request/FlowCreateRequest.java @@ -32,7 +32,7 @@ public class FlowCreateRequest { private long operatorId; /** - * 父流程id + * 父流程id,系统自动赋值 */ private long parentRecordId; diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/script/request/GroovyScriptRequest.java b/flow-engine-framework/src/main/java/com/codingapi/flow/script/request/GroovyScriptRequest.java index 91ede035..0598ed92 100644 --- a/flow-engine-framework/src/main/java/com/codingapi/flow/script/request/GroovyScriptRequest.java +++ b/flow-engine-framework/src/main/java/com/codingapi/flow/script/request/GroovyScriptRequest.java @@ -187,6 +187,32 @@ public FlowCreateRequest toCreateRequest(){ return flowSession.toCreateRequest(); } + /** + * 创建流程请求,用于自流程的创建 + * @param workId 流程设计id + * @param actionId 动作类型 + * @param formData 流程数据 + */ + public FlowCreateRequest toCreateRequest(String workId, + long operatorId, + String actionId, + String formData){ + return flowSession.toCreateRequest(workId, operatorId, actionId, formData); + } + + /** + * 创建流程请求,用于自流程的创建 + * @param workId 流程设计id + * @param actionId 动作类型 + * @param formData 流程数据 + */ + public FlowCreateRequest toCreateRequest(String workId, + long operatorId, + String actionId, + Map formData){ + return flowSession.toCreateRequest(workId, operatorId, actionId, formData); + } + /** * 获取表单字段值(Groovy脚本调用) diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/session/FlowSession.java b/flow-engine-framework/src/main/java/com/codingapi/flow/session/FlowSession.java index 5e3a09df..1ff681ec 100644 --- a/flow-engine-framework/src/main/java/com/codingapi/flow/session/FlowSession.java +++ b/flow-engine-framework/src/main/java/com/codingapi/flow/session/FlowSession.java @@ -1,5 +1,7 @@ package com.codingapi.flow.session; +import com.alibaba.fastjson.JSONObject; +import com.codingapi.flow.action.ActionType; import com.codingapi.flow.action.IFlowAction; import com.codingapi.flow.form.FormData; import com.codingapi.flow.mock.MockRepositoryHolder; @@ -15,6 +17,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 流程会话对象 @@ -139,22 +142,56 @@ public static FlowSession startSession( /** - * 创建流程请求 + * 创建流程请求,用于自流程的创建 */ public FlowCreateRequest toCreateRequest() { - FlowCreateRequest request = new FlowCreateRequest(); IFlowNode startNode = workflow.getStartNode(); - IFlowAction action = startNode.actionManager().getFirstAction(); - request.setWorkId(workflow.getId()); - request.setFormData(formData.toMapData()); - request.setActionId(action.id()); - request.setOperatorId(currentOperator.getUserId()); + IFlowAction action = startNode.actionManager().getActionByType(ActionType.SAVE.name()); + return this.toCreateRequest(workflow.getId(),currentOperator.getUserId(),action.id(),formData.toMapData()); + } + + + /** + * 创建流程请求,用于自流程的创建 + * @param workId 流程设计id + * @param actionId 动作类型 + * @param formData 流程数据 + */ + public FlowCreateRequest toCreateRequest(String workId, + long operatorId, + String actionId, + String formData){ + + FlowCreateRequest request = new FlowCreateRequest(); + request.setActionId(actionId); + request.setWorkId(workId); + request.setOperatorId(operatorId); + request.setFormData(JSONObject.parseObject(formData)); + return request; + } + + /** + * 创建流程请求,用于自流程的创建 + * @param workId 流程设计id + * @param actionId 动作类型 + * @param formData 流程数据 + */ + public FlowCreateRequest toCreateRequest(String workId, + long operatorId, + String actionId, + Map formData){ + + FlowCreateRequest request = new FlowCreateRequest(); + request.setActionId(actionId); + request.setWorkId(workId); + request.setOperatorId(operatorId); + request.setFormData(formData); return request; } /** - * 创建流程动作请求 + * 创建流程动作请求,用于自定义脚本的执行 */ public FlowActionRequest toActionRequest() { FlowActionRequest request = new FlowActionRequest(); diff --git a/flow-engine-starter-api/src/main/java/com/codingapi/flow/api/controller/WorkflowController.java b/flow-engine-starter-api/src/main/java/com/codingapi/flow/api/controller/WorkflowController.java index 3938ece9..290d044e 100644 --- a/flow-engine-starter-api/src/main/java/com/codingapi/flow/api/controller/WorkflowController.java +++ b/flow-engine-starter-api/src/main/java/com/codingapi/flow/api/controller/WorkflowController.java @@ -2,7 +2,9 @@ import com.alibaba.fastjson.JSONObject; import com.codingapi.flow.api.pojo.NodeCreateRequest; +import com.codingapi.flow.api.pojo.WorkflowMeta; import com.codingapi.flow.api.pojo.WorkflowUpdateVersionNameRequest; +import com.codingapi.flow.exception.FlowNotFoundException; import com.codingapi.flow.exception.FlowPermissionException; import com.codingapi.flow.gateway.FlowOperatorGateway; import com.codingapi.flow.mock.MockInstance; @@ -53,6 +55,15 @@ public Response updateVersionName(@RequestBody WorkflowUpdateVersionNameRequest return Response.buildSuccess(); } + @GetMapping("/meta") + public SingleResponse getMeta(IdRequest request){ + Workflow workflow = workflowService.getWorkflow(request.getStringId()); + if(workflow!=null){ + return SingleResponse.of(new WorkflowMeta(workflow)); + } + throw FlowNotFoundException.workflow(request.getStringId()); + } + @PostMapping("/changeVersion") public Response changeVersion(@RequestBody IdRequest request) { diff --git a/flow-engine-starter-api/src/main/java/com/codingapi/flow/api/pojo/WorkflowMeta.java b/flow-engine-starter-api/src/main/java/com/codingapi/flow/api/pojo/WorkflowMeta.java new file mode 100644 index 00000000..4166381f --- /dev/null +++ b/flow-engine-starter-api/src/main/java/com/codingapi/flow/api/pojo/WorkflowMeta.java @@ -0,0 +1,40 @@ +package com.codingapi.flow.api.pojo; + +import com.codingapi.flow.action.IFlowAction; +import com.codingapi.flow.form.FlowForm; +import com.codingapi.flow.manager.ActionManager; +import com.codingapi.flow.node.IFlowNode; +import com.codingapi.flow.workflow.Workflow; +import lombok.Data; + +import java.util.List; + +@Data +public class WorkflowMeta { + + private String workId; + private List actions; + private FlowForm form; + + public WorkflowMeta(Workflow workflow) { + this.workId = workflow.getId(); + this.form = workflow.getForm(); + IFlowNode startNode = workflow.getStartNode(); + ActionManager actionManager = startNode.actionManager(); + this.actions = actionManager.getActions().stream().map(ActionOption::new).toList(); + } + + + @Data + public static class ActionOption { + private String actionId; + private String title; + private String type; + + public ActionOption(IFlowAction action) { + this.actionId = action.id(); + this.title = action.title(); + this.type = action.type(); + } + } +} diff --git a/flow-frontend b/flow-frontend index a2800f01..2e1a64b1 160000 --- a/flow-frontend +++ b/flow-frontend @@ -1 +1 @@ -Subproject commit a2800f01d3373ac736c946ffe29b5960013b75e6 +Subproject commit 2e1a64b16eee632977f264ab26bdb09e16028515