/** 处理任务 */ @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(BeanUtil.turnToModelTask(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.getProcessDefinitionId(), workflowInstance.getFormId(), workflowInstance.getDataId(), task.getName()); 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, workflowInstance).getCanChoiceTaches(); return choiceTache(); } else { // 列表控件控制 formHtml = workflowInstanceManager.getFormHtml( workflowInstance, formHtml, workflowInstance.getDataId(), true, false); fieldPermission = ApiFactory.getFormService().getFieldPermission(task.getId()); } ApiFactory.getBussinessLogService().log("工作流管理", "任务办理页面", ContextUtils.getSystemId("wf")); log.debug("*** input 处理任务方法结束"); return INPUT; }
// 新建word/excel @Action("office-createOffice") public String createOffice() throws Exception { WorkflowInstance instance = null; WorkflowTask task = null; if (id == null) { task = ApiFactory.getTaskService().getTask(taskId); instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId()); document.setTaskName(task.getName()); document.setTaskMode(task.getProcessingMode()); document.setWorkflowId(instance.getProcessInstanceId()); document.setCreator(ContextUtils.getLoginName()); document.setCreatorName(ContextUtils.getUserName()); document.setCompanyId(ContextUtils.getCompanyId()); document.setEditType("-1,0,0,0,0,0,1,1"); // 允许编辑,不显示和保留痕迹,允许批注 document.setPrintSetting(true); document.setDownloadSetting(true); if (document.getFileType().equalsIgnoreCase("pdf")) { return "office-pdf"; } else { String template = DefinitionXmlParse.getOfficialTextTemplate( instance.getProcessDefinitionId(), task.getName()); if (StringUtils.isNotEmpty(template)) document.setTemplateId(Long.valueOf(StringUtils.substringBetween(template, "[", "]"))); setOfficeRight(document, instance, task); return "office-view"; } } else { if (taskId == null) { instance = workflowInstanceManager.getWorkflowInstance(document.getWorkflowId()); task = ApiFactory.getTaskService().getTask(instance.getFirstTaskId()); } else { task = ApiFactory.getTaskService().getTask(taskId); instance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId()); } setOfficeRight(document, instance, task); if (document.getFileType().equalsIgnoreCase("pdf")) { return "office-pdf"; } else { return "office-view"; } } }
/* * 根据附加条件过滤办理人 * @param conditions * @param candidates * @param creator * @param _wf_transactor * @return */ private static Set<String> processAdditionalCondition( Map<TaskTransactorCondition, String> conditions, Set<String> candidates, String creator, OpenExecution execution) { Set<String> results = new HashSet<String>(); String selectOne = conditions.get(TaskTransactorCondition.SELECT_ONE_FROM_MULTIPLE); String onlyInCreatorDept = conditions.get(TaskTransactorCondition.ONLY_IN_CREATOR_DEPARTMENT); String withCreatorDept = conditions.get(TaskTransactorCondition.WITH_CREATOR_DEPARTMENT); if ("true".equals(onlyInCreatorDept) || "true".equals(withCreatorDept)) { List<String[]> usersInSameDept = AcsApi.getUsersInSameDept(ContextUtils.getCompanyId(), creator); // 只能为创建人部门(交集) if ("true".equals(onlyInCreatorDept)) { for (String[] user1 : usersInSameDept) { if (candidates.contains(user1[1])) { results.add(user1[1]); } } } else { results.addAll(candidates); } // 创建人部门参与(并集) if ("true".equals(withCreatorDept)) { for (String[] user1 : usersInSameDept) { results.add(user1[1]); } } } else { results.addAll(candidates); } Set<String> latest = new HashSet<String>(); // 需要唯一指定办理人 if ("true".equals(selectOne)) { // <select-type>autoType</select-type> // <select-bean>workflowInstanceManager</select-bean> // 只有一个候选人 if (conditions .get(TaskTransactorCondition.SELECT_TYPE) .equals(TaskTransactorCondition.SELECT_TYPE_CUSTOM)) { // if(results.size() == 1){ // latest.add(results.iterator().next()); // }else if(results.size() > 1){ latest.add(CommonStrings.TRANSACTOR_SINGLE); // 将候选人加入到execution变量中 execution.createVariable(CommonStrings.TRANSACTOR_SINGLE_CANDIDATES, results); // } } else { WorkflowInstanceManager workflowInstanceManager = (WorkflowInstanceManager) ContextUtils.getBean("workflowInstanceManager"); WorkflowInstance instance = workflowInstanceManager.getWorkflowInstance( execution.getProcessInstance().getProcessInstance().getId()); if (instance == null) { throw new RuntimeException("办理人设置中,解析附加条件时,流程实例不能为null"); } String selectorBeanName = conditions.get(TaskTransactorCondition.SELECT_BEAN); ActivityExecution activityExecution = (ActivityExecution) execution; String activityName = activityExecution.getActivityName(); if (StringUtils.isEmpty(selectorBeanName)) throw new WorkflowException("环节:" + activityName + "没有指定自动选择办理人的bean名"); SingleTransactorSelector selector = (SingleTransactorSelector) ContextUtils.getBean(selectorBeanName); boolean moreTransactor = DefinitionXmlParse.hasMoreTransactor(instance.getProcessDefinitionId(), activityName); Set<String> result = selector.filter(instance.getDataId(), results, moreTransactor); Iterator<String> it = result.iterator(); while (it.hasNext()) { latest.add(it.next()); } } } else { for (String user : results) { latest.add(user); } } return latest; }