You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by ki...@apache.org on 2022/08/22 12:21:25 UTC

[incubator-seatunnel] branch dev updated: [seatunnel-1947][seatunnel-server] wrapper paging for some list interface (#2466)

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

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 5694d38b5 [seatunnel-1947][seatunnel-server] wrapper paging for some list interface (#2466)
5694d38b5 is described below

commit 5694d38b5c9620573c99a4f92d15d32dc63d6cb8
Author: dijie <nj...@gmail.com>
AuthorDate: Mon Aug 22 20:21:20 2022 +0800

    [seatunnel-1947][seatunnel-server] wrapper paging for some list interface (#2466)
---
 .../seatunnel/app/controller/ScriptController.java |  3 +-
 .../seatunnel/app/controller/TaskController.java   |  7 +-
 .../seatunnel/app/controller/UserController.java   |  5 +-
 .../apache/seatunnel/app/dal/dao/IScriptDao.java   |  5 +-
 .../org/apache/seatunnel/app/dal/dao/IUserDao.java |  5 +-
 .../seatunnel/app/dal/dao/impl/ScriptDaoImpl.java  |  8 ++-
 .../seatunnel/app/dal/dao/impl/UserDaoImpl.java    |  8 ++-
 .../seatunnel/app/dal/mapper/ScriptMapper.java     |  2 +
 .../seatunnel/app/dal/mapper/UserMapper.java       |  2 +
 .../{task/JobListReq.java => BasePageReq.java}     | 12 ++--
 .../app/domain/request/script/ScriptListReq.java   |  8 +--
 .../app/domain/request/task/InstanceListReq.java   |  8 +--
 .../app/domain/request/task/JobListReq.java        |  8 +--
 .../app/domain/request/user/UserListReq.java       |  8 +--
 .../seatunnel/app/domain/response/PageInfo.java    | 77 ++++++++++++++++++++++
 .../app/domain/response/user/AddUserRes.java       |  2 +
 .../seatunnel/app/service/IScriptService.java      |  3 +-
 .../apache/seatunnel/app/service/ITaskService.java |  7 +-
 .../apache/seatunnel/app/service/IUserService.java |  5 +-
 .../app/service/impl/ScriptServiceImpl.java        | 15 ++++-
 .../app/service/impl/TaskServiceImpl.java          | 28 ++++++--
 .../app/service/impl/UserServiceImpl.java          | 16 ++++-
 .../seatunnel/app/dal/mapper/ScriptMapper.xml      | 15 ++++-
 .../apache/seatunnel/app/dal/mapper/UserMapper.xml | 10 +++
 .../dolphinscheduler/IDolphinschedulerService.java |  5 +-
 .../constants/DolphinschedulerConstants.java       |  1 +
 .../impl/DolphinschedulerServiceImpl.java          | 26 +++++---
 .../dolphinscheduler/impl/InstanceServiceImpl.java |  8 ++-
 .../dolphinscheduler/impl/JobServiceImpl.java      | 28 ++++----
 .../apache/seatunnel/server/common/PageData.java}  | 43 ++++++------
 .../seatunnel/spi/scheduler/IInstanceService.java  |  5 +-
 .../seatunnel/spi/scheduler/IJobService.java       |  5 +-
 32 files changed, 271 insertions(+), 117 deletions(-)

diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
index bf4133de8..01a5e1732 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
@@ -23,6 +23,7 @@ import org.apache.seatunnel.app.domain.request.script.PublishScriptReq;
 import org.apache.seatunnel.app.domain.request.script.ScriptListReq;
 import org.apache.seatunnel.app.domain.request.script.UpdateScriptContentReq;
 import org.apache.seatunnel.app.domain.request.script.UpdateScriptParamReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.script.AddEmptyScriptRes;
 import org.apache.seatunnel.app.domain.response.script.ScriptParamRes;
 import org.apache.seatunnel.app.domain.response.script.ScriptSimpleInfoRes;
@@ -76,7 +77,7 @@ public class ScriptController {
 
     @PostMapping("/list")
     @ApiOperation(value = "script list", httpMethod = "POST")
-    public Result<List<ScriptSimpleInfoRes>> list(@RequestBody @NotNull ScriptListReq scriptListReq) {
+    public Result<PageInfo<ScriptSimpleInfoRes>> list(@RequestBody @NotNull ScriptListReq scriptListReq) {
         return Result.success(iScriptService.list(scriptListReq));
     }
 
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
index e4dbb9528..d9110ebca 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
@@ -22,6 +22,7 @@ import org.apache.seatunnel.app.domain.request.task.ExecuteReq;
 import org.apache.seatunnel.app.domain.request.task.InstanceListReq;
 import org.apache.seatunnel.app.domain.request.task.JobListReq;
 import org.apache.seatunnel.app.domain.request.task.RecycleScriptReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.task.InstanceSimpleInfoRes;
 import org.apache.seatunnel.app.domain.response.task.JobSimpleInfoRes;
 import org.apache.seatunnel.app.service.ITaskService;
@@ -37,8 +38,6 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.validation.constraints.NotNull;
 
-import java.util.List;
-
 @RequestMapping("/api/v1/task")
 @RestController
 public class TaskController {
@@ -55,13 +54,13 @@ public class TaskController {
 
     @GetMapping("/listJob")
     @ApiOperation(value = "list job", httpMethod = "GET")
-    Result<List<JobSimpleInfoRes>> listJob(@RequestBody @NotNull JobListReq req) {
+    Result<PageInfo<JobSimpleInfoRes>> listJob(@RequestBody @NotNull JobListReq req) {
         return Result.success(iTaskService.listJob(req));
     }
 
     @GetMapping("/listInstance")
     @ApiOperation(value = "list instance", httpMethod = "GET")
-    Result<List<InstanceSimpleInfoRes>> listInstance(@RequestBody @NotNull InstanceListReq req) {
+    Result<PageInfo<InstanceSimpleInfoRes>> listInstance(@RequestBody @NotNull InstanceListReq req) {
         return Result.success(iTaskService.listInstance(req));
     }
 
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
index ec5c16d71..d7cf924d2 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
@@ -21,6 +21,7 @@ import org.apache.seatunnel.app.common.Result;
 import org.apache.seatunnel.app.domain.request.user.AddUserReq;
 import org.apache.seatunnel.app.domain.request.user.UpdateUserReq;
 import org.apache.seatunnel.app.domain.request.user.UserListReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.user.AddUserRes;
 import org.apache.seatunnel.app.domain.response.user.UserSimpleInfoRes;
 import org.apache.seatunnel.app.service.IUserService;
@@ -39,8 +40,6 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.validation.constraints.NotNull;
 
-import java.util.List;
-
 @RequestMapping("/api/v1/user")
 @RestController
 public class UserController {
@@ -73,7 +72,7 @@ public class UserController {
 
     @PostMapping("/list")
     @ApiOperation(value = "user list", httpMethod = "POST")
-    public Result<List<UserSimpleInfoRes>> list(@RequestBody @NotNull UserListReq userListReq) {
+    public Result<PageInfo<UserSimpleInfoRes>> list(@RequestBody @NotNull UserListReq userListReq) {
         return Result.success(iUserService.list(userListReq));
     }
 
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptDao.java
index 7da0332ac..0178b58b3 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IScriptDao.java
@@ -22,8 +22,7 @@ import org.apache.seatunnel.app.domain.dto.script.AddEmptyScriptDto;
 import org.apache.seatunnel.app.domain.dto.script.CheckScriptDuplicateDto;
 import org.apache.seatunnel.app.domain.dto.script.ListScriptsDto;
 import org.apache.seatunnel.app.domain.dto.script.UpdateScriptContentDto;
-
-import java.util.List;
+import org.apache.seatunnel.server.common.PageData;
 
 public interface IScriptDao {
     void checkScriptDuplicate(CheckScriptDuplicateDto dto);
@@ -36,5 +35,5 @@ public interface IScriptDao {
 
     void deleteScript(int id);
 
-    List<Script> list(ListScriptsDto dto, Integer pageNo, Integer pageSize);
+    PageData<Script> list(ListScriptsDto dto, Integer pageNo, Integer pageSize);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
index 2572efe97..bd08d294c 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
@@ -20,8 +20,7 @@ package org.apache.seatunnel.app.dal.dao;
 import org.apache.seatunnel.app.dal.entity.User;
 import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
 import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
-
-import java.util.List;
+import org.apache.seatunnel.server.common.PageData;
 
 public interface IUserDao {
     int add(UpdateUserDto dto);
@@ -36,7 +35,7 @@ public interface IUserDao {
 
     void disable(int id);
 
-    List<User> list(ListUserDto dto, int pageNo, int pageSize);
+    PageData<User> list(ListUserDto dto, int pageNo, int pageSize);
 
     User getById(int operatorId);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java
index d3df27b8f..0f2c73571 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/ScriptDaoImpl.java
@@ -28,6 +28,7 @@ import org.apache.seatunnel.app.domain.dto.script.AddEmptyScriptDto;
 import org.apache.seatunnel.app.domain.dto.script.CheckScriptDuplicateDto;
 import org.apache.seatunnel.app.domain.dto.script.ListScriptsDto;
 import org.apache.seatunnel.app.domain.dto.script.UpdateScriptContentDto;
+import org.apache.seatunnel.server.common.PageData;
 
 import org.springframework.stereotype.Repository;
 
@@ -76,11 +77,14 @@ public class ScriptDaoImpl implements IScriptDao {
     }
 
     @Override
-    public List<Script> list(ListScriptsDto dto, Integer pageNo, Integer pageSize) {
+    public PageData<Script> list(ListScriptsDto dto, Integer pageNo, Integer pageSize) {
         final Script script = new Script();
         script.setName(dto.getName());
         script.setStatus(dto.getStatus());
 
-        return scriptMapper.selectBySelectiveAndPage(script, pageNo * pageSize, pageSize);
+        final List<Script> scripts = scriptMapper.selectBySelectiveAndPage(script, pageNo * pageSize, pageSize);
+        int count = scriptMapper.countBySelectiveAndPage(script);
+
+        return new PageData<Script>(count, scripts);
     }
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
index bea735acc..bb29cda2b 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/impl/UserDaoImpl.java
@@ -27,6 +27,7 @@ import org.apache.seatunnel.app.dal.entity.User;
 import org.apache.seatunnel.app.dal.mapper.UserMapper;
 import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
 import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import org.apache.seatunnel.server.common.PageData;
 
 import org.springframework.stereotype.Repository;
 
@@ -87,10 +88,13 @@ public class UserDaoImpl implements IUserDao {
     }
 
     @Override
-    public List<User> list(ListUserDto dto, int pageNo, int pageSize) {
+    public PageData<User> list(ListUserDto dto, int pageNo, int pageSize) {
         final User user = new User();
         user.setUsername(dto.getName());
-        return userMapper.selectBySelectiveAndPage(user, pageNo * pageSize, pageSize);
+
+        int count = userMapper.countBySelective(user);
+        final List<User> userList = userMapper.selectBySelectiveAndPage(user, pageNo * pageSize, pageSize);
+        return new PageData<User>(count, userList);
     }
 
     @Override
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptMapper.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptMapper.java
index 512c40782..0732ad0d6 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptMapper.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/ScriptMapper.java
@@ -35,4 +35,6 @@ public interface ScriptMapper {
     List<Script> selectBySelectiveAndPage(@Param("script") Script script, @Param("start") int start, @Param("offset") int offset);
 
     Script selectByNameAndCreatorAndStatusNotEq(@Param("name") String name, @Param("creatorId") int creatorId, @Param("status") byte status);
+
+    int countBySelectiveAndPage(@Param("script") Script script);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/UserMapper.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/UserMapper.java
index 9b8cc58a9..5d0cbae25 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/UserMapper.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/UserMapper.java
@@ -37,4 +37,6 @@ public interface UserMapper {
     void updateStatus(@Param("id") int id, @Param("status") byte status);
 
     User selectByName(@Param("username") String username);
+
+    int countBySelective(@Param("user") User user);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/BasePageReq.java
similarity index 79%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
copy to seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/BasePageReq.java
index 544352178..a04f8af24 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/BasePageReq.java
@@ -15,19 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.domain.request.task;
+package org.apache.seatunnel.app.domain.request;
 
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
-@ApiModel(value = "listJobReq", description = "list job")
-public class JobListReq {
-    @ApiModelProperty(value = "job name", required = true, dataType = "String")
-    private String name;
+public class BasePageReq {
     @ApiModelProperty(value = "page number", required = true, dataType = "Integer")
     private Integer pageNo;
     @ApiModelProperty(value = "page size", required = true, dataType = "Integer")
     private Integer pageSize;
+
+    public int getRealPageNo() {
+        return pageNo - 1;
+    }
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java
index 5bb301029..3ac64ba16 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/script/ScriptListReq.java
@@ -17,19 +17,17 @@
 
 package org.apache.seatunnel.app.domain.request.script;
 
+import org.apache.seatunnel.app.domain.request.BasePageReq;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @ApiModel(value = "scriptListReq", description = "script list")
 @Data
-public class ScriptListReq {
+public class ScriptListReq extends BasePageReq {
     @ApiModelProperty(value = "script name", required = false, dataType = "String")
     private String name;
     @ApiModelProperty(value = "script status", required = false, dataType = "Integer")
     private Byte status;
-    @ApiModelProperty(value = "page number", required = true, dataType = "Integer")
-    private Integer pageNo;
-    @ApiModelProperty(value = "page size", required = true, dataType = "Integer")
-    private Integer pageSize;
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/InstanceListReq.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/InstanceListReq.java
index 461a4f8fd..dcabb54b1 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/InstanceListReq.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/InstanceListReq.java
@@ -17,17 +17,15 @@
 
 package org.apache.seatunnel.app.domain.request.task;
 
+import org.apache.seatunnel.app.domain.request.BasePageReq;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
 @ApiModel(value = "listInstanceReq", description = "list instance")
-public class InstanceListReq {
+public class InstanceListReq extends BasePageReq {
     @ApiModelProperty(value = "instance name", required = true, dataType = "String")
     private String name;
-    @ApiModelProperty(value = "page number", required = true, dataType = "Integer")
-    private Integer pageNo;
-    @ApiModelProperty(value = "page size", required = true, dataType = "Integer")
-    private Integer pageSize;
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
index 544352178..55be19be8 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/task/JobListReq.java
@@ -17,17 +17,15 @@
 
 package org.apache.seatunnel.app.domain.request.task;
 
+import org.apache.seatunnel.app.domain.request.BasePageReq;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
 @ApiModel(value = "listJobReq", description = "list job")
-public class JobListReq {
+public class JobListReq extends BasePageReq {
     @ApiModelProperty(value = "job name", required = true, dataType = "String")
     private String name;
-    @ApiModelProperty(value = "page number", required = true, dataType = "Integer")
-    private Integer pageNo;
-    @ApiModelProperty(value = "page size", required = true, dataType = "Integer")
-    private Integer pageSize;
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/user/UserListReq.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/user/UserListReq.java
index 186e69f83..80bcdf972 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/user/UserListReq.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/request/user/UserListReq.java
@@ -17,17 +17,15 @@
 
 package org.apache.seatunnel.app.domain.request.user;
 
+import org.apache.seatunnel.app.domain.request.BasePageReq;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @ApiModel(value = "userListReq", description = "user list")
 @Data
-public class UserListReq {
+public class UserListReq extends BasePageReq {
     @ApiModelProperty(value = "user name", required = false, dataType = "String")
     private String name;
-    @ApiModelProperty(value = "page number", required = true, dataType = "Integer")
-    private Integer pageNo;
-    @ApiModelProperty(value = "page size", required = true, dataType = "Integer")
-    private Integer pageSize;
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/PageInfo.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/PageInfo.java
new file mode 100644
index 000000000..f4ced6e86
--- /dev/null
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/PageInfo.java
@@ -0,0 +1,77 @@
+/*
+ * 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.seatunnel.app.domain.response;
+
+import io.swagger.annotations.ApiModel;
+
+import java.util.List;
+
+@ApiModel(value = "pageInfo", description = "page info")
+@SuppressWarnings("MagicNumber")
+public class PageInfo<T> {
+    private List<T> data;
+    private Integer totalCount = 0;
+    private Integer totalPage = 0;
+    private Integer pageNo = 1;
+    private Integer pageSize = 20;
+
+    public List<T> getData() {
+        return data;
+    }
+
+    public void setData(List<T> data) {
+        this.data = data;
+    }
+
+    public Integer getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(Integer totalCount) {
+        this.totalCount = totalCount;
+
+        if (pageSize == null || pageSize == 0) {
+            pageSize = 20;
+        }
+        if (this.totalCount % this.pageSize == 0) {
+            this.totalPage = this.totalCount / this.pageSize == 0 ? 1 : this.totalCount / this.pageSize;
+            return;
+        }
+        this.totalPage = this.totalCount / this.pageSize + 1;
+    }
+
+    public Integer getTotalPage() {
+        return totalPage;
+    }
+
+    public Integer getPageNo() {
+        return pageNo;
+    }
+
+    public void setPageNo(Integer pageNo) {
+        this.pageNo = pageNo;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+}
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/AddUserRes.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/AddUserRes.java
index 0712dc75a..e115a9350 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/AddUserRes.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/domain/response/user/AddUserRes.java
@@ -17,9 +17,11 @@
 
 package org.apache.seatunnel.app.domain.response.user;
 
+import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
 @Data
+@ApiModel(value = "addUserRes", description = "add user response")
 public class AddUserRes {
     private int id;
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java
index 99b993ad7..4e9a9ebbd 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IScriptService.java
@@ -22,6 +22,7 @@ import org.apache.seatunnel.app.domain.request.script.PublishScriptReq;
 import org.apache.seatunnel.app.domain.request.script.ScriptListReq;
 import org.apache.seatunnel.app.domain.request.script.UpdateScriptContentReq;
 import org.apache.seatunnel.app.domain.request.script.UpdateScriptParamReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.script.AddEmptyScriptRes;
 import org.apache.seatunnel.app.domain.response.script.ScriptParamRes;
 import org.apache.seatunnel.app.domain.response.script.ScriptSimpleInfoRes;
@@ -35,7 +36,7 @@ public interface IScriptService {
 
     void delete(Integer id);
 
-    List<ScriptSimpleInfoRes> list(ScriptListReq scriptListReq);
+    PageInfo<ScriptSimpleInfoRes> list(ScriptListReq scriptListReq);
 
     String fetchScriptContent(Integer id);
 
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskService.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskService.java
index 78217d873..475da0e51 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskService.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/ITaskService.java
@@ -22,19 +22,18 @@ import org.apache.seatunnel.app.domain.request.task.ExecuteReq;
 import org.apache.seatunnel.app.domain.request.task.InstanceListReq;
 import org.apache.seatunnel.app.domain.request.task.JobListReq;
 import org.apache.seatunnel.app.domain.request.task.RecycleScriptReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.task.InstanceSimpleInfoRes;
 import org.apache.seatunnel.app.domain.response.task.JobSimpleInfoRes;
 
-import java.util.List;
-
 public interface ITaskService {
     Long pushScriptToScheduler(PushScriptDto pushScriptDto);
 
     void recycleScriptFromScheduler(RecycleScriptReq req);
 
-    List<JobSimpleInfoRes> listJob(JobListReq req);
+    PageInfo<JobSimpleInfoRes> listJob(JobListReq req);
 
-    List<InstanceSimpleInfoRes> listInstance(InstanceListReq req);
+    PageInfo<InstanceSimpleInfoRes> listInstance(InstanceListReq req);
 
     InstanceSimpleInfoRes tmpExecute(ExecuteReq req);
 }
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IUserService.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IUserService.java
index da89f2c76..54f56f0d9 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IUserService.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/IUserService.java
@@ -20,11 +20,10 @@ package org.apache.seatunnel.app.service;
 import org.apache.seatunnel.app.domain.request.user.AddUserReq;
 import org.apache.seatunnel.app.domain.request.user.UpdateUserReq;
 import org.apache.seatunnel.app.domain.request.user.UserListReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.user.AddUserRes;
 import org.apache.seatunnel.app.domain.response.user.UserSimpleInfoRes;
 
-import java.util.List;
-
 public interface IUserService {
 
     AddUserRes add(AddUserReq addReq);
@@ -33,7 +32,7 @@ public interface IUserService {
 
     void delete(int id);
 
-    List<UserSimpleInfoRes> list(UserListReq userListReq);
+    PageInfo<UserSimpleInfoRes> list(UserListReq userListReq);
 
     void enable(int id);
 
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java
index 3d6d2f139..df830e2de 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/ScriptServiceImpl.java
@@ -38,6 +38,7 @@ import org.apache.seatunnel.app.domain.request.script.PublishScriptReq;
 import org.apache.seatunnel.app.domain.request.script.ScriptListReq;
 import org.apache.seatunnel.app.domain.request.script.UpdateScriptContentReq;
 import org.apache.seatunnel.app.domain.request.script.UpdateScriptParamReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.script.AddEmptyScriptRes;
 import org.apache.seatunnel.app.domain.response.script.ScriptParamRes;
 import org.apache.seatunnel.app.domain.response.script.ScriptSimpleInfoRes;
@@ -45,6 +46,7 @@ import org.apache.seatunnel.app.service.IScriptService;
 import org.apache.seatunnel.app.service.ITaskService;
 import org.apache.seatunnel.app.util.Md5Utils;
 import org.apache.seatunnel.scheduler.dolphinscheduler.impl.InstanceServiceImpl;
+import org.apache.seatunnel.server.common.PageData;
 
 import com.google.common.base.Strings;
 import org.springframework.stereotype.Component;
@@ -143,15 +145,22 @@ public class ScriptServiceImpl implements IScriptService {
     }
 
     @Override
-    public List<ScriptSimpleInfoRes> list(ScriptListReq scriptListReq) {
+    public PageInfo<ScriptSimpleInfoRes> list(ScriptListReq scriptListReq) {
 
         final ListScriptsDto dto = ListScriptsDto.builder()
                 .name(scriptListReq.getName())
                 .status(scriptListReq.getStatus())
                 .build();
 
-        List<Script> scripts = scriptDaoImpl.list(dto, scriptListReq.getPageNo(), scriptListReq.getPageSize());
-        return scripts.stream().map(this::translate).collect(Collectors.toList());
+        PageData<Script> scriptPageData = scriptDaoImpl.list(dto, scriptListReq.getRealPageNo(), scriptListReq.getPageSize());
+        final List<ScriptSimpleInfoRes> data = scriptPageData.getData().stream().map(this::translate).collect(Collectors.toList());
+
+        final PageInfo<ScriptSimpleInfoRes> pageInfo = new PageInfo<>();
+        pageInfo.setPageNo(scriptListReq.getPageNo());
+        pageInfo.setPageSize(scriptListReq.getPageSize());
+        pageInfo.setTotalCount(scriptPageData.getTotalCount());
+        pageInfo.setData(data);
+        return pageInfo;
     }
 
     @Override
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskServiceImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskServiceImpl.java
index 751aa42cb..7b779d81d 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskServiceImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/TaskServiceImpl.java
@@ -38,9 +38,11 @@ import org.apache.seatunnel.app.domain.request.task.ExecuteReq;
 import org.apache.seatunnel.app.domain.request.task.InstanceListReq;
 import org.apache.seatunnel.app.domain.request.task.JobListReq;
 import org.apache.seatunnel.app.domain.request.task.RecycleScriptReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.task.InstanceSimpleInfoRes;
 import org.apache.seatunnel.app.domain.response.task.JobSimpleInfoRes;
 import org.apache.seatunnel.app.service.ITaskService;
+import org.apache.seatunnel.server.common.PageData;
 import org.apache.seatunnel.server.common.SeatunnelException;
 import org.apache.seatunnel.spi.scheduler.IInstanceService;
 import org.apache.seatunnel.spi.scheduler.IJobService;
@@ -153,27 +155,41 @@ public class TaskServiceImpl implements ITaskService {
     }
 
     @Override
-    public List<JobSimpleInfoRes> listJob(JobListReq req) {
+    public PageInfo<JobSimpleInfoRes> listJob(JobListReq req) {
         // Search from scheduler.
         final JobListDto dto = JobListDto.builder()
                 .name(req.getName())
                 .pageNo(req.getPageNo())
                 .pageSize(req.getPageSize())
                 .build();
-        final List<JobSimpleInfoDto> list = iJobService.list(dto);
-        return list.stream().map(this::translate).collect(Collectors.toList());
+        final PageData<JobSimpleInfoDto> jobPageData = iJobService.list(dto);
+        final List<JobSimpleInfoRes> data = jobPageData.getData().stream().map(this::translate).collect(Collectors.toList());
+        final PageInfo<JobSimpleInfoRes> pageInfo = new PageInfo<>();
+        pageInfo.setData(data);
+        pageInfo.setTotalCount(jobPageData.getTotalCount());
+        pageInfo.setPageNo(req.getPageNo());
+        pageInfo.setPageSize(req.getPageSize());
+
+        return pageInfo;
     }
 
     @Override
-    public List<InstanceSimpleInfoRes> listInstance(InstanceListReq req) {
+    public PageInfo<InstanceSimpleInfoRes> listInstance(InstanceListReq req) {
         // Search from scheduler.
         final InstanceListDto dto = InstanceListDto.builder()
                 .name(req.getName())
                 .pageNo(req.getPageNo())
                 .pageSize(req.getPageSize())
                 .build();
-        final List<InstanceDto> list = iInstanceService.list(dto);
-        return list.stream().map(this::translate).collect(Collectors.toList());
+        final PageData<InstanceDto> instancePageData = iInstanceService.list(dto);
+        final List<InstanceSimpleInfoRes> data = instancePageData.getData().stream().map(this::translate).collect(Collectors.toList());
+        final PageInfo<InstanceSimpleInfoRes> pageInfo = new PageInfo<>();
+        pageInfo.setData(data);
+        pageInfo.setTotalCount(instancePageData.getTotalCount());
+        pageInfo.setPageNo(req.getPageNo());
+        pageInfo.setPageSize(req.getPageSize());
+
+        return pageInfo;
     }
 
     @Override
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java
index ce8cb86d4..94b11c385 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java
+++ b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/service/impl/UserServiceImpl.java
@@ -24,10 +24,12 @@ import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
 import org.apache.seatunnel.app.domain.request.user.AddUserReq;
 import org.apache.seatunnel.app.domain.request.user.UpdateUserReq;
 import org.apache.seatunnel.app.domain.request.user.UserListReq;
+import org.apache.seatunnel.app.domain.response.PageInfo;
 import org.apache.seatunnel.app.domain.response.user.AddUserRes;
 import org.apache.seatunnel.app.domain.response.user.UserSimpleInfoRes;
 import org.apache.seatunnel.app.service.IUserService;
 import org.apache.seatunnel.app.util.PasswordUtils;
+import org.apache.seatunnel.server.common.PageData;
 
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -86,14 +88,22 @@ public class UserServiceImpl implements IUserService {
     }
 
     @Override
-    public List<UserSimpleInfoRes> list(UserListReq userListReq) {
+    public PageInfo<UserSimpleInfoRes> list(UserListReq userListReq) {
 
         final ListUserDto dto = ListUserDto.builder()
                 .name(userListReq.getName())
                 .build();
 
-        List<User> userList = userDaoImpl.list(dto, userListReq.getPageNo(), userListReq.getPageSize());
-        return userList.stream().map(this::translate).collect(Collectors.toList());
+        final PageData<User> userPageData = userDaoImpl.list(dto, userListReq.getRealPageNo(), userListReq.getPageSize());
+
+        final List<UserSimpleInfoRes> data = userPageData.getData().stream().map(this::translate).collect(Collectors.toList());
+        final PageInfo<UserSimpleInfoRes> pageInfo = new PageInfo<>();
+        pageInfo.setPageNo(userListReq.getPageNo());
+        pageInfo.setPageSize(userListReq.getPageSize());
+        pageInfo.setData(data);
+        pageInfo.setTotalCount(userPageData.getTotalCount());
+
+        return pageInfo;
     }
 
     @Override
diff --git a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptMapper.xml b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptMapper.xml
index 210b4d769..c74563b9e 100644
--- a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptMapper.xml
+++ b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/ScriptMapper.xml
@@ -66,7 +66,7 @@
     </select>
     <select id="selectBySelectiveAndPage" resultMap="BaseResultMap">
         select
-        *
+        <include refid="Base_Column_List"/>
         from script
         <where>
             <if test="script.name != null and script.name != ''">
@@ -86,4 +86,17 @@
           and `creator_id` = #{creatorId,jdbcType=INTEGER}
           and `status` != #{status,jdbcType=TINYINT}
     </select>
+    <select id="countBySelectiveAndPage" resultType="java.lang.Integer">
+    select
+        count(1)
+        from script
+        <where>
+            <if test="script.name != null and script.name != ''">
+                and `name` = #{script.name,jdbcType=VARCHAR}
+            </if>
+            <if test="script.status != null">
+                and `status` = #{script.status,jdbcType=TINYINT}
+            </if>
+        </where>
+    </select>
 </mapper>
diff --git a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml
index d68d8828a..070729e84 100644
--- a/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml
+++ b/seatunnel-server/seatunnel-app/src/main/resources/org/apache/seatunnel/app/dal/mapper/UserMapper.xml
@@ -80,4 +80,14 @@
         from `user`
         where username = #{username,jdbcType=VARCHAR}
     </select>
+    <select id="countBySelective" resultType="java.lang.Integer">
+    select
+        count(1)
+        from `user`
+        <where>
+            <if test="user.username != null and user.username != ''">
+                and `username` = #{user.username,jdbcType=VARCHAR}
+            </if>
+        </where>
+    </select>
 </mapper>
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java
index 0d026d68a..8e0769cae 100644
--- a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/IDolphinschedulerService.java
@@ -25,6 +25,7 @@ import org.apache.seatunnel.scheduler.dolphinscheduler.dto.SchedulerDto;
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.StartProcessDefinitionDto;
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskInstanceDto;
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.UpdateProcessDefinitionDto;
+import org.apache.seatunnel.server.common.PageData;
 import org.apache.seatunnel.spi.scheduler.dto.JobDto;
 
 import java.util.List;
@@ -33,7 +34,7 @@ public interface IDolphinschedulerService {
 
     ProcessDefinitionDto createOrUpdateProcessDefinition(UpdateProcessDefinitionDto dto);
 
-    List<ProcessDefinitionDto> listProcessDefinition(ListProcessDefinitionDto dto);
+    PageData<ProcessDefinitionDto> listProcessDefinition(ListProcessDefinitionDto dto);
 
     ProcessDefinitionDto fetchProcessDefinitionByName(String processDefinitionName);
 
@@ -53,7 +54,7 @@ public interface IDolphinschedulerService {
 
     ResourceDto createOrUpdateScriptContent(String resourceName, String content);
 
-    List<TaskInstanceDto> listTaskInstance(ListProcessInstanceDto dto);
+    PageData<TaskInstanceDto> listTaskInstance(ListProcessInstanceDto dto);
 
     void deleteProcessDefinition(long code);
 }
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/constants/DolphinschedulerConstants.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/constants/DolphinschedulerConstants.java
index f6e8085e3..110a190ce 100644
--- a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/constants/DolphinschedulerConstants.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/constants/DolphinschedulerConstants.java
@@ -173,6 +173,7 @@ public class DolphinschedulerConstants {
      */
     public static final String DATA = "data";
     public static final String DATA_TOTAL_LIST = "totalList";
+    public static final String DATA_TOTAL = "total";
     public static final String CODE = "code";
     public static final int CODE_SUCCESS = 0;
     public static final String MSG = "msg";
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/DolphinschedulerServiceImpl.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/DolphinschedulerServiceImpl.java
index 698f9f15b..746192a9f 100644
--- a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/DolphinschedulerServiceImpl.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/DolphinschedulerServiceImpl.java
@@ -24,6 +24,7 @@ import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.Dolphins
 import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CREATE_SCHEDULE;
 import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.CRONTAB;
 import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DATA;
+import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DATA_TOTAL;
 import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DATA_TOTAL_LIST;
 import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DEFAULT_FILE_SUFFIX;
 import static org.apache.seatunnel.scheduler.dolphinscheduler.constants.DolphinschedulerConstants.DELAY_TIME_DEFAULT;
@@ -135,6 +136,7 @@ import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskRelationDto;
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.UpdateProcessDefinitionDto;
 import org.apache.seatunnel.scheduler.dolphinscheduler.utils.HttpUtils;
 import org.apache.seatunnel.server.common.DateUtils;
+import org.apache.seatunnel.server.common.PageData;
 import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
 import org.apache.seatunnel.server.common.SeatunnelException;
 import org.apache.seatunnel.spi.scheduler.dto.InstanceLogDto;
@@ -224,7 +226,7 @@ public class DolphinschedulerServiceImpl implements IDolphinschedulerService, In
     }
 
     @Override
-    public List<ProcessDefinitionDto> listProcessDefinition(ListProcessDefinitionDto dto) {
+    public PageData<ProcessDefinitionDto> listProcessDefinition(ListProcessDefinitionDto dto) {
         final Map result = HttpUtils.builder()
                 .withUrl(apiPrefix.concat(String.format(QUERY_LIST_PAGING, defaultProjectCode)))
                 .withMethod(Connection.Method.GET)
@@ -233,11 +235,16 @@ public class DolphinschedulerServiceImpl implements IDolphinschedulerService, In
                 .execute(Map.class);
         checkResult(result, false);
 
-        final List<Map<String, Object>> processDefinitionList = (List<Map<String, Object>>) MapUtils.getMap(result, DATA).get(DATA_TOTAL_LIST);
+        final Map map = MapUtils.getMap(result, DATA);
+        final int total = MapUtils.getIntValue(map, DATA_TOTAL);
+        final List<Map<String, Object>> processDefinitionList = (List<Map<String, Object>>) map.get(DATA_TOTAL_LIST);
+
         if (CollectionUtils.isEmpty(processDefinitionList)) {
-            return Collections.emptyList();
+            return new PageData<>(total, Collections.emptyList());
         }
-        return processDefinitionList.stream().map(m -> this.mapToPojo(m, ProcessDefinitionDto.class)).collect(Collectors.toList());
+        final List<ProcessDefinitionDto> data = processDefinitionList.stream().map(m -> this.mapToPojo(m, ProcessDefinitionDto.class)).collect(Collectors.toList());
+
+        return new PageData<>(total, data);
     }
 
     @Override
@@ -405,7 +412,7 @@ public class DolphinschedulerServiceImpl implements IDolphinschedulerService, In
     }
 
     @Override
-    public List<TaskInstanceDto> listTaskInstance(ListProcessInstanceDto dto) {
+    public PageData<TaskInstanceDto> listTaskInstance(ListProcessInstanceDto dto) {
         final Map result = HttpUtils.builder()
                 .withUrl(apiPrefix.concat(String.format(QUERY_TASK_LIST_PAGING, defaultProjectCode)))
                 .withMethod(Connection.Method.GET)
@@ -414,12 +421,15 @@ public class DolphinschedulerServiceImpl implements IDolphinschedulerService, In
                 .execute(Map.class);
 
         checkResult(result, false);
-        final List<Map<String, Object>> taskInstanceList = (List<Map<String, Object>>) MapUtils.getMap(result, DATA).get(DATA_TOTAL_LIST);
+        final Map map = MapUtils.getMap(result, DATA);
+        final List<Map<String, Object>> taskInstanceList = (List<Map<String, Object>>) map.get(DATA_TOTAL_LIST);
+        final int total = MapUtils.getIntValue(map, DATA_TOTAL);
         if (CollectionUtils.isEmpty(taskInstanceList)) {
-            return Collections.emptyList();
+            return PageData.empty();
         }
 
-        return taskInstanceList.stream().map(m -> this.mapToPojo(m, TaskInstanceDto.class)).collect(Collectors.toList());
+        final List<TaskInstanceDto> data = taskInstanceList.stream().map(m -> this.mapToPojo(m, TaskInstanceDto.class)).collect(Collectors.toList());
+        return new PageData<>(total, data);
     }
 
     @Override
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/InstanceServiceImpl.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/InstanceServiceImpl.java
index 57615943c..1c7f7555d 100644
--- a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/InstanceServiceImpl.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/InstanceServiceImpl.java
@@ -20,6 +20,7 @@ package org.apache.seatunnel.scheduler.dolphinscheduler.impl;
 import org.apache.seatunnel.scheduler.dolphinscheduler.IDolphinschedulerService;
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.ListProcessInstanceDto;
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskInstanceDto;
+import org.apache.seatunnel.server.common.PageData;
 import org.apache.seatunnel.spi.scheduler.IInstanceService;
 import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
 import org.apache.seatunnel.spi.scheduler.dto.InstanceListDto;
@@ -40,16 +41,16 @@ public class InstanceServiceImpl implements IInstanceService {
     private IDolphinschedulerService iDolphinschedulerService;
 
     @Override
-    public List<InstanceDto> list(InstanceListDto dto) {
+    public PageData<InstanceDto> list(InstanceListDto dto) {
 
         final ListProcessInstanceDto listDto = ListProcessInstanceDto.builder()
                 .processInstanceName(dto.getName())
                 .pageNo(dto.getPageNo())
                 .pageSize(dto.getPageSize())
                 .build();
-        final List<TaskInstanceDto> taskInstanceDtos = iDolphinschedulerService.listTaskInstance(listDto);
+        final PageData<TaskInstanceDto> instancePageData = iDolphinschedulerService.listTaskInstance(listDto);
 
-        return taskInstanceDtos.stream().map(t -> InstanceDto.builder()
+        final List<InstanceDto> data = instancePageData.getData().stream().map(t -> InstanceDto.builder()
                 .instanceId(t.getId())
                 .instanceCode(t.getProcessInstanceId())
                 .instanceName(t.getProcessInstanceName())
@@ -60,5 +61,6 @@ public class InstanceServiceImpl implements IInstanceService {
                 .executionDuration(t.getDuration())
                 .retryTimes(t.getRetryTimes())
                 .build()).collect(Collectors.toList());
+        return new PageData<>(instancePageData.getTotalCount(), data);
     }
 }
diff --git a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
index 495eeb146..5aef2ad82 100644
--- a/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
+++ b/seatunnel-server/seatunnel-scheduler/seatunnel-scheduler-dolphinscheduler/src/main/java/org/apache/seatunnel/scheduler/dolphinscheduler/impl/JobServiceImpl.java
@@ -44,6 +44,7 @@ import org.apache.seatunnel.scheduler.dolphinscheduler.dto.StartProcessDefinitio
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.TaskDescriptionDto;
 import org.apache.seatunnel.scheduler.dolphinscheduler.dto.UpdateProcessDefinitionDto;
 import org.apache.seatunnel.server.common.DateUtils;
+import org.apache.seatunnel.server.common.PageData;
 import org.apache.seatunnel.server.common.SeatunnelErrorEnum;
 import org.apache.seatunnel.server.common.SeatunnelException;
 import org.apache.seatunnel.spi.scheduler.IInstanceService;
@@ -103,22 +104,23 @@ public class JobServiceImpl implements IJobService {
     }
 
     @Override
-    public List<JobSimpleInfoDto> list(JobListDto dto) {
+    public PageData<JobSimpleInfoDto> list(JobListDto dto) {
         final ListProcessDefinitionDto listDto = ListProcessDefinitionDto.builder()
                 .name(dto.getName())
                 .pageNo(dto.getPageNo())
                 .pageSize(dto.getPageSize())
                 .build();
-        final List<ProcessDefinitionDto> processDefinitionDtos = iDolphinschedulerService.listProcessDefinition(listDto);
-        return processDefinitionDtos.stream().map(p -> JobSimpleInfoDto.builder()
-                    .jobId(p.getCode())
-                    .jobStatus(p.getReleaseState())
-                    .createTime(p.getCreateTime())
-                    .updateTime(p.getUpdateTime())
-                    .creatorName(p.getUserName())
-                    .menderName(p.getUserName())
-                    .build())
+        final PageData<ProcessDefinitionDto> processPageData = iDolphinschedulerService.listProcessDefinition(listDto);
+        final List<JobSimpleInfoDto> data = processPageData.getData().stream().map(p -> JobSimpleInfoDto.builder()
+                .jobId(p.getCode())
+                .jobStatus(p.getReleaseState())
+                .createTime(p.getCreateTime())
+                .updateTime(p.getUpdateTime())
+                .creatorName(p.getUserName())
+                .menderName(p.getUserName())
+                .build())
                 .collect(Collectors.toList());
+        return new PageData<>(processPageData.getTotalCount(), data);
     }
 
     @Override
@@ -183,9 +185,9 @@ public class JobServiceImpl implements IJobService {
                         .pageSize(PAGE_SIZE_MIN)
                         .name(processDefinition.getName())
                         .build();
-                final List<InstanceDto> list = iInstanceService.list(instanceListDto);
-                if (!CollectionUtils.isEmpty(list)) {
-                    instanceDto = list.get(0);
+                final PageData<InstanceDto> instancePageData = iInstanceService.list(instanceListDto);
+                if (!CollectionUtils.isEmpty(instancePageData.getData())) {
+                    instanceDto = instancePageData.getData().get(0);
                     break;
                 }
                 try {
diff --git a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/PageData.java
similarity index 59%
copy from seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
copy to seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/PageData.java
index 2572efe97..85cc07054 100644
--- a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/dao/IUserDao.java
+++ b/seatunnel-server/seatunnel-server-common/src/main/java/org/apache/seatunnel/server/common/PageData.java
@@ -15,28 +15,31 @@
  * limitations under the License.
  */
 
-package org.apache.seatunnel.app.dal.dao;
+package org.apache.seatunnel.server.common;
 
-import org.apache.seatunnel.app.dal.entity.User;
-import org.apache.seatunnel.app.domain.dto.user.ListUserDto;
-import org.apache.seatunnel.app.domain.dto.user.UpdateUserDto;
+import lombok.Data;
 
+import java.util.Collections;
 import java.util.List;
 
-public interface IUserDao {
-    int add(UpdateUserDto dto);
-
-    void checkUserExists(String username);
-
-    void update(UpdateUserDto dto);
-
-    void delete(int id);
-
-    void enable(int id);
-
-    void disable(int id);
-
-    List<User> list(ListUserDto dto, int pageNo, int pageSize);
-
-    User getById(int operatorId);
+@Data
+public class PageData<T> {
+    private int totalCount;
+    private List<T> data;
+
+    public PageData(int totalCount, List<T> data) {
+        this.totalCount = totalCount;
+        this.data = data;
+    }
+
+    public static <T> PageData<T> empty() {
+        return new PageData<>(0, Collections.emptyList());
+    }
+
+    public List<T> getData() {
+        if (data == null || data.size() == 0) {
+            return Collections.emptyList();
+        }
+        return data;
+    }
 }
diff --git a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IInstanceService.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IInstanceService.java
index 80572b1cf..ab7f6ddc3 100644
--- a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IInstanceService.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IInstanceService.java
@@ -17,11 +17,10 @@
 
 package org.apache.seatunnel.spi.scheduler;
 
+import org.apache.seatunnel.server.common.PageData;
 import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
 import org.apache.seatunnel.spi.scheduler.dto.InstanceListDto;
 
-import java.util.List;
-
 public interface IInstanceService {
-    List<InstanceDto> list(InstanceListDto dto);
+    PageData<InstanceDto> list(InstanceListDto dto);
 }
diff --git a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IJobService.java b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IJobService.java
index cd9fcd3d9..e160fc36d 100644
--- a/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IJobService.java
+++ b/seatunnel-server/seatunnel-spi/src/main/java/org/apache/seatunnel/spi/scheduler/IJobService.java
@@ -17,21 +17,20 @@
 
 package org.apache.seatunnel.spi.scheduler;
 
+import org.apache.seatunnel.server.common.PageData;
 import org.apache.seatunnel.spi.scheduler.dto.ExecuteDto;
 import org.apache.seatunnel.spi.scheduler.dto.InstanceDto;
 import org.apache.seatunnel.spi.scheduler.dto.JobDto;
 import org.apache.seatunnel.spi.scheduler.dto.JobListDto;
 import org.apache.seatunnel.spi.scheduler.dto.JobSimpleInfoDto;
 
-import java.util.List;
-
 public interface IJobService {
 
     long submitJob(JobDto dto);
 
     void offlineJob(JobDto dto);
 
-    List<JobSimpleInfoDto> list(JobListDto dto);
+    PageData<JobSimpleInfoDto> list(JobListDto dto);
 
     InstanceDto execute(ExecuteDto dto);
 }