소스 검색

fix: 修改bug

zhaoxingrui 5 년 전
부모
커밋
2c694f3908
19개의 변경된 파일129개의 추가작업 그리고 39개의 파일을 삭제
  1. 10 9
      web/src/main/java/cn/seecoder/web/controller/auto_test/AutoTestController.java
  2. 11 3
      web/src/main/java/cn/seecoder/web/controller/func_test/FuncTestController.java
  3. 0 1
      web/src/main/java/cn/seecoder/web/controller/project/ProjectController.java
  4. 4 4
      web/src/main/java/cn/seecoder/web/dao/APITest/APITestMapper.java
  5. 1 0
      web/src/main/java/cn/seecoder/web/dao/func_test/FuncTestCaseMapper.java
  6. 4 0
      web/src/main/java/cn/seecoder/web/dao/project/ProjectRelatedMapper.java
  7. 8 0
      web/src/main/java/cn/seecoder/web/model/enums/NodeTypeEnum.java
  8. 1 0
      web/src/main/java/cn/seecoder/web/model/po/APITest/APITestResult.java
  9. 1 0
      web/src/main/java/cn/seecoder/web/model/po/bug_list/BugListPO.java
  10. 2 0
      web/src/main/java/cn/seecoder/web/model/po/func_test/FuncTestCasePO.java
  11. 3 0
      web/src/main/java/cn/seecoder/web/model/vo/bug_list/BugListVO.java
  12. 3 0
      web/src/main/java/cn/seecoder/web/model/vo/func_test/FuncTestCaseVO.java
  13. 1 1
      web/src/main/java/cn/seecoder/web/service/auto_test/AutoTestService.java
  14. 2 2
      web/src/main/java/cn/seecoder/web/service/func_test/FuncTestService.java
  15. 3 8
      web/src/main/java/cn/seecoder/web/service/impl/auto_test/AutoTestServiceImpl.java
  16. 16 1
      web/src/main/java/cn/seecoder/web/service/impl/bug_list/BugListServiceImpl.java
  17. 18 3
      web/src/main/java/cn/seecoder/web/service/impl/func_test/FuncFuncTestServiceImpl.java
  18. 7 1
      web/src/main/java/cn/seecoder/web/service/impl/project/ProjectServiceImpl.java
  19. 34 6
      web/src/main/java/cn/seecoder/web/service/impl/tree/TreeNodeServiceImpl.java

+ 10 - 9
web/src/main/java/cn/seecoder/web/controller/auto_test/AutoTestController.java

@@ -5,12 +5,10 @@ import cn.seecoder.web.model.vo.Response;
 import cn.seecoder.web.service.auto_test.AutoTestService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -24,10 +22,13 @@ public class AutoTestController {
     @Autowired
     public AutoTestController(AutoTestService autoTestService) { this.autoTestService = autoTestService; }
 
-    @GetMapping("/list/{projectId}")
-    @ApiOperation(value = "获取指定项目的所有黑盒测试结果", httpMethod = "GET")
-    @ApiImplicitParam(name = "projectId", dataType = "int", paramType = "query")
-    public Response<List<APITestResultVO>> getAutoTestResultByProjectId(@PathVariable("projectId") Integer projectId) {
-        return Response.buildSuccess(autoTestService.getAutoTestResultByProjectId(projectId));
+    @GetMapping("/list")
+    @ApiOperation(value = "获取指定项目的所有自动化测试结果", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "projectId", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "testId", dataType = "int", paramType = "query")
+    })
+    public Response<List<APITestResultVO>> getAutoTestResultByProjectId(@RequestParam("projectId") Integer projectId, @RequestParam("testId") Integer testId) {
+        return Response.buildSuccess(autoTestService.getAutoTestResultByProjectId(projectId, testId));
     }
 }

+ 11 - 3
web/src/main/java/cn/seecoder/web/controller/func_test/FuncTestController.java

