Просмотр исходного кода

feat:1.将App和Build的接口拆分;2.增加分页查询BuildTask的接口

shanshan 2 лет назад
Родитель
Сommit
a678ff419f

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

@@ -5,6 +5,7 @@ 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.Service.AppService;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,13 +35,8 @@ public class AppController {
         return null;
     }
 
-    @PostMapping("/buildApp")
-    private Response buildApp(@RequestBody BuildTaskCreateVO buildTaskCreateVO) {
-        return appService.createBuildTask(buildTaskCreateVO);
-    }
-
-    @GetMapping("/checkStatus")
-    private Response checkStatus(@RequestParam("taskId") Integer taskId) {
-        return Response.buildSuccess(appService.checkTaskStatus(taskId));
+    @GetMapping("/detail")
+    private Response getAppDetail(@RequestParam("id") Integer appId) {
+        return appService.getAppInfo(appId);
     }
 }

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

@@ -18,8 +18,8 @@ public class BugController {
         return bugService.createBug(bugVO);
     }
 
-    @GetMapping("/listBugs")
-    public Response listBugs(@Param("appId") Integer appId) {
+    @GetMapping("/list")
+    public Response listBugs(@RequestParam("appId") Integer appId) {
         return bugService.selectByApp(appId);
     }
 }

+ 40 - 0
src/main/java/cn/seecoder/fdroidrepository/Controller/BuildController.java

@@ -0,0 +1,40 @@
+package cn.seecoder.fdroidrepository.Controller;
+
+import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
+import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+import cn.seecoder.fdroidrepository.Service.BuildService;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/build")
+public class BuildController {
+    private final BuildService buildService;
+
+    @Autowired
+    public BuildController(BuildService buildService) {
+        this.buildService = buildService;
+    }
+
+    @PostMapping("/create")
+    private Response buildApp(@RequestBody BuildTaskCreateVO buildTaskCreateVO) {
+        return buildService.createBuildTask(buildTaskCreateVO);
+    }
+
+
+    @GetMapping("/list")
+    private Response getBuildTask(@RequestParam("appId") Integer appId, @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum) {
+        return buildService.getBuildTaskPage(appId, pageNum);
+    }
+
+    @GetMapping("/count")
+    private Response getBuildTaskTotalCount(@RequestParam("appId") Integer appId) {
+        return buildService.getBuildTaskCount(appId);
+    }
+
+    @GetMapping("/status")
+    private Response checkStatus(@RequestParam("taskId") Integer taskId) {
+        return buildService.checkTaskStatus(taskId);
+    }
+}

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

@@ -25,7 +25,7 @@ public class PostController {
     }
 
     @GetMapping("/listByUser")
-    public Response listByUser(@Param("userId") Integer userId) {
+    public Response listByUser(@RequestParam("userId") Integer userId) {
         return postService.selectAllPostByUser(userId);
     }
 }

+ 11 - 0
src/main/java/cn/seecoder/fdroidrepository/Mapper/BuildTaskMapper.java

@@ -6,6 +6,8 @@ import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.UpdateProvider;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface BuildTaskMapper {
     @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
@@ -16,4 +18,13 @@ public interface BuildTaskMapper {
 
     @Select("select * from build_task where id = #{taskId}")
     BuildTaskPO selectById(Integer taskId);
+
+    @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);
+
+    @Select("select count(id) from build_task where app_id = #{appId}")
+    Integer getCount(Integer appId);
 }

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

@@ -12,8 +12,12 @@ public interface AppService {
     Response createAppInfo(AppInfoVO appInfoVO);
     Response updateAppInfo(AppInfoVO appInfoVO);
 
-    Response rewriteGradleFile(Integer pipelineId, String fileName, String content);
-    Response checkTaskStatus(Integer taskId);
+    Response getAppInfo(Integer id);
 
-    Response createBuildTask(BuildTaskCreateVO createVO);
+//    Response rewriteGradleFile(Integer pipelineId, String fileName, String content);
+//    Response checkTaskStatus(Integer taskId);
+//
+//    Response createBuildTask(BuildTaskCreateVO createVO);
+//
+//    Response getBuildTaskList(Integer appId);
 }

