Browse Source

添加CrowdTask相关接口

Diors.Po 6 years ago
parent
commit
04b663a360

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

@@ -1,6 +1,7 @@
 package com.mooctest.crowd.domain.domainobject;
 
 import com.google.gson.Gson;
+import com.mooctest.crowd.domain.exception.BaseException;
 import lombok.Data;
 
 import java.sql.Timestamp;
@@ -131,6 +132,13 @@ public class CrowdTestProject {
         return crowdTestProject;
     }
 
+    public void addTask(CrowdTestTask task){
+        if (!this.getStatus().equals(CrowdTestProjectStatus.RECEIVED) && !this.getStatus().equals(CrowdTestProjectStatus.SPLITED))
+            throw new BaseException("当前阶段不允许创建新任务");
+        this.getCrowdTestTaskList().add(task);
+        this.setStatus(CrowdTestProjectStatus.SPLITED);
+    }
+
     public void acceptTask(Long agencyManagerId, String crowdTestProjectCode, String crowdTestTaskCode) {
 
     }

+ 28 - 1
site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java

@@ -1,5 +1,7 @@
 package com.mooctest.crowd.site.command;
 
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
@@ -21,7 +23,7 @@ public class CrowdTestTaskCommand {
     private String desc;
 
     @NotNull(message = "请填写任务类型")
-    private int type;
+    private String type;
 
     @NotNull(message = "请指定任务发布类型")
     private int resource;
@@ -33,6 +35,10 @@ public class CrowdTestTaskCommand {
     @NotNull(message = "请填写截止时间")
     private Timestamp datetime;
 
+    @NotNull(message = "报价不可为空")
+    private Double quotePrice;
+
+    private Double fixedPrice;
 
     public boolean isLegal(){
         if (this.resource == 1 && this.location == null)
@@ -41,4 +47,25 @@ public class CrowdTestTaskCommand {
             return false;
         return true;
     }
+
+    public CrowdTestTask toCrowdTask(){
+        CrowdTestTask crowdTestTask = new CrowdTestTask();
+        crowdTestTask.setName(name);
+        crowdTestTask.setDeadTime(datetime);
+        crowdTestTask.setDescription(desc);
+        crowdTestTask.setDistributionProvince(location.get("provinceCode"));
+        crowdTestTask.setDistributionCity(location.get("cityCode"));
+        crowdTestTask.setDistributionType(resource+"");
+        crowdTestTask.setEvaluationAgencyId(institution);
+        crowdTestTask.setType(type);
+        crowdTestTask.setQuotedPrice(quotePrice);
+        crowdTestTask.setFixedPrice(fixedPrice);
+        return crowdTestTask;
+    }
+
+    public CrowdTestTask toCrowdTask(String projectCode){
+        CrowdTestTask task = toCrowdTask();
+        task.setCrowdTestProjectCode(projectCode);
+        return task;
+    }
 }

+ 29 - 15
site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java

@@ -1,13 +1,14 @@
 package com.mooctest.crowd.site.controller;
 
+import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 import com.mooctest.crowd.site.service.CrowdTaskService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -16,6 +17,7 @@ import java.util.List;
  * @Email: 171256175@qq.com
  * @date 2019-07-24 23:50
  */
+@Slf4j
 @RestController
 @RequestMapping("/api")
 public class CrowdTaskController {
@@ -23,18 +25,22 @@ public class CrowdTaskController {
     @Autowired
     private CrowdTaskService taskService;
 
-    @RequestMapping(value = "/project/{projectId}/task/{taskCode}", method = RequestMethod.GET)
-    public TaskDetailsDTO getTask(@PathVariable("projectId") Long projectId, @PathVariable("taskCode") String taskCode){
-        return taskService.getTaskDetails(projectId, taskCode);
+    @RequestMapping(value = "/project/{projectCode}/task/{taskCode}", method = RequestMethod.GET)
+    public TaskDetailsDTO getTask(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode){
+        return taskService.getTaskDetails(projectCode, taskCode);
     }
 
-    @RequestMapping(value = "/task", method = RequestMethod.POST)
-    public TaskDetailsDTO createTask(CrowdTestTaskCommand command){
-        return null;
+    @RequestMapping(value = "/project/{projectCode}/task", method = RequestMethod.POST)
+    public TaskDetailsDTO createTask(@PathVariable("projectCode") String projectCode, @Validated @RequestBody CrowdTestTaskCommand command, BindingResult result){
+        if (result.hasErrors())
+            throw new BaseException(result.getFieldError().getDefaultMessage());
+        else if (!command.isLegal())
+            throw new BaseException("信息不合法,项目可见性选择存在问题");
+        return taskService.createTask(projectCode, command);
     }
 
-    @RequestMapping(value = "/task/{taskId}", method = RequestMethod.DELETE)
-    public boolean deleteTask(@PathVariable("taskId")Long taskId){
+    @RequestMapping(value = "/task/{taskCode}", method = RequestMethod.DELETE)
+    public boolean deleteTask(@PathVariable("taskCode")String taskCode){
         return true;
     }
 
@@ -43,8 +49,16 @@ public class CrowdTaskController {
         return null;
     }
 
-    @RequestMapping(value = "/task", method = RequestMethod.PUT)
-    public TaskDetailsDTO updateTask(CrowdTestTaskCommand command){
-        return null;
+    @RequestMapping(value = "/project/{projectCode}/task/{taskCode}", method = RequestMethod.PUT)
+    public TaskDetailsDTO updateTask(@PathVariable("projectCode") String projectCode,
+                                     @PathVariable("taskCode") String taskCode,
+                                     @Validated @RequestBody CrowdTestTaskCommand command,
+                                     BindingResult result){
+        log.info("修改Task信息");
+        if (result.hasErrors())
+            throw new BaseException(result.getFieldError().getDefaultMessage());
+        else if (!command.isLegal())
+            throw new BaseException("信息不合法,项目可见性选择存在问题");
+        return taskService.updateTask(projectCode, taskCode, command);
     }
 }

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

@@ -6,13 +6,13 @@ package com.mooctest.crowd.site.data.enums;
  * @date 2019-07-30 00:33
  */
 public enum ProjectType {
-    JKCS("PRO/JKCS", "接口测试",0),
-    LDSM("PRO/LDSM", "安全漏洞扫描", 1),
-    FXPG("PRO/FXPG","风险评估", 2),
-    YMAQSJ("PRO/YMAQSJ", "源代码安全审计", 3),
-    GNCS("PRO/GNCS", "功能测试", 4),
-    XNCS("PRO/XNCS", "性能测试", 5),
-    GNYYXCS("PRO/GNYYXCS", "功能和易用性测试", 6);
+    JKCS("JKCS", "接口测试",0),
+    LDSM("LDSM", "安全漏洞扫描", 1),
+    FXPG("FXPG","风险评估", 2),
+    YMAQSJ("YMAQSJ", "源代码安全审计", 3),
+    GNCS("GNCS", "功能测试", 4),
+    XNCS("XNCS", "性能测试", 5),
+    GNYYXCS("GNYYXCS", "功能和易用性测试", 6);
 
     private String typeCode;
     private String typeName;

+ 0 - 20
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java

@@ -56,24 +56,4 @@ public class CrowdProjectVO {
         this.usage = null;
     }
 
-    public CrowdTestProject toCrowdTestProject(){
-        CrowdTestProject crowdTestProject = new CrowdTestProject();
-        crowdTestProject.setCode(this.id);
-        crowdTestProject.setName(this.name);
-        crowdTestProject.setLinkMan(this.contactName);
-        crowdTestProject.setLinkManMobile(this.contactPhone);
-        crowdTestProject.setType(this.type);
-        crowdTestProject.setPlatform(this.platform);
-        crowdTestProject.setDescription(this.desc);
-        crowdTestProject.setRequirementFile(this.doc);
-        crowdTestProject.setProjectFile(this.file);
-        crowdTestProject.setProjectDistributionTypeId(this.resource);
-        crowdTestProject.setDistributionProvince(this.location.get("provinceCode"));
-        crowdTestProject.setDistributionCity(this.location.get("cityCode"));
-        crowdTestProject.setRegionalManagerId(this.getInstitution());
-        crowdTestProject.setDeadTime(this.datetime);
-        crowdTestProject.setQuotedPrice(this.budget);
-        crowdTestProject.setFixedPrice(this.price);
-        return crowdTestProject;
-    }
 }

+ 27 - 12
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java

@@ -2,13 +2,17 @@ package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestReport;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
+import com.mooctest.crowd.site.data.enums.ProjectType;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
 
 import java.sql.Timestamp;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: xuexb
@@ -17,21 +21,32 @@ import java.util.List;
 @Data
 public class CrowdTaskVO {
 
-    private Long id;
-    private String name;
-    private Long crowdTestProjectId;
-    private Long evaluationAgencyId;
-    private String type;
+    private String id;
+    private String projectId;
+    private String title;
     private String description;
-    private String requirementFile;
-    private Double quotedPrice;
-    private Double fixedPrice;
-    private String status;
-    private Timestamp createTime;
-//    private List<CrowdTestReport> crowdTestReportList;
+    private Double price;
+    private String resource;
+    private Map<String, String> location;
+    private Long institution;
+    private String serviceType;
+    private int status;
+    private Timestamp datetime;
 
     public CrowdTaskVO(CrowdTestTask task){
-        BeanUtils.copyProperties(task, this);
+        id = task.getCode();
+        projectId = task.getCrowdTestProjectCode();
+        title = task.getName();
+        description = task.getDescription();
+        price = task.getQuotedPrice();
+        resource = task.getDistributionType();
+        location = new HashMap<>();
+        location.put("provinceCode", task.getDistributionProvince());
+        location.put("cityCode", task.getDistributionCity());
+        institution = task.getEvaluationAgencyId();
+        serviceType = task.getType();
+        status = task.getStatus()== CrowdTestTaskStatus.FINISHED?1:0;
+        datetime = task.getDeadTime();
     }
 
     public CrowdTestTask toCrowdTestTask(){

+ 6 - 1
site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java

@@ -1,5 +1,6 @@
 package com.mooctest.crowd.site.service;
 
+import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 
 /**
@@ -8,5 +9,9 @@ import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
  * @date 2019-07-29 18:47
  */
 public interface CrowdTaskService {
-    TaskDetailsDTO getTaskDetails(Long projectId, String taskCode);
+    TaskDetailsDTO getTaskDetails(String projectCode, String taskCode);
+
+    TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command);
+
+    TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command);
 }

+ 3 - 1
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -47,7 +47,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         CrowdTestProject project = command.toCrowdProject();
         project.setStatus(CrowdTestProjectStatus.CREATED);
         log.info("\n"+project.toString()+"\n");
-        String projectCode = codeUtil.generateFlowCode(ProjectType.getCode(new Integer(command.getType())));
+        String projectCode = codeUtil.generateFlowCode("PROJ-"+ProjectType.getCode(new Integer(command.getType())));
         project.setCode(projectCode);
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
         projectRepo.saveCrowdTestProject(project);
@@ -58,6 +58,8 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Override
     public ProjectDetailsDTO updateProject(String projectCode, CrowdTestProjectCommand crowdTestProjectCommand) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        if (project.getStatus().equals(CrowdTestProjectStatus.FINISHED))
+            throw new BaseException("结项项目禁止修改!");
         if (project.getUserId() != crowdTestProjectCommand.getUserId())
             throw new BaseException("UserId不一致");
         //todo 后面需要加入是否有权限进行更新

+ 68 - 2
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -1,9 +1,25 @@
 package com.mooctest.crowd.site.service.impl;
 
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
+import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
+import com.mooctest.crowd.domain.exception.BaseException;
+import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
+import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
+import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
+import com.mooctest.crowd.site.data.enums.ProjectType;
+import com.mooctest.crowd.site.data.vo.CrowdReportVO;
+import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
 import com.mooctest.crowd.site.service.CrowdTaskService;
+import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
 /**
  * @author: Diors.Po
  * @Email: 171256175@qq.com
@@ -11,8 +27,58 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class CrowdTaskServiceImpl implements CrowdTaskService {
+
+    @Autowired
+    CrowdTestProjectRepo projectRepo;
+
+    @Autowired
+    GenerateFlowCodeUtil codeUtil;
+
+    @Override
+    public TaskDetailsDTO getTaskDetails(String projectCode, String taskCode) {
+        TaskDetailsDTO taskDetailsDTO = new TaskDetailsDTO();
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        Optional<CrowdTestTask> task =  project.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
+        if (!task.isPresent())
+            throw new CrowdTestTaskNotExistException();
+        taskDetailsDTO.setCrowdTaskVO(new CrowdTaskVO(task.get()));
+        List<CrowdReportVO> reportVOList = task.get().getCrowdTestReportList()
+                .stream().map(crowdTestReport -> {
+            return new CrowdReportVO(crowdTestReport);
+        }).collect(Collectors.toList());
+        taskDetailsDTO.setCrowdReportVOList(reportVOList);
+        return taskDetailsDTO;
+    }
+
+    @Override
+    public TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command) {
+        CrowdTestTask task = command.toCrowdTask(projectCode);
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        String taskCode = codeUtil.generateFlowCode("TASK-"+ ProjectType.getCode(new Integer(command.getType())));
+        task.setCode(taskCode);
+        task.setStatus(CrowdTestTaskStatus.CREATED);
+        project.addTask(task);
+        projectRepo.saveCrowdTestProject(project);
+        return getTaskDetails(projectCode, taskCode);
+    }
+
     @Override
-    public TaskDetailsDTO getTaskDetails(Long projectId, String taskCode) {
-        return null;
+    public TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        Optional<CrowdTestTask> task = project.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
+        if (!task.isPresent())
+            throw new CrowdTestTaskNotExistException();
+        if (task.get().getStatus().equals(CrowdTestTaskStatus.FINISHED))
+            throw new BaseException("禁止修改已结束的任务!");
+        CrowdTestTask updateTask = command.toCrowdTask(projectCode);
+        updateTask.setId(task.get().getId());
+        updateTask.setCode(taskCode);
+        updateTask.setCreateTime(task.get().getCreateTime());
+        updateTask.setRequirementFile(task.get().getRequirementFile());
+        updateTask.setStatus(task.get().getStatus());
+        project.getCrowdTestTaskList().remove(task);
+        project.getCrowdTestTaskList().add(updateTask);
+        projectRepo.saveCrowdTestProject(project);
+        return getTaskDetails(projectCode, taskCode);
     }
 }