From 8322d510fe3669493d4eb093c31c8d7d2302247c Mon Sep 17 00:00:00 2001
From: dhb52 <dhb52@126.com>
Date: Sun, 5 May 2024 21:59:34 +0800
Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=AE=80=E5=8C=96JobBatchServiceIm?=
 =?UTF-8?q?pl.getJobBatchPage=E4=BB=A3=E7=A0=81=EF=BC=8C=E6=8A=BD=E5=8F=96?=
 =?UTF-8?q?UserSessionUtils.hasGroupPermission=E5=87=BD=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../web/service/impl/JobBatchServiceImpl.java | 49 +++++--------------
 .../server/web/util/UserSessionUtils.java     | 25 ++++++++--
 2 files changed, 33 insertions(+), 41 deletions(-)

diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java
index 1efd7fd6..9230a0e0 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java
@@ -1,6 +1,5 @@
 package com.aizuda.snailjob.server.web.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.aizuda.snailjob.common.core.constant.SystemConstants;
 import com.aizuda.snailjob.common.core.util.JsonUtil;
@@ -15,7 +14,6 @@ import com.aizuda.snailjob.server.web.service.JobBatchService;
 import com.aizuda.snailjob.server.web.service.convert.JobBatchResponseVOConverter;
 import com.aizuda.snailjob.server.web.service.handler.JobHandler;
 import com.aizuda.snailjob.server.web.util.UserSessionUtils;
-import com.aizuda.snailjob.template.datasource.persistence.dataobject.JobBatchQueryDO;
 import com.aizuda.snailjob.template.datasource.persistence.dataobject.JobBatchResponseDO;
 import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper;
 import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper;
@@ -23,15 +21,12 @@ import com.aizuda.snailjob.template.datasource.persistence.mapper.WorkflowNodeMa
 import com.aizuda.snailjob.template.datasource.persistence.po.Job;
 import com.aizuda.snailjob.template.datasource.persistence.po.JobTaskBatch;
 import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowNode;
-import com.aizuda.snailjob.server.web.service.convert.JobBatchResponseVOConverter;
-import com.aizuda.snailjob.server.web.service.handler.JobHandler;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
 import com.google.common.collect.Lists;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
 
 import java.util.List;
 import java.util.Objects;
@@ -52,46 +47,24 @@ public class JobBatchServiceImpl implements JobBatchService {
 
     @Override
     public PageResult<List<JobBatchResponseVO>> getJobBatchPage(final JobBatchQueryVO queryVO) {
-
         PageDTO<JobTaskBatch> pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize());
-
         UserSessionVO userSessionVO = UserSessionUtils.currentUserSession();
-        List<String> groupNames = Lists.newArrayList();
-        if (userSessionVO.isUser()) {
-            groupNames = userSessionVO.getGroupNames();
+        if (!UserSessionUtils.hasGroupPermission(queryVO.getGroupName())) {
+            return new PageResult<>(pageDTO, Lists.newArrayList());
         }
 
-        if (StrUtil.isNotBlank(queryVO.getGroupName())) {
-            // 说明当前组不在用户配置的权限中
-            if (!CollectionUtils.isEmpty(groupNames) && !groupNames.contains(queryVO.getGroupName())) {
-                return new PageResult<>(pageDTO, Lists.newArrayList());
-            } else {
-                groupNames = Lists.newArrayList(queryVO.getGroupName());
-            }
-        }
-
-        JobBatchQueryDO queryDO = new JobBatchQueryDO();
-        if (StrUtil.isNotBlank(queryVO.getJobName())) {
-            queryDO.setJobName(queryVO.getJobName() + "%");
-        }
-
-        queryDO.setJobId(queryVO.getJobId());
-        queryDO.setTaskBatchStatus(queryVO.getTaskBatchStatus());
-        queryDO.setGroupNames(groupNames);
-        queryDO.setNamespaceId(userSessionVO.getNamespaceId());
         QueryWrapper<JobTaskBatch> wrapper = new QueryWrapper<JobTaskBatch>()
-                .eq("a.namespace_id", queryDO.getNamespaceId())
-                .eq("a.system_task_type", 3)
-                .eq(queryDO.getJobId() != null, "a.job_id", queryDO.getJobId())
-                .in(CollUtil.isNotEmpty(queryDO.getGroupNames()), "a.group_name", queryDO.getGroupNames())
-                .eq(queryDO.getTaskBatchStatus() != null, "task_batch_status", queryDO.getTaskBatchStatus())
-                .eq(StrUtil.isNotBlank(queryDO.getJobName()), "job_name", queryDO.getJobName())
-                .eq("a.deleted", 0)
-                .orderByDesc("a.id");
+            .eq("a.namespace_id", userSessionVO.getNamespaceId())
+            .eq("a.system_task_type", SyetemTaskTypeEnum.JOB.getType())
+            .eq(queryVO.getJobId() != null, "a.job_id", queryVO.getJobId())
+            .eq(StrUtil.isNotBlank(queryVO.getGroupName()), "a.group_name", queryVO.getGroupName())
+            .eq(queryVO.getTaskBatchStatus() != null, "task_batch_status", queryVO.getTaskBatchStatus())
+            .likeRight(StrUtil.isNotBlank(queryVO.getJobName()), "job_name", queryVO.getJobName())
+            .eq("a.deleted", 0)
+            .orderByDesc("a.id");
         List<JobBatchResponseDO> batchResponseDOList = jobTaskBatchMapper.selectJobBatchPageList(pageDTO, wrapper);
-
         List<JobBatchResponseVO> batchResponseVOList = JobBatchResponseVOConverter.INSTANCE.toJobBatchResponseVOs(
-                batchResponseDOList);
+            batchResponseDOList);
 
         return new PageResult<>(pageDTO, batchResponseVOList);
     }
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java
index 8e51d5ce..0a79081d 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java
@@ -1,12 +1,12 @@
 package com.aizuda.snailjob.server.web.util;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.aizuda.snailjob.server.web.model.request.UserSessionVO;
-import com.aizuda.snailjob.server.web.model.request.UserSessionVO;
+import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import jakarta.servlet.http.HttpServletRequest;
-
 /**
  * @author opensnail
  * @date 2023-11-22 23:14:53
@@ -18,4 +18,23 @@ public final class UserSessionUtils {
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         return (UserSessionVO) request.getAttribute("currentUser");
     }
+
+    /**
+     * 判断当前用户是否具备组权限
+     *
+     * @param groupName 组名称
+     * @return true, 具备权限,否则返回false
+     */
+    public static boolean hasGroupPermission(String groupName) {
+        if (StrUtil.isBlank(groupName)) {
+            return true;
+        }
+
+        UserSessionVO userSessionVO = currentUserSession();
+        if (userSessionVO.isUser() && CollUtil.isNotEmpty(userSessionVO.getGroupNames())) {
+            return userSessionVO.getGroupNames().contains(groupName);
+        }
+
+        return false;
+    }
 }