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 createSteps(StepType type, IOnlineUser user, ActionContext context) throws Exception { DataWriter dataWriter = context.getDataWriter(); List result = new ArrayList(); 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")); } }