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));
|
}
|
}
|