+ 18 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/BuildService.java

@@ -0,0 +1,18 @@
+package cn.seecoder.fdroidrepository.Service;
+
+import cn.seecoder.fdroidrepository.DataObject.VO.BuildTaskCreateVO;
+import cn.seecoder.fdroidrepository.DataObject.VO.Response;
+
+public interface BuildService {
+    Response rewriteGradleFile(Integer pipelineId, String fileName, String content);
+
+    Response checkTaskStatus(Integer taskId);
+
+    Response createBuildTask(BuildTaskCreateVO createVO);
+
+    Response getBuildTaskList(Integer appId);
+
+    Response getBuildTaskPage(Integer appId, Integer pageNum);
+
+    Response getBuildTaskCount(Integer appId);
+}

+ 103 - 78
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/AppServiceImpl.java

@@ -84,90 +84,115 @@ public class AppServiceImpl implements AppService {
     }
 
     @Override
-    public Response rewriteGradleFile(Integer taskId, String fileName, String content) {
-        try {
-            File file = new File(fileName);
-            if (!file.exists()) {
-                file.createNewFile();
-            }
-            FileWriter fileWriter = new FileWriter(file.getName(), false);
-            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
-            bufferedWriter.write(content);
-            bufferedWriter.close();
-
-            // 修改完成Gradle文件,通知后续流程继续
-            if (CommonValueTable.LockTable.containsValue(taskId)) {
-                // 对应的LockTable已经创建
-                // 调用notify方法继续流水线执行
-                WaitLock waitLock = CommonValueTable.LockTable.get(taskId);
-                synchronized (waitLock) {
-                    waitLock.notify();
-                }
-            } else {
-                WaitLock waitLock = new WaitLock();
-                CommonValueTable.LockTable.put(taskId, waitLock);
-            }
-            return Response.buildSuccess(true);
-        } catch (Exception exception) {
-            logger.error("重写Gradle文件失败,错误信息: {}", exception.getMessage());
-            return Response.buildFailure(ResultCode.GRADLE_REWRITE_FAIL.getCode(), ResultCode.GRADLE_REWRITE_FAIL.getMessage());
-        }
-    }
-
-    @Override
-    public Response checkTaskStatus(Integer taskId) {
-        ExecuteResult result = CommonValueTable.ResultTable.get(taskId);
-        BuildTaskPO buildTaskPO = this.buildTaskMapper.selectById(taskId);
-        if (result == null) {
-            return Response.buildFailure(ResultCode.BUILD_TASK_NON_EXIST.getCode(), ResultCode.BUILD_TASK_NON_EXIST.getMessage());
-        } else {
-            // 根据对应的执行结果内容进行更新
-            buildTaskPO.setStatus(result.getStatus());
-            buildTaskPO.setUpdateTime(result.getUpdateTime());
-            buildTaskPO.setMessage(result.getMessage());
-            buildTaskMapper.updateById(buildTaskPO);
-
-            // 流水线已经执行完成,删除其在Map中的内容,防止空间堆积
-            if(BuildTaskStatusEnum.SUCCESS.equals(result.getStatus()) || BuildTaskStatusEnum.FAILED.equals(result.getStatus())) {
-                CommonValueTable.ResultTable.remove(taskId);
-            }
+    public Response getAppInfo(Integer id) {
+        if (id == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
         }
-        return Response.buildSuccess(buildTaskPO);
-    }
-
-    @Override
-    public Response createBuildTask(BuildTaskCreateVO createVO) {
-        AppInfoPO appInfoPO = appInfoMapper.selectById(createVO.getAppId());
+        AppInfoPO appInfoPO = appInfoMapper.selectById(id);
         if (appInfoPO == null) {
             return Response.buildFailure(ResultCode.APPINFO_NON_EXIST.getCode(), ResultCode.APPINFO_NON_EXIST.getMessage());
         }
-        BuildTaskPO buildTaskPO = new BuildTaskPO();
-        BeanUtils.copyProperties(createVO, buildTaskPO);
-        buildTaskPO.setCreateTime(new Date(System.currentTimeMillis()));
-        buildTaskPO.setStatus(BuildTaskStatusEnum.NEW);
-        Integer taskId = buildTaskMapper.insert(buildTaskPO);
-        buildTaskPO.setId(taskId);
-        ApplicationProperties app = ApplicationProperties.builder()
-                .appId(createVO.getAppId())
-                .appName(appInfoPO.getAppName())
-                .repoUrl(appInfoPO.getRepoUrl())
-                .branch(appInfoPO.getBuildBranch())
-                .build();
-        THREAD_POOL_EXECUTOR.execute(new Runnable() {
-            @Override
-            public void run() {
-                Pipeline pipeline = null;
-                try {
-                    pipeline = PipelineFactory.init(taskId, appInfoPO.getAppName(), buildTaskPO, app);
-                    pipeline.start();
-                } catch (PipelineException e) {
-                    logger.error("PipelineException : {}", e.getMessage());
-                }
-            }
-        });
-        return Response.buildSuccess(taskId);
+        AppInfoVO result = new AppInfoVO();
+        BeanUtils.copyProperties(appInfoPO, result);
+        List<Integer> contributorId = relationMapper.selectContributorIdsByAppId(id);
+        result.setContributorIds(contributorId);
+        return Response.buildSuccess();
     }
 
+//    @Override
+//    public Response rewriteGradleFile(Integer taskId, String fileName, String content) {
+//        try {
+//            File file = new File(fileName);
+//            if (!file.exists()) {
+//                file.createNewFile();
+//            }
+//            FileWriter fileWriter = new FileWriter(file.getName(), false);
+//            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
+//            bufferedWriter.write(content);
+//            bufferedWriter.close();
+//
+//            // 修改完成Gradle文件,通知后续流程继续
+//            if (CommonValueTable.LockTable.containsValue(taskId)) {
+//                // 对应的LockTable已经创建
+//                // 调用notify方法继续流水线执行
+//                WaitLock waitLock = CommonValueTable.LockTable.get(taskId);
+//                synchronized (waitLock) {
+//                    waitLock.notify();
+//                }
+//            } else {
+//                WaitLock waitLock = new WaitLock();
+//                CommonValueTable.LockTable.put(taskId, waitLock);
+//            }
+//            return Response.buildSuccess(true);
+//        } catch (Exception exception) {
+//            logger.error("重写Gradle文件失败,错误信息: {}", exception.getMessage());
+//            return Response.buildFailure(ResultCode.GRADLE_REWRITE_FAIL.getCode(), ResultCode.GRADLE_REWRITE_FAIL.getMessage());
+//        }
+//    }
+//
+//    @Override
+//    public Response checkTaskStatus(Integer taskId) {
+//        ExecuteResult result = CommonValueTable.ResultTable.get(taskId);
+//        BuildTaskPO buildTaskPO = this.buildTaskMapper.selectById(taskId);
+//        if (result == null) {
+//            return Response.buildFailure(ResultCode.BUILD_TASK_NON_EXIST.getCode(), ResultCode.BUILD_TASK_NON_EXIST.getMessage());
+//        } else {
+//            // 根据对应的执行结果内容进行更新
+//            buildTaskPO.setStatus(result.getStatus());
+//            buildTaskPO.setUpdateTime(result.getUpdateTime());
+//            buildTaskPO.setMessage(result.getMessage());
+//            buildTaskMapper.updateById(buildTaskPO);
+//
+//            // 流水线已经执行完成,删除其在Map中的内容,防止空间堆积
+//            if(BuildTaskStatusEnum.SUCCESS.equals(result.getStatus()) || BuildTaskStatusEnum.FAILED.equals(result.getStatus())) {
+//                CommonValueTable.ResultTable.remove(taskId);
+//            }
+//        }
+//        return Response.buildSuccess(buildTaskPO);
+//    }
+//
+//    @Override
+//    public Response createBuildTask(BuildTaskCreateVO createVO) {
+//        AppInfoPO appInfoPO = appInfoMapper.selectById(createVO.getAppId());
+//        if (appInfoPO == null) {
+//            return Response.buildFailure(ResultCode.APPINFO_NON_EXIST.getCode(), ResultCode.APPINFO_NON_EXIST.getMessage());
+//        }
+//        BuildTaskPO buildTaskPO = new BuildTaskPO();
+//        BeanUtils.copyProperties(createVO, buildTaskPO);
+//        buildTaskPO.setCreateTime(new Date(System.currentTimeMillis()));
+//        buildTaskPO.setStatus(BuildTaskStatusEnum.NEW);
+//        Integer taskId = buildTaskMapper.insert(buildTaskPO);
+//        buildTaskPO.setId(taskId);
+//        ApplicationProperties app = ApplicationProperties.builder()
+//                .appId(createVO.getAppId())
+//                .appName(appInfoPO.getAppName())
+//                .repoUrl(appInfoPO.getRepoUrl())
+//                .branch(appInfoPO.getBuildBranch())
+//                .build();
+//        THREAD_POOL_EXECUTOR.execute(new Runnable() {
+//            @Override
+//            public void run() {
+//                Pipeline pipeline = null;
+//                try {
+//                    pipeline = PipelineFactory.init(taskId, appInfoPO.getAppName(), buildTaskPO, app);
+//                    pipeline.start();
+//                } catch (PipelineException e) {
+//                    logger.error("PipelineException : {}", e.getMessage());
+//                }
+//            }
+//        });
+//        return Response.buildSuccess(taskId);
+//    }
+//
+//    @Override
+//    public Response getBuildTaskList(Integer appId) {
+//        if (appId == null) {
+//            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+//        }
+//        List<BuildTaskPO> buildTaskPOList = buildTaskMapper.selectByAppId(appId);
+//        return Response.buildSuccess(buildTaskPOList);
+//    }
+
     private AppInfoVO buildAppInfoVO(AppInfoPO appInfoPO) {
         AppInfoVO appInfoVO = new AppInfoVO();
         BeanUtils.copyProperties(appInfoPO, appInfoVO);

+ 154 - 0
src/main/java/cn/seecoder/fdroidrepository/Service/ServiceImpl/BuildServiceImpl.java

@@ -0,0 +1,154 @@
+package cn.seecoder.fdroidrepository.Service.ServiceImpl;
+
+import cn.seecoder.fdroidrepository.DataObject.ApplicationProperties;
+import cn.seecoder.fdroidrepository.DataObject.Enum.BuildTaskStatusEnum;
+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.Response;
+import cn.seecoder.fdroidrepository.Mapper.AppInfoMapper;
+import cn.seecoder.fdroidrepository.Mapper.BuildTaskMapper;
+import cn.seecoder.fdroidrepository.Pipeline.*;
+import cn.seecoder.fdroidrepository.Pipeline.Config.CommonValueTable;
+import cn.seecoder.fdroidrepository.Service.BuildService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class BuildServiceImpl implements BuildService {
+    private static final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(4, 8, 1000, TimeUnit.SECONDS, new LinkedBlockingQueue<>(512), new ThreadPoolExecutor.DiscardPolicy());
+    private static final Logger logger = LoggerFactory.getLogger(AppServiceImpl.class);
+    private static final Integer SYSTEM_DEFAULT_ID = -1;
+    private final BuildTaskMapper buildTaskMapper;
+    private final AppInfoMapper appInfoMapper;
+
+    @Autowired
+    public BuildServiceImpl(BuildTaskMapper buildTaskMapper, AppInfoMapper appInfoMapper) {
+        this.buildTaskMapper = buildTaskMapper;
+        this.appInfoMapper = appInfoMapper;
+    }
+
+
+    @Override
+    public Response rewriteGradleFile(Integer taskId, String fileName, String content) {
+        try {
+            File file = new File(fileName);
+            if (!file.exists()) {
+                file.createNewFile();
+            }
+            FileWriter fileWriter = new FileWriter(file.getName(), false);
+            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
+            bufferedWriter.write(content);
+            bufferedWriter.close();
+
+            // 修改完成Gradle文件,通知后续流程继续
+            if (CommonValueTable.LockTable.containsValue(taskId)) {
+                // 对应的LockTable已经创建
+                // 调用notify方法继续流水线执行
+                WaitLock waitLock = CommonValueTable.LockTable.get(taskId);
+                synchronized (waitLock) {
+                    waitLock.notify();
+                }
+            } else {
+                WaitLock waitLock = new WaitLock();
+                CommonValueTable.LockTable.put(taskId, waitLock);
+            }
+            return Response.buildSuccess(true);
+        } catch (Exception exception) {
+            logger.error("重写Gradle文件失败,错误信息: {}", exception.getMessage());
+            return Response.buildFailure(ResultCode.GRADLE_REWRITE_FAIL.getCode(), ResultCode.GRADLE_REWRITE_FAIL.getMessage());
+        }
+    }
+
+    @Override
+    public Response checkTaskStatus(Integer taskId) {
+        ExecuteResult result = CommonValueTable.ResultTable.get(taskId);
+        BuildTaskPO buildTaskPO = this.buildTaskMapper.selectById(taskId);
+        if (result == null) {
+            return Response.buildFailure(ResultCode.BUILD_TASK_NON_EXIST.getCode(), ResultCode.BUILD_TASK_NON_EXIST.getMessage());
+        } else {
+            // 根据对应的执行结果内容进行更新
+            buildTaskPO.setStatus(result.getStatus());
+            buildTaskPO.setUpdateTime(result.getUpdateTime());
+            buildTaskPO.setMessage(result.getMessage());
+            buildTaskMapper.updateById(buildTaskPO);
+
+            // 流水线已经执行完成,删除其在Map中的内容,防止空间堆积
+            if(BuildTaskStatusEnum.SUCCESS.equals(result.getStatus()) || BuildTaskStatusEnum.FAILED.equals(result.getStatus())) {
+                CommonValueTable.ResultTable.remove(taskId);
+            }
+        }
+        return Response.buildSuccess(buildTaskPO);
+    }
+
+    @Override
+    public Response createBuildTask(BuildTaskCreateVO createVO) {
+        AppInfoPO appInfoPO = appInfoMapper.selectById(createVO.getAppId());
+        if (appInfoPO == null) {
+            return Response.buildFailure(ResultCode.APPINFO_NON_EXIST.getCode(), ResultCode.APPINFO_NON_EXIST.getMessage());
+        }
+        BuildTaskPO buildTaskPO = new BuildTaskPO();
+        BeanUtils.copyProperties(createVO, buildTaskPO);
+        buildTaskPO.setCreateTime(new Date(System.currentTimeMillis()));
+        buildTaskPO.setStatus(BuildTaskStatusEnum.NEW);
+        Integer taskId = buildTaskMapper.insert(buildTaskPO);
+        buildTaskPO.setId(taskId);
+        ApplicationProperties app = ApplicationProperties.builder()
+                .appId(createVO.getAppId())
+                .appName(appInfoPO.getAppName())
+                .repoUrl(appInfoPO.getRepoUrl())
+                .branch(appInfoPO.getBuildBranch())
+                .build();
+        THREAD_POOL_EXECUTOR.execute(new Runnable() {
+            @Override
+            public void run() {
+                Pipeline pipeline = null;
+                try {
+                    pipeline = PipelineFactory.init(taskId, appInfoPO.getAppName(), buildTaskPO, app);
+                    pipeline.start();
+                } catch (PipelineException e) {
+                    logger.error("PipelineException : {}", e.getMessage());
+                }
+            }
+        });
+        return Response.buildSuccess(taskId);
+    }
+
+    @Override
+    public Response getBuildTaskList(Integer appId) {
+        if (appId == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        List<BuildTaskPO> buildTaskPOList = buildTaskMapper.selectByAppId(appId);
+        return Response.buildSuccess(buildTaskPOList);
+    }
+
+    @Override
+    public Response getBuildTaskPage(Integer appId, Integer pageNum) {
+        if (appId == null || pageNum == null || pageNum < 1) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        return Response.buildSuccess(buildTaskMapper.selectByAppIdPage(appId, pageNum));
+    }
+
+    @Override
+    public Response getBuildTaskCount(Integer appId) {
+        if (appId == null) {
+            return Response.buildFailure(ResultCode.ILLEGAL_ARGUMENT.getCode(), ResultCode.ILLEGAL_ARGUMENT.getMessage());
+        }
+        return Response.buildSuccess(buildTaskMapper.getCount(appId));
+    }
+}