ソースを参照

新增流程实例审批历史列表

hubin 1 年間 前
コミット
144395328b

+ 10 - 0
src/main/java/com/aizuda/boot/modules/flw/controller/ProcessTaskController.java

@@ -5,6 +5,7 @@ import com.aizuda.boot.modules.flw.entity.dto.AssigneeTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ExecuteTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ProcessTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.RejectTaskDTO;
+import com.aizuda.boot.modules.flw.entity.vo.FlwHisTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.PendingApprovalTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.PendingClaimTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO;
@@ -19,6 +20,8 @@ import lombok.AllArgsConstructor;
 import org.simpleframework.xml.core.Validate;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * 流程任务 前端控制器
  *
@@ -115,4 +118,11 @@ public class ProcessTaskController extends ApiController {
     public boolean reject(@Validate @RequestBody RejectTaskDTO dto) {
         return processTaskService.reject(FlowHelper.getFlowCreator(), dto);
     }
+
+    @Operation(summary = "查询流程实例ID的审批历史")
+    @Permission("flw:processTask:reject")
+    @PostMapping("/list-his-task/{instanceId}")
+    public List<FlwHisTaskVO> listHisTask(@PathVariable("instanceId") Long instanceId) {
+        return processTaskService.listHisTaskByInstanceId(instanceId);
+    }
 }

+ 18 - 0
src/main/java/com/aizuda/boot/modules/flw/entity/vo/FlwHisTaskVO.java

@@ -0,0 +1,18 @@
+package com.aizuda.boot.modules.flw.entity.vo;
+
+import com.flowlong.bpm.engine.entity.FlwHisTask;
+import com.flowlong.bpm.engine.entity.FlwHisTaskActor;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class FlwHisTaskVO extends FlwHisTask {
+
+    @Schema(description = "参与者列表")
+    private List<FlwHisTaskActor> actorList;
+
+}

+ 10 - 9
src/main/java/com/aizuda/boot/modules/flw/mapper/FlowlongMapper.java

@@ -1,10 +1,7 @@
 package com.aizuda.boot.modules.flw.mapper;
 
 import com.aizuda.boot.modules.flw.entity.dto.ProcessTaskDTO;
-import com.aizuda.boot.modules.flw.entity.vo.FlwProcessVO;
-import com.aizuda.boot.modules.flw.entity.vo.PendingApprovalTaskVO;
-import com.aizuda.boot.modules.flw.entity.vo.PendingClaimTaskVO;
-import com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO;
+import com.aizuda.boot.modules.flw.entity.vo.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -21,26 +18,30 @@ public interface FlowlongMapper {
     /**
      * 待认领任务分页列表
      */
-    Page<PendingClaimTaskVO> selectPagePendingClaim(Page page, @Param("dto") ProcessTaskDTO dto);
+    Page<PendingClaimTaskVO> selectPagePendingClaim(Page<PendingClaimTaskVO> page, @Param("dto") ProcessTaskDTO dto);
 
     /**
      * 待审批任务分页列表
      */
-    Page<PendingApprovalTaskVO> selectPagePendingApproval(Page page, @Param("dto") ProcessTaskDTO dto);
+    Page<PendingApprovalTaskVO> selectPagePendingApproval(Page<PendingApprovalTaskVO> page, @Param("dto") ProcessTaskDTO dto);
 
     /**
      * 我的申请任务分页列表
      */
-    Page<ProcessTaskVO> selectPageMyApplication(Page page, @Param("dto") ProcessTaskDTO dto);
+    Page<ProcessTaskVO> selectPageMyApplication(Page<ProcessTaskVO> page, @Param("dto") ProcessTaskDTO dto);
 
     /**
      * 我收到的任务分页列表
      */
-    Page<ProcessTaskVO> selectPageMyReceived(Page page, @Param("dto") ProcessTaskDTO dto);
+    Page<ProcessTaskVO> selectPageMyReceived(Page<ProcessTaskVO> page, @Param("dto") ProcessTaskDTO dto);
 
     /**
      * 已审批任务分页列表
      */
-    Page<ProcessTaskVO> selectPageApproved(Page page, @Param("dto") ProcessTaskDTO dto);
+    Page<ProcessTaskVO> selectPageApproved(Page<ProcessTaskVO> page, @Param("dto") ProcessTaskDTO dto);
 
+    /**
+     * 查询流程实例ID的审批历史
+     */
+    List<FlwHisTaskVO> selectListHisTaskByInstanceId(@Param("instanceId") Long instanceId);
 }

+ 11 - 0
src/main/java/com/aizuda/boot/modules/flw/service/IProcessTaskService.java

@@ -4,6 +4,7 @@ import com.aizuda.boot.modules.flw.entity.dto.AssigneeTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ExecuteTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ProcessTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.RejectTaskDTO;
+import com.aizuda.boot.modules.flw.entity.vo.FlwHisTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.PendingApprovalTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.PendingClaimTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO;
@@ -12,6 +13,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.flowlong.bpm.engine.core.FlowCreator;
 import com.flowlong.bpm.engine.entity.FlwTaskActor;
 
