Browse Source

site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

guochao 6 years ago
parent
commit
83ea573cd1

+ 17 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -3,11 +3,14 @@ package com.mooctest.crowd.domain.domainobject;
 import com.google.gson.Gson;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.CrowdTestProjectException;
+import com.mooctest.crowd.domain.exception.CrowdTestReportNotExistException;
+import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
 import lombok.Data;
 
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * @author guochao
@@ -251,6 +254,20 @@ public class CrowdTestProject {
         this.setStatus(CrowdTestProjectStatus.HAS_SPLITED);
     }
 
+    public CrowdTestTask getTask(String taskCode){
+        Optional<CrowdTestTask> testTask = this.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
+        if (!testTask.isPresent())
+            throw new CrowdTestTaskNotExistException();
+        return testTask.get();
+    }
+
+    public CrowdTestReport getTaskReport(String taskCode, String reportCode){
+        Optional<CrowdTestReport> report = getTask(taskCode).getCrowdTestReportList().stream().filter(crowdTestReport -> crowdTestReport.getCode().equals(reportCode)).findFirst();
+        if (!report.isPresent())
+            throw new CrowdTestReportNotExistException();
+        return report.get();
+    }
+
 //    /**
 //     * 设置任务和报告的数据
 //     * @return

+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/anticorruption/impl/data/UserInfo.java

