yumeng 2 дней назад
Родитель
Сommit
79ccc443c5

+ 53 - 0
src/main/java/com/video/script/admin/common/PageResult.java

@@ -0,0 +1,53 @@
+package com.video.script.admin.common;
+
+import java.util.List;
+
+public class PageResult<T> {
+
+    private List<T> list;
+    private long total;
+    private int pageNum;
+    private int pageSize;
+
+    public PageResult() {
+    }
+
+    public PageResult(List<T> list, long total, int pageNum, int pageSize) {
+        this.list = list;
+        this.total = total;
+        this.pageNum = pageNum;
+        this.pageSize = pageSize;
+    }
+
+    public List<T> getList() {
+        return list;
+    }
+
+    public void setList(List<T> list) {
+        this.list = list;
+    }
+
+    public long getTotal() {
+        return total;
+    }
+
+    public void setTotal(long total) {
+        this.total = total;
+    }
+
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+}

+ 6 - 4
src/main/java/com/video/script/admin/controller/TaskController.java

@@ -1,10 +1,10 @@
 package com.video.script.admin.controller;
 
 import com.video.script.admin.common.ApiResponse;
+import com.video.script.admin.common.PageResult;
 import com.video.script.admin.dto.TaskSaveRequest;
 import com.video.script.admin.entity.VideoScriptTask;
 import com.video.script.admin.service.TaskService;
-import java.util.List;
 import javax.validation.Valid;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -26,9 +26,11 @@ public class TaskController {
     }
 
     @GetMapping
-    public ApiResponse<List<VideoScriptTask>> list(@RequestParam(value = "keyword", required = false) String keyword,
-                                                   @RequestParam(value = "status", required = false) String status) {
-        return ApiResponse.success(taskService.list(keyword, status));
+    public ApiResponse<PageResult<VideoScriptTask>> list(@RequestParam(value = "keyword", required = false) String keyword,
+                                                         @RequestParam(value = "status", required = false) String status,
+                                                         @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
+                                                         @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
+        return ApiResponse.success(taskService.list(keyword, status, pageNum, pageSize));
     }
 
     @GetMapping("/{id}")

+ 6 - 1
src/main/java/com/video/script/admin/mapper/VideoScriptTaskMapper.java

@@ -6,7 +6,12 @@ import org.apache.ibatis.annotations.Param;
 
 public interface VideoScriptTaskMapper {
 
-    List<VideoScriptTask> selectList(@Param("keyword") String keyword, @Param("status") String status);
+    List<VideoScriptTask> selectList(@Param("keyword") String keyword,
+                                     @Param("status") String status,
+                                     @Param("offset") int offset,
+                                     @Param("pageSize") int pageSize);
+
+    long countList(@Param("keyword") String keyword, @Param("status") String status);
 
     VideoScriptTask selectById(@Param("id") Long id);
 

+ 2 - 2
src/main/java/com/video/script/admin/service/TaskService.java

@@ -1,12 +1,12 @@
 package com.video.script.admin.service;
 
+import com.video.script.admin.common.PageResult;
 import com.video.script.admin.dto.TaskSaveRequest;
 import com.video.script.admin.entity.VideoScriptTask;
-import java.util.List;
 
 public interface TaskService {
 
-    List<VideoScriptTask> list(String keyword, String status);
+    PageResult<VideoScriptTask> list(String keyword, String status, int pageNum, int pageSize);
 
     VideoScriptTask getById(Long id);
 

+ 10 - 2
src/main/java/com/video/script/admin/service/impl/TaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.video.script.admin.service.impl;
 
+import com.video.script.admin.common.PageResult;
 import com.video.script.admin.common.BusinessException;
 import com.video.script.admin.common.UserContext;
 import com.video.script.admin.config.AsrProperties;
@@ -46,8 +47,15 @@ public class TaskServiceImpl implements TaskService {
     }
 
     @Override
-    public List<VideoScriptTask> list(String keyword, String status) {
-        return videoScriptTaskMapper.selectList(keyword, status);
+    public PageResult<VideoScriptTask> list(String keyword, String status, int pageNum, int pageSize) {
+        int normalizedPageNum = Math.max(pageNum, 1);
+        int normalizedPageSize = Math.min(Math.max(pageSize, 1), 100);
+        int offset = (normalizedPageNum - 1) * normalizedPageSize;
+        long total = videoScriptTaskMapper.countList(keyword, status);
+        List<VideoScriptTask> list = total == 0
+                ? java.util.Collections.emptyList()
+                : videoScriptTaskMapper.selectList(keyword, status, offset, normalizedPageSize);
+        return new PageResult<VideoScriptTask>(list, total, normalizedPageNum, normalizedPageSize);
     }
 
     @Override

+ 17 - 6
src/main/resources/mapper/VideoScriptTaskMapper.xml

@@ -4,12 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.video.script.admin.mapper.VideoScriptTaskMapper">
 
-    <select id="selectList" resultType="com.video.script.admin.entity.VideoScriptTask">
-        select t.id, t.task_name, t.video_url, t.video_urls, t.script_type, t.status, t.prompt_hint, t.transcript, t.video_content, t.omni_content, t.analysis_content, t.script_content,
-               t.summary, t.codedesk_task_id, t.use_omni_analysis, t.error_message, t.creator_id, u.nickname as creator_name,
-               t.create_time, t.update_time
-        from video_script_task t
-        left join sys_user u on t.creator_id = u.id
+    <sql id="taskListWhere">
         <where>
             <if test="keyword != null and keyword != ''">
                 and (t.task_name like concat('%', #{keyword}, '%') or t.video_url like concat('%', #{keyword}, '%'))
@@ -18,7 +13,23 @@
                 and t.status = #{status}
             </if>
         </where>
+    </sql>
+
+    <select id="selectList" resultType="com.video.script.admin.entity.VideoScriptTask">
+        select t.id, t.task_name, t.video_url, t.video_urls, t.script_type, t.status, t.prompt_hint,
+               t.analysis_content, t.summary, t.codedesk_task_id, t.use_omni_analysis, t.creator_id, u.nickname as creator_name,
+               t.create_time, t.update_time
+        from video_script_task t
+        left join sys_user u on t.creator_id = u.id
+        <include refid="taskListWhere"/>
         order by t.create_time desc, t.id desc
+        limit #{pageSize} offset #{offset}
+    </select>
+
+    <select id="countList" resultType="long">
+        select count(1)
+        from video_script_task t
+        <include refid="taskListWhere"/>
     </select>
 
     <select id="selectById" resultType="com.video.script.admin.entity.VideoScriptTask">

+ 3 - 0
src/main/resources/sql/schema.sql

@@ -76,3 +76,6 @@ create table if not exists video_script_task (
     create_time datetime not null,
     update_time datetime not null
 );
+
+create index idx_video_script_task_create_time_id on video_script_task (create_time, id);
+create index idx_video_script_task_status_create_time_id on video_script_task (status, create_time, id);

+ 4 - 0
src/main/resources/sql/upgrade_video_script_task.sql

@@ -12,3 +12,7 @@ alter table video_script_task
 
 alter table video_script_task
     add column if not exists use_omni_analysis tinyint(1) not null default 0 after codedesk_task_id;
+
+create index idx_video_script_task_create_time_id on video_script_task (create_time, id);
+
+create index idx_video_script_task_status_create_time_id on video_script_task (status, create_time, id);