@@ -52,10 +52,11 @@ public class FuncTestController {
     @PostMapping
     @ApiImplicitParams({
             @ApiImplicitParam(name = "projectId",dataType ="int", paramType = "query"),
-            @ApiImplicitParam(name = "title",dataType ="string", paramType = "query")
+            @ApiImplicitParam(name = "title",dataType ="string", paramType = "query"),
+            @ApiImplicitParam(name = "taskId", dataType = "int", paramType = "query")
     })
-    public Response createTestCase(@RequestParam("projectId") Integer projectId,@RequestParam("title") String title){
-        funcTestService.createTestCase(projectId, title);
+    public Response createTestCase(@RequestParam("projectId") Integer projectId,@RequestParam("title") String title, @RequestParam("taskId") Integer taskId){
+        funcTestService.createTestCase(projectId, title, taskId);
         return Response.buildSuccess();
     }
 
@@ -145,4 +146,11 @@ public class FuncTestController {
     public Response<List<FuncTestRecordVO>> getLatestRecord(@RequestParam("projectId") Integer projectId){
         return Response.buildSuccess(funcTestService.getLatestRecord(projectId));
     }
+
+    @ApiOperation(value = "获取当前项目所有的TASK节点id", httpMethod = "GET")
+    @ApiImplicitParam(name = "projectId", dataType = "int", paramType = "query")
+    @GetMapping("/taskList")
+    public Response<List<Integer>> getTreeIdList(@RequestParam("projectId") Integer projectId) {
+        return Response.buildSuccess(funcTestService.getTreeId(projectId));
+    }
 }

+ 0 - 1
web/src/main/java/cn/seecoder/web/controller/project/ProjectController.java

@@ -88,7 +88,6 @@ public class ProjectController {
             @ApiImplicitParam(name = "relateCode", dataType = "String", paramType = "query")
     })
     public Response generaterelateCode(@RequestParam("projectId") Integer projectId,@RequestParam("relateCode") String relateCode) {
-        System.out.println(relateCode);
         return Response.buildSuccess(projectService.relateProjects(projectId,relateCode));
     }
 }

+ 4 - 4
web/src/main/java/cn/seecoder/web/dao/APITest/APITestMapper.java

@@ -34,15 +34,15 @@ public interface APITestMapper {
     @Options(useGeneratedKeys = true, keyProperty = "param1.id")
     boolean execute(TestResult testResult, String... ignoredCols);
 
-    @Select("select * from test_result where test_id = #{testId} and pipeline_record_id = #{pipelineRecordId}")
+    @Select("select * from test_result where test_id = #{testId} and pipeline_history_id = #{pipelineRecordId}")
     List<TestResult> selectTestResultByTestId(@Param("testId") Integer testId,@Param("pipelineRecordId") Integer pipelineRecordId);
 
     @Delete("delete from test_result where test_id = #{id}")
     boolean deleteTestResult(Integer id);
 
-    @Select("select * from test_result where test_id = #{testId} and pipeline_record_id = #{pipelineRecordId} order by id DESC LIMIT 0,1")
+    @Select("select * from test_result where test_id = #{testId} and pipeline_history_id = #{pipelineRecordId} order by id DESC LIMIT 0,1")
     TestResult selectLatestTestResultById(@Param("testId") Integer testId,@Param("pipelineRecordId") Integer pipelineRecordId);
 
-    @Select("select * from test_result where pipeline_record_id = #{recordId}")
-    List<APITestResultVO> selectByPipelineRecordId(Integer recordId);
+    @Select("select * from test_result where pipeline_history_id = #{recordId} and test_id = #{testId}")
+    List<APITestResultVO> selectByPipelineRecordId(@Param("recordId") Integer recordId, @Param("testId") Integer testId);
 }

+ 1 - 0
web/src/main/java/cn/seecoder/web/dao/func_test/FuncTestCaseMapper.java

@@ -30,4 +30,5 @@ public interface FuncTestCaseMapper {
 
     @Select("select * from func_test_case where id = #{id}")
     FuncTestCasePO selectById(Integer id);
+
 }

+ 4 - 0
web/src/main/java/cn/seecoder/web/dao/project/ProjectRelatedMapper.java

