Browse Source

修改状态信息

guochao 6 years ago
parent
commit
af84fb7bb2
21 changed files with 543 additions and 196 deletions
  1. 14 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java
  2. 8 3
      site/pom.xml
  3. 82 13
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestProjectCommand.java
  4. 57 8
      site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java
  5. 0 82
      site/src/main/java/com/mooctest/crowd/site/command/ProjectDetailsCommand.java
  6. 32 0
      site/src/main/java/com/mooctest/crowd/site/configuration/RedisConfiguration.java
  7. 12 13
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java
  8. 29 15
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java
  9. 8 7
      site/src/main/java/com/mooctest/crowd/site/controller/TestController.java
  10. 69 0
      site/src/main/java/com/mooctest/crowd/site/data/enums/ProjectType.java
  11. 36 17
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java
  12. 27 12
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  13. 3 3
      site/src/main/java/com/mooctest/crowd/site/mediator/OperationMediator.java
  14. 7 5
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/OperationMediatorImpl.java
  15. 4 4
      site/src/main/java/com/mooctest/crowd/site/service/CrowdProjectService.java
  16. 6 1
      site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java
  17. 23 10
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java
  18. 68 2
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java
  19. 47 0
      site/src/main/java/com/mooctest/crowd/site/util/GenerateFlowCodeUtil.java
  20. 11 0
      site/src/main/resources/application.yml
  21. 0 1
      site/src/test/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImplTest.java

+ 14 - 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;
@@ -132,6 +133,19 @@ public class CrowdTestProject {
         return crowdTestProject;
     }
 
+    public void addTask(CrowdTestTask task){
+        if (this.getStatus() != CrowdTestProjectStatus.HAS_RECEIVED && this.getStatus() != CrowdTestProjectStatus.HAS_SPLITED)
+            throw new BaseException("当前阶段不允许创建新任务");
+        this.getCrowdTestTaskList().add(task);
+        this.setStatus(CrowdTestProjectStatus.HAS_SPLITED);
+    }
+
+    public void acceptTask(Long agencyManagerId, String crowdTestProjectCode, String crowdTestTaskCode) {
+
+    }
+
+
+
 //    public CrowdTestTask getCrowdTestTaskByTaskId(CrowdTestProject crowdTestProject, Long taskId) throws CrowdTestTaskNotExistException {
 //        List<CrowdTestTask> crowdTestTaskList = crowdTestProject.getCrowdTestTaskList();
 //        for (CrowdTestTask crowdTestTask : crowdTestTaskList) {

+ 8 - 3
site/pom.xml

@@ -68,9 +68,14 @@
 			<artifactId>junit</artifactId>
 			<version>4.12</version>
 		</dependency>
-
-
-		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-pool2</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>org.hibernate.javax.persistence</groupId>
 			<artifactId>hibernate-jpa-2.1-api</artifactId>

+ 82 - 13
site/src/main/java/com/mooctest/crowd/site/command/CrowdTestProjectCommand.java

@@ -1,24 +1,93 @@
 package com.mooctest.crowd.site.command;
 
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
+
+import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
 import lombok.Data;
+import org.springframework.beans.BeanUtils;
 
-import java.io.File;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.sql.Date;
+import java.sql.Timestamp;
+import java.util.Map;
 
 /**
- * @author guochao
- * @date 2019/7/6 18:50
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-25 14:37
  */
 @Data
 public class CrowdTestProjectCommand {
-    private Long id;
+    @NotNull(message = "UserId不可为空")
+    private Long userId;
+
+    @NotNull(message = "项目名称不可为空")
     private String name;
-    private Long ownerId;
-    private Long managerId;
-    private Long distributeId;
-    private String description;
-    private File projectFile;
-    private File requirement;
-    private Double quotedPrice;
-    private Double fixedPrice;
-    private String status;
+
+    @NotNull(message = "项目服务类型不可为空")
+    private String type;
+
+    private String platform;
+
+    @NotNull(message = "项目描述不可为空")
+    private String desc;
+
+    @NotNull(message = "可见性选择不可为空")
+    private Long resource;
+
+    private Map<String, String> location;
+
+    private Long institution;
+
+    @NotNull(message = "项目联系人不可为空")
+    private String contactName;
+
+    @NotNull(message = "项目联系人电话不可为空")
+    @Pattern(regexp = "^[0-9]{11}$", message = "Mobile number is illegal")
+    private String contactPhone;
+
+    @NotNull(message = "请上传需求文档")
+    private String doc;
+
+    @NotNull(message = "请上传应用apk")
+    private String file;
+
+    @NotNull(message = "请填写预算价格")
+    private Double budget;
+
+    private Timestamp datetime;
+
+    private String usage;
+
+    private Double price;
+
+    public CrowdTestProject toCrowdProject(){
+        CrowdTestProject crowdTestProject = CrowdTestProjectFactory.createCrowdTestProject();
+        crowdTestProject.setUserId(this.userId);
+        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;
+    }
+
+    public boolean isLegal(){
+        if (this.resource == 1 && this.location == null)
+            return false;
+        else if (this.resource == 0 && this.institution == null)
+            return false;
+        return true;
+    }
 }

