package com.norteksoft.wf.engine.web; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Required; import com.norteksoft.acs.entity.organization.User; import com.norteksoft.acs.service.AcsUtils; import com.norteksoft.acs.service.organization.UserManager; import com.norteksoft.acs.web.authorization.JsTreeUtil1; import com.norteksoft.mms.form.entity.FormView; import com.norteksoft.mms.form.service.FormViewManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.PropUtils; import com.norteksoft.product.web.struts2.CrudActionSupport; import com.norteksoft.product.web.struts2.Struts2Utils; import com.norteksoft.task.base.enumeration.TaskProcessingMode; import com.norteksoft.task.base.enumeration.TaskSource; import com.norteksoft.task.base.enumeration.TaskState; import com.norteksoft.task.base.enumeration.TaskProcessingResult; import com.norteksoft.task.entity.TaskSetting; import com.norteksoft.task.entity.WorkflowTask; import com.norteksoft.wf.base.enumeration.CompleteTaskTipType; import com.norteksoft.wf.base.exception.DecisionException; import com.norteksoft.wf.base.exception.TransactorAssignmentException; import com.norteksoft.wf.engine.entity.Opinion; import com.norteksoft.wf.engine.entity.Temp; import com.norteksoft.wf.engine.entity.WorkflowDefinition; import com.norteksoft.wf.engine.entity.WorkflowInstance; import com.norteksoft.wf.engine.service.TaskService; import com.norteksoft.wf.engine.service.WorkflowDefinitionManager; import com.norteksoft.wf.engine.service.WorkflowInstanceManager; import com.norteksoft.wf.engine.service.WorkflowRightsManager; @Namespace("/engine") @ParentPackage("default") @Results( { @Result(name = CrudActionSupport.RELOAD, location = "task", type = "redirectAction"), @Result(name = "toAssignTransactor", location = "task!assignTransactor", type = "redirectAction"), @Result(name = "assign", location = "task-assign.jsp", type = "dispatcher"), @Result(name = "choiceUrl", location = "task-choiceUrl.jsp", type = "dispatcher") }) public class TaskAction extends CrudActionSupport<WorkflowTask>{ private Log log = LogFactory.getLog(TaskAction.class); private static final long serialVersionUID = 1L; private static final String URGENCY = "urgency"; private static final String SAVE = "save"; private WorkflowInstanceManager workflowInstanceManager; private WorkflowDefinitionManager workflowDefinitionManager; private WorkflowRightsManager workflowRightsManager; private FormViewManager formViewManager; private AcsUtils acsUtils; private Long taskId; private String retrieveResult; private WorkflowTask task; private TaskProcessingResult transact; private String formHtml; private String[] targetNames; private String[] targetTransactors; //修改的目标办理人 private Map<String[], List<String[]>> candidates; private String requiredFields; private String workflowId; private WorkflowInstance workflowInstance; private List<Opinion> opinions ; private String opinion; private Long companyId; private List<Temp> temps; private List<WorkflowTask> taskList; private List<String> transactors = new ArrayList<String>(); private List<Long> ids = new ArrayList<Long>(); private String processId; private Boolean view=false; //查看意见的权限 private Boolean edit=false; //编辑意见的权限 private Boolean must=false; //意见必填 private String username; private String rtxSessionKey; private String rtxsIp; private Long dataId; private Long formId; private String fieldPermission; //字段的编辑权限 private String transactor; private String backto; private List<String> canBackTo; private boolean moreTransactor; private Map<String,String> canChoiceTaches; private Map<String,String> canChoiceTransactor = new HashMap<String,String>(); private UserManager userManager; private String transitionName; private String newTransactor; private String nullAssignmentException; private Long wfdId; private List<String[]> transitionNames; private String messageTip; private String canChoiceTransacators="";//登录名,用户名;登录名,用户名;登录名,用户名;...的格式 private String position;//流程监控或者"流程定义/流程监控" private String definitionCode;//流程定义编码 private Long type = 0l;//流程类型id private Integer transactorNum=0;//办理人数目 private Long instanceId; private boolean forkTask;//当前任务是否是并发任务 private boolean hasActivitySubProcess;//当前环节是否是子流程 private String instanceIds; private String workflowIds; @Autowired public void setUserManager(UserManager userManager) { this.userManager = userManager; } @Autowired public void setAcsUtils(AcsUtils acsUtils) { this.acsUtils = acsUtils; } public void setBackto(String backto) { this.backto = backto; } public String getBackto() { return backto; } public List<String> getCanBackTo() { return canBackTo; } /** * 环节跳转/选择环节 * @return * @throws Exception */ public String backView() throws Exception{ workflowInstance=workflowInstanceManager.getWorkflowInstance(instanceId); if(workflowInstance!=null)wfdId=workflowInstance.getWorkflowDefinitionId(); workflowId = workflowInstance.getProcessInstanceId(); boolean isForkTask = taskService.isForkTask(workflowId); if(!isForkTask){//当前任务是分支汇聚任务时不让跳转 canBackTo = taskService.getTaskNames(workflowId); }else{ canBackTo = new ArrayList<String>(); } ApiFactory.getBussinessLogService().log("流程监控", "环节跳转选择环节页面", ContextUtils.getSystemId("wf")); return "goback"; } /** * 环节跳转功能 * @return * @throws Exception */ public String goback() throws Exception{ String msg = "任务跳转成功"; try { CompleteTaskTipType result=null; workflowInstance=workflowInstanceManager.getWorkflowInstance(workflowId); result=taskService.taskJump(workflowInstance, backto,transactors,null); switch(result){ case OK: msg="OK"; break; case RETURN_URL: msg="RETURN_URL"; break; case SINGLE_TRANSACTOR_CHOICE: User temp; for(String tran : result.getCanChoiceTransactor()){ temp = userManager.getUserByLoginName(tran); if(temp!=null)canChoiceTransacators=canChoiceTransacators+tran+","+temp.getName()+";"; } msg="SINGLE_TRANSACTOR_CHOICE"; case MESSAGE: msg=result.getContent(); } }catch (Exception e) { PropUtils.getExceptionInfo(e); msg="环节跳转失败"; } ApiFactory.getBussinessLogService().log("流程监控", "执行环节跳转", ContextUtils.getSystemId("wf")); renderText(msg+"="+canChoiceTransacators); return null; } /** * 批量环节跳转/选择环节 * @return * @throws Exception */ @Action("task-volumeBackView") public String volumeBackView() throws Exception{ String[] str=instanceIds.split(","); workflowIds=""; for(String s:str){ workflowInstance=workflowInstanceManager.getWorkflowInstance(Long.valueOf(s)); if(workflowInstance!=null)wfdId=workflowInstance.getWorkflowDefinitionId(); workflowId = workflowInstance.getProcessInstanceId(); boolean isForkTask = taskService.isForkTask(workflowId); if(!isForkTask){//当前任务是分支汇聚任务时不让跳转 List<String> temp = taskService.getTaskNames(workflowId); if(temp!=null&&temp.size()>0){ if(StringUtils.isNotEmpty(workflowIds)){ workflowIds+=","; } canBackTo=temp; workflowIds+=workflowId; } }else{ break; } } if(canBackTo==null){ canBackTo = new ArrayList<String>(); } ApiFactory.getBussinessLogService().log("流程监控", "批量环节跳转选择环节页面", ContextUtils.getSystemId("wf")); return SUCCESS; } /** * 批量环节跳转功能 * @return * @throws Exception */ @Action("task-volumeBack") public String volumeBack() throws Exception{ String msg = "任务跳转成功"; try { CompleteTaskTipType result=null; String[] wfids=workflowIds.split(","); for(String workflowId:wfids){ workflowInstance=workflowInstanceManager.getWorkflowInstance(workflowId); result=taskService.taskJump(workflowInstance, backto,transactors,"volumeBack"); } switch(result){ case OK: msg="OK"; break; case RETURN_URL: msg="RETURN_URL"; break; case MESSAGE: msg=result.getContent(); } }catch (Exception e) { PropUtils.getExceptionInfo(e); msg="环节跳转失败"; } ApiFactory.getBussinessLogService().log("流程监控", "执行批量环节跳转", ContextUtils.getSystemId("wf")); renderText(msg); return null; } /** * 环节跳转选择办理人页面 * 上一环节办理人指定 * @return * @throws Exception */ public String taskJumpAssignTransactor()throws Exception { return "assignTransactor"; } /** * 环节跳转选择办理人页面 * 选择办理人/条件选择/人工选择办理人页面 * @return * @throws Exception */ public String taskJumpChoiceTransactor()throws Exception { String[] infos=canChoiceTransacators.split(";"); for(String info:infos){ String[] strs=info.split(","); canChoiceTransactor.put(strs[0], strs[1]); } return "taskJumpChoiceTransactor"; } /** * 批量环节跳转选择办理人页面 * 上一环节办理人指定 * @return * @throws Exception */ @Action("task-taskJumpAssignTransactorVolume") public String taskJumpAssignTransactorVolume()throws Exception { return "task-assignTransactorVolume"; } /** * 意见 * @return * @throws Exception */ public String opinion() throws Exception { //workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); //authority(workflowInstance.getProcessDefinitionId(),task.getName()); //if(view){ //opinions = workflowInstanceManager.getOpinionsByInstanceId(workflowInstance.getProcessInstanceId(),companyId); //} if(taskId==null){ view = true; }else{ task = taskService.getWorkflowTask(taskId); if(task.getActive()==2){ edit = false; } } workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); opinions=workflowInstanceManager.getOpinions(taskId, task.getCompanyId()); if(workflowRightsManager.mustOpinionRight(task) && (opinions==null || opinions.size()<=0) ){ must=true; }else{ must=false; } companyId = ContextUtils.getCompanyId(); ApiFactory.getBussinessLogService().log("流程汇编", "意见列表", ContextUtils.getSystemId("wf")); return "opinion"; } /** * 保存审批结果 */ public String saveOpinion() throws Exception { workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); Opinion opi = new Opinion(); opi.setTransactor(ContextUtils.getUserName()); opi.setCreatedTime(new Date()); opi.setOpinion(opinion); opi.setWorkflowId(workflowInstance.getProcessInstanceId()); opi.setCompanyId(ContextUtils.getCompanyId()); opi.setTaskId(taskId); workflowInstanceManager.saveOpinion(opi); ApiFactory.getBussinessLogService().log("流程汇编", "保存意见", ContextUtils.getSystemId("wf")); return opinion(); } public String editOpinion(){ return "editOpinion"; } /** * 我的任务列表(未完成) */ @Override public String list() throws Exception { ApiFactory.getBussinessLogService().log("工作流平台", "我的任务列表(未完成)列表", ContextUtils.getSystemId("wf")); return SUCCESS; } /** * 我的任务列表(已完成) */ public String completed() throws Exception{ ApiFactory.getBussinessLogService().log("工作流平台", "我的任务列表(已完成)列表", ContextUtils.getSystemId("wf")); return "completed"; } private TaskService taskService; @Required public void setTaskService(TaskService taskService) { this.taskService = taskService; } /** * 处理任务 */ @Override public String input() throws Exception { log.debug("*** input 处理任务方法开始"); log.debug(new StringBuilder("*** Received parameter:[") .append("task:").append(task) .append("]").toString()); taskService.updateTaskIsRead(task); workflowId = task.getProcessInstanceId(); workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); opinions=workflowInstanceManager.getOpinions(taskId, task.getCompanyId()); if(workflowRightsManager.mustOpinionRight(task) && (opinions==null || opinions.size()<=0) ){ must=true; } StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(workflowInstance.getDataId()).append("\"/>"); formHtml = workflowInstanceManager.getHtml(workflowInstance, task); formHtml = builder.toString() + formHtml; if(TaskState.COMPLETED.getIndex().equals(task.getActive())||TaskState.CANCELLED.getIndex().equals(task.getActive())){ //列表控件控制 formHtml= workflowInstanceManager.getFormHtml(workflowInstance, formHtml,workflowInstance.getDataId(),false,false); fieldPermission = workflowRightsManager.getFieldPermission(false); }else if(TaskState.WAIT_CHOICE_TACHE.getIndex().equals(task.getActive())){ canChoiceTaches = taskService.isNeedChoiceTache(task).getCanChoiceTaches(); return choiceTache(); }else{ //列表控件控制 formHtml= workflowInstanceManager.getFormHtml(workflowInstance, formHtml,workflowInstance.getDataId(),true,false); fieldPermission = workflowRightsManager.getFieldPermission(task); } ApiFactory.getBussinessLogService().log("工作流管理", "任务办理页面", ContextUtils.getSystemId("wf")); log.debug("*** input 处理任务方法结束"); return INPUT; } /* * 领取任务 * */ public String receive() throws Exception { ApiFactory.getBussinessLogService().log("工作流管理", "领取任务", ContextUtils.getSystemId("wf")); return this.renderText(taskService.receive(taskId)); } /* * 放弃领取的任务 */ public String abandonReceive() throws Exception { ApiFactory.getBussinessLogService().log("工作流管理", "放弃领取的任务", ContextUtils.getSystemId("wf")); return this.renderText(taskService.abandonReceive(taskId)); } /** * 查看已完成任务 */ public String view() throws Exception { log.debug("*** view 方法开始"); log.debug(new StringBuilder("*** Received parameter:[") .append("task:").append(task) .append("]").toString()); return preView("view"); } private String preView(String operate){ log.debug("*** preView 方法开始"); log.debug(new StringBuilder("*** Received parameter:[") .append("task:").append(task) .append("]").toString()); workflowInstance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId()); workflowId = task.getProcessInstanceId(); StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(workflowInstance.getDataId()).append("\"/>"); FormView form = formViewManager.getFormView(workflowInstance.getFormId()); formHtml =workflowInstanceManager.setValueForHtml(workflowInstance, form,form.getHtml()); formHtml = builder.toString() + formHtml; if(SAVE.equals(operate)){ formHtml= workflowInstanceManager.getFormHtml(workflowInstance, formHtml,workflowInstance.getDataId(),true,false); fieldPermission = workflowRightsManager.getFieldPermission(task); }else{ formHtml= workflowInstanceManager.getFormHtml(workflowInstance, formHtml,workflowInstance.getDataId(),false,false); fieldPermission = workflowRightsManager.getFieldPermission(false); } ApiFactory.getBussinessLogService().log("工作流管理", "查看已完成任务", ContextUtils.getSystemId("wf")); log.debug("*** preView 方法结束"); return "view"; } public void prepareSaveForm() throws Exception { if(taskId != null){ task = taskService.getWorkflowTask(taskId); }else { task = new WorkflowTask(); } } /** * 保存表单 */ public String saveForm() throws Exception { workflowInstanceManager.saveFormData(taskId); ApiFactory.getBussinessLogService().log("工作流管理", "保存表单", ContextUtils.getSystemId("wf")); this.addSuccessMessage("任务已保存"); return input(); } /** * 只保存数据,与流程无关 * @return * @throws Exception */ public String savaData() throws Exception { dataId = workflowInstanceManager.savaData(); ApiFactory.getBussinessLogService().log("工作流管理", "保存数据", ContextUtils.getSystemId("wf")); return null; } /** * 提交表单 */ public String submit() throws Exception{ log.debug("*** submit 方法开始"); log.debug(new StringBuilder("*** Received parameter:[") .append("taskId:").append(taskId) .append("]").toString()); task = taskService.getWorkflowTask(taskId); String to = ""; CompleteTaskTipType result = workflowInstanceManager.submitForm(task); switch(result){ case OK: this.addSuccessMessage(result.getContent()); to = input(); break; case MESSAGE: this.addErrorMessage(result.getContent()); to = INPUT; break; case RETURN_URL: to = assignTransactor(); break; case TACHE_CHOICE_URL: canChoiceTaches = result.getCanChoiceTaches(); to = choiceTache(); break; } ApiFactory.getBussinessLogService().log("工作流管理", "提交表单", ContextUtils.getSystemId("wf")); return to; } public void prepareChoiceTache() throws Exception { this.prepareModel(); } @Action(value = "taskchoiceTache") public String choiceTache() throws Exception{ if(canChoiceTaches==null){ canChoiceTaches = taskService.isNeedChoiceTache(task).getCanChoiceTaches(); } ApiFactory.getBussinessLogService().log("工作流管理", "选择环节页面", ContextUtils.getSystemId("wf")); return "choiceUrl"; } public void prepareSaveChoice() throws Exception { this.prepareModel(); } public String saveChoice() throws Exception{ CompleteTaskTipType completeTaskTipType = taskService.completeTacheChoice(taskId,transitionName); this.addSuccessMessage(completeTaskTipType.getContent()); ApiFactory.getBussinessLogService().log("工作流管理", "完成选择环节", ContextUtils.getSystemId("wf")); return input(); } public void prepareChoiceTachePop() throws Exception { this.prepareModel(); } public String choiceTachePop() throws Exception{ if(canChoiceTaches==null){ canChoiceTaches = taskService.isNeedChoiceTache(task).getCanChoiceTaches(); } ApiFactory.getBussinessLogService().log("工作流管理", "弹出选择环节页面", ContextUtils.getSystemId("wf")); return "choiceUrlPop"; } public void prepareSaveChoicePop() throws Exception { this.prepareModel(); } public String saveChoicePop() throws Exception{ CompleteTaskTipType completeTaskTipType = taskService.completeTacheChoice(taskId,transitionName); String to = ""; switch(completeTaskTipType){ case OK: to = "OK:"+completeTaskTipType.getContent(); break; case MESSAGE: to = "MS:"+completeTaskTipType.getContent(); break; case RETURN_URL: String url = completeTaskTipType.getContent(); if(url.equals(TaskService.DEFAULT_URL)) url = url + "?taskId="+task.getId(); to = "RU:"+url; break; case TACHE_CHOICE_URL: to = "TC:"+completeTaskTipType.getContent(); break; } ApiFactory.getBussinessLogService().log("工作流管理", "完成选择环节任务", ContextUtils.getSystemId("wf")); this.renderText(to); return null; } @SuppressWarnings("unchecked") public String start() throws Exception{ log.debug("*** start 方法开始"); log.debug(new StringBuilder("*** Received parameter:[") .append("processId:").append(processId) .append("]").toString()); WorkflowDefinition wdf = workflowDefinitionManager.getWorkflowDefinitionByProcessId(processId); String wfdName = wdf.getName(); String url = Struts2Utils.getRequest().getRequestURL().toString().replaceFirst("task!start", "task!input"); Map<String,String> urlMap = new HashMap<String,String>(); urlMap.put(wfdName, url); Integer priority = 6; Map<String, String[]> parameterMap = Struts2Utils.getRequest().getParameterMap(); String[] urgency = parameterMap.get(URGENCY); if(urgency!=null&&urgency.length>0&&StringUtils.isNotEmpty(urgency[0])) priority = Integer.valueOf(urgency[0]); String to = ""; CompleteTaskTipType result = workflowInstanceManager.startAndSubmitWorkflow(processId, urlMap,priority,null); switch(result){ case OK: this.addSuccessMessage(result.getContent()); to = null; break; case MESSAGE: this.addErrorMessage(result.getContent()); to = null; break; case RETURN_URL: to = assignTransactor(); break; } ApiFactory.getBussinessLogService().log("工作流管理", "发起流程", ContextUtils.getSystemId("wf")); return to; } /** * 保存任务 */ @Override public String save() throws Exception { log.debug("*** save 办理任务方法开始"); log.debug(new StringBuilder("*** Received parameter:[") .append("task:").append(task) .append("]").toString()); ApiFactory.getBussinessLogService().log("工作流管理", "保存任务", ContextUtils.getSystemId("wf")); //如果为分发环节,指定被分发人 if(TaskProcessingMode.TYPE_DISTRIBUTE.toString().equals(task.getProcessingMode().toString())){ return "distribute"; } //如果为交办环节,指定被交办人 if(task.getActive()==0 && TaskProcessingMode.TYPE_ASSIGN.toString().equals(task.getProcessingMode().toString())){ moreTransactor = true; workflowInstanceManager.saveData(task, null); return "assignTree"; } //如果已经办理但没有指定办理人 if(task.getActive()==1&& task.getProcessingMode()!=TaskProcessingMode.TYPE_ASSIGN){ return assignTransactor(); } String to = ""; try{ CompleteTaskTipType result = taskService.completeWorkflowTaskAndSaveData(task, transact,TaskSetting.getTaskSettingInstance().setTransitionName(transitionName).setAssignmentTransactors(newTransactor)); switch(result){ case OK: this.addSuccessMessage(result.getContent()); to = input(); break; case MESSAGE: this.addErrorMessage(result.getContent()); to = INPUT; break; case RETURN_URL: to = assignTransactor(); break; case TACHE_CHOICE_URL: addActionMessage("请选择环节"); canChoiceTaches = result.getCanChoiceTaches(); to = choiceTache(); break; case SINGLE_TRANSACTOR_CHOICE: User temp; for(String tran : result.getCanChoiceTransactor()){ temp = userManager.getUserByLoginName(tran); if(temp!=null)canChoiceTransactor.put(tran, temp.getName()); } moreTransactor=CompleteTaskTipType.SINGLE_TRANSACTOR_CHOICE.getContent().equals("true"); to = "singleTransactorChoice"; } }catch (TransactorAssignmentException e) { nullAssignmentException="下一环节没有办理人,请指定!"; return "assignmentTree"; }catch(DecisionException de){ transitionNames=de.getTransitionNames(); messageTip=de.getMessage(); messageTip=getText(messageTip); return input(); } return to; } public void prepareCompleteChoiceTransactor() throws Exception{ prepareModel(); } public String completeChoiceTransactor() throws Exception { taskService.completeChoiceTransactor(taskId,transactors); ApiFactory.getBussinessLogService().log("工作流管理", "指定办理人", ContextUtils.getSystemId("wf")); addActionMessage("办理人指定成功!"); return input(); } /** * 完成分发 * @return * @throws Exception */ public String distribute() throws Exception{ CompleteTaskTipType completeTaskTipType = taskService.completeDistributeTask(taskId, transactors); if(CompleteTaskTipType.RETURN_URL==completeTaskTipType){ return assignTransactor(); }else{ this.addSuccessMessage(completeTaskTipType.getContent()); task = taskService.getWorkflowTask(taskId); ApiFactory.getBussinessLogService().log("工作流管理", "完成分发任务", ContextUtils.getSystemId("wf")); return input(); } } /** * 指定办理人 */ @Action(value = "taskassign") public String assignTransactor() throws Exception{ String to = INPUT; if(task.getId()==null){ this.addErrorMessage("非法的任务"); }else{ WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId()); CompleteTaskTipType result = taskService.isNeedAssigningTransactor(instance, task); if(result==null){ result=taskService.isSubProcessNeedChoiceTransactor(task); } switch(result){ case OK: this.addSuccessMessage(result.getContent()); to = input(); break; case MESSAGE: this.addErrorMessage(result.getContent()); to = INPUT; break; case RETURN_URL: candidates = taskService.getNextTasksCandidates(task); this.addErrorMessage("请选择办理人"); to = "assign"; break; case TACHE_CHOICE_URL: addActionMessage("请选择环节"); canChoiceTaches = result.getCanChoiceTaches(); to = choiceTache(); case SINGLE_TRANSACTOR_CHOICE: User temp; for(String tran : result.getCanChoiceTransactor()){ temp = userManager.getUserByLoginName(tran); if(temp!=null)canChoiceTransactor.put(tran, temp.getName()); } moreTransactor=CompleteTaskTipType.SINGLE_TRANSACTOR_CHOICE.getContent().equals("true"); to = "singleTransactorChoice"; } } ApiFactory.getBussinessLogService().log("工作流管理", "指定办理人", ContextUtils.getSystemId("wf")); return to; } public void prepareAssignTransactorPop() throws Exception { prepareModel(); } public String assignTransactorPop() throws Exception{ if(task.getId()==null){ this.addErrorMessage("非法的任务"); }else{ candidates = taskService.getNextTasksCandidates(task); this.addErrorMessage("请选择办理人"); } ApiFactory.getBussinessLogService().log("工作流管理", "弹出指定办理人", ContextUtils.getSystemId("wf")); return "assignPop"; } /** * 设置办理人 * @return * @throws Exception */ public String setTransactor() throws Exception{ log.debug("*** setTransactor 办理任务方法开始"); Map<String, List<String>> taskCondidates = new HashMap<String, List<String>>(); for(String taskId : targetNames){ String[] condidates = Struts2Utils.getRequest().getParameterValues("targetTransactors_" + taskId); List<String> condidateList = new ArrayList<String>(); for(String condidate : condidates){ condidateList.add(condidate.split("_")[0]); } taskCondidates.put(taskId, condidateList); } taskService.setTasksTransactor(taskId, taskCondidates); task = taskService.getTask(taskId); ApiFactory.getBussinessLogService().log("工作流管理", "设置办理人", ContextUtils.getSystemId("wf")); this.addSuccessMessage("任务已完成"); log.debug("*** setTransactor 方法结束"); return view(); } public void prepareGetBack() throws Exception{ prepareModel(); } /** * 取回任务 * @return * @throws Exception */ public String getBack() throws Exception{ retrieveResult = taskService.retrieve(taskId); ApiFactory.getBussinessLogService().log("工作流管理", "取回任务", ContextUtils.getSystemId("wf")); return input(); } /** * 完成交办 * @return * @throws Exception */ public String assignTo() throws Exception{ task = taskService.getWorkflowTask(taskId); newTransactor=transactors.toString().replace(" ", "").replace("[", "").replace("]",""); taskService.completeWorkflowTask(task, TaskProcessingResult.ASSIGN,TaskSetting.getTaskSettingInstance().setAssignmentTransactors(newTransactor)); ApiFactory.getBussinessLogService().log("工作流管理", "完成交办任务", ContextUtils.getSystemId("wf")); this.addSuccessMessage("任务交办成功"); return input(); } /** * 流程监控/保存更改的办理人 * @return * @throws Exception */ public String changeTransactorSave() throws Exception{ taskService.changeTransactor(taskId, transactor); task = taskService.getWorkflowTask(taskId); workflowId = task.getProcessInstanceId(); ApiFactory.getBussinessLogService().log("流程监控", "更改办理人", ContextUtils.getSystemId("wf")); this.addSuccessMessage("办理人已更改"); return changeTransactor(); } /** * 流程监控 更改办理人 */ public String changeTransactor() throws Exception { if(instanceId != null) workflowInstance = workflowInstanceManager.getWorkflowInstance(instanceId); else workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); taskList = taskService.getActivityTasks(workflowInstance.getProcessInstanceId(),ContextUtils.getCompanyId()); //判断当前环节是否是子流程 hasActivitySubProcess = taskService.getActivetySubProcess(workflowInstance.getProcessInstanceId()); return "changeTransactor"; } /** * 转向流转历史 * @return * @throws Exception */ public String flowHistory() throws Exception { companyId = ContextUtils.getCompanyId(); ApiFactory.getBussinessLogService().log("工作流平台", "查看流转历史", ContextUtils.getSystemId("wf")); return "flowHistory"; } /** * 转向加签页面 */ public String addCountersign() throws Exception { return "addCountersign"; } /** * 加签 */ public String addTask() throws Exception { taskService.generateTask(taskId,transactors,TaskSource.ADD_SIGN); ApiFactory.getBussinessLogService().log("工作流平台", "加签", ContextUtils.getSystemId("wf")); return null; } /** * 转向减签页面 */ public String deleteCountersign() throws Exception { taskList = taskService.getProcessCountersigns(taskId); return "deleteCountersign"; } /** * 减签 */ public String deleteTask() throws Exception { taskService.deleteWorkflowTask(ids); ApiFactory.getBussinessLogService().log("工作流平台", "减签", ContextUtils.getSystemId("wf")); return deleteCountersign(); } /** * 会签结果 * @return * @throws Exception */ public String countersign()throws Exception{ return "countersign"; } /** * 投票结果 * @return * @throws Exception */ public String vote()throws Exception{ return "vote"; } /** * 点击抄送按钮 * @return * @throws Exception */ public String copyTache() throws Exception { return "copyTache"; } public void prepareCompleteCopyTache() throws Exception{ prepareModel(); } /** * 完成抄送 * @return * @throws Exception */ public String completeCopyTache() throws Exception { taskService.createCopyTaches(taskId,transactors,"","/engine/task!input.htm"); ApiFactory.getBussinessLogService().log("工作流平台", "完成抄送任务", ContextUtils.getSystemId("wf")); this.addSuccessMessage("抄送成功"); return input(); } public String retrieve() throws Exception { retrieveResult=taskService.retrieve(taskId); ApiFactory.getBussinessLogService().log("工作流平台", "取回任务", ContextUtils.getSystemId("wf")); return input(); } /** * 流程监控/保存增加的办理人 * @return * @throws Exception */ public String addTransactorSave() throws Exception{ taskService.addTransactor(workflowId, transactors); ApiFactory.getBussinessLogService().log("流程监控", "增加办理人", ContextUtils.getSystemId("wf")); this.addSuccessMessage("办理人已增加"); return addTransactor(); } /** * 流程监控 增加办理人 */ public String addTransactor() throws Exception { if(instanceId != null) workflowInstance = workflowInstanceManager.getWorkflowInstance(instanceId); else workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); workflowId = workflowInstance.getProcessInstanceId(); forkTask = taskService.isForkTask(workflowId); //判断当前环节是否是子流程 hasActivitySubProcess = taskService.getActivetySubProcess(workflowInstance.getProcessInstanceId()); return "addTransactor"; } /** * 流程监控/保存减少的办理人 * @return * @throws Exception */ public String delTransactorSave() throws Exception{ taskService.delTransactor(workflowId, transactors); ApiFactory.getBussinessLogService().log("流程监控", "减少办理人", ContextUtils.getSystemId("wf")); this.addSuccessMessage("办理人已减少"); return delTransactor(); } /** * 流程监控 减少办理人 */ public String delTransactor() throws Exception { WorkflowInstance instance = null; if(instanceId != null) instance = workflowInstanceManager.getWorkflowInstance(instanceId); else instance = workflowInstanceManager.getWorkflowInstance(workflowId); workflowId = instance.getProcessInstanceId(); boolean isForkTask = taskService.isForkTask(workflowId); if(!isForkTask){//表示是分支汇聚任务时不让减少办理人 List<String[]> currentTransactors=taskService.getActivityTaskTransactors(workflowId); List<String> currentPrincipals=taskService.getActivityTaskPrincipals(workflowId); if(currentTransactors!=null){ if(currentTransactors.size()==1){ Object[] transactors=currentTransactors.get(0); transactor=(transactors[1]).toString(); } transactorNum=currentTransactors.size(); } if(currentPrincipals!=null){ if(transactorNum==0&¤tPrincipals.size()==1){ String loginName=currentPrincipals.get(0); User user=acsUtils.getUserByLoginName(loginName); if(user!=null){ transactor=user.getName(); } } transactorNum=transactorNum+currentPrincipals.size(); } } //判断当前环节是否是子流程 hasActivitySubProcess = taskService.getActivetySubProcess(instance.getProcessInstanceId()); return "delTransactor"; } public String delTransactorTree() throws Exception{ StringBuilder tempTree = new StringBuilder(); StringBuilder tree=new StringBuilder(); tree.append("["); tree.append("{\"attr\":{").append(JsTreeUtil1.treeAttrBefore).append("company_company-company").append(JsTreeUtil1.treeAttrMiddle).append("company").append(JsTreeUtil1.treeAttrAfter).append("},\"state\":\"open\",\"data\":\""+ContextUtils.getCompanyName() + "\""); List<String[]> currentTransactors=taskService.getActivityTaskTransactors(workflowId); List<String> currentPrincipals=taskService.getActivityTaskPrincipals(workflowId); int transactNum=currentTransactors.size()+currentPrincipals.size(); // if((currentTransactors!=null&¤tTransactors.size()>1)||(currentPrincipals!=null&¤tPrincipals.size()>1)){ if(transactNum>1){ tempTree.append(",\"children\":"); tempTree.append("["); for(int i=0;i<currentTransactors.size();i++){ Object[] transactor=currentTransactors.get(i); Object userName = transactor[1]; if(userName==null){ User user = userManager.getUserByLoginName(transactor[0]+""); if(user!=null)userName = user.getName(); } tempTree.append(JsTreeUtil1.generateJsTreeNodeNew("user_"+ userName+"-"+transactor[0], "",userName.toString(),"user")).append(","); } for(String str:currentPrincipals){ String userName=userManager.getUserByLoginName(str).getName(); tempTree.append(JsTreeUtil1.generateJsTreeNodeNew("user_"+ userName+"-"+str, "", userName,"user")).append(","); } tree.append(delComma(tempTree.toString())); tree.append("]"); } tree.append("}"); tree.append("]"); renderText(tree.toString()); return null; } /** * 去逗号 * @param str * @return */ private String delComma(String str){ if(StringUtils.endsWith(str, ","))str= str.substring(0,str.length() - 1); return str; } @Override public String delete() throws Exception { return null; } @Override protected void prepareModel() throws Exception { if(taskId != null){ task = taskService.getWorkflowTask(taskId); }else { task = new WorkflowTask(); } } public void prepareAssignTransactor() throws Exception { prepareModel(); } public void prepareView() throws Exception { prepareModel(); } public void prepareSetTransactor() throws Exception { prepareModel(); } public void prepareSaveOpinion() throws Exception { prepareModel(); } public WorkflowTask getModel() { return null; } @Autowired public void setWorkflowDefinitionManager( WorkflowDefinitionManager workflowDefinitionManager) { this.workflowDefinitionManager = workflowDefinitionManager; } @Autowired public void setWorkflowInstanceManager( WorkflowInstanceManager workflowInstanceManager) { this.workflowInstanceManager = workflowInstanceManager; } @Autowired public void setWorkflowRightsManager( WorkflowRightsManager workflowRightsManager) { this.workflowRightsManager = workflowRightsManager; } @Autowired public void setFormViewManager(FormViewManager formManager) { this.formViewManager = formManager; } public Long getTaskId() { return taskId; } public void setTaskId(Long taskId) { if(taskId==null)return ; this.taskId = taskId; } public String getRetrieveResult() { return retrieveResult; } public TaskProcessingResult getTransact() { return transact; } public void setTransact(TaskProcessingResult transact) { this.transact = transact; } public String getFormHtml() { return formHtml; } public void setFormHtml(String formHtml) { this.formHtml = formHtml; } public Map<String[], List<String[]>> getCandidates() { return candidates; } public void setCandidates(Map<String[], List<String[]>> candidates) { this.candidates = candidates; } public String[] getTargetTransactors() { return targetTransactors; } public void setTargetTransactors(String[] targetTransactors) { this.targetTransactors = targetTransactors; } public String[] getTargetNames() { return targetNames; } public void setTargetNames(String[] targetNames) { this.targetNames = targetNames; } public String getWorkflowId() { return workflowId; } public void setWorkflowId(String workflowId) { this.workflowId = workflowId; } public String getRequiredFields() { return requiredFields; } public void setRequiredFields(String requiredFields) { this.requiredFields = requiredFields; } public WorkflowInstance getWorkflowInstance() { return workflowInstance; } public void setWorkflowInstance(WorkflowInstance workflowInstance) { this.workflowInstance = workflowInstance; } public List<Opinion> getOpinions() { return opinions; } public String getOpinion() { return opinion; } public void setOpinion(String opinion) { this.opinion = opinion; } public WorkflowTask getTask() { return task; } public void setTask(WorkflowTask task) { this.task = task; } public Long getCompanyId() { return companyId; } public List<Temp> getTemps() { return temps; } public void setTemps(List<Temp> temps) { this.temps = temps; } public List<WorkflowTask> getTaskList() { return taskList; } public Boolean getView() { return view; } public Boolean getEdit() { return edit; } public Boolean getMust() { return must; } public void setTransactors(List<String> transactors) { this.transactors = transactors; } public void setIds(List<Long> ids) { this.ids = ids; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getRtxSessionKey() { return rtxSessionKey; } public void setRtxSessionKey(String rtxSessionKey) { this.rtxSessionKey = rtxSessionKey; } public String getRtxsIp() { return rtxsIp; } public void setRtxsIp(String rtxsIp) { this.rtxsIp = rtxsIp; } public String getProcessId() { return processId; } public void setProcessId(String processId) { this.processId = processId; } public Long getDataId() { return dataId; } public void setDataId(Long dataId) { this.dataId = dataId; } public Long getFormId() { return formId; } public void setFormId(Long formId) { this.formId = formId; } public String getFieldPermission() { return fieldPermission; } public void setTransactor(String transactor) { this.transactor = transactor; } public boolean isMoreTransactor() { return moreTransactor; } public void setMoreTransactor(boolean moreTransactor) { this.moreTransactor = moreTransactor; } public String getTransitionName() { return transitionName; } public void setTransitionName(String transitionName) { this.transitionName = transitionName; } public Map<String, String> getCanChoiceTaches() { return canChoiceTaches; } public void setCanChoiceTaches(Map<String, String> canChoiceTaches) { this.canChoiceTaches = canChoiceTaches; } private void addErrorMessage(String message){ this.addActionMessage(ERROR_MESSAGE_LEFT+message+MESSAGE_RIGHT); } private void addSuccessMessage(String message){ this.addActionMessage(SUCCESS_MESSAGE_LEFT+message+MESSAGE_RIGHT); } public Map<String, String> getCanChoiceTransactor() { return canChoiceTransactor; } public void setNewTransactor(String newTransactor) { this.newTransactor = newTransactor; } public void setNullAssignmentException(String nullAssignmentException) { this.nullAssignmentException = nullAssignmentException; } public String getNullAssignmentException() { return nullAssignmentException; } public Long getWfdId() { return wfdId; } public void setWfdId(Long wfdId) { this.wfdId = wfdId; } public List<String[]> getTransitionNames() { return transitionNames; } public String getMessageTip() { return messageTip; } public String getCanChoiceTransacators() { return canChoiceTransacators; } public void setCanChoiceTransacators(String canChoiceTransacators) { this.canChoiceTransacators = canChoiceTransacators; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public String getDefinitionCode() { return definitionCode; } public void setDefinitionCode(String definitionCode) { this.definitionCode = definitionCode; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public Integer getTransactorNum() { return transactorNum; } public Long getInstanceId() { return instanceId; } public void setInstanceId(Long instanceId) { this.instanceId = instanceId; } public String getTransactor() { return transactor; } public boolean isForkTask() { return forkTask; } public String getInstanceIds() { return instanceIds; } public void setInstanceIds(String instanceIds) { this.instanceIds = instanceIds; } public String getWorkflowIds() { return workflowIds; } public void setWorkflowIds(String workflowIds) { this.workflowIds = workflowIds; } public boolean isHasActivitySubProcess() { return hasActivitySubProcess; } public void setHasActivitySubProcess(boolean hasActivitySubProcess) { this.hasActivitySubProcess = hasActivitySubProcess; } private static final String SUCCESS_MESSAGE_LEFT = "<font class=\"onSuccess\"><nobr>"; private static final String ERROR_MESSAGE_LEFT = "<font class=\"onError\"><nobr>"; private static final String MESSAGE_RIGHT = "</nobr></font>"; }