package com.jeecg.qianbao.util; import org.activiti.engine.task.Task; import org.apache.log4j.Logger; import org.jeecgframework.core.util.ApplicationContextUtil; import org.jeecgframework.core.util.StringUtil; import org.jeecgframework.core.util.oConvertUtils; import org.jeecgframework.workflow.pojo.base.TPProcesspro; import org.jeecgframework.workflow.service.ActivitiService; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * * 类名:FormProcUtil * */ public class FormProcUtil { private static final Logger logger = Logger.getLogger(FormProcUtil.class); /** * 初始化表单参数 * @param request */ public static void initFormParam(HttpServletRequest request){ //初始化form表单参数 commonParam(request); //初始化工作流相关参数 initWorkflowParam(request); //初始节点变量 initProcessnodeVar(request); } //参数透传处理 private static void commonParam(HttpServletRequest request){ Map paramMap = request.getParameterMap(); for(Map.Entry entry:paramMap.entrySet()){ String[] value = entry.getValue(); String valueStr = ""; if(value!=null&&value.length>0){ valueStr = value[0]; } request.setAttribute(entry.getKey(), valueStr); } } //工作流按钮信息处理 @SuppressWarnings({ "rawtypes", "unchecked" }) public static void initWorkflowParam(HttpServletRequest request){ ActivitiService activitiService = ApplicationContextUtil.getContext().getBean(ActivitiService.class); String taskId = oConvertUtils.getString(request.getParameter("taskId")); //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----Start if(taskId.equals("")){ taskId = (String) request.getAttribute("taskId"); } //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----End //流程下一步节点操作 Task task = activitiService.getTask(taskId); if(task==null) return; List transList = activitiService.getOutTransitions(taskId); //判断一下任务节点后续的分支,是否只有一个,如果是且分支的路线中文名字没有的话,默认为提交 if(transList.size()==1){ for(Map t:transList){ String name = (String)t.get("Transition"); if(StringUtil.isEmpty(name)||name.startsWith("flow")){ t.put("Transition", "下一步"); } } } List newlist = new ArrayList(); // 解决驳回在前, 通过在后的问题 if(transList.size() == 2) { Map map1 = transList.get(0); Map map2 = transList.get(1); if("驳回".equals((String)map1.get("Transition")) && "通过".equals((String)map2.get("Transition"))) { newlist.add(map2); newlist.add(map1); request.setAttribute("transitionList", newlist); } } if(newlist.size() != transList.size()) { //流程分支 request.setAttribute("transitionList", transList); } //下一步节点数目 request.setAttribute("nextCodeCount", transList==null?0:transList.size()); } //初始化节点变量 private static void initProcessnodeVar(HttpServletRequest request){ String taskId = oConvertUtils.getString(request.getParameter("taskId")); //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----Start if(taskId.equals("")){ taskId = (String) request.getAttribute("taskId"); } //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----End ActivitiService activitiService = ApplicationContextUtil.getContext().getBean(ActivitiService.class); Map map = new HashMap(); //根据节点ID 查询节点变量配置 Task task = activitiService.getTask(taskId); String nodeid = task.getTaskDefinitionKey(); String hql = "from TPProcesspro where TPProcessnode.processnodecode =? and processprotype = 'default'"; List list = activitiService.findHql(hql, nodeid); if(list!=null&&list.size()>0){ for(TPProcesspro processpro:list){ map.put(processpro.getProcessprokey(), processpro.getProcessprovalue()); } } request.setAttribute("nodeVariables", map); } }