P15GEN2\59518
2025-10-10 9f6890646993d16260d4201d613c092132856127
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package foundation.system;
 
import java.util.ArrayList;
import java.util.List;
 
import foundation.dao.DataPackage;
import foundation.dao.DataReader;
import foundation.data.entity.Entity;
import foundation.data.entity.EntitySet;
import foundation.data.entity.Filter;
import foundation.data.object.DataObject;
import foundation.org.LeaderHierarchy;
import foundation.org.OAHierarchys;
import foundation.org.PositionHierarchys;
import foundation.state.approve.IHierarchyStepsCreator;
import foundation.state.approve.Step;
import foundation.state.approve.StepType;
import foundation.token.IOnlineUser;
import foundation.util.ContentBuilder;
import foundation.util.Util;
import foundation.workflow.WorkStep;
 
public class OAStepsCreator implements IHierarchyStepsCreator {
    private static OAStepsCreator instance;
    
    
    private OAStepsCreator() {
 
    }
    
    public static synchronized OAStepsCreator getInstance() {
        if (instance == null) {
            instance = new OAStepsCreator();
        }
        
        return instance;
    }
    
    @Override
    public List<Step> createSteps(StepType type, Step template, IOnlineUser user, WorkStep step) throws Exception {
        List<Step> result = new ArrayList<Step>();
        
        DataPackage dataPackage = step.getDataPackage();
        if (dataPackage == null) {
            DataReader dataReader = step.getDataReader();
            dataPackage = dataReader.getDataPackage();
        }
        
        String departmentId = getDepartments(user);
        //2. 获取岗位领导关系架构
        Filter filter = new Filter("md_employee.id", "in", departmentId);
        
        OAHierarchys hierarchys = OAHierarchys.getInstance(type, filter);
        
        int i = template.getIndexNo() - 1;
        
        for (PositionHierarchys hierarchy: hierarchys) {
            String id = type.name() + "-" + i;
            Step flowStep = null;
            
            if (!template.isCopy()) {
                flowStep = new Step(id, hierarchy.getPositionTitle() + "审批");
                flowStep.setIndexNo(i);
                i = i + 1;
            }
            else {
                flowStep = new Step(id, "通知" + hierarchy.getPositionTitle());
                flowStep.setIndexNo(i);
                flowStep.setCopy(template.isCopy());
            }
            
            for (LeaderHierarchy positionHierarchy : hierarchy.getPositinEmoployees()) {
                flowStep.addOneUser(positionHierarchy.getUserId(), positionHierarchy.getEmployeeName());
            }
            
            result.add(flowStep);
        }
        
        return result;
    }
 
    private String getDepartments(IOnlineUser user) throws Exception {
        String employeeId = user.getEmployeeId();
        
        DataObject dataObject = DataObject.getInstance("md_employee_department");
        EntitySet entitySet = dataObject.getTableEntitySet(new Filter("employee_id", employeeId));
        
        ContentBuilder builder = new ContentBuilder(",");
        builder.append("''");
        for (Entity entity : entitySet) {
            builder.append(Util.quotedStr(entity.getString("department_id")));
        }
        
        return "(" + builder.toString() + ")";
    }
 
    public static boolean isBusiness(StepType type) {
        return (StepType.BusinessOperator == type) || (StepType.BusinessDirector == type ||
                (StepType.BusinessOperationAssistant == type) || (StepType.CEO == type) 
                || (StepType.CFO == type) || (StepType.IT == type) || (StepType.DocumentController == type));
    }
}