刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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();
    }
}