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 + -
显示快捷键?