package com.norteksoft.wf.engine.web; import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; 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.organization.UserManager; import com.norteksoft.mms.base.FormType; import com.norteksoft.mms.form.entity.FormControl; import com.norteksoft.mms.form.entity.FormView; import com.norteksoft.mms.form.service.FormViewManager; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.JsTreeUtils; import com.norteksoft.product.util.PageUtils; import com.norteksoft.product.util.SystemUrls; import com.norteksoft.product.util.freemarker.TagUtil; import com.norteksoft.product.web.struts2.CrudActionSupport; import com.norteksoft.product.web.struts2.Struts2Utils; import com.norteksoft.task.base.enumeration.TaskProcessingResult; import com.norteksoft.task.entity.WorkflowTask; import com.norteksoft.wf.base.enumeration.CompleteTaskTipType; import com.norteksoft.wf.base.enumeration.ProcessState; import com.norteksoft.wf.base.enumeration.ProcessType; import com.norteksoft.wf.base.exception.DecisionException; import com.norteksoft.wf.base.exception.TransactorAssignmentException; import com.norteksoft.wf.engine.core.DefinitionXmlParse; import com.norteksoft.wf.engine.entity.InstanceHistory; import com.norteksoft.wf.engine.entity.Opinion; import com.norteksoft.wf.engine.entity.WorkflowAttachment; import com.norteksoft.wf.engine.entity.WorkflowDefinition; import com.norteksoft.wf.engine.entity.WorkflowInstance; import com.norteksoft.wf.engine.entity.WorkflowType; import com.norteksoft.wf.engine.service.InstanceHistoryManager; import com.norteksoft.wf.engine.service.OfficeManager; 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; import com.norteksoft.wf.engine.service.WorkflowTypeManager; @Namespace("/engine") @ParentPackage("default") @Results( { @Result(name = CrudActionSupport.RELOAD, location = "workflow", type = "redirectAction"), @Result(name = "monitor", location = "workflow-definition!monitor", type = "redirectAction"), @Result(name = "workflowassign", location = "taskassign", type = "chain"), @Result(name = "workflowchoiceTache", location = "taskchoiceTache", type = "chain") }) public class WorkflowAction extends CrudActionSupport<WorkflowInstance> { private static final long serialVersionUID = 1L; // private static final Log log = Log.getLog(WorkflowAction.class.getName()); private WorkflowDefinitionManager workflowDefinitionManager; private WorkflowInstanceManager workflowInstanceManager; private WorkflowRightsManager workflowRightsManager; private OfficeManager officeManager; private FormViewManager formManager; private Page<WorkflowInstance> workflowInstances = new Page<WorkflowInstance>(0, true); private List<WorkflowDefinition> processDefinitions ; private List<WorkflowAttachment> attachments; private String processId;// 流程定义的id private FormView form; private String formHtml; private WorkflowInstance workflowInstance; private String workflowId; private Long taskId; private WorkflowTask task; private String result; private String opinion; private boolean viewOpinion,eidtOpinion,mustOpinion; private String requiredFields; private Long documentId; private List<WorkflowType> typeList; private Long type= 0l;//流程类型id private Long definitionId; private Long wfdId; private Long formId; private Boolean submit; private List<FormControl> displayField; private Page<Object> formValues = new Page<Object>(Page.EACH_PAGE_TWENTY, true); private String fieldPermission; //字段的编辑权限 private Boolean end = false; private List<String[]> transitionNames; private String transitionName; private String standardUrl; private String messageTip; private Page<WorkflowDefinition> wfdPage = new Page<WorkflowDefinition>(0, true); private WorkflowTypeManager workflowTypeManager; private String tree; private String firstTreeId; private String nullAssignmentException; private String newTransactor; private TaskService taskService; private TaskProcessingResult transact; private String formType; private Map<String,String> canChoiceTaches; private Map<String,String> canChoiceTransactor = new HashMap<String,String>(); private UserManager userManager; private String deleteIds; @Autowired public void setUserManager(UserManager userManager) { this.userManager = userManager; } @Required public void setWorkflowTypeManager(WorkflowTypeManager workflowTypeManager) { this.workflowTypeManager = workflowTypeManager; } @Override public String delete() throws Exception { int deleteNum=0,notDeleteNum=0; String[] wfIds=deleteIds.split(","); for(String wfId:wfIds){ workflowInstance=workflowInstanceManager.getWorkflowInstance(Long.valueOf(wfId)); // workflowInstance = workflowInstanceManager.getWorkflowInstance(wfId); if(workflowInstance.getProcessState()==ProcessState.UNSUBMIT||workflowRightsManager.workflowDeleteRight(workflowInstance,workflowInstance.getCurrentActivity())){ deleteNum++; workflowInstanceManager.deleteWorkflowInstance(workflowInstance,true); }else{ notDeleteNum++; } } String message = deleteNum+"个实例被删除"; if(notDeleteNum!=0)message = message +","+notDeleteNum+"个实例没有权限删除"; ApiFactory.getBussinessLogService().log("我发起的流程", "删除实例", ContextUtils.getSystemId("wf")); this.renderText(message); return null; } @Autowired public void setWorkflowRightsManager( WorkflowRightsManager workflowRightsManager) { this.workflowRightsManager = workflowRightsManager; } @Autowired public void setTaskService(TaskService taskService) { this.taskService = taskService; } @Override public String input() throws Exception { ApiFactory.getBussinessLogService().log("流程汇编", "发起流程页面", ContextUtils.getSystemId("wf")); if(workflowId!=null){ workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); } if(taskId!=null){ WorkflowTask workflowTask=taskService.getTask(taskId); workflowId=workflowTask.getProcessInstanceId(); workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); } StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(workflowInstance.getDataId()).append("\"/>"); builder.append("<input type=\"hidden\" name=\"formId\" value=\"").append(workflowInstance.getFormId()).append("\"/>"); FormView form = formManager.getFormView(workflowInstance.getFormId()); Map<String,String> parameterSettingMap = DefinitionXmlParse.getParameterSetting(workflowInstance.getProcessDefinitionId()); String formViewUrl = parameterSettingMap.get(DefinitionXmlParse.FORM_VIEW_URL); String joinSign = StringUtils.contains(formViewUrl, "?") ? "&" : "?"; Long systemId = workflowInstance.getSystemId(); String code = ApiFactory.getAcsService().getSystemById(systemId).getCode(); standardUrl = SystemUrls.getSystemUrl(code)+""+formViewUrl + joinSign + parameterSettingMap.get(DefinitionXmlParse.FORM_VIEW_URL_PARAMETER_NAME) + "=" + workflowInstance.getDataId()+"&_r=1"; if(!form.isStandardForm()){//当是自定义表单时,【任务委托监控】和swing客户端处理一致 standardUrl = SystemUrls.getSystemUrl(code)+""+formViewUrl + joinSign + parameterSettingMap.get(DefinitionXmlParse.FORM_VIEW_URL_PARAMETER_NAME) + "=" + workflowInstance.getDataId()+"&instanceId="+workflowInstance.getProcessInstanceId()+"&_r=1"; } return "viewStandardForm"; } /** * 流程监控查看流转历史 * @return * @throws Exception */ public String flowHistory() throws Exception { workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); ApiFactory.getBussinessLogService().log("流转历史标签", "查看流转历史图", ContextUtils.getSystemId("wf")); return "flowHistory"; } public String textHistory() throws Exception { ApiFactory.getBussinessLogService().log("流转历史标签", "查看文本流转历史", ContextUtils.getSystemId("wf")); HttpServletResponse response = Struts2Utils.getResponse(); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.print(readScriptTemplet()); return null; } //from com.norteksoft.wf.base.tags.WorkflowHistoryTag private String readScriptTemplet() throws Exception{ InstanceHistoryManager instanceHistoryManager=(InstanceHistoryManager)ContextUtils.getBean("instanceHistoryManager"); List<InstanceHistory> ihs=instanceHistoryManager.getHistorysByWorkflowId(ContextUtils.getCompanyId(), workflowId); for(int i=0;i<ihs.size();i++){ InstanceHistory ih=ihs.get(i); Long taskId=ih.getTaskId(); StringBuilder sb=new StringBuilder(); if(taskId!=null){ WorkflowTask task=taskService.getTask(ih.getTaskId()); List<Opinion> opinions=workflowInstanceManager.getOpinions(task.getId(),task.getCompanyId()); for(Opinion opinion:opinions){ sb.append(opinion.getOpinion()).append(";"); } if(sb.length()>0&&sb.charAt(sb.length()-1)==';'){ sb.deleteCharAt(sb.length()-1); } } ih.setTransactorOpinion(sb.toString()); String result=ih.getTransactionResult(); if(result.contains("[")){ String temp=result.substring(result.indexOf("[")+1,result.indexOf("]")); if(temp.equals("transition.approval.result.agree")){ result=result.substring(0, result.indexOf("[")) + "[同意]" + result.substring(result.lastIndexOf("]") + 1, result.length()); ih.setTransactionResult(result); ihs.set(i, ih); }else if (temp .equals( "transition.approval.result.disagree")){ result=result.substring(0, result.indexOf("[")) + "[不同意]" + result.substring(result.lastIndexOf("]") + 1, result.length()); ih.setTransactionResult(result); ihs.set(i, ih); }else if(temp.contains("_")){ WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); result=result.substring(0, result.indexOf("[")) + "["+workflowInstance.getProcessName()+"]" + result.substring(result.lastIndexOf("]") + 1, result.length()); ih.setTransactionResult(result); ihs.set(i, ih); } } } Map<String, Object> root=new HashMap<String, Object>(); root.put("instanceHistory",ihs); root.put("sequence","序号"); root.put("name","名称"); root.put("history","流转操作"); root.put("start","流程开始"); root.put("end","流程结束"); root.put("opinion","办理意见"); String result =TagUtil.getContent(root, "workflow/textHistory.ftl"); return result; } /** * 流程监控查看任务 * @return */ public String monitorView(){ workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); taskId = workflowInstance.getFirstTaskId(); formHtml = workflowInstanceManager.getHtml(workflowInstance, null); //添加"列表控件"/"宏控件"等的script处理代码 form=formManager.getFormView(workflowInstance.getFormId()); formHtml=formManager.getFormHtml(form, formHtml,workflowInstance.getDataId(),false,false); fieldPermission = workflowRightsManager.getFieldPermission(false); ApiFactory.getBussinessLogService().log("流程监控", "查看任务", ContextUtils.getSystemId("wf")); return "monitorView"; } /** * 已办理 * @return * @throws Exception */ public String completed() throws Exception { return "completed"; } @Action("list") public String listIndex(){ return SUCCESS; } /** * 处理中的流程 */ @Override @Action("workflow") public String list() throws Exception { if(workflowInstances.getPageSize()>1){ if(definitionId != null){ getFormDatasByDefinition(definitionId, end); }else if(type!=null&&type.longValue()!=0){ if(end){ workflowInstanceManager.listEndWorkflowInstance(workflowInstances,type, ContextUtils.getLoginName(),ContextUtils.getCompanyId());// }else{ workflowInstanceManager.listNotEndWorkflowInstance(workflowInstances,type, ContextUtils.getLoginName(),ContextUtils.getCompanyId());// } }else{ if(end){ workflowInstanceManager.listEndWorkflowInstance(workflowInstances, ContextUtils.getLoginName(),ContextUtils.getCompanyId());// }else{ workflowInstanceManager.listNotEndWorkflowInstance(workflowInstances, ContextUtils.getLoginName(),ContextUtils.getCompanyId());// } } ApiFactory.getBussinessLogService().log("我发起的流程", "处理中的流程", ContextUtils.getSystemId("wf")); this.renderText(PageUtils.pageToJson(workflowInstances)); return null; } return SUCCESS; } /** * 查询表单显示字段并排序、查询表单数据 * @param defId */ private void getFormDatasByDefinition(Long defId, boolean isEnd){ WorkflowDefinition definition = workflowDefinitionManager.getWfDefinition(defId); FormView form=formManager.getCurrentFormViewByCodeAndVersion(definition.getFormCode(), definition.getFromVersion()); if(!form.isStandardForm()){ formType=FormType.DEFAULT; // displayField = workflowInstanceManager.getFormDatas(formValues, definition, isEnd); if(isEnd){ workflowInstanceManager.listEndWorkflowInstanceByDefinitionId(workflowInstances, definitionId, ContextUtils.getCompanyId(),ContextUtils.getLoginName()); }else{ workflowInstanceManager.listNotEndWorkflowInstanceByDefinitionId(workflowInstances, definitionId, ContextUtils.getCompanyId(),ContextUtils.getLoginName()); } }else if(form.isStandardForm()){ formType=FormType.STANDARD; if(isEnd){ workflowInstanceManager.listEndWorkflowInstanceByDefinitionId(workflowInstances, definitionId, ContextUtils.getCompanyId(),ContextUtils.getLoginName()); }else{ workflowInstanceManager.listNotEndWorkflowInstanceByDefinitionId(workflowInstances, definitionId, ContextUtils.getCompanyId(),ContextUtils.getLoginName()); } } } public void setDefinitionId(Long definitionId) { this.definitionId = definitionId; } /** * 已完成的流程 */ public String listEnd() throws Exception { if(type==null){ workflowInstanceManager.listNotEndWorkflowInstance(workflowInstances, ContextUtils.getLoginName(),ContextUtils.getCompanyId());// }else{ workflowInstanceManager.listNotEndWorkflowInstance(workflowInstances,type, ContextUtils.getLoginName(),ContextUtils.getCompanyId());// } ApiFactory.getBussinessLogService().log("我发起的流程", "已完成的流程", ContextUtils.getSystemId("wf")); return "listEnd"; } @Override protected void prepareModel() throws Exception { if(StringUtils.isNotEmpty(workflowId)){ workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); }else{ workflowInstance = new WorkflowInstance(); } } @SuppressWarnings("unchecked") @Override public String save() throws Exception { Map<String,String[]> parameterMap=Struts2Utils.getRequest().getParameterMap(); Map<String,String> resultMap = workflowInstanceManager.save(parameterMap); workflowId = resultMap.get(WorkflowInstanceManager.INSTANCEID); task = taskService.getTask(Long.valueOf(resultMap.get(WorkflowInstanceManager.TASKID))); taskId = task.getId(); workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(resultMap.get(WorkflowInstanceManager.DATAID)).append("\"/>"); builder.append("<input type=\"hidden\" name=\"formId\" value=\"").append(formId).append("\"/>"); formHtml = workflowInstanceManager.getHtml(workflowInstance, task); formHtml = builder.toString() + formHtml; form=formManager.getFormView(formId); //添加"列表控件"/"宏控件"等的script处理代码 formHtml=formManager.getFormHtml(form, formHtml,Long.parseLong(resultMap.get(WorkflowInstanceManager.DATAID)),true,false); fieldPermission = workflowRightsManager.getFieldPermission(task); ApiFactory.getBussinessLogService().log("我发起的流程", "保存流程", ContextUtils.getSystemId("wf")); addActionMessage("任务已保存"); return "startProcess"; } public String saveCustomProcess(){ Map<String,String> resultMap = workflowInstanceManager.saveCustomProcess(Struts2Utils.getRequest().getParameterMap()); workflowId = resultMap.get(WorkflowInstanceManager.INSTANCEID); workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); taskId = workflowInstance.getFirstTaskId(); StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(resultMap.get(WorkflowInstanceManager.DATAID)).append("\"/>"); builder.append("<input type=\"hidden\" name=\"formId\" value=\"").append(formId).append("\"/>"); formHtml = workflowInstanceManager.getHtml(workflowInstance, task); formHtml = builder.toString() + formHtml; return "startCustomProcess"; } public String submitCustomProcess() throws Exception { // String url = ContextUtils.getSystemCode()+"/engine/task!input.htm"; // String url = "http://" + Struts2Utils.getRequest().getHeader("Host") + // Struts2Utils.getRequest().getContextPath() + // "/engine/task!input.htm"; Map<String, String[]> parameterMap = Struts2Utils.getRequest().getParameterMap(); //捕获异常 Map<String,String> resultMap=null; resultMap= workflowInstanceManager.submitCustomProcess(parameterMap); workflowId = resultMap.get(WorkflowInstanceManager.INSTANCEID); workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); task = taskService.getTask(Long.valueOf(resultMap.get(WorkflowInstanceManager.TASKID))); StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(resultMap.get(WorkflowInstanceManager.DATAID)).append("\"/>"); formHtml = workflowInstanceManager.getHtml(workflowInstance, task); formHtml = builder.toString() + formHtml; String to = null; result = resultMap.get(WorkflowInstanceManager.RESULT); ApiFactory.getBussinessLogService().log("我发起的流程", "保存自由流", ContextUtils.getSystemId("wf")); return "startCustomProcess"; } public String completeCustomProcess() throws Exception { Map<String,String> resultMap = workflowInstanceManager.saveCustomProcess(Struts2Utils.getRequest().getParameterMap()); workflowId = resultMap.get(WorkflowInstanceManager.INSTANCEID); workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); taskId = workflowInstance.getFirstTaskId(); workflowInstanceManager.completeCustomProcess(taskId,TaskProcessingResult.SUBMIT); ApiFactory.getBussinessLogService().log("我发起的流程", "完成自由流", ContextUtils.getSystemId("wf")); return "startCustomProcess"; } @SuppressWarnings("unchecked") public String submit() throws Exception { String url = ContextUtils.getSystemCode()+"/engine/task!input.htm"; Map<String, String[]> parameterMap = Struts2Utils.getRequest().getParameterMap(); //捕获异常 Map<String,Object> resultMap=null; try{ resultMap= workflowInstanceManager.submit(parameterMap,url,transitionName,newTransactor); }catch(DecisionException de){ transitionNames=de.getTransitionNames(); messageTip=de.getMessage(); messageTip=getText(messageTip); return this.startProcess(); }catch(TransactorAssignmentException je){ nullAssignmentException="下一环节没有办理人,请指定!"; return this.startProcess(); } workflowId = resultMap.get(WorkflowInstanceManager.INSTANCEID).toString(); workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowId); task = taskService.getTask(Long.valueOf(resultMap.get(WorkflowInstanceManager.TASKID).toString())); taskId = task.getId(); StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(resultMap.get(WorkflowInstanceManager.DATAID)).append("\"/>"); formHtml = workflowInstanceManager.getHtml(workflowInstance, task); formHtml = builder.toString() + formHtml; form=formManager.getFormView(formId); //添加"列表控件"/"宏控件"等的script处理代码 formHtml=formManager.getFormHtml(form, formHtml,Long.parseLong(resultMap.get(WorkflowInstanceManager.DATAID).toString()),false,false); fieldPermission = workflowRightsManager.getFieldPermission(false); String to = null; CompleteTaskTipType completeTaskTipType = (CompleteTaskTipType)resultMap.get(WorkflowInstanceManager.RESULT); if(completeTaskTipType.equals(CompleteTaskTipType.OK)){ addActionMessage(completeTaskTipType.getContent()); submit = true; to = "startProcess"; }else if(completeTaskTipType==CompleteTaskTipType.RETURN_URL){//如果需要指定办理人 addActionMessage("请选择办理人"); to = "workflowassign"; }else if(completeTaskTipType==CompleteTaskTipType.TACHE_CHOICE_URL){//如果需要选择环节 addActionMessage("请选择环节"); canChoiceTaches = completeTaskTipType.getCanChoiceTaches(); to = "workflowchoiceTache"; }else if(completeTaskTipType==CompleteTaskTipType.SINGLE_TRANSACTOR_CHOICE){ User temp; for(String tran : completeTaskTipType.getCanChoiceTransactor()){ temp = userManager.getUserByLoginName(tran); if(temp!=null)canChoiceTransactor.put(tran, temp.getName()); } to = "singleTransactorChoice"; }else if(completeTaskTipType.equals(CompleteTaskTipType.MESSAGE)){ to = null; addActionMessage(completeTaskTipType.getContent()); } ApiFactory.getBussinessLogService().log("我发起的流程", "提交任务", ContextUtils.getSystemId("wf")); return to; } public String completeChoiceTransactor() throws Exception { taskService.completeChoiceTransactor(taskId,newTransactor); ApiFactory.getBussinessLogService().log("我发起的流程", "指定办理人", ContextUtils.getSystemId("wf")); addActionMessage("办理人指定成功!"); return "singleTransactorChoice"; } /** * 选择办理人 */ public String choseTransactor() throws Exception { nullAssignmentException="下一环节没有办理人,请指定!"; return "assignmentTree"; } /** * 查询最新流程定义 */ public String listProcessDefinition() throws Exception { processDefinitions = workflowDefinitionManager.getActiveDefinition(); return "processList"; } public void prepareInputForm() throws Exception { } /** * 转向需我办理的流程 */ public String needDo() throws Exception { // taskManager.getTasksByUser(tasks, // ContextUtils.getCompanyId(), // ContextUtils.getLoginName()); return "needdo"; } /** * 转向办理页面 */ public String toApprove() throws Exception { // task = taskService.getWorkflowTask(taskId); // workflowInstance = workflowInstanceManager.getWorkflowInstance(task.getProcessInstanceId()); // workflowId = workflowInstance.getId(); // formHtml = taskService.getFormHtml(task); // viewOpinion = PermissionsParse.viewOpinion(workflowInstance.getProcessDefinitionId(),task.getName(),ContextUtils.getLoginName()); // eidtOpinion = PermissionsParse.editOpinion(workflowInstance.getProcessDefinitionId(),task.getName(),ContextUtils.getLoginName()); // if(eidtOpinion){ // mustOpinion = PermissionsParse.mustOpinion(workflowInstance.getProcessDefinitionId(),task.getName(),ContextUtils.getLoginName()); // } return "approve"; } /** * 删除正文 */ public String deleteText() throws Exception{ officeManager.deleteText(documentId); ApiFactory.getBussinessLogService().log("我发起的流程", "删除正文", ContextUtils.getSystemId("wf")); renderText("ok"); return null; } /** * 流程汇编 * @return * @throws Exception */ public String collection() throws Exception{ if(wfdPage.getPageSize()>1){ if(type==0l){ workflowDefinitionManager.getEnableWfDefinitions(wfdPage); }else{ workflowDefinitionManager.getEnableWfDefinitions(wfdPage,type); } ApiFactory.getBussinessLogService().log("流程汇编", "流程汇编列表", ContextUtils.getSystemId("wf")); this.renderText(PageUtils.pageToJson(wfdPage)); return null; } return "collection"; } public String createTree() throws Exception{ String[] rs = processTree(); tree = rs[0]; firstTreeId = rs[1]; renderText(tree.toString()); return null; } private String[] processTree(){ StringBuilder tree = new StringBuilder("[ "); List<WorkflowType> wfTypes = workflowTypeManager.getAllWorkflowType(); boolean isFirstNode = true; String firstId = ""; for(WorkflowType wft : wfTypes){ List<WorkflowDefinition> definitions = workflowDefinitionManager.getWfDefinitionsByType(getCompanyId(), wft.getId()); if(isFirstNode){ if(definitions==null || definitions.isEmpty()){ tree.append(JsTreeUtils.generateJsTreeNodeDefault("WFDTYPE_" + wft.getId(), "",wft.getName())).append(","); }else{ tree.append(JsTreeUtils.generateJsTreeNodeDefault("WFDTYPE_" + wft.getId(), "open",wft.getName(), processDefs(definitions))).append(","); } isFirstNode = false; firstId = String.valueOf(wft.getId()); }else{ tree.append(JsTreeUtils.generateJsTreeNodeDefault("WFDTYPE_" + wft.getId(), "", wft.getName(), processDefs(definitions))).append(","); } } JsTreeUtils.removeLastComma(tree); tree.append(" ]"); return new String[]{tree.toString(), firstId}; } public String processDefs(List<WorkflowDefinition> definitions){ StringBuilder subNodes = new StringBuilder(); for(WorkflowDefinition wfd : definitions){ subNodes.append(JsTreeUtils.generateJsTreeNodeDefault("WFDID_" + wfd.getId(), "", wfd.getName())).append(","); } JsTreeUtils.removeLastComma(subNodes); return subNodes.toString(); } /** * 发起流程 * * @return * @throws Exception * @author liudongxia */ public String startProcess() throws Exception { ApiFactory.getBussinessLogService().log("流程汇编", "发起流程", ContextUtils.getSystemId("wf")); WorkflowDefinition wfd = workflowDefinitionManager.getWfDefinition(wfdId); processId=wfd.getProcessId(); if(ProcessType.PREDEFINED_PROCESS.equals(wfd.getProcessType())){ if(workflowInstanceManager.canStartTask(ContextUtils.getLoginName(), wfd)){ form= this.formManager.getCurrentFormViewByCodeAndVersion(wfd.getFormCode(), wfd.getFromVersion()); if(!form.isStandardForm()){ formId = form.getId(); definitionId=wfd.getId(); StringBuilder builder = new StringBuilder(); builder.append("<input type=\"hidden\" name=\"formId\" value=\"").append(formId).append("\"/>") .append("<input type=\"hidden\" name=\"processId\" value=\"").append(processId).append("\"/>"); String firstTaskName = workflowInstanceManager.getFirstTaskName(processId); formHtml = workflowInstanceManager.initHtml(form,firstTaskName,wfd.getProcessId(),form.getHtml()); formHtml = builder.toString() + formHtml; //添加"列表控件"/"宏控件"等的script处理代码 formHtml=formManager.getFormHtml(form, formHtml,null,true,false); fieldPermission = workflowRightsManager.getFieldPermissionNotStarted(wfd); return "startProcess"; }else if(form.isStandardForm()){ Map<String,String> parameterMap = DefinitionXmlParse.getParameterSetting(wfd.getProcessId()); String processStartUrl = parameterMap.get(DefinitionXmlParse.PROCESS_START_URL); String joinSign = StringUtils.contains(processStartUrl, "?") ? "&" : "?"; standardUrl = processStartUrl + joinSign + parameterMap.get(DefinitionXmlParse.PROCESS_START_URL_PARAMETER_NAME) + "=" + parameterMap.get(DefinitionXmlParse.PROCESS_START_URL_PARAMETER_VALUE);/// return "standardFormStart"; }else{ addActionMessage("表单类型错误"); return collection(); } }else{ addActionMessage("您不能发起该流程"); return collection(); } }else{ FormView form= this.formManager.getCurrentFormViewByCodeAndVersion(wfd.getFormCode(), wfd.getFromVersion()); formId = form.getId(); StringBuilder builder = new StringBuilder(); builder.append("<input type=\"hidden\" name=\"formId\" value=\"").append(formId).append("\"/>") .append("<input type=\"hidden\" name=\"processId\" value=\"").append(processId).append("\"/>"); formHtml = builder.toString() + form.getHtml(); return "startCustomProcess"; } } public WorkflowInstance getModel() { return workflowInstance; } @Required public void setWorkflowDefinitionManager( WorkflowDefinitionManager workflowDefinitionManager) { this.workflowDefinitionManager = workflowDefinitionManager; } @Required public void setFormViewManager(FormViewManager formManager) { this.formManager = formManager; } @Required public void setWorkflowInstanceManager( WorkflowInstanceManager workflowInstanceManager) { this.workflowInstanceManager = workflowInstanceManager; } @Required public void setOfficeManager(OfficeManager officeManager) { this.officeManager = officeManager; } public List<WorkflowDefinition> getProcessDefinitions() { return processDefinitions; } public String getProcessId() { return processId; } public void setProcessId(String processId) { this.processId = processId; } public FormView getFormView() { return form; } public void setFormView(FormView form) { this.form = form; } public Page<WorkflowInstance> getWorkflowInstances() { return workflowInstances; } public void setWorkflowInstances(Page<WorkflowInstance> workflowInstances) { this.workflowInstances = workflowInstances; } public WorkflowInstance getWorkflowInstance() { return workflowInstance; } public void setWorkflowInstance(WorkflowInstance workflowInstance) { this.workflowInstance = workflowInstance; } public String getWorkflowId() { return workflowId; } public void setWorkflowId(String workflowId) { this.workflowId = workflowId; } public String getFormHtml() { return formHtml; } public void setFormHtml(String formHtml) { this.formHtml = formHtml; } public Long getTaskId() { return taskId; } public void setTaskId(Long taskId) { this.taskId = taskId; } public WorkflowTask getTask() { return task; } public void setTask(WorkflowTask task) { this.task = task; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } public String getOpinion() { return opinion; } public void setOpinion(String opinion) { this.opinion = opinion; } public boolean isViewOpinion() { return viewOpinion; } public void setViewOpinion(boolean viewOpinion) { this.viewOpinion = viewOpinion; } public boolean isEidtOpinion() { return eidtOpinion; } public void setEidtOpinion(boolean eidtOpinion) { this.eidtOpinion = eidtOpinion; } public boolean isMustOpinion() { return mustOpinion; } public void setMustOpinion(boolean mustOpinion) { this.mustOpinion = mustOpinion; } public String getRequiredFields() { return requiredFields; } public List<WorkflowAttachment> getAttachments() { return attachments; } public void setDocumentId(Long documentId) { this.documentId = documentId; } public Long getCompanyId() { return ContextUtils.getCompanyId(); } public Long getSystemId(){ return ContextUtils.getSystemId(); } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public List<WorkflowType> getTypeList() { return typeList; } public Long getDefinitionId() { return definitionId; } public Long getWfdId() { return wfdId; } public void setWfdId(Long wfdId) { this.wfdId = wfdId; } public List<FormControl> getDisplayField() { return displayField; } public Long getFormId() { return formId; } public void setFormId(Long formId) { this.formId = formId; } public Page<Object> getFormValues() { return formValues; } public void setFormValues(Page<Object> formValues) { this.formValues = formValues; } public Boolean getSubmit() { return submit; } public String getFieldPermission() { return fieldPermission; } public void setEnd(Boolean end) { this.end = end; } public Boolean getEnd() { return end; } public List<String[]> getTransitionNames() { return transitionNames; } public String getTransitionName() { return transitionName; } public void setTransitionName(String transitionName) { this.transitionName = transitionName; } public String getMessageTip() { return messageTip; } public void setMessageTip(String messageTip) { this.messageTip = messageTip; } public Page<WorkflowDefinition> getWfdPage() { return wfdPage; } public void setWfdPage(Page<WorkflowDefinition> wfdPage) { this.wfdPage = wfdPage; } public String getTree() { return tree; } public void setTree(String tree) { this.tree = tree; } public String getNullAssignmentException() { return nullAssignmentException; } public void setNullAssignmentException(String nullAssignmentException) { this.nullAssignmentException = nullAssignmentException; } public String getNewTransactor() { return newTransactor; } public void setNewTransactor(String newTransactor) { this.newTransactor = newTransactor; } public String getStandardUrl() { return standardUrl; } public void setTransact(TaskProcessingResult transact) { this.transact = transact; } public String getFormType() { return formType; } public void setCanChoiceTaches(Map<String, String> canChoiceTaches) { this.canChoiceTaches = canChoiceTaches; } public Map<String, String> getCanChoiceTaches() { return canChoiceTaches; } public FormView getForm() { return form; } public Map<String, String> getCanChoiceTransactor() { return canChoiceTransactor; } public String getDeleteIds() { return deleteIds; } public void setDeleteIds(String deleteIds) { this.deleteIds = deleteIds; } }