Skip to content
Merged

Dev #26

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,19 @@ public static FlowStateException operatorNotMatch() {
return new FlowStateException("state.operator.notMatch", "Current operator has no permission to process this flow record");
}



/**
*
* Workflow is already disable
* @param workflowId workflowId
* @return exception
*/
public static FlowStateException workflowAlreadyDisable(String workflowId) {
return new FlowStateException("state.workflow.disable",
String.format("Workflow is disable: %s", workflowId));
}

/**
* Workflow is already finished
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,6 @@ public boolean isSubForm(String formCode) {
return false;
}


@Override
public boolean equals(Object obj) {
if (obj instanceof FormMeta form) {
String json = JSON.toJSONString(form.toMap());
return json.equals(JSON.toJSONString(this.toMap()));
}
return super.equals(obj);
}

/**
* 转换成map
*/
Expand All @@ -60,7 +50,9 @@ public Map<String, Object> toMap() {
map.put("name", name);
map.put("code", code);
map.put("fields", fields);
map.put("subForms", subForms != null ? subForms.stream().map(FormMeta::toMap).toList() : null);
if (subForms != null && !subForms.isEmpty()) {
map.put("subForms", subForms.stream().map(FormMeta::toMap).toList());
}
return map;
}

Expand All @@ -69,7 +61,7 @@ public static FormMeta fromMap(Map<String, Object> map) {
FormMeta form = new FormMeta();
List<Map<String, Object>> fields = (List<Map<String, Object>>) map.get("fields");
List<FormFieldMeta> fieldList = new ArrayList<>();
if(fields!=null && !fields.isEmpty()) {
if (fields != null && !fields.isEmpty()) {
for (Map<String, Object> field : fields) {
FormFieldMeta fieldMeta = new FormFieldMeta();
fieldMeta.setId((String) field.get("id"));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.codingapi.flow.node;

/**
* 插槽节点 包括 {@link com.codingapi.flow.node.nodes.ConditionNode}{@link com.codingapi.flow.node.nodes.InclusiveNode} {@link com.codingapi.flow.node.nodes.ParallelNode}
*/
public interface IBlockNode {

/**
* 添加默认的branch分支
* @param count 默认数量
*/
void addDefaultBranch(int count);

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.codingapi.flow.builder.BaseNodeBuilder;
import com.codingapi.flow.node.BaseFlowNode;
import com.codingapi.flow.node.IBlockNode;
import com.codingapi.flow.node.IFlowNode;
import com.codingapi.flow.node.NodeType;
import com.codingapi.flow.session.FlowSession;
Expand All @@ -15,7 +16,7 @@
/**
* 条件控制节点
*/
public class ConditionNode extends BaseFlowNode {
public class ConditionNode extends BaseFlowNode implements IBlockNode {

public static final String NODE_TYPE = NodeType.CONDITION.name();
public static final String DEFAULT_NAME = "条件控制节点";
Expand Down Expand Up @@ -57,6 +58,15 @@ public List<IFlowNode> filterBranches(List<IFlowNode> nodeList, FlowSession flow
return nodes;
}

@Override
public void addDefaultBranch(int count){
List<IFlowNode> branches = new ArrayList<>();
for (int i=0;i<count;i++){
ConditionBranchNode branchNode = new ConditionBranchNode();
branches.add(branchNode);
}
this.setBlocks(branches);
}

public static ConditionNode formMap(Map<String, Object> map) {
return BaseFlowNode.fromMap(map, ConditionNode.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.codingapi.flow.builder.BaseNodeBuilder;
import com.codingapi.flow.exception.FlowConfigException;
import com.codingapi.flow.node.BaseFlowNode;
import com.codingapi.flow.node.IBlockNode;
import com.codingapi.flow.node.IFlowNode;
import com.codingapi.flow.node.NodeType;
import com.codingapi.flow.node.helper.ParallelNodeRelationHelper;
Expand All @@ -11,13 +12,14 @@
import com.codingapi.flow.utils.RandomUtils;
import com.codingapi.flow.workflow.Workflow;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
* 包容控制节点
*/
public class InclusiveNode extends BaseFlowNode {
public class InclusiveNode extends BaseFlowNode implements IBlockNode {

public static final String NODE_TYPE = NodeType.INCLUSIVE.name();
public static final String DEFAULT_NAME = "包容控制节点";
Expand Down Expand Up @@ -46,6 +48,17 @@ public boolean handle(FlowSession request) {
}


@Override
public void addDefaultBranch(int count){
List<IFlowNode> branches = new ArrayList<>();
for (int i=0;i<count;i++){
InclusiveBranchNode branchNode = new InclusiveBranchNode();
branches.add(branchNode);
}
this.setBlocks(branches);
}


public static InclusiveNode formMap(Map<String, Object> map) {
return BaseFlowNode.fromMap(map, InclusiveNode.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.codingapi.flow.builder.BaseNodeBuilder;
import com.codingapi.flow.exception.FlowConfigException;
import com.codingapi.flow.node.BaseFlowNode;
import com.codingapi.flow.node.IBlockNode;
import com.codingapi.flow.node.IFlowNode;
import com.codingapi.flow.node.NodeType;
import com.codingapi.flow.node.helper.ParallelNodeRelationHelper;
Expand All @@ -11,13 +12,14 @@
import com.codingapi.flow.utils.RandomUtils;
import com.codingapi.flow.workflow.Workflow;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
* 并行控制
*/
public class ParallelNode extends BaseFlowNode {
public class ParallelNode extends BaseFlowNode implements IBlockNode {

public static final String NODE_TYPE = NodeType.PARALLEL.name();
public static final String DEFAULT_NAME = "并行控制节点";
Expand Down Expand Up @@ -58,6 +60,16 @@ public List<IFlowNode> filterBranches(List<IFlowNode> nodeList, FlowSession flow
return nodeList;
}

@Override
public void addDefaultBranch(int count){
List<IFlowNode> branches = new ArrayList<>();
for (int i=0;i<count;i++){
ParallelBranchNode branchNode = new ParallelBranchNode();
branches.add(branchNode);
}
this.setBlocks(branches);
}


public static ParallelNode formMap(Map<String, Object> map) {
return BaseFlowNode.fromMap(map, ParallelNode.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.codingapi.flow.exception.FlowExecutionException;
import com.codingapi.flow.exception.FlowNotFoundException;
import com.codingapi.flow.exception.FlowPermissionException;
import com.codingapi.flow.exception.FlowStateException;
import com.codingapi.flow.form.FormData;
import com.codingapi.flow.gateway.FlowOperatorGateway;
import com.codingapi.flow.node.nodes.StartNode;
Expand Down Expand Up @@ -43,6 +44,9 @@ public long create() {
if (workflow == null) {
throw FlowNotFoundException.workflow(request.getWorkId());
}
if (workflow.isDisable()) {
throw FlowStateException.workflowAlreadyDisable(request.getWorkId());
}
workflow.verify();
// 获取备份
WorkflowBackup workflowBackup = workflowBackupRepository.getByWorkId(workflow.getId(), workflow.getCreatedTime());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,24 @@ public class Workflow {
private List<IWorkflowStrategy> strategies;


/**
* 启用状态
*/
private boolean enable;


public boolean isDisable(){
return !enable;
}

protected Workflow() {
this.id = RandomUtils.generateStringId();
this.code = RandomUtils.generateWorkflowCode();
this.createdTime = System.currentTimeMillis();
this.operatorCreateScript = OperatorMatchScript.any();
this.nodes = new ArrayList<>();
this.strategies = defaultStrategies();
this.enable = false;
this.updateTime();
}

Expand Down Expand Up @@ -253,6 +264,26 @@ public void verify() {
this.verifyNodes();
}


/**
* 启动流程
*/
public void enable(){
this.verify();
this.enable = true;
this.updateTime();
}


/**
* 禁用流程
*/
public void disable(){
this.enable = false;
this.updateTime();
}


private void verifyFields() {
if (!StringUtils.hasText(id)) {
throw FlowValidationException.required("workflow id");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ public WorkflowBuilder nodes(List<IFlowNode> nodes) {
}


public Workflow build(boolean verify) {
if(verify) {
workflow.verify();
public Workflow build(boolean enable) {
if(enable) {
workflow.enable();
}
return workflow;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ void buildBasicWorkflow() {
assertEquals(workflow.getCode(), workflowBck.getCode());
assertEquals(workflow.getId(), workflowBck.getId());
assertEquals(workflow.getCreatedOperator().getUserId(), workflowBck.getCreatedOperator().getUserId());
assertEquals(workflow.getForm(), workflowBck.getForm());
assertEquals(workflow.getForm().getCode(), workflowBck.getForm().getCode());
assertEquals(workflow.getNodes().size(), workflowBck.getNodes().size());
assertEquals(workflow.getSchema(), workflowBck.getSchema());
assertEquals(workflow.getNodes().get(0).getId(), workflowBck.getNodes().get(0).getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.alibaba.fastjson.JSONObject;
import com.codingapi.flow.api.pojo.NodeCreateRequest;
import com.codingapi.flow.api.service.NodeBuildService;
import com.codingapi.flow.node.IBlockNode;
import com.codingapi.flow.node.IFlowNode;
import com.codingapi.flow.node.NodeType;
import com.codingapi.flow.node.factory.NodeFactory;
Expand All @@ -28,7 +28,6 @@
public class WorkflowController {

private final WorkflowRepository workflowRepository;
private final NodeBuildService nodeBuildService;

@PostMapping("/remove")
public Response remove(@RequestBody IdRequest request) {
Expand All @@ -37,6 +36,20 @@ public Response remove(@RequestBody IdRequest request) {
return Response.buildSuccess();
}


@PostMapping("/changeState")
public Response changeState(@RequestBody IdRequest request) {
Workflow workflow = workflowRepository.get(request.getStringId());
if(workflow.isDisable()){
workflow.enable();
}else {
workflow.disable();
}
workflowRepository.save(workflow);
return Response.buildSuccess();
}


@PostMapping("/create")
public SingleResponse<JSONObject> create() {
Workflow workflow = WorkflowBuilder.builder()
Expand All @@ -48,7 +61,12 @@ public SingleResponse<JSONObject> create() {

@PostMapping("/create-node")
public SingleResponse<Map<String, Object>> createNode(@RequestBody NodeCreateRequest request) {
return SingleResponse.of(nodeBuildService.buildNode(request.getType()));
NodeType type = NodeType.valueOf(request.getType());
IFlowNode node = NodeFactory.getInstance().createNode(type);
if (node instanceof IBlockNode blockNode) {
blockNode.addDefaultBranch(2);
}
return SingleResponse.of(node.toMap());
}

@PostMapping("/save")
Expand Down

This file was deleted.

Loading