+ 57 - 8
site/src/main/java/com/mooctest/crowd/site/command/CrowdTestTaskCommand.java

@@ -1,8 +1,13 @@
 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;
 import java.io.File;
+import java.sql.Timestamp;
+import java.util.Map;
 
 /**
  * @author guochao
@@ -10,13 +15,57 @@ import java.io.File;
  */
 @Data
 public class CrowdTestTaskCommand {
-    private Long id;
+
+    @NotNull(message = "请填写任务名称")
     private String name;
-    private Long projectId;
-    private Long evaluationAgencyId;
-    private int type;
-    private String description;
-    private File requirementFile;
-    public Double price;
-    private String status;
+
+    @NotNull(message = "请填写任务描述")
+    private String desc;
+
+    @NotNull(message = "请填写任务类型")
+    private String type;
+
+    @NotNull(message = "请指定任务发布类型")
+    private int resource;
+
+    private Map<String, String> location;
+
+    private Long institution;
+
+    @NotNull(message = "请填写截止时间")
+    private Timestamp datetime;
+
+    @NotNull(message = "报价不可为空")
+    private Double quotePrice;
+
+    private Double fixedPrice;
+
+    public boolean isLegal(){
+        if (this.resource == 1 && this.location == null)
+            return false;
+        else if (this.resource == 0 && this.institution == null)
+            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;
+    }
 }

+ 0 - 82
site/src/main/java/com/mooctest/crowd/site/command/ProjectDetailsCommand.java

@@ -1,82 +0,0 @@
-package com.mooctest.crowd.site.command;
-
-import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
-
-import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
-import lombok.Data;
-import org.springframework.beans.BeanUtils;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import java.sql.Date;
-
-/**
- * @author: Diors.Po
- * @Email: 171256175@qq.com
- * @date 2019-07-25 14:37
- */
-@Data
-public class ProjectDetailsCommand {
-    @NotNull(message = "UserId不可为空")
-    private Long userId;
-
-    @NotNull(message = "项目名称不可为空")
-    private String name;
-
-    @NotNull(message = "项目服务类型不可为空")
-    private Integer type;
-
-    @NotNull(message = "项目平台不可为空")
-    private Integer platform;
-
-    @NotNull(message = "项目描述不可为空")
-    private String descrition;
-
-    @NotNull(message = "可见性选择不可为空")
-    private Long visibility;
-
-    private String location;
-
-    private Long institution;
-
-    @NotNull(message = "项目联系人不可为空")
-    private String contactName;
-
-    @NotNull(message = "项目联系人电话不可为空")
-    @Pattern(regexp = "^[0-9]{11}$", message = "Mobile number is illegal")
-    private String contactPhone;
-
-    @NotNull(message = "请上传需求文档")
-    private String doc;
-
-    @NotNull(message = "请上传应用apk")
-    private String file;
-
-    @NotNull(message = "请填写预算价格")
-    private Double quotedPrice;
-
-    @NotNull(message = "请填写截止日期")
-    private Date datetime;
-
-    private String usage;
-
-    private Double fixedPrice;
-
-    public CrowdTestProject toCrowdProject(){
-        CrowdTestProject crowdTestProject = CrowdTestProjectFactory.createCrowdTestProject();
-        BeanUtils.copyProperties(this, crowdTestProject);
-        crowdTestProject.setProjectFile(file);
-        crowdTestProject.setRequirementFile(file);
-        crowdTestProject.setRegionalManagerId(this.institution);
-        crowdTestProject.setProjectDistributionTypeId(this.visibility);
-        return crowdTestProject;
-    }
-
-    public boolean isLegal(){
-        if (this.visibility == 1 && this.location == null)
-            return false;
-        else if (this.visibility == 0 && this.institution == null)
-            return false;
-        return true;
-    }
-}