@@ -4,6 +4,7 @@ import cn.seecoder.web.dao.provider.GeneralInsertUpdateSqlProvider;
 import cn.seecoder.web.model.po.project.ProjectRelatedPO;
 import org.apache.ibatis.annotations.InsertProvider;
 import org.apache.ibatis.annotations.Options;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
@@ -23,4 +24,7 @@ public interface ProjectRelatedMapper {
 
     @Select("select * from project_related where project_id_a = #{projectId} or project_id_b = #{projectId} ")
     List<ProjectRelatedPO> selectByProjectId(Integer projectId);
+
+    @Select("select * from project_related where project_id_a = #{projectIdA} and project_id_b = #{projectIdB} or project_id_a = #{projectIdB} and project_id_b = #{projectIdA}")
+    List<ProjectRelatedPO> isExistRelated(@Param("projectIdA") Integer projectIdA, @Param("projectIdB") Integer projectIdB);
 }

+ 8 - 0
web/src/main/java/cn/seecoder/web/model/enums/NodeTypeEnum.java

@@ -7,9 +7,17 @@ public enum NodeTypeEnum {
     @JsonProperty("需求")
     REQUIREMENT("需求"),
 
+    @JsonProperty("特性")
+    FEATURE("特性"),
+
+    @JsonProperty("用户故事")
+    STORY("用户故事"),
+
     @JsonProperty("任务")
     TASK("任务");
 
+
+
     private String value;
 
     NodeTypeEnum(String value){

+ 1 - 0
web/src/main/java/cn/seecoder/web/model/po/APITest/APITestResult.java

@@ -26,4 +26,5 @@ public class APITestResult {
     private Integer maxTime;
     private Integer minTime;
     private Double averageTime;
+    private Integer pipelineHistoryId;
 }

+ 1 - 0
web/src/main/java/cn/seecoder/web/model/po/bug_list/BugListPO.java

@@ -46,4 +46,5 @@ public class BugListPO {
 
     private Integer processorId;
 
+
 }

+ 2 - 0
web/src/main/java/cn/seecoder/web/model/po/func_test/FuncTestCasePO.java

@@ -27,4 +27,6 @@ public class FuncTestCasePO {
      */
     Boolean pass;
 
+    Integer taskId;
+
 }

+ 3 - 0
web/src/main/java/cn/seecoder/web/model/vo/bug_list/BugListVO.java

@@ -52,6 +52,9 @@ public class BugListVO {
     @ApiModelProperty("负责人名字")
     private String processorName;
 
+    @ApiModelProperty("所属项目id")
+    private Integer projectId;
+
     public BugListVO(BugListPO bugListPO, String username){
         //this.commits = commits.stream().map(CommitVO::new).collect(Collectors.toList());
         BeanUtils.copyProperties(bugListPO,this);

+ 3 - 0
web/src/main/java/cn/seecoder/web/model/vo/func_test/FuncTestCaseVO.java

@@ -33,6 +33,9 @@ public class FuncTestCaseVO {
     @ApiModelProperty("代表这个测试用例是否通过")
     Boolean pass;
 
+    @ApiModelProperty("关联的任务id")
+    Integer taskId;
+
     public FuncTestCaseVO(FuncTestCasePO po) {
         BeanUtils.copyProperties(po,this);
     }

+ 1 - 1
web/src/main/java/cn/seecoder/web/service/auto_test/AutoTestService.java

@@ -5,5 +5,5 @@ import cn.seecoder.web.model.vo.APITest.APITestResultVO;
 import java.util.List;
 
 public interface AutoTestService {
-    List<APITestResultVO> getAutoTestResultByProjectId(Integer projectId);
+    List<APITestResultVO> getAutoTestResultByProjectId(Integer projectId, Integer testId);
 }

+ 2 - 2
web/src/main/java/cn/seecoder/web/service/func_test/FuncTestService.java

@@ -18,7 +18,7 @@ public interface FuncTestService {
 
     List<FuncTestStepVO> getTestSteps(Integer testCaseId);
 
-    void createTestCase(Integer projectId, String title);
+    void createTestCase(Integer projectId, String title, Integer taskId);
 
     void updateTestCaseTitle(Integer testCaseId, String title);
 
@@ -38,5 +38,5 @@ public interface FuncTestService {
 
     List<FuncTestRecordVO> getLatestRecord(Integer projectId);
 
-
+    List<Integer> getTreeId(Integer projectId);
 }

+ 3 - 8
web/src/main/java/cn/seecoder/web/service/impl/auto_test/AutoTestServiceImpl.java

@@ -30,8 +30,9 @@ public class AutoTestServiceImpl implements AutoTestService {
     }
 
     @Override
-    public List<APITestResultVO> getAutoTestResultByProjectId(Integer projectId) {
+    public List<APITestResultVO> getAutoTestResultByProjectId(Integer projectId, Integer testId) {
         List<Integer> pipelineIds = pipelineMapper.selectByProjectId(projectId).stream().map(PipelinePO::getId).collect(Collectors.toList());
+
         if (pipelineIds.size() == 0) {
             return new ArrayList<>();
         }
@@ -39,12 +40,6 @@ public class AutoTestServiceImpl implements AutoTestService {
         if (latestRecord == null) {
             return new ArrayList<>();
         }
-        return apiTestMapper.selectByPipelineRecordId(latestRecord.getId()).stream()
-                .map(x->{
-                    APITestResultVO vo = new APITestResultVO(null);
-                    BeanUtils.copyProperties(x, vo);
-                    return vo;
-                })
-                .collect(Collectors.toList());
+        return apiTestMapper.selectByPipelineRecordId(latestRecord.getId(), testId);
     }
 }

+ 16 - 1
web/src/main/java/cn/seecoder/web/service/impl/bug_list/BugListServiceImpl.java

@@ -61,6 +61,7 @@ public class BugListServiceImpl implements BugListService {
                 .priority(vo.getPriority())
                 .endTime(null)
                 .projectId(vo.getProjectId())
+                .processorId(vo.getProcessorId())
                 .build();
         bugListMapper.insert(po);
     }
@@ -70,8 +71,22 @@ public class BugListServiceImpl implements BugListService {
         List<ProjectRelatedPO> related = projectRelatedMapper.selectByProjectId(projectId);
         List<BugListPO> bugs = bugListMapper.selectByProjectId(projectId);
         // 相关项目的bug一并展示
+//        for (ProjectRelatedPO po:related) {
+//            System.out.println(po.getProjectIdA());
+//            System.out.println(po.getProjectIdB());
+//            if (po.getProjectIdA().intValue() == projectId) {
+//                System.out.println("idA = id");
+//                System.out.println(bugListMapper.selectByProjectId(po.getProjectIdB()).size());
+//                bugs.addAll(bugListMapper.selectByProjectId(po.getProjectIdB()));
+//            } else {
+//                System.out.println("idB = id");
+//                System.out.println(bugListMapper.selectByProjectId(po.getProjectIdA()).size());
+//                bugs.addAll(bugListMapper.selectByProjectId(po.getProjectIdA()));
+//            }
+//        }
+        // 注意:这边判断id是否相等要加 .intValue()
         for (ProjectRelatedPO po : related){
-            bugs.addAll(bugListMapper.selectByProjectId(po.getProjectIdA() != projectId? po.getProjectIdA() : po.getProjectIdB()));
+            bugs.addAll(bugListMapper.selectByProjectId(po.getProjectIdA().intValue() != projectId? po.getProjectIdA() : po.getProjectIdB()));
         }
 
 

+ 18 - 3
web/src/main/java/cn/seecoder/web/service/impl/func_test/FuncFuncTestServiceImpl.java

@@ -5,6 +5,7 @@ import cn.seecoder.web.dao.func_test.FuncTestRecordMapper;
 import cn.seecoder.web.dao.func_test.FuncTestStepMapper;
 import cn.seecoder.web.dao.pipeline.PipelineMapper;
 import cn.seecoder.web.dao.pipeline.PipelineRecordMapper;
+import cn.seecoder.web.dao.tree.TreeNodeMapper;
 import cn.seecoder.web.model.enums.FuncTestOperatorEnum;
 import cn.seecoder.web.model.enums.FuncTestStepState;
 import cn.seecoder.web.model.po.func_test.FuncTestCasePO;
@@ -12,6 +13,7 @@ import cn.seecoder.web.model.po.func_test.FuncTestRecordPO;
 import cn.seecoder.web.model.po.func_test.FuncTestStepPO;
 import cn.seecoder.web.model.po.pipeline.PipelinePO;
 import cn.seecoder.web.model.po.pipeline.PipelineRecordPO;
+import cn.seecoder.web.model.po.tree.TreeNodePO;
 import cn.seecoder.web.model.vo.func_test.FuncTestCaseVO;
 import cn.seecoder.web.model.vo.func_test.FuncTestRecordVO;
 import cn.seecoder.web.model.vo.func_test.FuncTestStepVO;
@@ -44,13 +46,16 @@ public class FuncFuncTestServiceImpl implements FuncTestService {
 
     private final PipelineRecordMapper pipelineRecordMapper;
 
+    private final TreeNodeMapper treeNodeMapper;
+
     @Autowired
-    public FuncFuncTestServiceImpl(FuncTestCaseMapper funcTestCaseMapper, FuncTestStepMapper funcTestStepMapper, FuncTestRecordMapper funcTestRecordMapper, PipelineMapper pipelineMapper, PipelineRecordMapper pipelineRecordMapper) {
+    public FuncFuncTestServiceImpl(FuncTestCaseMapper funcTestCaseMapper, FuncTestStepMapper funcTestStepMapper, FuncTestRecordMapper funcTestRecordMapper, PipelineMapper pipelineMapper, PipelineRecordMapper pipelineRecordMapper, TreeNodeMapper treeNodeMapper) {
         this.funcTestCaseMapper = funcTestCaseMapper;
         this.funcTestStepMapper = funcTestStepMapper;
         this.funcTestRecordMapper = funcTestRecordMapper;
         this.pipelineMapper = pipelineMapper;
         this.pipelineRecordMapper = pipelineRecordMapper;
+        this.treeNodeMapper = treeNodeMapper;
     }
 
     @Override
@@ -67,8 +72,8 @@ public class FuncFuncTestServiceImpl implements FuncTestService {
 
     @Override
     @Transactional
-    public void createTestCase(Integer projectId, String title) {
-        funcTestCaseMapper.insert(FuncTestCasePO.builder().projectId(projectId).pass(false).title(title).build());
+    public void createTestCase(Integer projectId, String title, Integer taskId) {
+        funcTestCaseMapper.insert(FuncTestCasePO.builder().projectId(projectId).pass(false).title(title).taskId(taskId).build());
     }
 
     @Override
@@ -168,4 +173,14 @@ public class FuncFuncTestServiceImpl implements FuncTestService {
                 })
                 .collect(Collectors.toList());
     }
+
+    @Override
+    public List<Integer> getTreeId(Integer projectId) {
+        List<TreeNodePO> treeNodePOS = treeNodeMapper.getNodesWithTaskTypeByProjectid(projectId);
+        List<Integer> idList = new ArrayList<Integer>();
+        for (TreeNodePO po: treeNodePOS) {
+            idList.add(po.getId());
+        }
+        return idList;
+    }
 }

+ 7 - 1
web/src/main/java/cn/seecoder/web/service/impl/project/ProjectServiceImpl.java

@@ -133,7 +133,13 @@ public class ProjectServiceImpl implements ProjectService {
         if (System.currentTimeMillis() - result[1] > 1000 * 60 * 5) {
             return "验证码有效时间为五分钟,已过期";
         }
-        ;
+        if (projectId == result[0].intValue()) {
+            return "不可将本项目与自身关联!";
+        }
+        List<ProjectRelatedPO> projectRelatedPOS = projectRelatedMapper.isExistRelated(projectId, result[0].intValue());
+        if (projectRelatedPOS.size() != 0) {
+            return "该项目已与目标项目关联过,无须重复关联";
+        }
         projectRelatedMapper.insert(ProjectRelatedPO.builder()
                 .projectIdA(projectId)
                 .projectIdB(result[0].intValue()).build(), "id");

+ 34 - 6
web/src/main/java/cn/seecoder/web/service/impl/tree/TreeNodeServiceImpl.java

@@ -33,6 +33,18 @@ public class TreeNodeServiceImpl implements TreeNodeService {
 
     private final CommitMapper commitMapper;
 
+    private final String DEFAULT_FEATURE_NODE = "默认特性节点";
+
+    private final String DEFAULT_FEATURE_DESCRIPTION = "特性(Feature)节点\n例如:提供课堂测验功能便于学生对所学内容及时巩固";
+
+    private final String DEFAULT_STORY_NODE = "默认用户故事节点";
+
+    private final String DEFAULT_STORY_DESCRIPTION = "用户故事(Story)节点\n例如:教师端发布测试任务供学生进行测试";
+
+    private final String DEFAULT_TASK_NODE = "默认任务节点";
+
+    private final String DEFAULT_TASK_DESCRIPTION = "任务(Task)节点\n例如:教师可以从题库中选择题目进行测试";
+
     @Autowired
     public TreeNodeServiceImpl(TreeNodeMapper treeNodeMapper, UserMapper userMapper, CommitMapper commitMapper) {
         this.treeNodeMapper = treeNodeMapper;
@@ -52,8 +64,8 @@ public class TreeNodeServiceImpl implements TreeNodeService {
                     .startTime(format.format(new Date()))
                     .projectId(projectId)
                     .state(NodeStateEnum.CREATED)
-                    .title("default root")
-                    .description("根节点")
+                    .title("默认需求节点")
+                    .description("Requirement节点\n例如:打造一个学习成果测试及学习交流的平台便于学生更好的开发工作")
                     .priority(PriorityEnum.MIDDLE)
                     .type(NodeTypeEnum.REQUIREMENT)
                     .timeToTake(0L)
@@ -120,14 +132,30 @@ public class TreeNodeServiceImpl implements TreeNodeService {
     public void insertTreeNodeByFatherNode(int fatherId) throws ServiceException {
         SimpleDateFormat format = DateUtil.getSimpleDateFormat();
         TreeNodePO father = treeNodeMapper.getTreeNodeById(fatherId);
-        if (father.getDeep()==4){
+        if (father.getDeep()==5){
             throw new ServiceException("不能继续创建子节点,深度最大为4");
         }
+        NodeTypeEnum nodeTypeEnum = null;
+        String title = null;
+        String description = null;
+        if (father.getType() == NodeTypeEnum.REQUIREMENT) {
+            nodeTypeEnum = NodeTypeEnum.FEATURE;
+            title = DEFAULT_FEATURE_NODE;
+            description = DEFAULT_FEATURE_DESCRIPTION;
+        } else if (father.getType() == NodeTypeEnum.FEATURE) {
+            nodeTypeEnum = NodeTypeEnum.STORY;
+            title = DEFAULT_STORY_NODE;
+            description = DEFAULT_STORY_DESCRIPTION;
+        } else if (father.getType() == NodeTypeEnum.STORY) {
+            nodeTypeEnum = NodeTypeEnum.TASK;
+            title = DEFAULT_TASK_NODE;
+            description = DEFAULT_TASK_DESCRIPTION;
+        }
         TreeNodePO son = TreeNodePO.builder()
                 .parentId(fatherId)
-                .type(father.getDeep()+1==4?NodeTypeEnum.TASK:NodeTypeEnum.REQUIREMENT)
-                .title("默认子节点")
-                .description("子节点")
+                .type(nodeTypeEnum)
+                .title(title)
+                .description(description)
                 .state(NodeStateEnum.CREATED)
                 .projectId(father.getProjectId())
                 .startTime(format.format(new Date()))