Selaa lähdekoodia

失效流程剔除

ye-zhaojia 2 viikkoa sitten
vanhempi
commit
8bf9e41518

+ 5 - 0
src/main/java/com/qqflow/engine/domain/flow/mapper/ApprovalTaskMapper.java

@@ -49,4 +49,9 @@ public interface ApprovalTaskMapper extends BaseMapper<ApprovalTask> {
             @Param("assigneeType") String assigneeType,
             @Param("assigneeType") String assigneeType,
             @Param("roleIds") List<Long> roleIds,
             @Param("roleIds") List<Long> roleIds,
             @Param("processName") String processName);
             @Param("processName") String processName);
+
+    Long selectTodoCount(
+            @Param("assigneeId") Long assigneeId,
+            @Param("assigneeType") String assigneeType,
+            @Param("roleIds") List<Long> roleIds);
 }
 }

+ 2 - 12
src/main/java/com/qqflow/engine/domain/flow/service/impl/ApprovalTaskServiceImpl.java

@@ -353,18 +353,8 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
 
 
     @Override
     @Override
     public Long todoCount(Long assigneeId, String assigneeType) {
     public Long todoCount(Long assigneeId, String assigneeType) {
-        LambdaQueryWrapper<ApprovalTask> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(ApprovalTask::getAssigneeId, assigneeId)
-                .eq(ApprovalTask::getTaskStatus, TaskStatus.PENDING.getCode())
-                .ne(ApprovalTask::getNodeType, NodeType.CC.getCode());
-        if (ASSIGNEE_TYPE_ROLE.equals(assigneeType)) {
-            wrapper.eq(ApprovalTask::getAssigneeType, ASSIGNEE_TYPE_ROLE);
-        } else {
-            wrapper.and(w -> w.isNull(ApprovalTask::getAssigneeType)
-                    .or().eq(ApprovalTask::getAssigneeType, "")
-                    .or().eq(ApprovalTask::getAssigneeType, ASSIGNEE_TYPE_USER));
-        }
-        return this.approvalTaskMapper.selectCount(wrapper);
+        List<Long> roleIds = loadRoleIdsIfSystemUser(assigneeId, assigneeType);
+        return this.approvalTaskMapper.selectTodoCount(assigneeId, assigneeType, roleIds);
     }
     }
 
 
     private ApprovalTask getPendingTask(Long taskId) {
     private ApprovalTask getPendingTask(Long taskId) {

+ 25 - 0
src/main/resources/mapper/flow/ApprovalTaskMapper.xml

@@ -37,6 +37,7 @@
         WHERE t.deleted = 0
         WHERE t.deleted = 0
           AND t.task_status = 0
           AND t.task_status = 0
           AND t.node_type != 'cc'
           AND t.node_type != 'cc'
+          AND pi.status IN (0, 1, 4)
           AND (
           AND (
             <choose>
             <choose>
               <when test="assigneeType == 'ROLE'">
               <when test="assigneeType == 'ROLE'">
@@ -111,4 +112,28 @@
         ORDER BY t.create_time DESC
         ORDER BY t.create_time DESC
     </select>
     </select>
 
 
+    <select id="selectTodoCount" resultType="java.lang.Long">
+        SELECT COUNT(*)
+        FROM bpm_approval_task t
+        INNER JOIN bpm_process_instance pi ON t.instance_id = pi.id
+        WHERE t.deleted = 0
+          AND t.task_status = 0
+          AND t.node_type != 'cc'
+          AND pi.status IN (0, 1, 4)
+          AND (
+            <choose>
+              <when test="assigneeType == 'ROLE'">
+                  (t.assignee_type = 'ROLE' AND t.assignee_id = #{assigneeId})
+              </when>
+              <when test="roleIds != null and roleIds.size() > 0">
+                  ((t.assignee_type != 'ROLE' AND t.assignee_id = #{assigneeId})
+                   OR (t.assignee_type = 'ROLE' AND t.assignee_id IN
+                       <foreach collection="roleIds" item="roleId" open="(" close=")" separator=",">#{roleId}</foreach>))
+              </when>
+              <otherwise>
+                  (t.assignee_id = #{assigneeId} AND (t.assignee_type IS NULL OR t.assignee_type = '' OR t.assignee_type = 'USER'))
+              </otherwise>
+            </choose>
+          )
+    </select>
 </mapper>
 </mapper>