package foundation.system;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataReader;
|
import foundation.dao.DataWriter;
|
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.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;
|
import foundation.workflow.WorkStep;
|
|
|
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, Step template, IOnlineUser user, WorkStep step) throws Exception {
|
DataWriter dataWriter = step.getDataWriter();
|
List<Step> result = new ArrayList<Step>();
|
Position position;
|
|
DataPackage dataPackage = step.getDataPackage();
|
if (dataPackage == null) {
|
DataReader dataReader = step.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(dataPackage.getName(), master);
|
}
|
}
|
|
//2. 获取岗位领导关系架构
|
Filter filter = null;
|
|
if (isBusiness(type)) {
|
filter = new Filter();
|
filter.add("duty", type.name());
|
}
|
else {
|
if (position == null) {
|
position = ((OnlineUser)user).getCurrentPosition();
|
}
|
|
if (position == null) {
|
dataWriter.reportOneError("createHierarchySteps", "没有获取到当前用户的岗位,无法创建审批步骤");
|
step.terminateTask();
|
}
|
|
filter = new Filter();
|
filter.add("md_position.id", position.getId());
|
}
|
|
LeaderHierarchys hierarchys = LeaderHierarchys.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 Position getDocumentPosition(Entity entity) throws Exception {
|
String positionId = entity.getString("position_id");
|
|
if (Util.isEmpty(positionId)) {
|
positionId = entity.getString("sale_position_id");
|
}
|
|
if (Util.isEmpty(positionId)) {
|
return null;
|
}
|
|
return Position.loadPosition(positionId);
|
}
|
|
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));
|
}
|
|
private Position getAccountPosition(String dataname, Entity entity) throws Exception {
|
String accountId = entity.getString("account_id");
|
|
if (dataname.equals("md_org_account") || dataname.equals("md_org_account_initial")) {
|
accountId = entity.getId();
|
}
|
|
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"));
|
}
|
}
|