Skip to content
Merged
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 @@ -4,6 +4,7 @@
import com.codingapi.flow.record.FlowRecord;
import com.codingapi.flow.session.FlowSession;
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;

import java.util.HashMap;
Expand All @@ -12,6 +13,7 @@
import java.util.function.Consumer;

@Getter
@Setter
public abstract class BaseAction implements IFlowAction {

protected String id;
Expand Down Expand Up @@ -39,21 +41,12 @@ public ActionDisplay display() {
return display;
}


protected void setId(String id) {
this.id = id;
}

protected void setType(ActionType type) {
this.type = type;
}

protected void setTitle(String title) {
this.title = title;
}

protected void setDisplay(ActionDisplay display) {
this.display = display;
@Override
public boolean equals(Object obj) {
if(obj instanceof BaseAction action){
return action.getId().equals(id);
}
return super.equals(obj);
}

@Override
Expand All @@ -71,6 +64,13 @@ public List<FlowRecord> generateRecords(FlowSession flowSession) {
return List.of();
}

@Override
public void copy(IFlowAction action) {
this.id = action.id();
this.type = action.type();
this.title = action.title();
this.display = action.display();
}

@SneakyThrows
@SuppressWarnings("unchecked")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,9 @@ public interface IFlowAction {
void run(FlowSession flowSession);


/**
* 复制动作
*/
void copy(IFlowAction action);

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.utils.RandomUtils;

import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.utils.RandomUtils;

import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.utils.RandomUtils;

import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.utils.RandomUtils;

import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.context.RepositoryContext;
import com.codingapi.flow.event.FlowRecordDoneEvent;
import com.codingapi.flow.event.FlowRecordTodoEvent;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.action.IFlowAction;
import com.codingapi.flow.context.RepositoryContext;
import com.codingapi.flow.event.FlowRecordTodoEvent;
import com.codingapi.flow.event.IFlowEvent;
Expand Down Expand Up @@ -32,6 +36,12 @@ public RejectAction() {
this.script = RejectActionScript.startScript();
}

@Override
public void copy(IFlowAction action) {
super.copy(action);
this.script = ((RejectAction) action).script;
}

public void setScript(String script) {
this.script = new RejectActionScript(script);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.utils.RandomUtils;

import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.utils.RandomUtils;

import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.codingapi.flow.action;
package com.codingapi.flow.action.actions;

import com.codingapi.flow.action.ActionDisplay;
import com.codingapi.flow.action.ActionType;
import com.codingapi.flow.action.BaseAction;
import com.codingapi.flow.utils.RandomUtils;

import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.codingapi.flow.action.factory;

import com.codingapi.flow.action.*;
import com.codingapi.flow.action.actions.*;
import lombok.Getter;
import lombok.SneakyThrows;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.codingapi.flow.builder;

import com.codingapi.flow.action.IFlowAction;

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

public class ActionBuilder {

private final List<IFlowAction> actions;

private ActionBuilder() {
this.actions = new ArrayList<>();
}

public static ActionBuilder builder() {
return new ActionBuilder();
}

public ActionBuilder addAction(IFlowAction action) {
this.actions.add(action);
return this;
}

public List<IFlowAction> build() {
return actions;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.codingapi.flow.node.builder;
package com.codingapi.flow.builder;

import com.codingapi.flow.action.IFlowAction;
import com.codingapi.flow.node.BaseFlowNode;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.codingapi.flow.node.builder;
package com.codingapi.flow.builder;

import com.codingapi.flow.form.permission.FormFieldPermission;
import com.codingapi.flow.form.permission.PermissionType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package com.codingapi.flow.node.builder;
package com.codingapi.flow.builder;

import com.codingapi.flow.action.IFlowAction;
import com.codingapi.flow.action.factory.FlowActionFactory;
import com.codingapi.flow.form.permission.FormFieldPermission;
import com.codingapi.flow.node.BaseAuditNode;
import com.codingapi.flow.strategy.INodeStrategy;
import com.codingapi.flow.strategy.NodeStrategyFactory;
import lombok.SneakyThrows;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -16,7 +14,7 @@ public class NodeMapBuilder {

@SuppressWarnings("unchecked")
public static List<FormFieldPermission> loadFormFieldPermissions(Map<String, Object> data) {
List<Map<String, Object>> permissions = (List<Map<String, Object>>) data.get("formFieldPermissions");
List<Map<String, Object>> permissions = (List<Map<String, Object>>) data.get("fieldPermissions");
if (permissions != null) {
List<FormFieldPermission> permissionList = new ArrayList<>();
for (Map<String, Object> item : permissions) {
Expand Down Expand Up @@ -57,16 +55,4 @@ public static List<INodeStrategy> loadNodeStrategies(Map<String, Object> data) {
}


@SneakyThrows
public static <T extends BaseAuditNode> T formMap(Map<String, Object> map, Class<T> clazz) {
T node = clazz.getDeclaredConstructor().newInstance();
node.setId((String) map.get("id"));
node.setName((String) map.get("name"));
node.setView((String) map.get("view"));
List<IFlowAction> actionList = NodeMapBuilder.loadActions(map);
node.setActions(actionList);
List<INodeStrategy> strategyList = NodeMapBuilder.loadNodeStrategies(map);
node.setStrategies(strategyList);
return node;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.codingapi.flow.node.builder;
package com.codingapi.flow.builder;

import com.codingapi.flow.strategy.INodeStrategy;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package com.codingapi.flow.node;

import com.codingapi.flow.action.IFlowAction;
import com.codingapi.flow.action.PassAction;
import com.codingapi.flow.form.FormMeta;
import com.codingapi.flow.node.manager.OperatorManager;
import com.codingapi.flow.node.manager.StrategyManager;
import com.codingapi.flow.operator.IFlowOperator;
import com.codingapi.flow.record.FlowRecord;
import com.codingapi.flow.session.FlowAdvice;
import com.codingapi.flow.session.FlowSession;
import com.codingapi.flow.strategy.INodeStrategy;
import com.codingapi.flow.strategy.MultiOperatorAuditStrategy;
import com.codingapi.flow.utils.RandomUtils;
import com.codingapi.flow.workflow.Workflow;
import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
Expand Down Expand Up @@ -47,20 +45,10 @@ public Map<String, Object> toMap() {


public void verifyNode(FormMeta form) {
super.verifyNode(form);
if (!StringUtils.hasText(view)) {
throw new IllegalArgumentException("view can not be null");
}
if (!StringUtils.hasText(name)) {
throw new IllegalArgumentException("name can not be null");
}
if (!StringUtils.hasText(id)) {
throw new IllegalArgumentException("id can not be null");
}
if (actions == null || actions.isEmpty()) {
throw new IllegalArgumentException("actions can not be null");
}
StrategyManager strategyManager = this.strategyManager();
strategyManager.verifyStrategies(form);
}


Expand Down Expand Up @@ -157,35 +145,12 @@ public List<FlowRecord> generateCurrentRecords(FlowSession session) {
return records;
}

@Override
public void verifySession(FlowSession session) {
super.verifySession(session);
FlowRecord flowRecord = session.getCurrentRecord();
Workflow workflow = session.getWorkflow();
// 数据验证
// FieldPermissionManager fieldPermissionManager = this.formFieldsPermissionsManager();
// fieldPermissionManager.verifyFormData(workflow.getForm(), flowRecord.getFormData(), session.getFormData().toMapData());

FlowAdvice flowAdvice = session.getAdvice();
IFlowAction flowAction = flowAdvice.getAction();

StrategyManager strategyManager = this.strategyManager();
strategyManager.verifySession(session);
// 是否必须填写审批意见
if (strategyManager.isEnableAdvice()) {
if (!StringUtils.hasText(flowAdvice.getAdvice())) {
throw new IllegalArgumentException("advice can not be null");
}
}
// 通过操作
if (flowAction instanceof PassAction) {
// 是否必须签名
if (strategyManager.isEnableSignable()) {
if (!StringUtils.hasText(flowAdvice.getSignKey())) {
throw new IllegalArgumentException("signKey can not be null");
}
}
}
@SneakyThrows
public static <T extends BaseAuditNode> T formMap(Map<String, Object> map, Class<T> clazz) {
T node = BaseFlowNode.loadFromMap(map, clazz);
node.setView((String) map.get("view"));
return node;
}

}
Loading