@@ -32,6 +32,7 @@ public class UserInfo {
         user.setId(this.id);
         user.setName(name);
         user.setUserName(name);
+        user.setEmail(email);
         user.setMobile(mobile);
         user.setPassword(password);
         user.setCity(city);

+ 1 - 2
site/src/main/java/com/mooctest/crowd/site/command/CrowdTestReportCommand.java

@@ -17,8 +17,7 @@ public class CrowdTestReportCommand {
     @NotNull(message = "请填写报告名称")
     private String name;
 
-    @NotNull(message = "请选择报告所属范围")
-    private Integer scope;
+    private Integer scope=0;
 
     @NotNull(message = "请选择报告类型 ")
     private String type;

File diff suppressed because it is too large
+ 0 - 1
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


+ 43 - 5
site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java

@@ -15,6 +15,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.util.List;
@@ -31,6 +32,12 @@ public class CrowdProjectController {
     @Autowired
     private CrowdProjectService projectService;
 
+    /**
+     *  创建项目接口
+     * @param crowdTestProjectCommand
+     * @param result
+     * @return
+     */
     @RequestMapping(value = "/api/project", method = RequestMethod.POST)
     public ProjectDetailsDTO createProject(@Validated @RequestBody CrowdTestProjectCommand crowdTestProjectCommand, BindingResult result){
         if (result.hasErrors())
@@ -40,6 +47,11 @@ public class CrowdProjectController {
         return projectService.createCrowdProject(crowdTestProjectCommand);
     }
 
+    /**
+     * 获取项目详情接口
+     * @param projectCode
+     * @return
+     */
     @RequestMapping(value = "/api/project/{projectCode}", method = RequestMethod.GET)
     public ProjectDetailsDTO getProject(@PathVariable("projectCode") String projectCode){
         log.info("访问Project详情,projectId:"+projectCode);
@@ -51,6 +63,13 @@ public class CrowdProjectController {
         return null;
     }
 
+    /**
+     * 更新项目信息接口
+     * @param crowdTestProjectCommand
+     * @param projectCode
+     * @param result
+     * @return
+     */
     @RequestMapping(value = "/api/project/{projectCode}", method = RequestMethod.PUT)
     public ProjectDetailsDTO updateProject(@Validated @RequestBody CrowdTestProjectCommand crowdTestProjectCommand, @PathVariable("projectCode") String projectCode, BindingResult result){
         if (result.hasErrors())
@@ -65,16 +84,21 @@ public class CrowdProjectController {
         projectService.deleteProject(projectId, (Long)session.getAttribute("userId"));
     }
 
+    /**
+     * 通过表单填写,生成项目
+     * @param command
+     * @return
+     */
     @RequestMapping(value = "/api/greenChannel/project", method = RequestMethod.POST)
     public ProjectDetailsDTO generateProjectWithData(@RequestBody GenerateProjectCommand command){
         return projectService.generateProjectWithData(command);
     }
 
-    @RequestMapping(value = "/api/greenChannel/projects", method = RequestMethod.POST)
-    public List<ProjectDetailsDTO> multiProjectsImport(@RequestBody List<CrowdTestProject> projects){
-        return projectService.importMultiProjectsByExcel(projects);
-    }
-
+    /**
+     * 将Excel解析为多个项目
+     * @param file
+     * @return
+     */
     @RequestMapping(value = "/api/greenChannel/excel/projects", method = RequestMethod.POST)
     public List<CrowdTestProject> parseExcel2Projects(MultipartFile file){
         try {
@@ -85,4 +109,18 @@ public class CrowdProjectController {
         }
         return projectService.generateProjectByExcel(file);
     }
+
+    /**
+     * 导入由Excel解析而来的多个项目
+     * @param projects
+     * @return
+     */
+    @RequestMapping(value = "/api/greenChannel/projects", method = RequestMethod.POST)
+    public List<ProjectDetailsDTO> multiProjectsImport(@RequestBody List<CrowdTestProject> projects){
+        return projectService.importMultiProjectsByExcel(projects);
+    }
+
+    @RequestMapping(value = "/api/project/{projectCode}/status/accept")
+    public void acceptProject(@PathVariable("projectCode") String projectCode, HttpServletRequest request){
+    }
 }

+ 18 - 12
site/src/main/java/com/mooctest/crowd/site/controller/CrowdReportController.java

@@ -54,19 +54,24 @@ public class CrowdReportController {
     }
 
     @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/report/{reportCode}", method = RequestMethod.DELETE)
-    public boolean deleteTaskReport(@PathVariable("reportCode")String reportCode){
-        return true;
+    public void deleteTaskReport(@PathVariable("projectCode") String projectCode,
+                                 @PathVariable("taskCode") String taskCode,
+                                 @PathVariable("reportCode") String reportCode){
+        reportService.deleteTaskReport(projectCode, taskCode, reportCode);
     }
 
 
     @RequestMapping(value = "/project/{projectCode}/report", method = RequestMethod.POST)
-    public ReportDetailsDTO createProjectReport(CrowdTestReportCommand command){
-        return null;
+    public ReportDetailsDTO createProjectReport(@PathVariable("projectCode") String projectCode,
+                                                @RequestBody @Validated CrowdTestReportCommand command, BindingResult result){
+        if (result.hasErrors())
+            throw new BaseException(result.getFieldError().getDefaultMessage());
+        return reportService.createProjectReport(projectCode, command);
     }
 
     @RequestMapping(value = "/project/{projectCode}/report/{reportCode}", method = RequestMethod.GET)
     public ReportDetailsDTO getProjectReport(@PathVariable("projectCode") String projectCode, @PathVariable("reportCode") String reportCode){
-        return null;
+        return reportService.getProjectReport(projectCode, reportCode);
     }
 
     @RequestMapping(value = "/project/{projectCode}/report/{reportCode}", method = RequestMethod.DELETE)
@@ -74,14 +79,15 @@ public class CrowdReportController {
         return true;
     }
 
-    @RequestMapping(value = "/api/report", method = RequestMethod.GET)
-    public List<ReportDetailsDTO> getReports(){
-        return null;
-    }
 
-    @RequestMapping(value = "/api/report", method = RequestMethod.PUT)
-    public ReportDetailsDTO updateReport(CrowdTestReportCommand command){
-        return null;
+    @RequestMapping(value = "/project/{projectCode}/report/{reportCode}", method = RequestMethod.PUT)
+    public ReportDetailsDTO updateProjectReport(@PathVariable("projectCode") String projectCode,
+                                                @PathVariable("reportCode") String reportCode,
+                                                @RequestBody @Validated CrowdTestReportCommand command, BindingResult result){
+        log.info("更行项目报告,projectCode: " + projectCode);
+        if (result.hasErrors())
+            throw new BaseException(result.getFieldError().getDefaultMessage());
+        return reportService.updatePorjctReport(projectCode, reportCode, command);
     }
 
 

+ 1 - 1
site/src/main/java/com/mooctest/crowd/site/data/enums/ProjectType.java

@@ -45,7 +45,7 @@ public enum ProjectType {
 
     public static String getCode(String typeName) {
         for (ProjectType pt : ProjectType.values()) {
-            if (pt.getTypeName() == typeName) {
+            if (pt.getTypeName().equals(typeName)) {
                 return pt.getTypeCode();
             }
         }

+ 33 - 8
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -9,18 +9,21 @@ import com.mooctest.crowd.site.command.*;
 import com.mooctest.crowd.site.data.dto.*;
 import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
  * @Author: xuexb
  * @Date: 2019.7.16 20:27
  */
+@Slf4j
 @Component("WebMediator")
 public class WebMediatorImpl implements ViewMediator {
 
@@ -47,16 +50,38 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public IndexDTO renderIndex() {
         ArrayList<CrowdTaskVO> allTasks = new ArrayList<>();
-        projectRepo.getAllCrowdTestProject().forEach(project -> {
+        List<CrowdTestProject> allProjects = projectRepo.getAllCrowdTestProject();
+        allProjects.forEach(project -> {
             allTasks.addAll(project.getCrowdTestTaskList()
                     .stream().filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_RELEASED)
                     .map(crowdTestTask -> new CrowdTaskVO(crowdTestTask)).collect(Collectors.toList()));
         });
-        List<UserVO> allUser = userRepo.getAllUser().stream().map(user -> new UserVO(user)).collect(Collectors.toList());
-        allUser.forEach(userVO -> {
-            userVO.setAllProjectPrice(projectRepo.getCrowdListByUserId(userVO.getId()).stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum());
+
+        //对Project按照UserId进行分组
+        Map<Long, List<CrowdTestProject>> projectsGroup = new HashMap<>();
+        allProjects.forEach(project -> {
+            if (!projectsGroup.keySet().contains(project.getUserId()))
+                projectsGroup.put(project.getUserId(), new ArrayList<>());
+            projectsGroup.get(project.getUserId()).add(project);
         });
-        allUser.sort(Comparator.comparing(UserVO::getAllProjectPrice).reversed());
+        //根据组的项目总价进行排序,提取UserId
+        List<Long> userIds = projectsGroup.entrySet().stream().sorted((o1, o2) -> {
+            Double sumPrice1 = o1.getValue().stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum();
+            Double sumPrice2 = o2.getValue().stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum();
+            if (sumPrice1 > sumPrice2)
+                return -1;
+            else if (sumPrice1 < sumPrice2)
+                return 1;
+            else
+                return 0;
+        }).map(Map.Entry::getKey).collect(Collectors.toList());
+        for (Long id : userIds)
+            log.info("UserId from Project: " + id);
+        if (userIds.size()>10)
+            userIds = userIds.subList(0,9);
+        List<UserVO> userRanks = userIds.stream().map(id -> new UserVO(userRepo.getByID(id))).collect(Collectors.toList());
+        userRanks.forEach(userVO -> userVO.setAllProjectPrice(projectsGroup.get(userVO.getId()).stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum()));
+
         allTasks.sort(Comparator.comparing(CrowdTaskVO::getQuotePrice).reversed());
         List<CrowdTaskVO> hotTasks = allTasks.subList(0,3);
         List<EvolutionAgencyVO> agencyVOS = new ArrayList<>();
@@ -101,10 +126,10 @@ public class WebMediatorImpl implements ViewMediator {
         agencyVOS.add(agency9);
         agencyVOS.add(agency10);
         IndexDTO indexDTO = new IndexDTO();
+
+
         indexDTO.setHotTaskList(hotTasks);
-        if (allUser.size()>10)
-            allUser = allUser.subList(0, 10);
-        indexDTO.setUserRank(allUser);
+        indexDTO.setUserRank(userRanks);
         indexDTO.setAgencyRank(agencyVOS);
         List<String> img = new ArrayList<>();
         img.add("http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/Image/daylight.jpg");

+ 8 - 0
site/src/main/java/com/mooctest/crowd/site/service/CrowdReportService.java

@@ -14,4 +14,12 @@ public interface CrowdReportService {
     ReportDetailsDTO createTaskReport(String projectCode, String taskCode, CrowdTestReportCommand command);
 
     ReportDetailsDTO updateTaskReport(String projectCode, String taskCode, String reportCode, CrowdTestReportCommand command);
+
+    void deleteTaskReport(String projectCode, String taskCode, String reportCode);
+
+    ReportDetailsDTO getProjectReport(String projectCode, String reportCode);
+
+    ReportDetailsDTO createProjectReport(String projectCode, CrowdTestReportCommand command);
+
+    ReportDetailsDTO updatePorjctReport(String projectCode, String reportCode, CrowdTestReportCommand command);
 }

+ 17 - 2
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -147,8 +147,15 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
             task.setName(project.getName()+"-"+task.getType());
             task.setQuotedPrice(project.getQuotedPrice());
             task.setFixedPrice(project.getFixedPrice());
+            task.setDescription(project.getDescription());
             tasks.add(task);
             project.setCrowdTestTaskList(tasks);
+            project.getCrowdTestReportForProject().setCode(GenerateFlowCodeUtil.generateReportCode());
+            project.getCrowdTestReportForProject().setDependencyCode(project.getCode());
+            project.getCrowdTestReportForProject().setDescription(project.getDescription());
+            project.getCrowdTestReportForProject().setName(project.getName()+"测试报告");
+            project.getCrowdTestReportForProject().setType(project.getType());
+            project.getCrowdTestReportForProject().setTestObject(project.getName());
         });
         return projects;
     }
@@ -179,6 +186,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         log.info("Rows: " + sheet.getPhysicalNumberOfRows());
         for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++ ){
             CrowdTestProject project = CrowdTestProjectFactory.defaulstCrowdTestProject();
+            CrowdTestReport report = CrowdTestProjectFactory.defaultProjectReport();
             Row row = sheet.getRow(i);
             if (row == null){
                 logList.add("表中存在错误的单元格,请把与内容无关的单元格置空");
@@ -202,7 +210,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
                         project.setName(cell.getStringCellValue().trim());
                         break;
                     case 1:
-                        if(!isPlatform(cell.getStringCellValue())){
+                        if(!(cell.getStringCellValue().trim().equals("IOS")||cell.getStringCellValue().trim().equals("WEB")||cell.getStringCellValue().trim().equals("ANDROID"))){
                             logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "测试平台数据不合法:"+cell.getStringCellValue());
                             break;
                         }
@@ -221,7 +229,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
                         project.setLinkManMobile(cell.getStringCellValue().trim());
                         break;
                     case 4:
-                        if (!isType(cell.getStringCellValue().trim())){
+                        if (ProjectType.getCode(cell.getStringCellValue().trim())==null){
                             logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "错误的测试服务类型:"+cell.getStringCellValue());
                             break;
                         }
@@ -235,8 +243,15 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
                     case 6:
                         project.setFixedPrice(Double.parseDouble(cell.getStringCellValue().trim()));
                         break;
+                    case 7:
+                        report.setContent(cell.getStringCellValue().trim());
+                        break;
+                    case 8:
+                        report.setConclusion(cell.getStringCellValue().trim());
+                        break;
                 }
             }
+            project.setCrowdTestReportForProject(report);
             project.setQuotedPrice(project.getFixedPrice());
             projects.add(project);
         }

+ 51 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java

@@ -55,6 +55,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
             throw new BaseException("当前阶段无法创建报告");
         CrowdTestReport report = command.toCrowdTestReport();
         String reportCode = GenerateFlowCodeUtil.generateFlowCode("REPORT");
+        report.setScope(1);
         report.setDependencyCode(taskCode);
         report.setCode(reportCode);
         task.get().getCrowdTestReportList().add(report);
@@ -78,10 +79,60 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         CrowdTestReport updatedReport = command.toCrowdTestReport();
         updatedReport.setId(report.get().getId());
         updatedReport.setCode(report.get().getCode());
+        updatedReport.setScope(1);
         updatedReport.setDependencyCode(report.get().getDependencyCode());
         task.get().getCrowdTestReportList().remove(report.get());
         task.get().getCrowdTestReportList().add(updatedReport);
         projectRepo.saveCrowdTestProject(project);
         return getTaskReport(projectCode, taskCode, reportCode);
     }
+
+    @Override
+    public void deleteTaskReport(String projectCode, String taskCode, String reportCode) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.getTaskReport(taskCode, reportCode).setIsDeleted(1);
+        projectRepo.saveCrowdTestProject(project);
+    }
+
+    @Override
+    public ReportDetailsDTO getProjectReport(String projectCode, String reportCode) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestReport report = project.getCrowdTestReportForProject();
+        if (report==null)
+            throw new CrowdTestReportNotExistException();
+        ReportDetailsDTO reportDetailsDTO  = new ReportDetailsDTO();
+        reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report));
+        return reportDetailsDTO;
+    }
+
+    @Override
+    public ReportDetailsDTO createProjectReport(String projectCode, CrowdTestReportCommand command) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        if (project.getStatus() != CrowdTestProjectStatus.HAS_RELEASED)
+            throw new BaseException("当前阶段无法创建报告");
+        CrowdTestReport report = command.toCrowdTestReport();
+        String reportCode = GenerateFlowCodeUtil.generateFlowCode("REPORT");
+        report.setDependencyCode(projectCode);
+        report.setCode(reportCode);
+        project.setCrowdTestReportForProject(report);
+        projectRepo.saveCrowdTestProject(project);
+        return getProjectReport(projectCode, reportCode);
+    }
+
+    @Override
+    public ReportDetailsDTO updatePorjctReport(String projectCode, String reportCode, CrowdTestReportCommand command) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED)
+            throw new BaseException("当前阶段无法修改报告");
+        CrowdTestReport report = project.getCrowdTestReportForProject();
+        if (report==null)
+            throw new CrowdTestReportNotExistException();
+        CrowdTestReport updatedReport = command.toCrowdTestReport();
+        updatedReport.setId(report.getId());
+        updatedReport.setCode(report.getCode());
+        updatedReport.setDependencyCode(report.getDependencyCode());
+        project.setCrowdTestReportForProject(updatedReport);
+        projectRepo.saveCrowdTestProject(project);
+        return getProjectReport(projectCode, reportCode);
+    }
 }

Some files were not shown because too many files changed in this diff