package foundation.state.approve;
|
|
import java.util.Iterator;
|
import java.util.List;
|
|
import foundation.data.entity.Entity;
|
import foundation.json.IJSONProvider;
|
import foundation.json.IJSONWriter;
|
import foundation.token.IOnlineUser;
|
import foundation.util.MapList;
|
import foundation.workflow.WorkStep;
|
|
public class ApproveRuntime implements IJSONProvider, Iterable<Step> {
|
|
private String id;
|
private String name;
|
private SkipType skipType;
|
private boolean simpleList;
|
private MapList<String, Step> items;
|
|
public ApproveRuntime() {
|
items = new MapList<String, Step>();
|
}
|
|
public ApproveRuntime(String id, String name, SkipType skipType) {
|
this.id = id;
|
this.name = name;
|
this.skipType = skipType;
|
items = new MapList<String, Step>();
|
}
|
|
public ApproveRuntime newEmptyInstance() {
|
ApproveRuntime result = new ApproveRuntime();
|
result.id = this.id;
|
result.name = this.name;
|
|
return result;
|
}
|
|
public static ApproveRuntime getInstance(String id) {
|
ApproveRuntimeBucket bucket = ApproveRuntimeBucket.getInstance();
|
|
ApproveRuntime result = bucket.get(id);
|
|
return result;
|
}
|
|
public void load(Entity entity) {
|
id = entity.getString("id");
|
name = entity.getString("name");
|
skipType = SkipType.parse(entity.getString("skip_type_code"));
|
}
|
|
public ApproveRuntime getRuntime(IOnlineUser user, WorkStep step) throws Exception {
|
//1. 如果是简单列表,直接使用
|
if (simpleList) {
|
return this;
|
}
|
|
//2. 如果不是简单列表,需要根据RoleCode进行计算
|
ApproveRuntime result = newEmptyInstance();
|
|
for (Step oneStep: items) {
|
StepType type = oneStep.getType();
|
|
//2.1 如果是固定步骤,直接添加
|
if (StepType.ListStep == type) {
|
result.items.add(oneStep.getId(), oneStep);
|
continue;
|
}
|
|
//2.2 如果动态步骤,实时创建
|
List<Step> stepList = StepsCreator.createSalesHierarchySteps(type, oneStep, user, step);
|
|
if (stepList == null) {
|
continue;
|
}
|
|
for (Step dynamic: stepList) {
|
result.items.add(dynamic.getId(), dynamic);
|
}
|
}
|
|
return result;
|
}
|
|
public String getId() {
|
return id;
|
}
|
|
public String getName() {
|
return name;
|
}
|
|
public SkipType getSkipType() {
|
return skipType;
|
}
|
|
public void loadOneStep(Step step) {
|
simpleList = simpleList && (StepType.ListStep == step.getType());
|
items.add(step.getId(), step);
|
}
|
|
public boolean isSimpleList() {
|
return simpleList;
|
}
|
|
@Override
|
public Iterator<Step> iterator() {
|
return items.iterator();
|
}
|
|
@Override
|
public void writeJSON(IJSONWriter writer) {
|
writer.beginObject();
|
|
writer.write("id", id);
|
writer.write("name", name);
|
writer.write("skip_type_code", skipType.name());
|
writer.write("skip_type_name", skipType.getName());
|
|
|
writer.beginArray("steps");
|
for (Step step: items) {
|
step.writeJSON(writer);
|
}
|
writer.endArray();
|
|
writer.endObject();
|
}
|
}
|