This is an automated email from the ASF dual-hosted git repository.

zihaoxiang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new c5e5ff7b19 [Improvement-15448] Remove redundant query in project list 
(#16341)
c5e5ff7b19 is described below

commit c5e5ff7b1960083057cee324c2f69020d24bb703
Author: xiangzihao <[email protected]>
AuthorDate: Fri Jul 19 10:16:47 2024 +0800

    [Improvement-15448] Remove redundant query in project list (#16341)
    
    * remove redundant query
---
 .../api/service/impl/ProjectServiceImpl.java       | 14 ++++++++++
 .../api/service/UsersServiceTest.java              |  1 -
 .../dolphinscheduler/dao/entity/Project.java       |  5 ----
 .../dao/entity/ProjectProcessDefinitionCount.java  | 32 ++++++++++++++++++++++
 .../dao/mapper/ProcessDefinitionMapper.java        |  4 +++
 .../dao/mapper/ProcessDefinitionMapper.xml         | 12 ++++++++
 .../dolphinscheduler/dao/mapper/ProjectMapper.xml  | 18 +++---------
 .../e2e/pages/resource/FileManagePage.java         | 18 ++++++++++--
 dolphinscheduler-ui/src/locales/en_US/project.ts   |  1 -
 dolphinscheduler-ui/src/locales/zh_CN/project.ts   |  1 -
 .../src/views/projects/list/use-table.ts           |  8 ------
 11 files changed, 82 insertions(+), 32 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectServiceImpl.java
index b5c329c4fd..3c623b7029 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProjectServiceImpl.java
@@ -34,6 +34,7 @@ import 
org.apache.dolphinscheduler.common.utils.CodeGenerateUtils;
 import 
org.apache.dolphinscheduler.common.utils.CodeGenerateUtils.CodeGenerateException;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
 import org.apache.dolphinscheduler.dao.entity.Project;
+import org.apache.dolphinscheduler.dao.entity.ProjectProcessDefinitionCount;
 import org.apache.dolphinscheduler.dao.entity.ProjectUser;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
@@ -393,6 +394,19 @@ public class ProjectServiceImpl extends BaseServiceImpl 
implements ProjectServic
                 project.setPerm(Constants.DEFAULT_ADMIN_PERMISSION);
             }
         }
+        List<User> userList = userMapper.selectByIds(projectList.stream()
+                
.map(Project::getUserId).distinct().collect(Collectors.toList()));
+        List<ProjectProcessDefinitionCount> projectProcessDefinitionCountList =
+                
processDefinitionMapper.queryProjectProcessDefinitionCountByProjectCodes(
+                        
projectList.stream().map(Project::getCode).distinct().collect(Collectors.toList()));
+        for (Project project : projectList) {
+            project.setUserName(userList.stream().filter(user -> 
user.getId().equals(project.getUserId()))
+                    .findFirst().map(User::getUserName).orElse(null));
+            project.setDefCount(projectProcessDefinitionCountList.stream()
+                    .filter(projectProcessDefinitionCount -> 
projectProcessDefinitionCount.getProjectCode()
+                            .equals(project.getCode()))
+                    
.findFirst().map(ProjectProcessDefinitionCount::getCount).orElse(0));
+        }
         pageInfo.setTotal((int) projectIPage.getTotal());
         pageInfo.setTotalList(projectList);
         result.setData(pageInfo);
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
index 290ffefe26..493af5fb2e 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UsersServiceTest.java
@@ -833,7 +833,6 @@ public class UsersServiceTest {
         project.setName("PJ-001");
         project.setPerm(7);
         project.setDefCount(0);
-        project.setInstRunningCount(0);
         return project;
     }
 
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java
index f3a626f5cd..ccce0b70e7 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/Project.java
@@ -91,9 +91,4 @@ public class Project {
     @TableField(exist = false)
     private int defCount;
 
-    /**
-     * process instance running count
-     */
-    @TableField(exist = false)
-    private int instRunningCount;
 }
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProjectProcessDefinitionCount.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProjectProcessDefinitionCount.java
new file mode 100644
index 0000000000..7b796d23d2
--- /dev/null
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProjectProcessDefinitionCount.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.dao.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectProcessDefinitionCount {
+
+    private Long projectCode;
+
+    private Integer count;
+}
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
index 689e93414b..22d354b5d2 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.java
@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.dao.mapper;
 
 import org.apache.dolphinscheduler.dao.entity.DependentSimplifyDefinition;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
