package foundation.system;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import foundation.action.ActionContext;
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataReader;
|
import foundation.dao.DataWriter;
|
import foundation.dao.Filter;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.object.DataObject;
|
import foundation.org.LeaderHierarchy;
|
import foundation.org.LeaderHierarchys;
|
import foundation.org.Position;
|
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.user.OnlineUser;
|
import foundation.util.Util;
|
|
|
public class HierarchyStepsCreator implements IHierarchyStepsCreator {
|
|
private static HierarchyStepsCreator instance;
|
|
|
private HierarchyStepsCreator() {
|
|
}
|
|
public static synchronized HierarchyStepsCreator getInstance() {
|
if (instance == null) {
|
instance = new HierarchyStepsCreator();
|
}
|
|
return instance;
|
}
|
|
@Override
|
public List<Step> createSteps(StepType type, IOnlineUser user, ActionContext context) throws Exception {
|
DataWriter dataWriter = context.getDataWriter();
|
List<Step> result = new ArrayList<Step>();
|
Position position;
|
|
DataPackage dataPackage = context.getDataPackage();
|
if (dataPackage == null) {
|
DataReader dataReader = context.getDataReader();
|
dataPackage = dataReader.getDataPackage();
|
}
|
|
if(dataPackage == null) {
|
//1. 过去申请用户的当前岗位(默认审批提交操作等动作必须选定一个当前岗位)
|
position = ((OnlineUser)user).getCurrentPosition();
|
}
|
else {
|
Entity master = dataPackage.getMasterEntity();
|
position = getDocumentPosition(master);
|
|
if (position == null) {
|
position = getAccountPosition(master);
|
}
|
}
|
|
if (position == null) {
|
dataWriter.reportOneError("createHierarchySteps", "没有获取到当前用户的岗位,无法创建审批步骤");
|
context.terminateTask();
|
}
|
|
//2. 获取岗位领导关系架构
|
LeaderHierarchys hierarchys = LeaderHierarchys.getInstance(type, position.getId());
|
|
int i = 0;
|
for (PositionHierarchys hierarchy: hierarchys) {
|
String id = type.name() + (++i);
|
Step step = new Step(id, hierarchy.getPositionTitle() + "审批");
|
|
for (LeaderHierarchy positionHierarchy : hierarchy.getPositinEmoployees()) {
|
step.addOneUser(positionHierarchy.getUserId(), positionHierarchy.getEmployeeName());
|
}
|
|
result.add(step);
|
}
|
|
return result;
|
}
|
|
private Position getDocumentPosition(Entity entity) throws Exception {
|
String positionId = entity.getString("position_id");
|
|
if (Util.isEmpty(positionId)) {
|
return null;
|
}
|
|
return Position.loadPosition(positionId);
|
}
|
|
|
private Position getAccountPosition(Entity entity) throws Exception {
|
String accountId = entity.getString("account_id");
|
|
if (Util.isEmpty(accountId)) {
|
accountId = entity.getString("customer_id");;
|
}
|
|
DataObject dataObject = DataObject.getInstance("md_org_account_position");
|
Filter filter = new Filter();
|
filter.add("parent_id", accountId);
|
EntitySet positionEntitySet = dataObject.getTableEntitySet(filter);
|
|
if (positionEntitySet.size() == 0 ) {
|
return null;
|
}
|
|
boolean isExistsMainApprover = false;
|
for (Entity position: positionEntitySet) {
|
if(position.getBoolean("is_main_approver") && (!isExistsMainApprover)) {
|
return Position.loadPosition(position.getString("position_id"));
|
}
|
}
|
|
Entity position = positionEntitySet.getEntity(0);
|
return Position.loadPosition(position.getString("position_id"));
|
}
|
}
|