Bläddra i källkod

已办功能调整

lizhenhao 2 år sedan
förälder
incheckning
82082e7700

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

@@ -3,11 +3,18 @@
  */
 package com.jeeplus.flowable.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.flowable.model.ActHiIdentitylink;
 import com.jeeplus.flowable.model.ActRuTaskInfo;
 import com.jeeplus.flowable.model.Flow;
 import com.jeeplus.flowable.vo.AssigneeDto;
+import com.jeeplus.flowable.vo.HisTaskVo;
+import org.apache.ibatis.annotations.Param;
+import org.flowable.task.api.history.HistoricTaskInstance;
 
 import java.util.List;
 
@@ -40,4 +47,6 @@ public interface FlowMapper extends BaseMapper <Flow> {
     List<AssigneeDto> getAssigneeDtoByTaskId(String taskId);
 
     String getStarterByProcInsId(String procInsId);
+
+    Page<HisTaskVo> getHistoricList(Page<HisTaskVo> page, @Param(Constants.WRAPPER) QueryWrapper<HisTaskVo> queryWrapper);
 }

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

@@ -87,4 +87,51 @@
 		from act_ru_identitylink ari
 		where ari.PROC_INST_ID_ = #{procInsId} and ari.TYPE_ = 'starter'
 	</select>
+
+	<select id="getHistoricList" resultType="com.jeeplus.flowable.vo.HisTaskVo">
+		SELECT
+			<include refid="ACT_HI_TASKINST"></include>,
+			var.TEXT_ as title,
+			su2.NAME as startUserName,
+			hi_id.USER_ID_ as startUserId,
+			su.NAME as assigneeName
+		FROM
+			act_hi_taskinst aht
+		LEFT JOIN sys_user su ON su.id = aht.ASSIGNEE_
+		LEFT JOIN act_hi_varinst var ON var.PROC_INST_ID_ = aht.PROC_INST_ID_ AND var.NAME_ = 'title'
+		LEFT JOIN act_hi_identitylink hi_id ON hi_id.PROC_INST_ID_ = aht.PROC_INST_ID_ AND hi_id.TYPE_ = 'starter'
+		LEFT JOIN sys_user su2 ON su2.id = hi_id.USER_ID_
+		${ew.customSqlSegment}
+		ORDER BY
+			aht.END_TIME_ DESC
+	</select>
+	<sql id="ACT_HI_TASKINST">
+        aht.ID_ as ID,
+        aht.REV_ as REV,
+        aht.PROC_DEF_ID_ as processDefinitionId,
+        aht.TASK_DEF_ID_ as TASK_DEF_ID,
+        aht.TASK_DEF_KEY_ as taskDefinitionKey,
+        aht.PROC_INST_ID_ as processInstanceId,
+        aht.EXECUTION_ID_ as EXECUTION_ID,
+        aht.SCOPE_ID_ as SCOPE_ID,
+        aht.SUB_SCOPE_ID_ as SUB_SCOPE_ID,
+        aht.SCOPE_TYPE_ as SCOPE_TYPE,
+        aht.SCOPE_DEFINITION_ID_ as SCOPE_DEFINITION_ID,
+        aht.NAME_ as `NAME`,
+        aht.PARENT_TASK_ID_ as PARENT_TASK_ID,
+        aht.DESCRIPTION_ as DESCRIPTION,
+        aht.OWNER_ as OWNER,
+        aht.ASSIGNEE_ as ASSIGNEE,
+        aht.START_TIME_ as createTime,
+        aht.CLAIM_TIME_ as CLAIM_TIME,
+        aht.END_TIME_ as END_TIME,
+        aht.DURATION_ as DURATION,
+        aht.DELETE_REASON_ as DELETE_REASON,
+        aht.PRIORITY_ as PRIORITY,
+        aht.DUE_DATE_ as DUE_DATE,
+        aht.FORM_KEY_ as FORM_KEY,
+        aht.CATEGORY_ as CATEGORY,
+        aht.TENANT_ID_ as TENANT_ID,
+        aht.LAST_UPDATED_TIME_ as LAST_UPDATED_TIME
+    </sql>
 </mapper>