+import java.util.List;
+
 /**
  * 流程任务 服务类
  *
@@ -115,4 +118,12 @@ public interface IProcessTaskService {
     boolean transfer(FlowCreator flowCreator, AssigneeTaskDTO dto);
 
     boolean delegate(FlowCreator flowCreator, AssigneeTaskDTO dto);
+
+    /**
+     * 查询流程实例ID的审批历史
+     *
+     * @param instanceId 流程实例ID
+     * @return 审批历史VO列表
+     */
+    List<FlwHisTaskVO> listHisTaskByInstanceId(Long instanceId);
 }

+ 25 - 0
src/main/java/com/aizuda/boot/modules/flw/service/impl/ProcessTaskServiceImpl.java

@@ -4,6 +4,7 @@ import com.aizuda.boot.modules.flw.entity.dto.AssigneeTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ExecuteTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.ProcessTaskDTO;
 import com.aizuda.boot.modules.flw.entity.dto.RejectTaskDTO;
+import com.aizuda.boot.modules.flw.entity.vo.FlwHisTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.PendingApprovalTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.PendingClaimTaskVO;
 import com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO;
@@ -12,16 +13,24 @@ import com.aizuda.boot.modules.flw.service.IProcessTaskService;
 import com.aizuda.core.api.ApiAssert;
 import com.aizuda.core.api.PageParam;
 import com.aizuda.service.web.UserSession;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.flowlong.bpm.engine.FlowLongEngine;
 import com.flowlong.bpm.engine.TaskService;
 import com.flowlong.bpm.engine.core.FlowCreator;
+import com.flowlong.bpm.engine.entity.FlwHisTaskActor;
 import com.flowlong.bpm.engine.entity.FlwTask;
 import com.flowlong.bpm.engine.entity.FlwTaskActor;
+import com.flowlong.bpm.mybatisplus.mapper.FlwHisTaskActorMapper;
 import jakarta.annotation.Resource;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
 /**
  * 流程任务 服务实现类
  *
@@ -33,6 +42,8 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
     @Resource
     private FlowlongMapper flowlongMapper;
     @Resource
+    private FlwHisTaskActorMapper flwHisTaskActorMapper;
+    @Resource
     private FlowLongEngine flowLongEngine;
 
     @Override
@@ -147,4 +158,18 @@ public class ProcessTaskServiceImpl implements IProcessTaskService {
         FlwTaskActor flwTaskActor = FlwTaskActor.ofFlowCreator(flowCreator);
         return taskService.delegateTask(dto.getTaskId(), flwTaskActor, dto.toFlwTaskActor());
     }
+
+    @Override
+    public List<FlwHisTaskVO> listHisTaskByInstanceId(Long instanceId) {
+        List<FlwHisTaskVO> voList = flowlongMapper.selectListHisTaskByInstanceId(instanceId);
+        if (CollectionUtils.isNotEmpty(voList)) {
+            List<FlwHisTaskActor> actorList = flwHisTaskActorMapper.selectList(Wrappers.<FlwHisTaskActor>lambdaQuery()
+                    .eq(FlwHisTaskActor::getInstanceId, instanceId).orderByAsc(FlwHisTaskActor::getId));
+            if (CollectionUtils.isNotEmpty(actorList)) {
+                voList.forEach(t -> t.setActorList(actorList.stream().filter(v -> Objects.equals(v.getTaskId(), t.getId()))
+                        .collect(Collectors.toList())));
+            }
+        }
+        return voList;
+    }
 }

+ 6 - 1
src/main/resources/mapper/FlowlongMapper.xml

@@ -48,7 +48,8 @@
     <select id="selectPageMyReceived" resultType="com.aizuda.boot.modules.flw.entity.vo.ProcessTaskVO">
         SELECT i.process_id,p.process_name,i.current_node,i.id AS instance_id,i.instance_state,i.create_id,i.create_by,i.create_time,i.expire_time,i.end_time,i.duration
         FROM flw_his_instance i LEFT JOIN flw_process p ON i.process_id=p.id
-        WHERE EXISTS (SELECT 1 FROM flw_task_cc c WHERE i.id=c.instance_id AND c.actor_id=#{dto.createId})
+        FROM flw_his_instance i JOIN flw_his_task t ON i.id=t.instance_id JOIN flw_his_task_actor a ON t.id=a.task_id JOIN flw_process p ON i.process_id=p.id
+        WHERE t.task_type=4 AND a.actor_id=#{dto.createId}
         <if test="dto.processName != null">
             AND p.process_name LIKE CONCAT(CONCAT('%',#{dto.processName}),'%')
         </if>
@@ -63,4 +64,8 @@
         </if>
     </select>
 
+    <select id="selectListHisTaskByInstanceId" resultType="com.aizuda.boot.modules.flw.entity.vo.FlwHisTaskVO">
+        SELECT * FROM flw_his_task ORDER BY create_time ASC
+    </select>
+
 </mapper>