processworkflow.java
来自「公司自己开发的工作流引擎」· Java 代码 · 共 1,509 行 · 第 1/4 页
JAVA
1,509 行
}
return relList;
}
finally{
WorkflowSession.deleteSunflowClient(userInfo);
}
}
/**
* 修改返回到指定活动的参与者为当前工作项的发送者。
* @param currWorkItemId 当前工作项id
* @param toActId 产生工作项的活动定义id
* @param toActMethod int 选定的活动办理方式(1推,2拉)
* @return List 由LaWorkItemRel组成的list
*/
private List modifyReturnWorkItem(String businessId,long currWorkItemId,
long toActId,int toActMethod,List workItemTimeList,List participatorList)
throws Exception{
logger.info("begin modifyReturnWorkItem...");
SunflowClient sunflowClient=WorkflowSession.getSunflowClient(userInfo);
List relList=new ArrayList();
try{
//取得当前工作项信息
WorkItemContext workItemCtx=sunflowClient.findWorkItem(currWorkItemId);
if(workItemCtx==null){
throw new CannotFindPreferWorkItemInfoException("找不到指定的工作项信息。");
}
//取得指定活动义id的实例id
ActivityInstanceContextCollection actInsCxtClt=sunflowClient.
listActivityInstanceByProInsID(workItemCtx.getProInstanceID());
long maxActInstId=0;
for(int i=0;i<actInsCxtClt.size();i++){
ActivityInstanceContext actInsCxt=actInsCxtClt.get(i);
logger.info("actInsCxt is:"+actInsCxt.getActivityInstanceID());
//取出目标活动的状态为2的最新实例
if(actInsCxt.getState()==2){
if(actInsCxt.getActivityID()==toActId&&
actInsCxt.getActivityInstanceID()>maxActInstId){
maxActInstId=actInsCxt.getActivityInstanceID();
}
}
}
//取得当前工作项的办理人
String sendUserId="";
boolean ifAgen=false;
String consignUserId="";
//如果参与者不为空
if(participatorList!=null&&participatorList.size()>0){
Participator participator=(Participator)participatorList.get(0);
if(participator!=null){
sendUserId=participator.getId();
ifAgen=participator.isIfAgen();
consignUserId=participator.getConsignUserId();
}
}
//
else{
//设置返回活动的参与者为当前活动的发送者
sendUserId=getReturnActor(workItemCtx.getProInstanceID(),toActId);
}
List actParticipator=new ArrayList();
if(sendUserId!=null&&!sendUserId.equals("")){
Participator actor=new Participator();
logger.info("sendUserId is:"+sendUserId);
actor.setId(sendUserId);
actor.setType("user");
actor.setName("");
actor.setIfAgen(ifAgen);
actor.setConsignUserId(consignUserId);
actParticipator.add(actor);
}
if(maxActInstId>0){
//修改指定活动实例id所产生工作项的得参与者,并取得要保存的工作项关联信息
relList=this.modifyWorkItemParticipator(sunflowClient,businessId,
workItemCtx.getWorkItemName(),currWorkItemId,
workItemCtx.getProInstanceID(),maxActInstId,toActMethod,
actParticipator,workItemTimeList);
}
return relList;
}
finally{
WorkflowSession.deleteSunflowClient(userInfo);
}
}
/**
* 结束节点处理
* @param currWorkItemId 当前工作项id
* @param toActId 产生工作项的活动定义id
* @param toActMethod int 选定的活动办理方式(1推,2拉)
* @return List 由LaWorkItemRel组成的list
*/
private List doEndNode(String businessId,long currWorkItemId,long toActId,
int toActMethod,List workItemTimeList)
throws Exception{
logger.info("begin doEndNode...");
SunflowClient sunflowClient=WorkflowSession.getSunflowClient(userInfo);
List relList=new ArrayList();
try{
//取得当前工作项信息
WorkItemContext workItemCtx=sunflowClient.findWorkItem(currWorkItemId);
//如果当前流程实例已经完成
if(workItemCtx.getProInstanceState()==5){
ProcessInstanceContext proCtx=sunflowClient.findProcessInstance(
workItemCtx.getProInstanceID());
//如果该流程实例为子流程
if(proCtx.getSubflowContextID()>0){
ParentProcessContext ppCtx=sunflowClient.
findParentProcessBySubflowProcID(proCtx.getSubflowContextID());
if(ppCtx!=null){
//取得父流程实例信息
ProcessInstanceContext parentProCtx=sunflowClient.
findProcessInstance(ppCtx.getParentProcInstID());
//如果流程处于激活状态
if(parentProCtx!=null&&parentProCtx.getInstanceState()==1){
WorkItemContextCollection wkiCtxCol=sunflowClient.
listWorkitemByProInstID(parentProCtx.getProInstanceID());
for(int i=0;i<wkiCtxCol.size();i++){
//如果产生的工作项状态为1,2,3,且id值比当前工作项大
if(wkiCtxCol.get(i)!=null&&wkiCtxCol.get(i).getState()<4&&
wkiCtxCol.get(i).getWorkItemID()>currWorkItemId){
//取得工作项关联信息
WfWorkItemRel itemRel=new WfWorkItemRel();
itemRel.setFromActivityName(workItemCtx.getWorkItemName());
itemRel.setFromItemId(currWorkItemId);
itemRel.setFromProInstId(workItemCtx.getProInstanceID());
itemRel.setFromUserId(userInfo.getUserId());
itemRel.setToActivityName(wkiCtxCol.get(i).getWorkItemName());
itemRel.setToItemId(wkiCtxCol.get(i).getWorkItemID());
itemRel.setToProInstId(wkiCtxCol.get(i).getProInstanceID());
relList.add(itemRel);
//保存工作项办理期限信息
WfWorkitemProcessTime pro=new WfWorkitemProcessTime();
pro.setWorkitemId(wkiCtxCol.get(i).getWorkItemID());
workItemTimeList.add(pro);
}
}
}
}
}
}
return relList;
}
finally{
WorkflowSession.deleteSunflowClient(userInfo);
}
}
/**
* 取出要返回活动的办理人
* @param workitemId 当前流程实例id
* @param returnToActId 要返回的活动定义id
* @return String
* @throws Exception
*/
private String getReturnActor(long proInstId,long returnToActId)
throws Exception{
logger.info("begin getReturnActor...");
ProcessWorkflowDAO dao=new ProcessWorkflowDAO();
return dao.getReturnActor(proInstId,returnToActId);
}
/**
* 修改指定活动实例id所产生工作项的得参与者,并取得要保存的工作项关联信息
* @param businessId 申诉登记号
* @param currWorkItemName 当前工作项名称
* @param currWorkItemId 当前工作项id
* @param currProInstId 当前流程实例id
* @param toActInstId 选定的活动实例id
* @param toActMethod 选定的活动办理方式(1推,2拉)
* @param actParticipator 参与者
* @throws Exception
* @return 由LaWorkItemRel组成的list
*/
public List modifyWorkItemParticipator(SunflowClient sunflowClient,
String businessId,String currWorkItemName,long currWorkItemId,
long currProInstId,long toActInstId,int toActMethod,List actParticipator,
List workItemTimeList)
throws Exception{
logger.info("begin modifyWorkItemParticipator...");
List relList=new ArrayList();
WorkItemContextCollection workItemCtxClt=sunflowClient.
listWorkItemsByActInsID(toActInstId);
if(workItemCtxClt!=null&&workItemCtxClt.size()>0){
//取得工作项关联信息
for(int i=0;i<workItemCtxClt.size();i++){
WorkItemContext toWorkItemCtx=workItemCtxClt.get(i);
WfWorkItemRel itemRel=new WfWorkItemRel();
itemRel.setFromActivityName(currWorkItemName);
itemRel.setFromItemId(currWorkItemId);
itemRel.setFromProInstId(currProInstId);
itemRel.setFromUserId(userInfo.getUserId());
itemRel.setToActivityName(toWorkItemCtx.getWorkItemName());
itemRel.setToItemId(toWorkItemCtx.getWorkItemID());
itemRel.setToProInstId(toWorkItemCtx.getProInstanceID());
relList.add(itemRel);
//保存工作项办理期限信息
WfWorkitemProcessTime pro=new WfWorkitemProcessTime();
pro.setWorkitemId(toWorkItemCtx.getWorkItemID());
workItemTimeList.add(pro);
}
WfWorkItemRel itemRel=new WfWorkItemRel();
itemRel.setFromActivityName("");
itemRel.setFromItemId(0);
itemRel.setFromProInstId(currProInstId);
itemRel.setFromUserId(userInfo.getUserId());
itemRel.setToActivityName(currWorkItemName);
itemRel.setToItemId(currWorkItemId);
itemRel.setToProInstId(currProInstId);
relList.add(itemRel);
//保存工作项办理期限信息
WfWorkitemProcessTime pro1=new WfWorkitemProcessTime();
pro1.setWorkitemId(currWorkItemId);
workItemTimeList.add(pro1);
//设定参与者
logger.info("toActMethod is:"+toActMethod);
if(actParticipator!=null){
logger.info("actParticipator is:"+actParticipator);
//推的方式
if(toActMethod==WorkflowConstant.ACTIVITY_METHOD_PUSH){
//设定推方式的参与者
HashMap agenMap=this.modifyPushTypeWorkitemParticipator(sunflowClient,
workItemCtxClt,actParticipator);
//设置代理信息
if(agenMap!=null&&agenMap.size()>0&&relList!=null&&relList.size()>0){
for(int l=0;l<relList.size();l++){
WfWorkItemRel rel=(WfWorkItemRel)relList.get(l);
Object consignUserId=agenMap.get(Long.toString(rel.getToItemId()));
if(consignUserId!=null){
rel.setIfConsign(true);
rel.setConsignId((String)consignUserId);
}
}
}
}
//拉的方式
else if(toActMethod==WorkflowConstant.ACTIVITY_METHOD_PULL){
//设定拉方式的参与者
this.modifyPullTypeWorkitemParticipator(businessId,toActInstId,
workItemCtxClt,actParticipator);
}
}
}
return relList;
}
/**
* 设定拉方式toActInstId确定的工作项的参与者
* @param businessId 申诉登记号
* @param sunflowClient
* @param toActInstId 指定的活动实例id
* @param actParticipator
* @return List
*/
private void modifyPullTypeWorkitemParticipator(String businessId,
long toActInstId,WorkItemContextCollection workItemCtxClt,
List actParticipator)
throws Exception{
logger.info("begin modifyPullTypeWorkitemParticipator...");
if(actParticipator!=null&&actParticipator.size()>0){
StringBuffer sbUser=new StringBuffer();
StringBuffer sbOrg=new StringBuffer();
StringBuffer sbRole=new StringBuffer();
/*直接更新修改更新活动、工作项的变量数据的功能暂时去掉
//封装组合参与者字符串
this.AssembleActorString(businessId,actParticipator,sbUser,sbOrg,sbRole);
//将变量值更新到数据库
//封装组合更新活动实例相关数据
List newActDataList=new ArrayList();
List oldActDataList=new ArrayList();
this.AssembleActiInsReleUpdateData(toActInstId,areaId,sbUser.toString(),
sbOrg.toString(),sbRole.toString(),newActDataList,oldActDataList);
if(newActDataList!=null&&newActDataList.size()>0&&oldActDataList!=null&&
oldActDataList.size()>0){
//修改参数变量值
ActiInsReleDataDAO dao=new ActiInsReleDataDAO();
dao.update(newActDataList,oldActDataList);
}
//封装组合更新工作项相关数据
List newWkDataList=new ArrayList();
List oldWkDataList=new ArrayList();
this.AssembleWorkItemInsReleUpdateData(areaId,sbUser.toString(),
sbOrg.toString(),sbRole.toString(),workItemCtxClt,newWkDataList,
oldWkDataList);
if(newWkDataList!=null&&newWkDataList.size()>0&&oldWkDataList!=null&&
oldWkDataList.size()>0){
//修改参数变量值
WorkItemReleDataDAO dao=new WorkItemReleDataDAO();
dao.update(newWkDataList,oldWkDataList);
}
*/
}
}
/**
* 封装组合参与者字符串
* @param businessId String
* @param areaId String
* @param actParticipator List
*/
private void assembleActorString(String businessId,List actParticipator,
StringBuffer sbUser,StringBuffer sbOrg,StringBuffer sbRole)
throws Exception{
//取得行政区id
logger.info("begin AssembleActorString...");
//String areaId=baseDAO.getCaseAreaIdByRegisterId(businessId);
String areaId="02";
//临时测试数据
if(areaId==null||areaId.equals("")){
areaId="02";
}
String userIds="";
String orgIds="";
String roleIds="";
for(int i=0;i<actParticipator.size();i++){
Participator actor=(Participator)actParticipator.get(i);
if(actor.getType().equals("user")){
//目前只支持设定一个用户
userIds=actor.getId();
}
else if(actor.getType().equals("org")){
//将按org-role-fixed的类型转化为role
if(actor.getRoleId()!=null&&!actor.getRoleId().equals("")&&
!actor.getRoleId().equals("0")){
roleIds=roleIds+","+actor.getRoleId()+":"+actor.getId();
}
else{
orgIds=orgIds+","+actor.getId()+":"+actor.getParentId();
}
}
else if(actor.getType().equals("role")){
roleIds=roleIds+","+actor.getId()+":"+actor.getParentId();
}
}
if(orgIds!=null&&orgIds.length()>0){
//去掉“,”
orgIds=orgIds.substring(1);
orgIds="varActor;org;"+areaId+";"+orgIds;
}
if(roleIds!=null&&roleIds.length()>0){
//去掉“,”
roleIds=roleIds.substring(1);
roleIds="varActor;role;"+areaId+";"+roleIds;
}
logger.info("userIds is:"+userIds+" orgIds is:"+orgIds+" roleIds is:"+
roleIds);
sbUser.append(userIds);
sbRole.append(roleIds);
sbOrg.append(orgIds);
}
/**
* 封装组合更新数据
* @param toActInstId String
* @param userIds String
* @param orgIds String
* @param roleIds String
* @param newDataList List
* @param oldDataList List
*/
private void assembleActiInsReleUpdateData(long toActInstId,String areaId,
String userIds,String orgIds,String roleIds,List newDataList,
List oldDataList){
logger.info("begin AssembleActiInsReleUpdateData...");
ActiInsReleData oldData=new ActiInsReleData();
ActiInsReleData newData=new ActiInsReleData();
//设置变量值,格式为:varActor;[user,role,org];areaId;[id1:parentid1,id2:parentid2,id3:parentid3]
if(userIds!=null&&userIds.length()>0){
oldData.setAirAtiId(toActInstId);
oldData.setAirVariableName("actUserActor");
newData.setAirStringValue(userIds);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?