+import org.apache.dolphinscheduler.dao.entity.ProjectProcessDefinitionCount;
 import org.apache.dolphinscheduler.dao.model.WorkflowDefinitionCountDto;
 
 import org.apache.ibatis.annotations.Param;
@@ -170,5 +171,8 @@ public interface ProcessDefinitionMapper extends 
BaseMapper<ProcessDefinition> {
      * @return project ids list
      */
     List<Integer> listProjectIds();
+
     List<Long> queryDefinitionCodeListByProjectCodes(@Param("projectCodes") 
List<Long> projectCodes);
+
+    List<ProjectProcessDefinitionCount> 
queryProjectProcessDefinitionCountByProjectCodes(@Param("projectCodes") 
List<Long> projectCodes);
 }
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
index bcd21647b3..8c4f57f4db 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessDefinitionMapper.xml
@@ -194,4 +194,16 @@
                 #{i}
             </foreach>
     </select>
+
+    <select id="queryProjectProcessDefinitionCountByProjectCodes" 
resultType="org.apache.dolphinscheduler.dao.entity.ProjectProcessDefinitionCount">
+        select
+            project_code as projectCode
+            ,count(*) as count
+        from t_ds_process_definition
+        where project_code in
+        <foreach collection="projectCodes" index="index" item="i" open="(" 
separator="," close=")">
+            #{i}
+        </foreach>
+        group by project_code
+    </select>
 </mapper>
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
index 296a42a5fb..ddf4c0c490 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProjectMapper.xml
@@ -82,20 +82,10 @@
     </select>
     <select id="queryProjectListPaging" 
resultType="org.apache.dolphinscheduler.dao.entity.Project">
         select
-        <include refid="baseSqlV2">
-            <property name="alias" value="p"/>
-        </include> ,
-        u.user_name as user_name,
-        count(distinct def.id) AS def_count,
-        count(distinct inst.id) as inst_running_count
+            <include refid="baseSqlV2">
+                <property name="alias" value="p"/>
+            </include>
         from t_ds_project p
-        left join t_ds_user u on u.id=p.user_id
-        left join t_ds_process_definition def
-        on def.project_code = p.code
-        left join t_ds_process_instance inst
-        on inst.process_definition_code = def.code
-        and inst.process_definition_version = def.version
-        and inst.state = 1
         where 1=1
         <if test="projectsIds != null and projectsIds.size() > 0">
             and p.id  in
@@ -108,7 +98,7 @@
             OR p.description LIKE concat('%', #{searchName}, '%')
             )
         </if>
-        group by p.id,u.user_name
+        group by p.id
         order by p.id desc
     </select>
     <select id="queryAuthedProjectListByUserId" 
