Selaa lähdekoodia

流程查询对应数据的taskId功能开发

user5 2 vuotta sitten
vanhempi
commit
8e38837cf5

+ 16 - 16
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java

@@ -127,15 +127,15 @@ public class FlowableTaskController {
      */
     @GetMapping("getTaskDef")
     public ResponseEntity getTaskDef(Flow flow) {
-        /*if(StringUtils.isBlank(flow.getTaskId()) && StringUtils.isNotBlank(flow.getProcDefId())){
-            ActRuTaskInfo taskInfoByProcDefId = flowTaskService.getTaskInfoByProcDefId(flow.getProcDefId());
-            if(null != taskInfoByProcDefId){
-                flow.setTaskId(taskInfoByProcDefId.getId());
-                flow.setProcInsId(taskInfoByProcDefId.getProcInstId());
-                flow.setTaskName(taskInfoByProcDefId.getName());
-                flow.setTaskDefKey(taskInfoByProcDefId.getTaskDefKey());
+        if(StringUtils.isNotBlank(flow.getTaskId()) && StringUtils.isBlank(flow.getTaskName()) && StringUtils.isBlank(flow.getTaskDefKey())){
+            ActRuTaskInfo taskInfoByTaskId = flowTaskService.getTaskInfoByTaskId(flow.getTaskId());
+            if(null != taskInfoByTaskId){
+                flow.setTaskId(taskInfoByTaskId.getId());
+                flow.setProcInsId(taskInfoByTaskId.getProcInstId());
+                flow.setTaskName(taskInfoByTaskId.getName());
+                flow.setTaskDefKey(taskInfoByTaskId.getTaskDefKey());
             }
-        }*/
+        }
         // 获取流程XML上的表单KEY
         String formKey = flowTaskService.getFormKey(flow.getProcDefId(), flow.getTaskDefKey());
 
@@ -258,15 +258,15 @@ public class FlowableTaskController {
     @PostMapping("audit")
     public ResponseEntity auditTask(HttpServletRequest request, Flow flow) {
 
-        /*if(StringUtils.isBlank(flow.getTaskId()) && StringUtils.isNotBlank(flow.getProcDefId())){
-            ActRuTaskInfo taskInfoByProcDefId = flowTaskService.getTaskInfoByProcDefId(flow.getProcDefId());
-            if(null != taskInfoByProcDefId){
-                flow.setTaskId(taskInfoByProcDefId.getId());
-                flow.setProcInsId(taskInfoByProcDefId.getProcInstId());
-                flow.setTaskName(taskInfoByProcDefId.getName());
-                flow.setTaskDefKey(taskInfoByProcDefId.getTaskDefKey());
+        if(StringUtils.isNotBlank(flow.getTaskId()) && StringUtils.isBlank(flow.getTaskName()) && StringUtils.isBlank(flow.getTaskDefKey())){
+            ActRuTaskInfo taskInfoByTaskId = flowTaskService.getTaskInfoByTaskId(flow.getTaskId());
+            if(null != taskInfoByTaskId){
+                flow.setTaskId(taskInfoByTaskId.getId());
+                flow.setProcInsId(taskInfoByTaskId.getProcInstId());
+                flow.setTaskName(taskInfoByTaskId.getName());
+                flow.setTaskDefKey(taskInfoByTaskId.getTaskDefKey());
             }
-        }*/
+        }
         Map<String, Object> vars = Maps.newHashMap();
         Map<String, String[]> map = request.getParameterMap();
         for (Map.Entry<String, String[]> entry : map.entrySet()) {

+ 2 - 2
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/mapper/FlowMapper.java

@@ -29,8 +29,8 @@ public interface FlowMapper extends BaseMapper <Flow> {
 
     /**
      * 根据流程id查询流程信息
-     * @param procDefId
+     * @param taskId
      * @return
      */
-    ActRuTaskInfo getTaskInfoByProcDefId(String procDefId);
+    ActRuTaskInfo getTaskInfoByTaskId(String taskId);
 }

+ 2 - 2
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/mapper/xml/FlowMapper.xml

@@ -29,7 +29,7 @@
 		where PROC_INST_ID_= #{processInstanceId}
 	</select>
 
-	<select id="getTaskInfoByProcDefId" resultType="com.jeeplus.flowable.model.ActRuTaskInfo">
+	<select id="getTaskInfoByTaskId" resultType="com.jeeplus.flowable.model.ActRuTaskInfo">
 		select
 		  ID_ as "id",
 		  REV_ as "rev",
@@ -62,7 +62,7 @@
 		  SUB_TASK_COUNT_  as "subTaskCount"
 		from
 		  act_ru_task
-		where PROC_DEF_ID_= #{procDefId}
+		where ID_= #{taskId}
 		order by CREATE_TIME_ desc
 		limit 1
 	</select>

+ 18 - 2
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java

@@ -151,6 +151,17 @@ public class FlowTaskService {
         return page;
     }
 
+
+    public List <Task> getRecords() {
+        String userId = UserUtils.getCurrentUserDTO ().getId ();
+        // =============== 已经签收或者等待签收的任务  ===============
+        TaskQuery todoTaskQuery = taskService.createTaskQuery ().taskCandidateOrAssigned (userId).active ()
+                .includeProcessVariables ().orderByTaskCreateTime ().desc ();
+
+        List <Task> todoList = todoTaskQuery.list ( );
+        return todoList;
+    }
+
     /**
      * 获取已办任务列表
      *
@@ -970,8 +981,13 @@ public class FlowTaskService {
         return task;
     }
 
-    public ActRuTaskInfo getTaskInfoByProcDefId(String procDefId){
-        return flowMapper.getTaskInfoByProcDefId(procDefId);
+    /**
+     * 根据taskId查询流程信息
+     * @param taskId
+     * @return
+     */
+    public ActRuTaskInfo getTaskInfoByTaskId(String taskId){
+        return flowMapper.getTaskInfoByTaskId(taskId);
     }
 
 }

+ 99 - 0
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/utils/FlowTaskUtil.java

@@ -0,0 +1,99 @@
+package com.jeeplus.flowable.utils;
+
+import com.jeeplus.flowable.service.FlowTaskService;
+import com.jeeplus.sys.utils.SpringContextHolder;
+import org.flowable.task.api.Task;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author: 徐滕
+ * @version: 2022-12-08 15:34
+ */
+public class FlowTaskUtil {
+
+    private FlowTaskService flowTaskService = SpringContextHolder.getBean(FlowTaskService.class);
+
+
+    public <T> List<T> taskDispose(List<T> list) {
+
+        List<Task> taskList = flowTaskService.getRecords();
+        Method procInsIdMethod = null;
+        Method processDefinitionIdMethod = null;
+        Method statusMethod = null;
+        for (T info : list ) {
+            Class<? extends Object> tClass = info.getClass();
+            //得到所有属性
+            Field[] fields = tClass.getDeclaredFields();
+            Class<? extends Object> superClass = tClass.getSuperclass();
+            //得到所有属性
+            Field[] superField = superClass.getDeclaredFields();
+            Field[] field = concat(fields,superField);
+
+            for (Task taskInfo : taskList) {
+                Integer taskIdInteger = null;
+                try {
+                    for (Integer i=0; i<field.length; i++ ){
+                        //获取属性的名字
+                        String name = field[i].getName();
+                        //将属性名字的首字母大写
+                        name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());
+
+                        if("ProcInsId".equals(name)){
+                            field[i].setAccessible(true);
+                            //整合出 getId() 属性这个方法
+                            procInsIdMethod = tClass.getMethod("get"+name);
+
+                        }else if("ProcessDefinitionId".equals(name)){
+                            field[i].setAccessible(true);
+                            //整合出 getId() 属性这个方法
+                            processDefinitionIdMethod = tClass.getMethod("get"+name);
+
+                        }else if("Status".equals(name)){
+                            field[i].setAccessible(true);
+                            //整合出 getId() 属性这个方法
+                            statusMethod = tClass.getMethod("get"+name);
+
+                        }else if("TaskId".equals(name)){
+                            field[i].setAccessible(true);
+                            //整合出 getId() 属性这个方法
+                            taskIdInteger = i;
+
+                        }
+                    }
+
+                    //调用这个整合出来的get方法,强转成自己需要的类型
+                    String procInsId = (String)procInsIdMethod.invoke(info);
+                    String processDefinitionId = (String)processDefinitionIdMethod.invoke(info);
+                    String status = (String)statusMethod.invoke(info);
+
+                    if(procInsId.equals(taskInfo.getProcessInstanceId()) && processDefinitionId.equals(taskInfo.getProcessDefinitionId()) && "4".equals(status)){
+                        field[taskIdInteger].set(info,taskInfo.getId());
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return list;
+
+    }
+
+    /**
+     * 数据整合方法
+     * @param a
+     * @param b
+     * @return
+     */
+    static Field[] concat(Field[] a, Field[] b) {
+
+        Field[] c= new Field[a.length+b.length];
+        System.arraycopy(a, 0, c, 0, a.length);
+        System.arraycopy(b, 0, c, a.length, b.length);
+        return c;
+    }
+
+}