瀏覽代碼

feat:1.分页查询完善

shanshan 2 年之前
父節點
當前提交
55d6c38374
共有 29 個文件被更改,包括 390 次插入47 次删除
  1. 8 3
      src/main/java/cn/seecoder/fdroidrepository/Controller/AppController.java
  2. 16 0
      src/main/java/cn/seecoder/fdroidrepository/Controller/BugController.java
  3. 7 6
      src/main/java/cn/seecoder/fdroidrepository/Controller/BuildController.java
  4. 1 1
      src/main/java/cn/seecoder/fdroidrepository/Controller/PostController.java
  5. 5 8
      src/main/java/cn/seecoder/fdroidrepository/DataObject/Enum/BuildTypeEnum.java
  6. 9 0
      src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/AppInfoVO.java
  7. 10 0
      src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/BuildTaskVO.java
  8. 20 0
      src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/AppSearchVO.java
  9. 19 0
      src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/BugSearchVO.java
  10. 20 0
      src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/BuildTaskSearchVO.java
  11. 4 2
      src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/PostSearchVO.java
  12. 8 0
      src/main/java/cn/seecoder/fdroidrepository/Mapper/AppInfoMapper.java
  13. 9 0
      src/main/java/cn/seecoder/fdroidrepository/Mapper/BugMapper.java
  14. 3 4
      src/main/java/cn/seecoder/fdroidrepository/Mapper/BuildTaskMapper.java
  15. 1 1
      src/main/java/cn/seecoder/fdroidrepository/Mapper/PostMapper.java
  16. 20 0
      src/main/java/cn/seecoder/fdroidrepository/Pipeline/Config/HandlerTable.java
  17. 2 1
      src/main/java/cn/seecoder/fdroidrepository/Pipeline/PipelineFactory.java
  18. 6 6
      src/main/java/cn/seecoder/fdroidrepository/Service/AppService.java
  19. 8 0
      src/main/java/cn/seecoder/fdroidrepository/Service/BugService.java
  20. 3 2
      src/main/java/cn/seecoder/fdroidrepository/Service/BuildService.java
  21. 1 1
      src/main/java/cn/seecoder/fdroidrepository/Service/PostService.java
  22. 33 1
      src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/AppServiceImpl.java
  23. 44 0
      src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/BugServiceImpl.java
  24. 16 6
      src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/BuildServiceImpl.java
  25. 2 2
      src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/PostServiceImpl.java
  26. 40 0
      src/main/resources/mapper/AppInfoMapper.xml
  27. 35 0
      src/main/resources/mapper/BugMapper.xml
  28. 37 0
      src/main/resources/mapper/BuildTaskMapper.xml
  29. 3 3
      src/main/resources/mapper/PostMapper.xml

+ 8 - 3
src/main/java/cn/seecoder/fdroidrepository/Controller/AppController.java

@@ -19,7 +19,7 @@ public class AppController {
         this.appService = appService;
     }
 
-    @PostMapping("/createApp")
+    @PostMapping("/create")
     private Response createApp(@RequestBody AppInfoVO appInfoVO) {
 //        try {
 //            Integer appId = appService.createAppInfo(appInfoVO);
@@ -30,9 +30,14 @@ public class AppController {
         return appService.createAppInfo(appInfoVO);
     }
 
-    @PostMapping("/updateApp")
+    @PostMapping("/update")
     private Response updateApp(@RequestBody AppInfoVO appInfoVO) {
-        return null;
+        return appService.updateAppInfo(appInfoVO);
+    }
+
+    @GetMapping("/recommend")
+    private Response recommendApp() {
+        return appService.recommendApp();
     }
 
     @GetMapping("/detail")

+ 16 - 0
src/main/java/cn/seecoder/fdroidrepository/Controller/BugController.java

@@ -2,6 +2,7 @@ package cn.seecoder.fdroidrepository.Controller;
 
 import cn.seecoder.fdroidrepository.DataObject.VO.BugVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BugSearchVO;
 import cn.seecoder.fdroidrepository.Service.BugService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
@@ -17,8 +18,23 @@ public class BugController {
         return bugService.createBug(bugVO);
     }
 
+    @PostMapping("/update")
+    public Response updateBug(@RequestBody BugVO bugVO) {
+        return bugService.updateBug(bugVO);
+    }
+
     @GetMapping("/list")
     public Response listBugs(@RequestParam("appId") Integer appId) {
         return bugService.selectByApp(appId);
     }
+
+    @PostMapping("/search")
+    public Response search(@RequestBody BugSearchVO bugSearchVO) {
+        return bugService.search(bugSearchVO);
+    }
+
+    @PostMapping("/count")
+    public Response searchCount(@RequestBody BugSearchVO bugSearchVO) {
+        return bugService.searchCount(bugSearchVO);
+    }
 }

