FormProcUtil.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package com.jeecg.qianbao.util;
  2. import org.activiti.engine.task.Task;
  3. import org.apache.log4j.Logger;
  4. import org.jeecgframework.core.util.ApplicationContextUtil;
  5. import org.jeecgframework.core.util.StringUtil;
  6. import org.jeecgframework.core.util.oConvertUtils;
  7. import org.jeecgframework.workflow.pojo.base.TPProcesspro;
  8. import org.jeecgframework.workflow.service.ActivitiService;
  9. import javax.servlet.http.HttpServletRequest;
  10. import java.util.ArrayList;
  11. import java.util.HashMap;
  12. import java.util.List;
  13. import java.util.Map;
  14. /**
  15. *
  16. * 类名:FormProcUtil
  17. *
  18. */
  19. public class FormProcUtil {
  20. private static final Logger logger = Logger.getLogger(FormProcUtil.class);
  21. /**
  22. * 初始化表单参数
  23. * @param request
  24. */
  25. public static void initFormParam(HttpServletRequest request){
  26. //初始化form表单参数
  27. commonParam(request);
  28. //初始化工作流相关参数
  29. initWorkflowParam(request);
  30. //初始节点变量
  31. initProcessnodeVar(request);
  32. }
  33. //参数透传处理
  34. private static void commonParam(HttpServletRequest request){
  35. Map<String,String[]> paramMap = request.getParameterMap();
  36. for(Map.Entry<String, String[]> entry:paramMap.entrySet()){
  37. String[] value = entry.getValue();
  38. String valueStr = "";
  39. if(value!=null&&value.length>0){
  40. valueStr = value[0];
  41. }
  42. request.setAttribute(entry.getKey(), valueStr);
  43. }
  44. }
  45. //工作流按钮信息处理
  46. @SuppressWarnings({ "rawtypes", "unchecked" })
  47. public static void initWorkflowParam(HttpServletRequest request){
  48. ActivitiService activitiService = ApplicationContextUtil.getContext().getBean(ActivitiService.class);
  49. String taskId = oConvertUtils.getString(request.getParameter("taskId"));
  50. //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----Start
  51. if(taskId.equals("")){
  52. taskId = (String) request.getAttribute("taskId");
  53. }
  54. //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----End
  55. //流程下一步节点操作
  56. Task task = activitiService.getTask(taskId);
  57. if(task==null) return;
  58. List<Map> transList = activitiService.getOutTransitions(taskId);
  59. //判断一下任务节点后续的分支,是否只有一个,如果是且分支的路线中文名字没有的话,默认为提交
  60. if(transList.size()==1){
  61. for(Map t:transList){
  62. String name = (String)t.get("Transition");
  63. if(StringUtil.isEmpty(name)||name.startsWith("flow")){
  64. t.put("Transition", "下一步");
  65. }
  66. }
  67. }
  68. List<Map> newlist = new ArrayList<Map>();
  69. // 解决驳回在前, 通过在后的问题
  70. if(transList.size() == 2) {
  71. Map map1 = transList.get(0);
  72. Map map2 = transList.get(1);
  73. if("驳回".equals((String)map1.get("Transition")) && "通过".equals((String)map2.get("Transition"))) {
  74. newlist.add(map2);
  75. newlist.add(map1);
  76. request.setAttribute("transitionList", newlist);
  77. }
  78. }
  79. if(newlist.size() != transList.size()) {
  80. //流程分支
  81. request.setAttribute("transitionList", transList);
  82. }
  83. //下一步节点数目
  84. request.setAttribute("nextCodeCount", transList==null?0:transList.size());
  85. }
  86. //初始化节点变量
  87. private static void initProcessnodeVar(HttpServletRequest request){
  88. String taskId = oConvertUtils.getString(request.getParameter("taskId"));
  89. //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----Start
  90. if(taskId.equals("")){
  91. taskId = (String) request.getAttribute("taskId");
  92. }
  93. //----add by peng.wang 2017-08-18 兼容类似物料计划这样的页面的驳回情况----End
  94. ActivitiService activitiService = ApplicationContextUtil.getContext().getBean(ActivitiService.class);
  95. Map<String,String> map = new HashMap<String, String>();
  96. //根据节点ID 查询节点变量配置
  97. Task task = activitiService.getTask(taskId);
  98. String nodeid = task.getTaskDefinitionKey();
  99. String hql = "from TPProcesspro where TPProcessnode.processnodecode =? and processprotype = 'default'";
  100. List<TPProcesspro> list = activitiService.findHql(hql, nodeid);
  101. if(list!=null&&list.size()>0){
  102. for(TPProcesspro processpro:list){
  103. map.put(processpro.getProcessprokey(), processpro.getProcessprovalue());
  104. }
  105. }
  106. request.setAttribute("nodeVariables", map);
  107. }
  108. }