pathinfopcoessimpl.java

来自「公司自己开发的工作流引擎」· Java 代码 · 共 986 行 · 第 1/3 页

JAVA
986
字号
  }

  /**
   * 取得流向的活动参与者信息
   * @param nextInfo NextActivityInfo
   * @return HashMap
   */
  private HashMap getActivityActorInfo(NextActivityInfo nextInfo,
      UserInfo userInfo,String areaId)
      throws Exception{
    long startTime=System.currentTimeMillis();
    //有后续节点
    HashMap returnMap=new HashMap();
    if(nextInfo!=null&&nextInfo.getNextActivity()!=null&&
        nextInfo.getNextActivity().size()>0){
      OrganizationHelper orgHelper=new OrganizationHelper();
      WorkflowHelper wfHelper=new WorkflowHelper();
      List nextActList=nextInfo.getNextActivity();
      String[] uids=new String[nextActList.size()];
      for(int i=0;i<nextActList.size();i++){
        NextActivityInfo actInfo=(NextActivityInfo)nextActList.get(i);
        uids[i]=actInfo.getUid();
        //取得活动参与者信息
        List actorList=null;
        //返回类型节点:源活动节点到目的节点的迁移类型:是否循环 0不循环,1循环
        if(actInfo.getTranType()==1){
          //取得要返回节点的参与者
          actorList=(List)orgHelper.getReturnActorsActorTree(nextInfo.
              getProcInstID(),actInfo.getActivityID());
        }
        else{

          //如果是嵌套子流程,则取得子流程的首节点信息
          if(actInfo.getActType()==2&&actInfo.getFirstNestingActivity()!=null){
            NextActivityInfo subflowInfo=actInfo.getFirstNestingActivity();
            //取得嵌套活动第一个节点的信息
            uids[i]=subflowInfo.getUid();
            actorList=(List)orgHelper.getSelectActorTree(userInfo.getUserId(),
                areaId,subflowInfo.getActivityID());
          }
          else{
            actorList=(List)orgHelper.getSelectActorTree(userInfo.getUserId(),
                areaId,actInfo.getActivityID());
          }
        }
        if(actorList!=null){
          //将参与者信息列表排列成树状
          actorList=orgHelper.arrangeActorTree((ArrayList)actorList);
        }
        returnMap.put(uids[i],actorList);
      }
      HashMap actAgenMap=wfHelper.getActivityAgenInfo(uids);
      SysManageHelper sysHelper=new SysManageHelper();
      //if(actAgenMap!=null&&actAgenMap.size()>0&&1==2){
      if(actAgenMap!=null&&actAgenMap.size()>0){
        Set entry=actAgenMap.entrySet();
        Iterator it=entry.iterator();
        while(it.hasNext()){
          Entry me=(Entry)it.next();
          if(actAgenMap.get(me.getKey())!=null){
            //取得活动对应的代理信息:代理人、委托人等
            ArrayList agenInfoList=(ArrayList)actAgenMap.get(me.getKey());
            if(returnMap.get(me.getKey())!=null){
              ArrayList actorList=(ArrayList)returnMap.get(me.getKey());
              for(int j=0;j<actorList.size();j++){
                SelectActorTree treeNode=(SelectActorTree)actorList.get(j);
                if(treeNode.getTreeType().equals("user")&&!treeNode.isIfAgen()){
                  //取得用户的代理人
                  Vector agenUserVector=getAgenUserIds(agenInfoList,
                      treeNode.getTreeId());
                  if(agenUserVector!=null&&agenUserVector.size()>0){
                    //修改参与者树信息
                    String consignUserId=treeNode.getTreeId();
                    String consignUserName=treeNode.getTreeName();
                    for(int k=0;k<agenUserVector.size();k++){
                      String agenUserId=(String)agenUserVector.get(k);

                      WfUser user=sysHelper.queryUserById(agenUserId);
                      String agenUserName=user==null?"":user.getUserName();
                      SelectActorTree tempNode=new SelectActorTree();
                      tempNode.setHasChild(treeNode.isHasChild());
                      tempNode.setIfAgen(treeNode.isIfAgen());
                      tempNode.setLevel(treeNode.getLevel());
                      tempNode.setOrder(treeNode.getOrder());
                      tempNode.setParentId(treeNode.getParentId());
                      tempNode.setParentName(treeNode.getParentName());
                      tempNode.setParentType(treeNode.getParentType());
                      tempNode.setTreeType(treeNode.getTreeType());

                      tempNode.setCosignUserId(consignUserId);
                      tempNode.setConsignUserName(consignUserName);
                      tempNode.setIfAgen(true);
                      tempNode.setTreeId(agenUserId);
                      tempNode.setTreeName(agenUserName+"(代"+consignUserName+
                          ")");
                      //加入代理人员信息
                      if(k==0){
                        actorList.set(j,tempNode);
                        treeNode=(SelectActorTree)actorList.get(j);
                      }
                      else{
                        if(j+k<actorList.size()){
                          actorList.add(j+k,tempNode);
                        }
                        else{
                          actorList.add(tempNode);
                        }
                      }
                    }
                  }
                }
              }
              actAgenMap.put(me.getKey(),actorList);
            }
          }
        }
      }
    }
    logger.info("Execution getActivityActorInfo cost time:"+
        (System.currentTimeMillis()-startTime)+" ms.");
    return returnMap;
  }

  private HashMap getActSelectActorParam(NextActivityInfo nextInfo)
      throws Exception{
    long startTime=System.currentTimeMillis();
    HashMap resultMap=new HashMap();
    OrganizationHelper helper=new OrganizationHelper();
    if(nextInfo!=null&&nextInfo.getNextActivity()!=null&&
        nextInfo.getNextActivity().size()>0){
      for(int i=0;i<nextInfo.getNextActivity().size();i++){
        NextActivityInfo info=(NextActivityInfo)nextInfo.getNextActivity().get(
            i);
        String uid=info.getUid();
        SelectActorParam actorParam=null;
        //如果是嵌套子流程,则取得子流程的首节点信息
        if(info.getActType()==2&&info.getFirstNestingActivity()!=null){
          //取得嵌套活动第一个节点的信息
          NextActivityInfo subflowInfo=info.getFirstNestingActivity();
          uid=subflowInfo.getUid();
          actorParam=helper.getSelectActorParam(subflowInfo.getActivityID());
        }
        else{
          actorParam=helper.getSelectActorParam(info.getActivityID());
        }
        resultMap.put(uid,actorParam);
      }
    }
    logger.info("Execution getActSelectActorParam cost time:"+
        (System.currentTimeMillis()-startTime)+" ms.");
    return resultMap;
  }

  /**
   * 取得流向的显示方式
   * @param nextInfo NextActivityInfo
   * @param actActorMap HashMap
   * @param actorSelectParam HashMap
   * @return String
   */
  private String getFlowShowStyle(NextActivityInfo nextInfo,HashMap actActorMap,
      HashMap actorSelectParam){
    long startTime=System.currentTimeMillis();
    String flowShowStyle="show";
    List nextList=nextInfo.getNextActivity();
    if(nextList!=null&&nextList.size()>0){
      flowShowStyle=nextInfo.getActParamValueByName("flowShowStyle");
      flowShowStyle=flowShowStyle==null?"show":(flowShowStyle.equals("")?"show":
          flowShowStyle);
      //自动隐藏
      if(flowShowStyle.equals("auto")){
        //只有一个后续节点
        if(nextList.size()==1){
          flowShowStyle="auto:hide";
          NextActivityInfo tempInfo=(NextActivityInfo)nextList.get(0);

          if(tempInfo.getUid()!=null){
            String uid=tempInfo.getUid();
            //如果是嵌套子流程,则取得子流程的首节点信息
            if(tempInfo.getActType()==2&&tempInfo.getFirstNestingActivity()!=null){
              //取得嵌套活动第一个节点的信息
              NextActivityInfo subflowInfo=tempInfo.getFirstNestingActivity();
              uid=subflowInfo.getUid();
            }
            ArrayList actorList=(ArrayList)actActorMap.get(uid);
            SelectActorParam actorParam=(SelectActorParam)actorSelectParam.get(
                uid);
            if(!actorParam.getSelectType().equals("auto")){
              int count=this.getActorCount(actorList,actorParam.getSelectType());
              if(count>1){
                String showActivityName=nextInfo.getActParamValueByName(
                    "showActivityName");
                if(showActivityName!=null&&showActivityName.equals("hide")){
                  //隐藏活动名称
                  flowShowStyle="auto:hide_act_name";
                }
                else{
                  //显示,为单个流向
                  flowShowStyle="auto:show:single";
                }
              }
            }
          }
        }
        else{
          //显示
          flowShowStyle="auto:show";
        }
      }
      logger.info("Execution getFlowShowStyle cost time:"+
          (System.currentTimeMillis()-startTime)+" ms.");
    }
    return flowShowStyle;
  }

  /**
   * 从代理信息列表中取得指定用户的代理人
   * @param agenInfoList ArrayList
   * @param userId 用户id
   * @return Vector
   */
  private Vector getAgenUserIds(ArrayList agenInfoList,String userId){
    Vector vector=new Vector();
    long startTime=System.currentTimeMillis();
    if(agenInfoList!=null&&agenInfoList.size()>0){
      for(int i=0;i<agenInfoList.size();i++){
        ActivityAgenInfo agenInfo=(ActivityAgenInfo)agenInfoList.get(i);
        if(agenInfo.getConsignUserId()!=null&&
            agenInfo.getConsignUserId().equals(userId)&&agenInfo.getAgenUserId()!=null){
          if(!vector.contains(agenInfo.getAgenUserId())){
            vector.add(agenInfo.getAgenUserId());
          }
        }
      }
    }
    logger.info("Execution getAgenUserIds cost time:"+(System.currentTimeMillis()-
        startTime)+" ms.");
    return vector;
  }

  /**
   * 取得指定活动的流向信息元素
   * @param nextInfo NextActivityInfo
   * @param actorParam SelectActorParam
   * @param actorList List
   * @return String
   */
  private String getPathInfoElements(String selectElementType,
      String flowShowStyle,NextActivityInfo nextInfo,HashMap actActorMap,
      HashMap actorSelectParam){
    long startTime=System.currentTimeMillis();
    String elmString="";
    List nextList=nextInfo.getNextActivity();
    if(nextList!=null&&nextList.size()>0){
      for(int j=0;j<nextList.size();j++){
        NextActivityInfo actInfo=(NextActivityInfo)nextList.get(j);
        String uid=actInfo.getUid();
        //如果是嵌套子流程,则取得子流程的首节点信息
        if(actInfo.getActType()==2&&actInfo.getFirstNestingActivity()!=null){
          NextActivityInfo subflowInfo=actInfo.getFirstNestingActivity();
          //取得嵌套活动第一个节点的信息
          uid=subflowInfo.getUid();
        }

        ArrayList actorList=(ArrayList)actActorMap.get(uid);
        SelectActorParam actorParam=(SelectActorParam)actorSelectParam.get(uid);
        //自动隐藏、隐藏
        if(flowShowStyle.equals("auto:hide")||flowShowStyle.equals("hide")){
          if(j==0){
            elmString+="<td width=\"100\" class=\""+WF_TD_STYLE_CLASS+"\">";
          }
          elmString+=getInputActElements(nextInfo,actInfo.getActivityID(),
              selectElementType,actorParam,"",actorList);
          if(j==nextList.size()-1){
            elmString+="</td>";
          }
        }
        //自动显示、显示
        else if(flowShowStyle.equals("auto:show")||flowShowStyle.equals("show")){
          //是否自动选择中
          String selectTag="";
          if(j==0){
            String defaultSelect=nextInfo.getActParamValueByName(
                "defaultSelect");
            if(defaultSelect!=null&&defaultSelect.equals("yes")){
              if(selectElementType.equals("radio")){
                selectTag=" checked ";
              }
              else if(selectElementType.equals("checkbox")){
                selectTag=" selected ";
              }
            }
          }
          elmString+="<td width=\"100\" class=\""+WF_TD_STYLE_CLASS+"\">";
          elmString+=getInputActElements(nextInfo,actInfo.getActivityID(),
              selectElementType,actorParam,selectTag,actorList);
          elmString+="</td>";
        }
        //隐藏流向名称
        else if(flowShowStyle.equals("auto:hide_act_name")){
          elmString+="<td width=\"100\" class=\""+WF_TD_STYLE_CLASS+"\">";
          elmString+=getInputActElements(nextInfo,actInfo.getActivityID(),
              selectElementType,actorParam,"",actorList);
          elmString+="</td>";
          break;
        }
        //只显示一个流向
        else if(flowShowStyle.equals("auto:show:single")){
          //是否自动选择中
          String selectTag="";
          if(j==0){
            String defaultSelect=nextInfo.getActParamValueByName(
                "defaultSelect");
            if(defaultSelect!=null&&defaultSelect.equals("yes")){
              if(selectElementType.equals("radio")){
                selectTag=" checked ";
              }
              else if(selectElementType.equals("checkbox")){
                selectTag=" selected ";
              }
            }
          }
          elmString+="<td width=\"100\" class=\""+WF_TD_STYLE_CLASS+"\">";
          elmString+=getInputActElements(nextInfo,actInfo.getActivityID(),
              selectElementType,actorParam,selectTag,actorList);
          elmString+="</td>";
          break;
        }
      }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?