+ 7 - 6
src/main/java/cn/seecoder/fdroidrepository/Controller/BuildController.java

@@ -2,6 +2,7 @@ package cn.seecoder.fdroidrepository.Controller;
 
 import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BuildTaskSearchVO;
 import cn.seecoder.fdroidrepository.Service.BuildService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -22,14 +23,14 @@ public class BuildController {
     }
 
 
-    @GetMapping("/list")
-    private Response getBuildTask(@RequestParam("appId") Integer appId, @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum) {
-        return buildService.getBuildTaskPage(appId, pageNum);
+    @PostMapping("/search")
+    private Response getBuildTask(@RequestBody BuildTaskSearchVO buildTaskSearchVO) {
+        return buildService.search(buildTaskSearchVO);
     }
 
-    @GetMapping("/count")
-    private Response getBuildTaskTotalCount(@RequestParam("appId") Integer appId) {
-        return buildService.getBuildTaskCount(appId);
+    @PostMapping("/count")
+    private Response getBuildTaskTotalCount(@RequestBody BuildTaskSearchVO buildTaskSearchVO) {
+        return buildService.searchCount(buildTaskSearchVO);
     }
 
     @GetMapping("/status")

+ 1 - 1
src/main/java/cn/seecoder/fdroidrepository/Controller/PostController.java

@@ -1,6 +1,6 @@
 package cn.seecoder.fdroidrepository.Controller;
 
-import cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.PostSearchVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 import cn.seecoder.fdroidrepository.Service.PostService;

+ 5 - 8
src/main/java/cn/seecoder/fdroidrepository/DataObject/Enum/BuildTypeEnum.java

@@ -8,16 +8,13 @@ import java.util.Arrays;
 import java.util.List;
 
 public enum BuildTypeEnum {
-    ANDROID("Android", Arrays.asList("GIT", "BUILD", "CLEAN")),
-    RISCV("RiscV", Arrays.asList("GIT", "GRADLE", "BUILD", "CLEAN"));
+    ANDROID("Android"),
+    RISCV("RiscV");
     private final String value;
-    private final List<String> handlers;
-    BuildTypeEnum(String s, List<String> handlers) {
+    BuildTypeEnum(String s) {
         this.value = s;
-        this.handlers = handlers;
     }
-
-    public List<String> getHandlers() {
-        return handlers;
+    public String getValue() {
+        return value;
     }
 }

+ 9 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/AppInfoVO.java

@@ -1,13 +1,18 @@
 package cn.seecoder.fdroidrepository.DataObject.VO;
 
 import cn.seecoder.fdroidrepository.DataObject.Enum.AppCategoryEnum;
+import cn.seecoder.fdroidrepository.DataObject.PO.AppInfoPO;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Bean;
 
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
 @Data
+@NoArgsConstructor
 public class AppInfoVO implements Serializable {
     private Integer id;
     private String appName;
@@ -28,4 +33,8 @@ public class AppInfoVO implements Serializable {
     private String buildBranch;
     private String dailyBuildBranch;
     private Boolean enableDailyBuild;
+
+    public AppInfoVO(AppInfoPO appInfoPO) {
+        BeanUtils.copyProperties(appInfoPO, this);
+    }
 }

+ 10 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/BuildTaskVO.java

@@ -2,12 +2,18 @@ package cn.seecoder.fdroidrepository.DataObject.VO;
 
 import cn.seecoder.fdroidrepository.DataObject.Enum.BuildTaskStatusEnum;
 import cn.seecoder.fdroidrepository.DataObject.Enum.BuildTypeEnum;
+import cn.seecoder.fdroidrepository.DataObject.PO.BuildTaskPO;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
 
 import java.io.Serializable;
 import java.util.Date;
 
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class BuildTaskVO implements Serializable {
     private Integer id;
     private Integer appId;
@@ -22,4 +28,8 @@ public class BuildTaskVO implements Serializable {
     private BuildTaskStatusEnum status;
     private BuildTypeEnum buildType;
     private String message;
+
+    public BuildTaskVO(BuildTaskPO po) {
+        BeanUtils.copyProperties(po, this);
+    }
 }

+ 20 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/AppSearchVO.java

@@ -0,0 +1,20 @@
+package cn.seecoder.fdroidrepository.DataObject.VO.search;
+
+import cn.seecoder.fdroidrepository.DataObject.Enum.AppCategoryEnum;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AppSearchVO {
+    private Integer id;
+    private String appName;
+    private Integer authorId;
+    private AppCategoryEnum category;
+
+    private Integer pageNum;
+    private Integer pageSize = 10;
+    private Integer start;
+}

+ 19 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/BugSearchVO.java

@@ -0,0 +1,19 @@
+package cn.seecoder.fdroidrepository.DataObject.VO.search;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BugSearchVO {
+    private Integer id;
+    private Integer appId;
+    private Integer userId;
+    private Boolean fixed;
+
+    private Integer pageNum;
+    private Integer pageSize = 10;
+    private Integer start;
+}

+ 20 - 0
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/BuildTaskSearchVO.java

@@ -0,0 +1,20 @@
+package cn.seecoder.fdroidrepository.DataObject.VO.search;
+
+import cn.seecoder.fdroidrepository.DataObject.Enum.BuildTaskStatusEnum;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class BuildTaskSearchVO {
+    private Integer id;
+    private Integer appId;
+    private Integer createUserId;
+    private BuildTaskStatusEnum status;
+
+    private Integer pageNum;
+    private Integer pageSize = 10;
+    private Integer start;
+}

+ 4 - 2
src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/PostSearchVO.java → src/main/java/cn/seecoder/fdroidrepository/DataObject/VO/search/PostSearchVO.java

@@ -1,4 +1,4 @@
-package cn.seecoder.fdroidrepository.DataObject.VO;
+package cn.seecoder.fdroidrepository.DataObject.VO.search;
 
 import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
 import lombok.AllArgsConstructor;
@@ -16,6 +16,8 @@ public class PostSearchVO {
     private Integer questionId;
     private Integer replyToId;
     private Integer appId;
+
     private Integer pageNum;
-    private Integer pageStart;
+    private Integer pageSize;
+    private Integer start;
 }

+ 8 - 0
src/main/java/cn/seecoder/fdroidrepository/Mapper/AppInfoMapper.java

@@ -1,6 +1,7 @@
 package cn.seecoder.fdroidrepository.Mapper;
 
 import cn.seecoder.fdroidrepository.DataObject.PO.AppInfoPO;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.AppSearchVO;
 import org.apache.ibatis.annotations.InsertProvider;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -20,6 +21,13 @@ public interface AppInfoMapper {
     @Select("select * from app_info where id = #{id}")
     AppInfoPO selectById(Integer id);
 
+    @Select("select * from app_info order by rate limit 15")
+    List<AppInfoPO> recommend();
+
     @Select("select * from app_info where enable_daily_build = true")
     List<AppInfoPO> selectDailyBuildApp();
+
+    List<AppInfoPO> search(AppSearchVO appSearchVO);
+
+    Integer searchCount(AppSearchVO appSearchVO);
 }

+ 9 - 0
src/main/java/cn/seecoder/fdroidrepository/Mapper/BugMapper.java

@@ -1,9 +1,11 @@
 package cn.seecoder.fdroidrepository.Mapper;
 
 import cn.seecoder.fdroidrepository.DataObject.PO.BugPO;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BugSearchVO;
 import org.apache.ibatis.annotations.InsertProvider;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.UpdateProvider;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -13,9 +15,16 @@ public interface BugMapper {
     @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
     Integer insert(@Param("obj") BugPO bugPO);
 
+    @UpdateProvider(type = GeneralInsertUpdateSqlProvider.class, method = "updateById")
+    Integer update(@Param("obj") BugPO bugPO);
+
     @Select("select * from bug where app_id = #{appId} and fixed = false")
     List<BugPO> selectByAppId(Integer appId);
 
     @Select("select * from bug where app_id = #{appId} and fixed = true")
     List<BugPO> selectFixedByAppId(Integer appId);
+
+    List<BugPO> search(BugSearchVO bugSearchVO);
+
+    Integer searchCount(BugSearchVO bugSearchVO);
 }

+ 3 - 4
src/main/java/cn/seecoder/fdroidrepository/Mapper/BuildTaskMapper.java

@@ -1,6 +1,7 @@
 package cn.seecoder.fdroidrepository.Mapper;
 
 import cn.seecoder.fdroidrepository.DataObject.PO.BuildTaskPO;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BuildTaskSearchVO;
 import org.apache.ibatis.annotations.InsertProvider;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.UpdateProvider;
@@ -22,9 +23,7 @@ public interface BuildTaskMapper {
     @Select("select * from build_task where app_id = #{appId}")
     List<BuildTaskPO> selectByAppId(Integer appId);
 
-    @Select("select * from build_task where app_id = #{appId} order by create_time desc limit (#{pageNum} - 1) * 10,10")
-    List<BuildTaskPO> selectByAppIdPage(Integer appId, Integer pageNum);
+    List<BuildTaskPO> search(BuildTaskSearchVO buildTaskSearchVO);
 
-    @Select("select count(id) from build_task where app_id = #{appId}")
-    Integer getCount(Integer appId);
+    Integer searchCount(BuildTaskSearchVO buildTaskSearchVO);
 }

+ 1 - 1
src/main/java/cn/seecoder/fdroidrepository/Mapper/PostMapper.java

@@ -2,7 +2,7 @@ package cn.seecoder.fdroidrepository.Mapper;
 
 import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
 import cn.seecoder.fdroidrepository.DataObject.PO.PostPO;
-import cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.PostSearchVO;
 import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 

+ 20 - 0
src/main/java/cn/seecoder/fdroidrepository/Pipeline/Config/HandlerTable.java

@@ -0,0 +1,20 @@
+package cn.seecoder.fdroidrepository.Pipeline.Config;
+
+import cn.seecoder.fdroidrepository.DataObject.Enum.BuildTypeEnum;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class HandlerTable {
+    public static Map<String, List<String>> handlerTable = new HashMap<>();
+    static {
+        handlerTable.put(BuildTypeEnum.ANDROID.getValue(), Arrays.asList("GIT", "BUILD", "CLEAN"));
+        handlerTable.put(BuildTypeEnum.RISCV.getValue(), Arrays.asList("GIT", "GRADLE", "BUILD", "CLEAN"));
+    }
+
+    public static List<String> get(String value) {
+        return handlerTable.get(value);
+    }
+}

+ 2 - 1
src/main/java/cn/seecoder/fdroidrepository/Pipeline/PipelineFactory.java

@@ -5,6 +5,7 @@ import cn.seecoder.fdroidrepository.DataObject.Enum.BuildTaskStatusEnum;
 import cn.seecoder.fdroidrepository.DataObject.PO.BuildTaskPO;
 import cn.seecoder.fdroidrepository.Pipeline.Config.CommonValueTable;
 import cn.seecoder.fdroidrepository.Pipeline.Config.HandlerConfigTable;
+import cn.seecoder.fdroidrepository.Pipeline.Config.HandlerTable;
 import cn.seecoder.fdroidrepository.Pipeline.Handlers.AbstractHandler;
 
 import java.util.List;
@@ -52,7 +53,7 @@ public class PipelineFactory {
             }
         };
         Handler current = headHandler;
-        List<String> handlers = buildTaskPO.getBuildType().getHandlers();
+        List<String> handlers = HandlerTable.get(buildTaskPO.getBuildType().getValue());
         for (String key : handlers) {
             Handler next = HandlerConfigTable.getHandler(key);
             if (next != null) {

+ 6 - 6
src/main/java/cn/seecoder/fdroidrepository/Service/AppService.java

@@ -7,6 +7,7 @@ import cn.seecoder.fdroidrepository.DataObject.PO.BuildTaskPO;
 import cn.seecoder.fdroidrepository.DataObject.VO.AppInfoVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.AppSearchVO;
 
 public interface AppService {
     Response createAppInfo(AppInfoVO appInfoVO);
@@ -14,10 +15,9 @@ public interface AppService {
 
     Response getAppInfo(Integer id);
 
-//    Response rewriteGradleFile(Integer pipelineId, String fileName, String content);
-//    Response checkTaskStatus(Integer taskId);
-//
-//    Response createBuildTask(BuildTaskCreateVO createVO);
-//
-//    Response getBuildTaskList(Integer appId);
+    Response recommendApp();
+
+    Response search(AppSearchVO appSearchVO);
+
+    Response searchCount(AppSearchVO appSearchVO);
 }

+ 8 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/BugService.java

@@ -2,10 +2,18 @@ package cn.seecoder.fdroidrepository.Service;
 
 import cn.seecoder.fdroidrepository.DataObject.VO.BugVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BugSearchVO;
+import org.bouncycastle.cert.ocsp.RespID;
 
 public interface BugService {
 
     Response createBug(BugVO bugVO);
 
+    Response updateBug(BugVO bugVO);
+
     Response selectByApp(Integer appId);
+
+    Response search(BugSearchVO bugSearchVO);
+
+    Response searchCount(BugSearchVO bugSearchVO);
 }

+ 3 - 2
src/main/java/cn/seecoder/fdroidrepository/Service/BuildService.java

@@ -2,6 +2,7 @@ package cn.seecoder.fdroidrepository.Service;
 
 import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BuildTaskSearchVO;
 
 public interface BuildService {
     Response rewriteGradleFile(Integer pipelineId, String fileName, String content);
@@ -12,7 +13,7 @@ public interface BuildService {
 
     Response getBuildTaskList(Integer appId);
 
-    Response getBuildTaskPage(Integer appId, Integer pageNum);
+    Response search(BuildTaskSearchVO buildTaskSearchVO);
 
-    Response getBuildTaskCount(Integer appId);
+    Response searchCount(BuildTaskSearchVO buildTaskSearchVO);
 }

+ 1 - 1
src/main/java/cn/seecoder/fdroidrepository/Service/PostService.java

@@ -1,7 +1,7 @@
 package cn.seecoder.fdroidrepository.Service;
 
 import cn.seecoder.fdroidrepository.DataObject.Enum.PostTypeEnum;
-import cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.PostSearchVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 

+ 33 - 1
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/AppServiceImpl.java

@@ -10,6 +10,7 @@ import cn.seecoder.fdroidrepository.DataObject.PO.BuildTaskPO;
 import cn.seecoder.fdroidrepository.DataObject.VO.AppInfoVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.AppSearchVO;
 import cn.seecoder.fdroidrepository.Mapper.AppContributeRelationMapper;
 import cn.seecoder.fdroidrepository.Mapper.AppInfoMapper;
 import cn.seecoder.fdroidrepository.Mapper.BuildTaskMapper;
@@ -28,6 +29,7 @@ import java.io.FileWriter;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.*;
+import java.util.stream.Collectors;
 
 @Service
 public class AppServiceImpl implements AppService {
@@ -80,7 +82,7 @@ public class AppServiceImpl implements AppService {
                 relationMapper.insert(appInfoVO.getId(), userId);
             }
         }
-        return Response.buildSuccess();
+        return Response.buildSuccess(result);
     }
 
     @Override
@@ -99,6 +101,36 @@ public class AppServiceImpl implements AppService {
         return Response.buildSuccess();
     }
 
+    @Override
+    public Response recommendApp() {
+        List<AppInfoPO> appInfoPOList = appInfoMapper.recommend();
+        // 此处创建的AppInfoVO缺失了 contributorIds相关信息
+        return Response.buildSuccess(appInfoPOList.stream().map(AppInfoVO::new).collect(Collectors.toList()));
+    }
+
+    @Override
+    public Response search(AppSearchVO appSearchVO) {
+        if (appSearchVO == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        if (appSearchVO.getPageSize() != null) {
+            if (appSearchVO.getPageSize() < 1) {
+                return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+            }
+            appSearchVO.setStart((appSearchVO.getPageNum() - 1) * appSearchVO.getPageSize());
+        }
+        List<AppInfoPO> result = appInfoMapper.search(appSearchVO);
+        return Response.buildSuccess(result.stream().map(AppInfoVO::new).collect(Collectors.toList()));
+    }
+
+    @Override
+    public Response searchCount(AppSearchVO appSearchVO) {
+        if (appSearchVO == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        return Response.buildSuccess(appInfoMapper.searchCount(appSearchVO));
+    }
+
 //    @Override
 //    public Response rewriteGradleFile(Integer taskId, String fileName, String content) {
 //        try {

+ 44 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/BugServiceImpl.java

@@ -4,6 +4,7 @@ import cn.seecoder.fdroidrepository.DataObject.Enum.ResultCode;
 import cn.seecoder.fdroidrepository.DataObject.PO.BugPO;
 import cn.seecoder.fdroidrepository.DataObject.VO.BugVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BugSearchVO;
 import cn.seecoder.fdroidrepository.Mapper.BugMapper;
 import cn.seecoder.fdroidrepository.Service.BugService;
 import lombok.RequiredArgsConstructor;
@@ -27,6 +28,16 @@ public class BugServiceImpl implements BugService {
         return Response.buildSuccess(bugId);
     }
 
+    @Override
+    public Response updateBug(BugVO bugVO) {
+        if (bugVO == null || bugVO.getAppId() == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        BugPO bugPO = new BugPO();
+        BeanUtils.copyProperties(bugVO, bugPO);
+        return Response.buildSuccess(bugMapper.update(bugPO));
+    }
+
     /**
      * 获取某一个App的全部Bug,并根据Version将其进行分组
      * @param appId
@@ -41,4 +52,37 @@ public class BugServiceImpl implements BugService {
         Map<String, List<BugVO>> bugMap = bugList.stream().map(BugVO::new).collect(Collectors.groupingBy(BugVO::getVersion));
         return Response.buildSuccess(bugMap);
     }
+
+    /**
+     * 根据查询条件查询Bug, 具体条件查看BugSearchVO, 支持分页查询
+     * @param bugSearchVO
+     * @return Response<List<BugVO>>
+     */
+    @Override
+    public Response search(BugSearchVO bugSearchVO) {
+        if (bugSearchVO == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        if (bugSearchVO.getPageNum() != null) {
+            if (bugSearchVO.getPageNum() < 1) {
+                return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+            }
+            bugSearchVO.setStart((bugSearchVO.getPageNum() - 1) * bugSearchVO.getPageSize());
+        }
+        List<BugPO> result = bugMapper.search(bugSearchVO);
+        return Response.buildSuccess(result.stream().map(BugVO::new).collect(Collectors.toList()));
+    }
+
+    /**
+     * 查询符合条件的Bug总数,用于前端pagination的分页展示
+     * @param bugSearchVO
+     * @return
+     */
+    @Override
+    public Response searchCount(BugSearchVO bugSearchVO) {
+        if (bugSearchVO == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        return Response.buildSuccess(bugMapper.searchCount(bugSearchVO));
+    }
 }

+ 16 - 6
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/BuildServiceImpl.java

@@ -6,7 +6,9 @@ import cn.seecoder.fdroidrepository.DataObject.Enum.ResultCode;
 import cn.seecoder.fdroidrepository.DataObject.PO.AppInfoPO;
 import cn.seecoder.fdroidrepository.DataObject.PO.BuildTaskPO;
 import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
+import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.BuildTaskSearchVO;
 import cn.seecoder.fdroidrepository.Mapper.AppInfoMapper;
 import cn.seecoder.fdroidrepository.Mapper.BuildTaskMapper;
 import cn.seecoder.fdroidrepository.Pipeline.*;
@@ -26,6 +28,7 @@ import java.util.List;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 @Service
 public class BuildServiceImpl implements BuildService {
@@ -137,18 +140,25 @@ public class BuildServiceImpl implements BuildService {
     }
 
     @Override
-    public Response getBuildTaskPage(Integer appId, Integer pageNum) {
-        if (appId == null || pageNum == null || pageNum < 1) {
+    public Response search(BuildTaskSearchVO buildTaskSearchVO) {
+        if (buildTaskSearchVO == null) {
             return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
         }
-        return Response.buildSuccess(buildTaskMapper.selectByAppIdPage(appId, pageNum));
+        if (buildTaskSearchVO.getPageNum() != null) {
+            if (buildTaskSearchVO.getPageNum() < 1) {
+                return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+            }
+            buildTaskSearchVO.setStart((buildTaskSearchVO.getPageNum() - 1) * buildTaskSearchVO.getPageSize());
+        }
+        List<BuildTaskPO> result = buildTaskMapper.search(buildTaskSearchVO);
+        return Response.buildSuccess(result.stream().map(BuildTaskVO::new).collect(Collectors.toList()));
     }
 
     @Override
-    public Response getBuildTaskCount(Integer appId) {
-        if (appId == null) {
+    public Response searchCount(BuildTaskSearchVO buildTaskSearchVO) {
+        if (buildTaskSearchVO == null) {
             return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
         }
-        return Response.buildSuccess(buildTaskMapper.getCount(appId));
+        return Response.buildSuccess(buildTaskMapper.searchCount(buildTaskSearchVO));
     }
 }

+ 2 - 2
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/PostServiceImpl.java

@@ -5,7 +5,7 @@ import cn.seecoder.fdroidrepository.DataObject.Enum.ResultCode;
 import cn.seecoder.fdroidrepository.DataObject.PO.AppInfoPO;
 import cn.seecoder.fdroidrepository.DataObject.PO.PostLogPO;
 import cn.seecoder.fdroidrepository.DataObject.PO.PostPO;
-import cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO;
+import cn.seecoder.fdroidrepository.DataObject.VO.search.PostSearchVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.PostVO;
 import cn.seecoder.fdroidrepository.DataObject.VO.Response;
 import cn.seecoder.fdroidrepository.Mapper.AppInfoMapper;
@@ -116,7 +116,7 @@ public class PostServiceImpl implements PostService {
             return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
         }
         if (postSearchVO.getPageNum() != null) {
-            postSearchVO.setPageStart(postSearchVO.getPageNum() * 10 - 10);
+            postSearchVO.setStart((postSearchVO.getPageNum() - 1) * postSearchVO.getPageSize());
         }
         return Response.buildSuccess(postMapper.search(postSearchVO));
     }

+ 40 - 0
src/main/resources/mapper/AppInfoMapper.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.fdroidrepository.Mapper.AppInfoMapper">
+    <resultMap id="AppInfoResultMap" type="cn.seecoder.fdroidrepository.DataObject.PO.AppInfoPO">
+        <id column="id" property="id"/>
+        <result column="app_name" property="appName"/>
+        <result column="icon" property="icon"/>
+        <result column="description" property="description"/>
+        <result column="repo_url" property="repoUrl"/>
+        <result column="author_id" property="authorId"/>
+        <result column="author_name" property="authorName"/>
+        <result column="rate" property="rate"/>
+        <result column="rate_count" property="rateCount"/>
+        <result column="category" property="category"/>
+        <result column="create_time" property="createTime"/>
+        <result column="build_branch" property="buildBranch"/>
+        <result column="daily_build_branch" property="dailyBuildBranch"/>
+        <result column="enable_daily_build" property="enableDailyBuild"/>
+    </resultMap>
+
+    <select id="search" resultMap="AppInfoResultMap" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.AppSearchVO">
+        select * from app_info where 1=1
+            <if test="id != null">and id = #{id}</if>
+            <if test="appName != null">and appName = #{appName}</if>
+            <if test="authorId != null">and authorId = #{authorId}</if>
+            <if test="category != null">and category = #{category}</if>
+        order by create_time desc
+        <if test="start != null">
+            limit #{start}, #{pageSize}
+        </if>
+    </select>
+
+    <select id="searchCount" resultType="java.lang.Integer" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.AppSearchVO">
+        select count(id) from app_info where 1=1
+            <if test="id != null">and id = #{id}</if>
+            <if test="appName != null">and appName = #{appName}</if>
+            <if test="authorId != null">and authorId = #{authorId}</if>
+            <if test="category != null">and category = #{category}</if>
+    </select>
+</mapper>

+ 35 - 0
src/main/resources/mapper/BugMapper.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.fdroidrepository.Mapper.BugMapper">
+    <resultMap id="BugResultMap" type="cn.seecoder.fdroidrepository.DataObject.PO.BugPO">
+        <id column="id" property="id"/>
+        <result column="app_id" property="appId"/>
+        <result column="app_name" property="appName"/>
+        <result column="version" property="version"/>
+        <result column="user_id" property="userId"/>
+        <result column="create_time" property="create_time"/>
+        <result column="update_time" property="update_time"/>
+        <result column="description" property="description"/>
+        <result column="fixed" property="fixed"/>
+    </resultMap>
+
+    <select id="search" resultMap="BugResultMap" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.BugSearchVO">
+        select * from bug where 1=1
+            <if test="id != null">and id = #{id}</if>
+            <if test="app_id != null">and app_id = #{appId}</if>
+            <if test="user_id != null">and user_id = #{userId}</if>
+            <if test="fixed != null">and fixed = #{fixed}</if>
+        order by create_time desc
+        <if test="start != null">
+            limit #{start}, #{pageSize}
+        </if>
+    </select>
+
+    <select id="searchCount" resultType="java.lang.Integer" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.BugSearchVO">
+        select count(id) from bug where 1=1
+        <if test="id != null">and id = #{id}</if>
+        <if test="app_id != null">and app_id = #{appId}</if>
+        <if test="user_id != null">and user_id = #{userId}</if>
+        <if test="fixed != null">and fixed = #{fixed}</if>
+    </select>
+</mapper>

+ 37 - 0
src/main/resources/mapper/BuildTaskMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.seecoder.fdroidrepository.Mapper.BuildTaskMapper">
+    <resultMap id="BuildTaskResultMap" type="cn.seecoder.fdroidrepository.DataObject.PO.BuildTaskPO">
+        <id column="id" property="id"/>
+        <result column="app_id" property="appId"/>
+        <result column="create_user_id" property="createUserId"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="description" property="description"/>
+        <result column="version" property="version"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="build_type" property="buildType"/>
+        <result column="message" property="message"/>
+    </resultMap>
+
+    <select id="search" resultMap="BuildTaskResultMap" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.BuildTaskSearchVO">
+        select * from build_task where 1=1
+            <if test="id != null">and id = #{id}</if>
+            <if test="appId != null">and app_id = #{appId}</if>
+            <if test="createUserId != null">and create_user_id = #{createUserId}</if>
+            <if test="status != null">and status = #{status}</if>
+        order by create_time desc
+        <if test="start != null">
+            limit #{start}, #{pageSize}
+        </if>
+    </select>
+
+    <select id="searchCount" resultType="java.lang.Integer" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.BuildTaskSearchVO">
+        select count(id) from build_task where 1=1
+            <if test="id != null">and id = #{id}</if>
+            <if test="appId != null">and app_id = #{appId}</if>
+            <if test="createUserId != null">and create_user_id = #{createUserId}</if>
+            <if test="status != null">and status = #{status}</if>
+    </select>
+</mapper>

+ 3 - 3
src/main/resources/mapper/PostMapper.xml

@@ -20,7 +20,7 @@
         <result property="appName" column="app_name"/>
     </resultMap>
 
-    <select id="search" resultMap="PostResultMap" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO">
+    <select id="search" resultMap="PostResultMap" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.PostSearchVO">
         select * from post where 1 = 1
             <if test="type != null"> and type = #{type}</if>
             <if test="valid != null">and valid = #{valid}</if>
@@ -30,11 +30,11 @@
             <if test="appId != null">and app_id = #{appId}</if>
         order by update_time desc
         <if test="pageStart != null">
-            limit #{pageStart}, 10
+            limit #{pageStart}, #{pageSize}
         </if>
     </select>
 
-    <select id="searchCount" resultType="java.lang.Integer" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.PostSearchVO">
+    <select id="searchCount" resultType="java.lang.Integer" parameterType="cn.seecoder.fdroidrepository.DataObject.VO.search.PostSearchVO">
         select count(id) from post where 1 = 1
         <if test="type != null"> and type = #{type}</if>
         <if test="valid != null">and valid = #{valid}</if>