private void doApprove(ParamsTable params, FlowStateRT instance, String currNodeId, String[] nextNodeIds,
String flowOption, String comment, Environment evt, WebUser user, boolean updateDocument) throws Exception {
NotificationProcess notificationProcess = new NotificationProcessBean(getApplicationId());
PendingProcess pendingProcess = new PendingProcessBean(getApplicationId());
DocumentProcess docProcess = (DocumentProcess) ProcessFactory.createRuntimeProcess(DocumentProcess.class,
getApplicationId());
try {
beginTransaction();
// Document doc = instance.getDocument();
Document origDoc = (Document) instance.getDocument().clone();
// 出错后要处理
instance.getDocument().setAuditdate(new Date());
instance.setAuditdate(new Date());
instance.getDocument().setAudituser(user.getId());
instance.setAudituser(user.getId());
instance.getDocument().setLastFlowOperation(flowOption);
instance.setLastFlowOperation(flowOption);
instance.getDocument().setLastmodifier(user.getId());
// 为批量审批时添加审批备注_attitude。 add by by dolly 2011-3-10
if (comment == null || comment.equals("")) {
comment = params.getParameterAsString("_attitude");
}
// 处理提交或回退提醒
if (!flowOption.equals(FlowType.START2RUNNING) && !flowOption.equals(FlowType.SUSPEND2RUNNING)
&& !flowOption.equals(FlowType.AUTO2RUNNING)) {
notificationProcess.notifySender(origDoc, instance.getFlowVO(), user); // 送出提醒
}
StateMachine.doFlow(params, instance, currNodeId, nextNodeIds, user, flowOption, comment, evt);
HttpServletRequest request = ServletActionContext.getRequest();
String username = (String) request.getSession().getAttribute("workFlowUserName");
String userid = (String) request.getSession().getAttribute("workFlowUserId");
request.getSession().removeAttribute("workFlowUserName");
request.getSession().removeAttribute("workFlowUserId");
//System.out.println("aaaa:" + username);
//System.out.println("aaaa:" + userid);
if(!"".equals(username) && username!=null && !"".equals(userid) && userid !=null){
String aid = instance.getAuditorList();
aid = aid.split(":")[0];
aid = aid.replace("{", "").replace("\"", "");
//String auditorList = "{\"" + aid + "\":[\"" + userid + "\"]}";
String [] uIds = userid.split("##");
String auditorList = "{\"" + aid + "\":[";
for(int i =0;i<uIds.length;i++){
if(i==(uIds.length-1)){
auditorList += "\"" + uIds[i] + "\"";
}else{
auditorList += "\"" + uIds[i] + "\",";
}
}
auditorList += "]}" ;
instance.setAuditorList(auditorList);
instance.setAuditorNames(username);
}
if (updateDocument) {
docProcess.doCreateOrUpdate(instance.getDocument(), user);
PendingVO pending = (PendingVO) pendingProcess.findByDocIdAndFlowStateRtId(instance.getDocument().getId(),instance.getId());
//推送待办通知到Openfire服务器
sendNotification2Openfire(instance.getDocument(),nextNodeIds,user);
//推送当前角色
String[] curr = {PendingNotification.CURRENT_USER};
sendNotification2Openfire(instance.getDocument(),curr,user);
if (flowOption.equals(FlowType.RUNNING2RUNNING_NEXT) || flowOption.equals(FlowType.START2RUNNING)
|| flowOption.equals(FlowType.AUTO2RUNNING)) {
boolean neednotifyCurrentAuditors = true;
for (Iterator<NodeRT> iterator = instance.getNoderts().iterator(); iterator
.hasNext();) {
NodeRT nodeRT = iterator.next();
if(nodeRT.getNodeid().equals(currNodeId)){//会签节点,还没有提交到下一节点,则不发送达到提醒
neednotifyCurrentAuditors = false;
break;
}
}
if(neednotifyCurrentAuditors){
notificationProcess.notifyCurrentAuditors(instance.getDocument(), pending, instance.getFlowVO(),user, currNodeId, nextNodeIds); // 到达提醒
}
} else if (flowOption.equals(FlowType.RUNNING2RUNNING_BACK)) {
notificationProcess.notifyRejectees(instance.getDocument(), pending, instance.getFlowVO(), params, user); // 回退提醒
}
}
commitTransaction();
/*// 启动自动审批任务
for (int i = 0; i < nextNodeIds.length; i++) {
if(!StringUtil.isBlank(nextNodeIds[i])){
AutoAuditJobManager.startJob(instance,nextNodeIds[i]);
}
}*/
if (!StringUtil.isBlank(instance.getAsyncSubFlowNodeId())) {
asynchronous2Next(instance.getId(), instance.getAsyncSubFlowNodeId(), new ParamsTable(), user);
}
} catch (Exception e) {
rollbackTransaction();
if(!(e instanceof WorkflowException) && !(e instanceof ValidationException)){
e.printStackTrace();
}
throw e;
}
} |