+ 32 - 0
site/src/main/java/com/mooctest/crowd/site/configuration/RedisConfiguration.java

@@ -0,0 +1,32 @@
+package com.mooctest.crowd.site.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-29 20:47
+ */
+public class RedisConfiguration {
+//
+//    @Bean
+//    public RedisTemplate redisTemplate(RedisConnectionFactory factory){
+//        RedisTemplate redisTemplate = new RedisTemplate();
+//        redisTemplate.setKeySerializer(new StringRedisSerializer());
+//        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+//        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
+//        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
+//        // 开启事务
+//        redisTemplate.setEnableTransactionSupport(true);
+//        redisTemplate.setConnectionFactory(factory);
+//        return redisTemplate;
+//    }
+
+}

+ 12 - 13
site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java

@@ -1,7 +1,7 @@
 package com.mooctest.crowd.site.controller;
 
 import com.mooctest.crowd.domain.exception.BaseException;
-import com.mooctest.crowd.site.command.ProjectDetailsCommand;
+import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.service.CrowdProjectService;
 import lombok.extern.slf4j.Slf4j;
@@ -10,7 +10,6 @@ import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import java.util.List;
 
@@ -27,18 +26,18 @@ public class CrowdProjectController {
     private CrowdProjectService projectService;
 
     @RequestMapping(value = "/api/project", method = RequestMethod.POST)
-    public ProjectDetailsDTO createProject(@Validated @RequestBody ProjectDetailsCommand projectDetailsCommand, BindingResult result){
+    public ProjectDetailsDTO createProject(@Validated @RequestBody CrowdTestProjectCommand crowdTestProjectCommand, BindingResult result){
         if (result.hasErrors())
             throw new BaseException(result.getFieldErrors().toString());
-        else if (!projectDetailsCommand.isLegal())
+        else if (!crowdTestProjectCommand.isLegal())
             throw new BaseException("信息不合法,项目可见性存在问题");
-        return projectService.createCrowdProject(projectDetailsCommand);
+        return projectService.createCrowdProject(crowdTestProjectCommand);
     }
 
-    @RequestMapping(value = "/api/project/{projectId}", method = RequestMethod.GET)
-    public ProjectDetailsDTO getProject(@PathVariable("projectId") Long projectId){
-        log.info("访问Project详情,projectId:"+projectId);
-        return projectService.getProjectDetails(projectId);
+    @RequestMapping(value = "/api/project/{projectCode}", method = RequestMethod.GET)
+    public ProjectDetailsDTO getProject(@PathVariable("projectCode") String projectCode){
+        log.info("访问Project详情,projectId:"+projectCode);
+        return projectService.getProjectDetails(projectCode);
     }
 
     @RequestMapping(value = "/api/project", method = RequestMethod.GET)
@@ -46,13 +45,13 @@ public class CrowdProjectController {
         return null;
     }
 
-    @RequestMapping(value = "/api/project/{projectId}}", method = RequestMethod.PUT)
-    public ProjectDetailsDTO updateProject(@Validated @RequestBody ProjectDetailsCommand projectDetailsCommand, @PathVariable("projectId") Long projectId, BindingResult result){
+    @RequestMapping(value = "/api/project/{projectCode}", method = RequestMethod.PUT)
+    public ProjectDetailsDTO updateProject(@Validated @RequestBody CrowdTestProjectCommand crowdTestProjectCommand, @PathVariable("projectCode") String projectCode, BindingResult result){
         if (result.hasErrors())
             throw new BaseException(result.getFieldErrors().toString());
-        else if (!projectDetailsCommand.isLegal())
+        else if (!crowdTestProjectCommand.isLegal())
             throw new BaseException("信息不合法,项目可见性存在问题");
-        return projectService.updateProject(projectId, projectDetailsCommand);
+        return projectService.updateProject(projectCode, crowdTestProjectCommand);
     }
 
     @RequestMapping(value = "/api/project/{projectId}", method = RequestMethod.DELETE)

+ 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);
     }
 }

+ 8 - 7
site/src/main/java/com/mooctest/crowd/site/controller/TestController.java

@@ -1,6 +1,8 @@
 package com.mooctest.crowd.site.controller;
 
 import com.mooctest.crowd.domain.exception.BaseException;
+import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -11,13 +13,12 @@ import org.springframework.web.bind.annotation.*;
 @RestController
 public class TestController {
 
-    @RequestMapping(value = "/exception/test/{type}", method = RequestMethod.GET)
-    public Object exceptionTest(@PathVariable("type") Integer type){
-        if (type == 1)
-            throw new BaseException();
-        else if (type == 2)
-            throw new RuntimeException();
-        return "Hello world!!!!";
+    @Autowired
+    private GenerateFlowCodeUtil codeUtil;
+
+    @RequestMapping(value = "/test/{prefix}", method = RequestMethod.GET)
+    public Object exceptionTest(@PathVariable("prefix") String prefix){
+        return codeUtil.generateFlowCode(prefix);
     }
 
 }

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

@@ -0,0 +1,69 @@
+package com.mooctest.crowd.site.data.enums;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-30 00:33
+ */
+public enum ProjectType {
+    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;
+    private Integer typeNum;
+
+
+    ProjectType(String typeCode, String typeName, int typeNum){
+        this.typeCode = typeCode;
+        this.typeName = typeName;
+        this.typeNum = typeNum;
+    }
+
+    public static String getCode(int typeNum) {
+        for (ProjectType pt : ProjectType.values()) {
+            if (pt.getTypeNum() == typeNum) {
+                return pt.typeCode;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int typeNum) {
+        for (ProjectType pt : ProjectType.values()) {
+            if (pt.getTypeNum() == typeNum) {
+                return pt.typeName;
+            }
+        }
+        return null;
+    }
+
+    public String getTypeCode() {
+        return typeCode;
+    }
+
+    public void setTypeCode(String typeCode) {
+        this.typeCode = typeCode;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public Integer getTypeNum() {
+        return typeNum;
+    }
+
+    public void setTypeNum(Integer typeNum) {
+        this.typeNum = typeNum;
+    }
+}

+ 36 - 17
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java

@@ -6,7 +6,10 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
 
+import java.sql.Date;
 import java.sql.Timestamp;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @Author: xuexb
@@ -15,26 +18,42 @@ import java.sql.Timestamp;
 @Data
 public class CrowdProjectVO {
 
-    private Long id;
+    private String id;
     private String name;
-    private Long userId;
-    private Long regionalManagerId;
-    private Long projectDistributionTypeId;
-    private String description;
-    private String projectFile;
-    private String requirementFile;
-    private Double quotedPrice;
-    private Double fixedPrice;
-    private String status;
-    private Timestamp createTime;
+    private String contactName;
+    private String contactPhone;
+    private String type;
+    private String platform;
+    private String desc;
+    private String doc;
+    private String file;
+    private Long resource;
+    private Map<String, String> location;
+    private Long institution;
+    private Timestamp datetime;
+    private Double price;
+    private Double budget;
+    private String usage;
 
     public CrowdProjectVO(CrowdTestProject project){
-        BeanUtils.copyProperties(project, this);
+        this.id = project.getCode();
+        this.name = project.getName();
+        this.contactName = project.getLinkMan();
+        this.contactPhone = project.getLinkManMobile();
+        this.type = project.getType();
+        this.platform = project.getPlatform();
+        this.desc = project.getDescription();
+        this.doc = project.getRequirementFile();
+        this.file = project.getProjectFile();
+        this.resource = project.getProjectDistributionTypeId();
+        this.location = new HashMap<>();
+        this.location.put("provinceCode", project.getDistributionProvince());
+        this.location.put("cityCode", project.getDistributionCity());
+        this.institution = project.getRegionalManagerId();
+        this.datetime = project.getDeadTime();
+        this.budget = project.getQuotedPrice();
+        this.price = project.getFixedPrice();
+        this.usage = null;
     }
 
-    public CrowdTestProject toCrowdTestProject(){
-        CrowdTestProject crowdTestProject = new CrowdTestProject();
-        BeanUtils.copyProperties(this, crowdTestProject);
-        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(){

+ 3 - 3
site/src/main/java/com/mooctest/crowd/site/mediator/OperationMediator.java

@@ -1,7 +1,7 @@
 package com.mooctest.crowd.site.mediator;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
-import com.mooctest.crowd.site.command.ProjectDetailsCommand;
+import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 
 /**
@@ -11,7 +11,7 @@ import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
  */
 public interface OperationMediator {
 
-    ProjectDetailsDTO createCrowdProject(ProjectDetailsCommand command);
+    ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command);
 
-    CrowdTestProject updateProject(CrowdTestProject project, ProjectDetailsCommand projectDetailsCommand);
+    CrowdTestProject updateProject(CrowdTestProject project, CrowdTestProjectCommand crowdTestProjectCommand);
 }

+ 7 - 5
site/src/main/java/com/mooctest/crowd/site/mediator/impl/OperationMediatorImpl.java

@@ -2,7 +2,7 @@ package com.mooctest.crowd.site.mediator.impl;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
-import com.mooctest.crowd.site.command.ProjectDetailsCommand;
+import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.mediator.OperationMediator;
@@ -21,17 +21,19 @@ public class OperationMediatorImpl implements OperationMediator {
     private CrowdTestProjectRepo projectRepo;
 
     @Override
-    public ProjectDetailsDTO createCrowdProject(ProjectDetailsCommand command) {
+    public ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command) {
         CrowdTestProject project = command.toCrowdProject();
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
-        projectDetailsDTO.setProjectDetails(new CrowdProjectVO(projectRepo.saveCreateCrowdTestProject(project)));
+        projectRepo.saveCrowdTestProject(project);
+        projectDetailsDTO.setProjectDetails(new CrowdProjectVO(project));
         return projectDetailsDTO;
     }
 
     @Override
-    public CrowdTestProject updateProject(CrowdTestProject project, ProjectDetailsCommand projectDetailsCommand) {
-        CrowdTestProject updateProject = projectDetailsCommand.toCrowdProject();
+    public CrowdTestProject updateProject(CrowdTestProject project, CrowdTestProjectCommand crowdTestProjectCommand) {
+        CrowdTestProject updateProject = crowdTestProjectCommand.toCrowdProject();
         updateProject.setId(project.getId());
+        updateProject.setCode(project.getCode());
         return updateProject;
     }
 }

+ 4 - 4
site/src/main/java/com/mooctest/crowd/site/service/CrowdProjectService.java

@@ -1,6 +1,6 @@
 package com.mooctest.crowd.site.service;
 
-import com.mooctest.crowd.site.command.ProjectDetailsCommand;
+import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 
 /**
@@ -9,11 +9,11 @@ import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
  * @date 2019-07-29 10:49
  */
 public interface CrowdProjectService {
-    ProjectDetailsDTO getProjectDetails(Long projectId);
+    ProjectDetailsDTO getProjectDetails(String projectCode);
 
-    ProjectDetailsDTO createCrowdProject(ProjectDetailsCommand command);
+    ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command);
 
-    ProjectDetailsDTO updateProject(Long projectId, ProjectDetailsCommand projectDetailsCommand);
+    ProjectDetailsDTO updateProject(String projectCode, CrowdTestProjectCommand crowdTestProjectCommand);
 
     void deleteProject(Long projectId, Long userId);
 }

+ 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);
 }

+ 23 - 10
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -4,12 +4,15 @@ import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
-import com.mooctest.crowd.site.command.ProjectDetailsCommand;
+import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
+import com.mooctest.crowd.site.data.enums.ProjectType;
 import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.mediator.OperationMediator;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdProjectService;
+import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -18,6 +21,7 @@ import org.springframework.stereotype.Service;
  * @Email: 171256175@qq.com
  * @date 2019-07-29 10:51
  */
+@Slf4j
 @Service
 public class CrowdProjectServiceImpl implements CrowdProjectService {
 
@@ -30,28 +34,37 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Autowired
     private OperationMediator operationMediator;
 
+    @Autowired
+    private GenerateFlowCodeUtil codeUtil;
+
     @Override
-    public ProjectDetailsDTO getProjectDetails(Long projectId) {
-        return viewMediator.renderProjectDetails(projectRepo.getByID(projectId));
+    public ProjectDetailsDTO getProjectDetails(String projectCode) {
+        return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode));
     }
 
     @Override
-    public ProjectDetailsDTO createCrowdProject(ProjectDetailsCommand command) {
+    public ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command) {
         CrowdTestProject project = command.toCrowdProject();
         project.setStatus(CrowdTestProjectStatus.CREATED);
+        log.info("\n"+project.toString()+"\n");
+        String projectCode = codeUtil.generateFlowCode("PROJ-"+ProjectType.getCode(new Integer(command.getType())));
+        project.setCode(projectCode);
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
-        projectDetailsDTO.setProjectDetails(new CrowdProjectVO(projectRepo.saveCreateCrowdTestProject(project)));
+        projectRepo.saveCrowdTestProject(project);
+        projectDetailsDTO.setProjectDetails(new CrowdProjectVO(project));
         return projectDetailsDTO;
     }
 
     @Override
-    public ProjectDetailsDTO updateProject(Long projectId, ProjectDetailsCommand projectDetailsCommand) {
-        CrowdTestProject project = projectRepo.getByID(projectId);
-        if (project.getUserId() != projectDetailsCommand.getUserId())
+    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 后面需要加入是否有权限进行更新
-        projectRepo.saveCreateCrowdTestProject(operationMediator.updateProject(project, projectDetailsCommand));
-        return getProjectDetails(projectId);
+        projectRepo.saveCrowdTestProject(operationMediator.updateProject(project, crowdTestProjectCommand));
+        return getProjectDetails(projectCode);
     }
 
     @Override

+ 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);
     }
 }

+ 47 - 0
site/src/main/java/com/mooctest/crowd/site/util/GenerateFlowCodeUtil.java

@@ -0,0 +1,47 @@
+package com.mooctest.crowd.site.util;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-07-29 23:10
+ */
+@Component
+public class GenerateFlowCodeUtil {
+
+    @Autowired
+    RedisTemplate redisTemplate;
+
+    public String generateFlowCode(String prefix){
+        int codeNum = 1;
+        if (redisTemplate.hasKey(prefix)){
+            codeNum = (int) redisTemplate.opsForValue().get(prefix);
+            redisTemplate.opsForValue().set(prefix, codeNum+1);
+        } else{
+            redisTemplate.opsForValue().set(prefix, 2);
+        }
+        Date date = new Date();
+        DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHH");
+        String code  = prefix + "-" + dateFormat.format(date)+getSequence(codeNum, 3);
+        return code;
+    }
+
+    private String getSequence(int seq, int length){
+        String str = String.valueOf(seq);
+        if (str.length()>length)
+            return str;
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length - str.length(); i++)
+            sb.append("0");
+        sb.append(str);
+        return sb.toString();
+    }
+}

+ 11 - 0
site/src/main/resources/application.yml

@@ -21,6 +21,17 @@ spring:
     naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
   # The SQL dialect makes Hibernate generate better SQL for the chosen database
   properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
+  redis:
+    host: 114.55.91.27
+    pool: 6379
+    password: '#03#05@ise@mooctest'
+    jedis:
+      pool:
+        max-active: 8
+        max-idle: 8
+        max-wait: -1
+        min-idle: 0
+    database: 3
 
 feature-switch:
   default:

+ 0 - 1
site/src/test/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImplTest.java

@@ -3,7 +3,6 @@ package com.mooctest.crowd.site.mediator.impl;
 import com.mooctest.crowd.domain.domainobject.Account;
 import com.mooctest.crowd.domain.factory.AccountFactory;
 import com.mooctest.crowd.site.command.AccountCommand;
-import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.command.CrowdTestReportCommand;
 import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.*;