resultType="org.apache.dolphinscheduler.dao.entity.Project">
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/resource/FileManagePage.java
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/resource/FileManagePage.java
index 5f373b8190..b4f15509a5 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/resource/FileManagePage.java
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/resource/FileManagePage.java
@@ -91,15 +91,18 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
     }
 
     public FileManagePage createDirectory(String name) {
+        waitForPageLoading();
         buttonCreateDirectory().click();
 
         createDirectoryBox().inputDirectoryName().sendKeys(name);
+        WebDriverWaitFactory.createWebDriverWait(driver)
+                
.until(ExpectedConditions.elementToBeClickable(createDirectoryBox().buttonSubmit()));
         createDirectoryBox().buttonSubmit().click();
-
         return this;
     }
 
     public FileManagePage cancelCreateDirectory(String name) {
+        waitForPageLoading();
         buttonCreateDirectory().click();
 
         createDirectoryBox().inputDirectoryName().sendKeys(name);
@@ -109,6 +112,7 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
     }
 
     public FileManagePage rename(String currentName, String AfterName) {
+        waitForPageLoading();
         fileList()
                 .stream()
                 .filter(it -> it.getText().contains(currentName))
@@ -138,12 +142,15 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
         buttonCreateDirectory().click();
 
         createDirectoryBox().inputDirectoryName().sendKeys(subDirectoryName);
+        WebDriverWaitFactory.createWebDriverWait(driver)
+                
.until(ExpectedConditions.elementToBeClickable(createDirectoryBox().buttonSubmit()));
         createDirectoryBox().buttonSubmit().click();
 
         return this;
     }
 
     public FileManagePage delete(String name) {
+        waitForPageLoading();
         fileList()
                 .stream()
                 .filter(it -> it.getText().contains(name))
@@ -160,7 +167,7 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
 
     // todo: add file type
     public FileManagePage createFile(String fileName, String scripts) {
-
+        waitForPageLoading();
         WebDriverWaitFactory.createWebDriverWait(driver)
                 
.until(ExpectedConditions.elementToBeClickable(buttonCreateFile()));
 
@@ -189,6 +196,7 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
     }
 
     public FileManagePage editFile(String fileName, String scripts) {
+        waitForPageLoading();
         fileList()
                 .stream()
                 .filter(it -> it.getText().contains(fileName))
@@ -210,6 +218,7 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
     }
 
     public FileManagePage uploadFile(String filePath) {
+        waitForPageLoading();
         buttonUploadFile().click();
 
         driver.setFileDetector(new LocalFileDetector());
@@ -221,6 +230,7 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
     }
 
     public FileManagePage downloadFile(String fileName) {
+        waitForPageLoading();
         fileList()
                 .stream()
                 .filter(it -> it.getText().contains(fileName))
@@ -233,6 +243,10 @@ public class FileManagePage extends NavBarPage implements 
ResourcePage.Tab {
         return this;
     }
 
+    private void waitForPageLoading() {
+        
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/resource/file-manage"));
+    }
+
     @Getter
     public class CreateDirectoryBox {
 
diff --git a/dolphinscheduler-ui/src/locales/en_US/project.ts 
b/dolphinscheduler-ui/src/locales/en_US/project.ts
index 1f366f5393..a42b652eff 100644
--- a/dolphinscheduler-ui/src/locales/en_US/project.ts
+++ b/dolphinscheduler-ui/src/locales/en_US/project.ts
@@ -27,7 +27,6 @@ export default {
     project_description: 'Project Description',
     owned_users: 'Owned Users',
     workflow_define_count: 'Workflow Define Count',
-    process_instance_running_count: 'Process Instance Running Count',
     description: 'Description',
     create_time: 'Create Time',
     update_time: 'Update Time',
diff --git a/dolphinscheduler-ui/src/locales/zh_CN/project.ts 
b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
index 1f3c2624e3..cb7e320118 100644
--- a/dolphinscheduler-ui/src/locales/zh_CN/project.ts
+++ b/dolphinscheduler-ui/src/locales/zh_CN/project.ts
@@ -27,7 +27,6 @@ export default {
     project_description: '项目描述',
     owned_users: '所属用户',
     workflow_define_count: '工作流定义数',
-    process_instance_running_count: '正在运行的流程数',
     description: '描述',
     create_time: '创建时间',
     update_time: '更新时间',
diff --git a/dolphinscheduler-ui/src/views/projects/list/use-table.ts 
b/dolphinscheduler-ui/src/views/projects/list/use-table.ts
index f3c30e96e8..68f2bc25dc 100644
--- a/dolphinscheduler-ui/src/views/projects/list/use-table.ts
+++ b/dolphinscheduler-ui/src/views/projects/list/use-table.ts
@@ -122,14 +122,6 @@ export function useTable() {
           tooltip: true
         }
       },
-      {
-        title: t('project.list.process_instance_running_count'),
-        key: 'instRunningCount',
-        width: 120,
-        ellipsis: {
-          tooltip: true
-        }
-      },
       {
         title: t('project.list.description'),
         key: 'description',

Reply via email to