package jnpf.dmsService;
|
|
import jnpf.flowable.entity.TemplateJsonEntity;
|
import jnpf.flowable.entity.TemplateNodeEntity;
|
import jnpf.flowable.enums.NodeEnum;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
final class DmsQianpiyeFlowFixtures {
|
static final List<String> STEP_NAMES = List.of("发起申请", "部门审核", "起草人", "文件审批",
|
"起草人与客户确认", "QA审批", "起草人", "文件培训");
|
|
private DmsQianpiyeFlowFixtures() {
|
}
|
|
static List<TemplateNodeEntity> steps(String prefix) {
|
List<TemplateNodeEntity> nodes = new ArrayList<>();
|
for (int index = 0; index < STEP_NAMES.size(); index++) {
|
TemplateNodeEntity node = new TemplateNodeEntity();
|
node.setId(prefix + "-row-" + (STEP_NAMES.size() - index));
|
node.setNodeCode(prefix + index);
|
node.setNodeType(index == 0 ? NodeEnum.START.getType() : NodeEnum.APPROVER.getType());
|
node.setNodeJson("{\"nodeName\":\"" + STEP_NAMES.get(index) + "\"}");
|
node.setCreatorTime(new Date(1000L * (STEP_NAMES.size() - index)));
|
nodes.add(node);
|
}
|
return nodes;
|
}
|
|
static TemplateJsonEntity version(String id, String prefix) {
|
TemplateJsonEntity version = new TemplateJsonEntity();
|
version.setId(id);
|
version.setState(1);
|
version.setVersion("1.0");
|
version.setFlowXml(linearXml(steps(prefix).stream().map(TemplateNodeEntity::getNodeCode)
|
.toArray(String[]::new)));
|
return version;
|
}
|
|
static String linearXml(String... codes) {
|
StringBuilder xml = new StringBuilder("<definitions xmlns=\"http://www.omg.org/spec/BPMN/20100524/MODEL\"><process id=\"flow\">");
|
xml.append("<startEvent id=\"").append(codes[0]).append("\"/>");
|
// Deliberately store task elements in the opposite order from their connections.
|
for (int index = codes.length - 1; index > 0; index--) {
|
xml.append("<userTask id=\"").append(codes[index]).append("\"/>");
|
}
|
for (int index = 1; index < codes.length; index++) {
|
xml.append("<sequenceFlow id=\"edge").append(index).append("\" sourceRef=\"")
|
.append(codes[index - 1]).append("\" targetRef=\"").append(codes[index]).append("\"/>");
|
}
|
return xml.append("</process></definitions>").toString();
|
}
|
}
|