+ 41 - 56
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/service/FlowTaskService.java

@@ -7,6 +7,8 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -176,70 +178,49 @@ public class FlowTaskService {
      * @return
      */
     public Page<HisTaskVo> historicList(Page<HisTaskVo> page, Flow act) {
-        String userId = UserUtils.getCurrentUserDTO ().getId ();
-
-        HistoricTaskInstanceQuery histTaskQuery = historyService.createHistoricTaskInstanceQuery ().taskAssignee (userId).finished ()
-                .includeProcessVariables ().orderByHistoricTaskInstanceEndTime ().desc ();
-
-        // 设置查询条件
-        if (StrUtil.isNotBlank (act.getProcDefKey ())) {
-            histTaskQuery.processDefinitionKey (act.getProcDefKey ());
-        }
-        if (act.getBeginDate () != null) {
-            histTaskQuery.taskCompletedAfter (act.getBeginDate ());
-        }
-        if (act.getEndDate () != null) {
-            histTaskQuery.taskCompletedBefore (act.getEndDate ());
-        }
-        if (StrUtil.isNotBlank (act.getTitle ())) {
-            // 实例标题
-            histTaskQuery.processVariableValueLike (FlowableConstant.TITLE, "%" + act.getTitle () + "%");
-        }
-        if (StrUtil.isNotBlank (act.getApplyUserId())) {
-            // 流程发起人
-            histTaskQuery.processVariableValueEquals (FlowableConstant.INITIATOR, act.getApplyUserId ());
-        }
-
-        // 查询总数
-        page.setTotal (histTaskQuery.count ());
-        // 查询列表
-        List<HistoricTaskInstance> histList;
-        if (page.getSize () == -1) {
-            histList = histTaskQuery.list ();
-        } else {
-            int start = (int) ((page.getCurrent ( ) - 1) * page.getSize ( ));
-            int size = (int) (page.getSize ( ));
-            histList = histTaskQuery.listPage (start, size);
+        QueryWrapper<HisTaskVo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("aht.ASSIGNEE_", UserUtils.getCurrentUserDTO ().getId ());
+        if (ObjectUtil.isNotEmpty(act)) {
+            if (StrUtil.isNotBlank (act.getProcDefKey ())) {
+                queryWrapper.eq ("aht.TASK_DEF_KEY_",act.getProcDefKey ());
+            }
+            if (act.getBeginDate () != null && act.getEndDate () != null) {
+                queryWrapper.between("aht.END_TIME_", act.getBeginDate (), act.getEndDate ());
+            }
+            if (StrUtil.isNotBlank (act.getTitle ())) {
+                queryWrapper.like ("var.TEXT_", act.getTitle ());
+            }
+            if (StrUtil.isNotBlank (act.getApplyUserId())) {
+                queryWrapper.eq("hi_id.USER_ID_", act.getApplyUserId());
+            }
         }
-
-        List records = Lists.newArrayList ();
-        for (HistoricTaskInstance histTask : histList) {
-            HisTaskVo hisTaskVo= new HisTaskVo (histTask);
-            hisTaskVo.setProcessDefinitionName ( ProcessDefCache.get (histTask.getProcessDefinitionId ()).getName ());
-            hisTaskVo.setBack (isBack (histTask));
-            List<Task> currentTaskList = taskService.createTaskQuery ().processInstanceId (histTask.getProcessInstanceId ()).list ();
+        Page<HisTaskVo> histList = flowMapper.getHistoricList(page, queryWrapper);
+        histList.getRecords().stream().forEach(hisTaskVo -> {
+            hisTaskVo.setVars(new HashMap());
+            if (StringUtils.isNotBlank(hisTaskVo.getTitle())) {
+                hisTaskVo.getVars().put("title", hisTaskVo.getTitle());
+            }
+            if (StringUtils.isNotBlank(hisTaskVo.getStartUserName())) {
+                hisTaskVo.getVars().put("userName", hisTaskVo.getStartUserName());
+            }
+            hisTaskVo.setProcessDefinitionName ( ProcessDefCache.get (hisTaskVo.getProcessDefinitionId ()).getName ());
+            hisTaskVo.setBack (isBack (hisTaskVo));
+            List<Task> currentTaskList = taskService.createTaskQuery ().processInstanceId (hisTaskVo.getProcessInstanceId ()).list ();
             if(((List) currentTaskList).size () > 0){
                 TaskVo currentTaskVo =  new TaskVo (currentTaskList.get (0));
                 hisTaskVo.setCurrentTask (currentTaskVo);
             }
-
-
-
             // 获取意见评论内容
-
-            List<TaskComment> commentList = this.getTaskComments (histTask.getId ());
+            List<TaskComment> commentList = this.getTaskComments (hisTaskVo.getId ());
             if (commentList.size () > 0) {
                 TaskComment comment = commentList.get (commentList.size ()-1);
                 hisTaskVo.setComment (comment.getMessage ());
                 hisTaskVo.setLevel (comment.getLevel ());
                 hisTaskVo.setType (comment.getType ());
                 hisTaskVo.setStatus (comment.getStatus ());
-
             }
-            records.add ( hisTaskVo );
-        }
-        page.setRecords ( records );
-        return page;
+        });
+        return histList;
     }
 
     /**
@@ -821,21 +802,25 @@ public class FlowTaskService {
     /**
      * 是否可以取回任务
      */
-    public boolean isBack(HistoricTaskInstance hisTask) {
+    public boolean isBack(HisTaskVo hisTaskVo) {
         ProcessInstance pi = runtimeService.createProcessInstanceQuery ()
-                .processInstanceId (hisTask.getProcessInstanceId ()).singleResult ();
+                .processInstanceId (hisTaskVo.getProcessInstanceId ()).singleResult ();
         if (pi != null) {
             if (pi.isSuspended ()) {
                 return false;
             } else {
-                Task currentTask = taskService.createTaskQuery ().processInstanceId (hisTask.getProcessInstanceId ()).list ().get (0);
-                HistoricTaskInstance lastHisTask = historyService.createHistoricTaskInstanceQuery ().processInstanceId (hisTask.getProcessInstanceId ()).finished ()
+                List<Task> list = taskService.createTaskQuery().processInstanceId(hisTaskVo.getProcessInstanceId()).list();
+                if (CollectionUtil.isEmpty(list)) {
+                    return false;
+                }
+                Task currentTask = list.get (0);
+                HistoricTaskInstance lastHisTask = historyService.createHistoricTaskInstanceQuery ().processInstanceId (hisTaskVo.getProcessInstanceId ()).finished ()
                         .includeProcessVariables ().orderByHistoricTaskInstanceEndTime ().desc ().list ().get (0);
 
                 if (currentTask.getClaimTime () != null) {//用户已签收
                     return false;
                 }
-                if (hisTask.getId ().equals (lastHisTask.getId ())) {
+                if (hisTaskVo.getId ().equals (lastHisTask.getId ())) {
                     return true;
                 }
                 return false;

+ 9 - 0
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/vo/HisTaskVo.java

@@ -1,6 +1,8 @@
 package com.jeeplus.flowable.vo;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.flowable.task.api.history.HistoricTaskInstance;
 
 import java.util.Date;
@@ -10,6 +12,8 @@ import java.util.Map;
     历史任务节点
  */
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class HisTaskVo {
     private String id;
     private String name;
@@ -29,6 +33,11 @@ public class HisTaskVo {
     private String level; // 文字颜色
     private Map vars;
 
+    private String title; // 实例标题
+    private String startUserId; // 流程发起人id
+    private String startUserName; // 流程发起人姓名
+    private String assigneeName; // 节点审核人姓名
+
     private TaskVo currentTask; // 当前流程节点
 
     public HisTaskVo(HistoricTaskInstance task){