Explorar el Código

增加多人接收任务

guo00guo hace 5 años
padre
commit
f091e7a1bb
Se han modificado 20 ficheros con 319 adiciones y 75 borrados
  1. 19 19
      core/src/main/java/com/mooctest/crowd/domain/controller/CrowdTestProjectController.java
  2. 2 0
      core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestReportDao.java
  3. 21 0
      core/src/main/java/com/mooctest/crowd/domain/dao/TaskToUserDao.java
  4. 1 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestReport.java
  5. 26 7
      core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java
  6. 28 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/ReportScopeType.java
  7. 45 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/TaskToUser.java
  8. 2 0
      core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestReportPO.java
  9. 3 0
      core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestTaskPO.java
  10. 29 0
      core/src/main/java/com/mooctest/crowd/domain/model/TaskToUserPO.java
  11. 64 20
      core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java
  12. 3 3
      site/src/main/java/com/mooctest/crowd/site/controller/CrowdReportController.java
  13. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/dto/TaskDetailsDTO.java
  14. 1 5
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdReportVO.java
  15. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  16. 28 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/TaskToUserVO.java
  17. 26 5
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  18. 1 1
      site/src/main/java/com/mooctest/crowd/site/service/CrowdReportService.java
  19. 16 5
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java
  20. 0 10
      site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

+ 19 - 19
core/src/main/java/com/mooctest/crowd/domain/controller/CrowdTestProjectController.java

@@ -181,25 +181,25 @@ public class CrowdTestProjectController {
         crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
     }
 
-    @RequestMapping(value = "modifyReport/{crowdTestProjectCode}/{crowdTestTaskCode}/{crowdTestReportCode}/{reportName}", method = RequestMethod.GET)
-    public void modifyCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
-                                      @PathVariable("crowdTestReportCode") String crowdTestReportCode, @PathVariable("reportName") String reportName){
-        CrowdTestReport crowdTestReportModify = new CrowdTestReport();
-        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
-        for(CrowdTestTask crowdTestTask : crowdTestProject.getCrowdTestTaskList()){
-            if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
-                for(CrowdTestReport crowdTestReport : crowdTestTask.getCrowdTestReportList()){
-                    if(crowdTestReportCode.equals(crowdTestReport.getCode())){
-                        Gson gson = new Gson();
-                        crowdTestReportModify = gson.fromJson(gson.toJson(crowdTestReport), CrowdTestReport.class);
-                    }
-                }
-            }
-        }
-        crowdTestReportModify.setName(reportName);
-        CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestReport(crowdTestTaskCode, crowdTestReportCode, crowdTestReportModify);
-        crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
-    }
+//    @RequestMapping(value = "modifyReport/{crowdTestProjectCode}/{crowdTestTaskCode}/{crowdTestReportCode}/{reportName}", method = RequestMethod.GET)
+//    public void modifyCrowdTestReport(@PathVariable("crowdTestProjectCode") String crowdTestProjectCode, @PathVariable("crowdTestTaskCode") String crowdTestTaskCode,
+//                                      @PathVariable("crowdTestReportCode") String crowdTestReportCode, @PathVariable("reportName") String reportName){
+//        CrowdTestReport crowdTestReportModify = new CrowdTestReport();
+//        CrowdTestProject crowdTestProject = crowdTestProjectRepo.getByProjectCode(crowdTestProjectCode);
+//        for(CrowdTestTask crowdTestTask : crowdTestProject.getCrowdTestTaskList()){
+//            if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
+//                for(CrowdTestReport crowdTestReport : crowdTestTask.getCrowdTestReportList()){
+//                    if(crowdTestReportCode.equals(crowdTestReport.getCode())){
+//                        Gson gson = new Gson();
+//                        crowdTestReportModify = gson.fromJson(gson.toJson(crowdTestReport), CrowdTestReport.class);
+//                    }
+//                }
+//            }
+//        }
+//        crowdTestReportModify.setName(reportName);
+//        CrowdTestProject updateCrowdTestProject = crowdTestProject.updateCrowdTestReport(crowdTestTaskCode, crowdTestReportCode, crowdTestReportModify);
+//        crowdTestProjectRepo.saveCrowdTestProject(updateCrowdTestProject);
+//    }
 
     /*普通用户DO*/
     /**

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestReportDao.java

@@ -20,6 +20,8 @@ public interface CrowdTestReportDao extends CrudRepository<CrowdTestReportPO, Lo
 
     List<CrowdTestReportPO> findByDependencyCodeAndIsDeleted(String dependencyCode, int isDeleted);
 
+    List<CrowdTestReportPO> findByDependencyCodeAndUserIdAndScopeAndIsDeleted(String dependencyCode, long userId, int scope,int isDeleted);
+
     List<CrowdTestReportPO> findAllByIsDeleted(int isDeleted);
 
     @Override

+ 21 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/TaskToUserDao.java

@@ -0,0 +1,21 @@
+package com.mooctest.crowd.domain.dao;
+
+import com.mooctest.crowd.domain.model.TaskToUserPO;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Optional;
+
+@Transactional
+public interface TaskToUserDao extends CrudRepository<TaskToUserPO,Long> {
+
+    @Override
+    Optional<TaskToUserPO> findById(Long id);
+
+    List<TaskToUserPO> findByUserId(Long userId);
+
+    List<TaskToUserPO> findByTaskCode(String taskCode);
+
+    TaskToUserPO save(TaskToUserPO taskToUserPO);
+}

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestReport.java

@@ -14,6 +14,7 @@ public class CrowdTestReport {
     private Long id;
     private String name;
     private String code;
+    private Long userId;
     private String dependencyCode; //所依赖的项目或者任务
     private String type;
     private int scope;

+ 26 - 7
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java

@@ -5,6 +5,7 @@ import com.mooctest.crowd.domain.exception.UnauthorizedException;
 import lombok.Data;
 
 import java.sql.Timestamp;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -32,7 +33,9 @@ public class CrowdTestTask {
     private int isDeleted;
     private Timestamp createTime;
     private int participantCount;
-    private List<CrowdTestReport> crowdTestReportList;
+    private int acceptedCount;
+    private List<TaskToUser> acceptedUserList;
+    private List<CrowdTestReport> crowdTestReportList = new ArrayList<>();
 
     @Override
     public String toString() {
@@ -45,21 +48,23 @@ public class CrowdTestTask {
                 ", type='" + type + '\'' +
                 ", description='" + description + '\'' +
                 ", requirementFile='" + requirementFile + '\'' +
-                ", distributionType='" + distributionType + '\'' +
+                ", distributionType=" + distributionType +
                 ", distributionProvince='" + distributionProvince + '\'' +
                 ", distributionCity='" + distributionCity + '\'' +
                 ", quotedPrice=" + quotedPrice +
                 ", fixedPrice=" + fixedPrice +
-                ", status='" + status + '\'' +
+                ", status=" + status +
                 ", deadTime=" + deadTime +
                 ", endTime=" + endTime +
-                ", isDeleted='" + isDeleted + '\'' +
+                ", isDeleted=" + isDeleted +
                 ", createTime=" + createTime +
-                ", crowdTestReportList=" + crowdTestReportList +
+                ", participantCount=" + participantCount +
+                ", acceptedCount=" + acceptedCount +
+                ", acceptedUserList=" + acceptedUserList +
                 '}';
     }
 
-//    public CrowdTestReport getCrowdTestReportByReportId(CrowdTestTask crowdTestTask, Long reportId) throws CrowdTestTaskNotExistException, CrowdTestReportNotExistException {
+    //    public CrowdTestReport getCrowdTestReportByReportId(CrowdTestTask crowdTestTask, Long reportId) throws CrowdTestTaskNotExistException, CrowdTestReportNotExistException {
 //        List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
 //        for (CrowdTestReport crowdTestReport : crowdTestReportList) {
 //            if (crowdTestReport.getId().equals(reportId)) {
@@ -87,10 +92,23 @@ public class CrowdTestTask {
             if (!this.getEvaluationAgencyId().equals(user.getId()))
                 throw new CrowdTestTaskException("当前用户没有权限接收此定向发布的任务!");
         }
-        this.setEvaluationAgencyId(user.getId());
+//        this.setEvaluationAgencyId(user.getId());
+
+        // 判断人数是否满员
+        if (this.getAcceptedCount() >= this.getParticipantCount()){
+            throw new CrowdTestTaskException("当前任务已经满员!");
+        }
+        // 新增接收者信息
+        TaskToUser taskToUser = new TaskToUser();
+        taskToUser.setValue(this.code, user.getId(), new Timestamp(System.currentTimeMillis()));
+        List<TaskToUser> acceptedUserList = this.getAcceptedUserList();
+        acceptedUserList.add(taskToUser);
+        this.setAcceptedUserList(acceptedUserList);
+        this.setAcceptedCount(this.acceptedCount+1);
         this.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
     }
 
+
     public void reject(Long userId){
         if (this.getDistributionType()!=0 || this.getStatus()!=CrowdTestTaskStatus.HAS_RELEASED || !this.getEvaluationAgencyId().equals(userId)){
             throw new CrowdTestTaskException("非法操作!");
@@ -103,6 +121,7 @@ public class CrowdTestTask {
     }
 
     public void commit(Long userId) {
+        // 改进
         if (this.getStatus()!=CrowdTestTaskStatus.HAS_RECEIVED || this.getCrowdTestReportList()==null || this.getCrowdTestReportList().size()<1){
             throw new CrowdTestTaskException("当前状态不能提交任务");
         }

+ 28 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/ReportScopeType.java

@@ -0,0 +1,28 @@
+package com.mooctest.crowd.domain.domainobject;
+
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-08-28 01:53
+ */
+@AllArgsConstructor
+@NoArgsConstructor
+public enum ReportScopeType {
+
+    PROJECT_SCOPE(0, "projectScope"),
+    TASK_SCOPE(1, "taskScope");
+
+    private int id;
+    private String name;
+
+    public int getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 45 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/TaskToUser.java

@@ -0,0 +1,45 @@
+package com.mooctest.crowd.domain.domainobject;
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author guochao
+ * @date 2019/7/6 17:54
+ */
+@Data
+public class TaskToUser {
+    private Long id;
+    private String taskCode;
+    private Long userId;
+    private Timestamp acceptTime;
+    private User user;
+    private List<CrowdTestReport> crowdTestReportList = new ArrayList<>();
+
+//    public TaskToUser(String taskCode, Long userId, Timestamp acceptTime) {
+//        this.taskCode = taskCode;
+//        this.userId = userId;
+//        this.acceptTime = acceptTime;
+//    }
+
+    public void setValue(String taskCode, Long userId, Timestamp acceptTime) {
+        this.taskCode = taskCode;
+        this.userId = userId;
+        this.acceptTime = acceptTime;
+    }
+
+    @Override
+    public String toString() {
+        return "TaskToUser{" +
+                "id=" + id +
+                ", taskCode='" + taskCode + '\'' +
+                ", userId=" + userId +
+                ", acceptTime=" + acceptTime +
+                ", user=" + user +
+                ", crowdTestReportList=" + crowdTestReportList +
+                '}';
+    }
+}

+ 2 - 0
core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestReportPO.java

@@ -24,6 +24,8 @@ public class CrowdTestReportPO {
     @Column(name = "CTR_CODE")
     private String code;
 
+    @Column(name = "CTR_U_ID")
+    private Long userId;
 
     @Column(name = "CTR_DEPENDENCY_CODE")
     private String dependencyCode;

+ 3 - 0
core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestTaskPO.java

@@ -73,6 +73,9 @@ CrowdTestTaskPO {
     @Column(name = "CTT_PARTICIPANT_COUNT")
     private int participantCount;
 
+    @Column(name = "CTT_ACCEPTED_COUNT")
+    private int acceptedCount;
+
     @Override
     public String toString() {
         return "CrowdTestTaskPO{" +

+ 29 - 0
core/src/main/java/com/mooctest/crowd/domain/model/TaskToUserPO.java

@@ -0,0 +1,29 @@
+package com.mooctest.crowd.domain.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+/**
+ * @author guochao
+ * @date 2019/7/6 17:54
+ */
+@Data
+@Entity
+@Table(name="task_to_user")
+public class TaskToUserPO {
+    @Id
+    @Column(name = "TTU_ID")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(name = "TTU_CTT_CODE")
+    private String taskCode;
+
+    @Column(name = "TTU_U_ID")
+    private Long userId;
+
+    @Column(name = "TTU_ACCEPT_TIME")
+    private Timestamp acceptTime;
+}

+ 64 - 20
core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java

@@ -1,17 +1,12 @@
 package com.mooctest.crowd.domain.repository;
 
-import com.mooctest.crowd.domain.dao.CrowdTestProjectDao;
-import com.mooctest.crowd.domain.dao.CrowdTestReportDao;
-import com.mooctest.crowd.domain.dao.CrowdTestTaskDao;
-import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
-import com.mooctest.crowd.domain.domainobject.CrowdTestReport;
-import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
-import com.mooctest.crowd.domain.domainobject.DeletedStatus;
+import com.mooctest.crowd.domain.dao.*;
+import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.CrowdTestProjectNotExistException;
-import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
-import com.mooctest.crowd.domain.model.CrowdTestReportPO;
-import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
+import com.mooctest.crowd.domain.exception.HttpBadRequestException;
+import com.mooctest.crowd.domain.model.*;
 import com.mooctest.crowd.domain.util.Converter;
+import com.mooctest.crowd.domain.domainobject.ReportScopeType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -19,6 +14,7 @@ import org.springframework.stereotype.Component;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * @author guochao
@@ -37,6 +33,12 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     @Autowired
     private CrowdTestReportDao crowdTestReportDao;
 
+    @Autowired
+    private TaskToUserDao taskToUserDao;
+
+    @Autowired
+    private UserDao userDao;
+
     @Override
     public CrowdTestProject getByID(Long crowdTestProjectId) throws CrowdTestProjectNotExistException {
 
@@ -89,22 +91,35 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
             for(CrowdTestTask crowdTestTask : crowdTestTaskList){
                 CrowdTestTaskPO crowdTestTaskPO = Converter.convert(CrowdTestTaskPO.class, crowdTestTask);
                 crowdTestTaskDao.save(crowdTestTaskPO);
-                List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
-                if(crowdTestReportList != null){
+                List<TaskToUser> acceptedUserList = crowdTestTask.getAcceptedUserList();
+                for(TaskToUser taskToUser:acceptedUserList){
+                    taskToUserDao.save(Converter.convert(TaskToUserPO.class, taskToUser));
+                    // 保存报告信息
+                    List<CrowdTestReport> crowdTestReportList = taskToUser.getCrowdTestReportList();
                     for(CrowdTestReport crowdTestReport : crowdTestReportList){
                         CrowdTestReportPO crowdTestReportPO = Converter.convert(CrowdTestReportPO.class, crowdTestReport);
                         crowdTestReportDao.save(crowdTestReportPO);
                     }
                 }
+
+
+                // 保存报告
+//                List<CrowdTestReport> crowdTestReportList = crowdTestTask.getCrowdTestReportList();
+//                if(crowdTestReportList != null){
+//                    for(CrowdTestReport crowdTestReport : crowdTestReportList){
+//                        CrowdTestReportPO crowdTestReportPO = Converter.convert(CrowdTestReportPO.class, crowdTestReport);
+//                        crowdTestReportDao.save(crowdTestReportPO);
+//                    }
+//                }
             }
         }
 
         //保存项目报告
-        CrowdTestReport crowdTestReportForProject = crowdTestProject.getCrowdTestReportForProject();
-        if(crowdTestReportForProject != null){
-            CrowdTestReportPO crowdTestReportForProjectPO = Converter.convert(CrowdTestReportPO.class, crowdTestReportForProject);
-            crowdTestReportDao.save(crowdTestReportForProjectPO);
-        }
+//        CrowdTestReport crowdTestReportForProject = crowdTestProject.getCrowdTestReportForProject();
+//        if(crowdTestReportForProject != null){
+//            CrowdTestReportPO crowdTestReportForProjectPO = Converter.convert(CrowdTestReportPO.class, crowdTestReportForProject);
+//            crowdTestReportDao.save(crowdTestReportForProjectPO);
+//        }
     }
 
 //    @Override
@@ -188,9 +203,27 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
         List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
         for(CrowdTestTaskPO crowdTestTaskPO : crowdTestTaskPOList){
             CrowdTestTask crowdTestTaskResult = Converter.convert(CrowdTestTask.class, crowdTestTaskPO);
-            // 检索任务中的所有的报告
-            List<CrowdTestReport> crowdTestReportListResult = getCrowdTestReportByCrowdTestTask(crowdTestTaskPO.getCode());
-            crowdTestTaskResult.setCrowdTestReportList(crowdTestReportListResult);
+            // 检索任务中的所有已接收任务的人员信息
+            List<TaskToUserPO> taskToUserPOList = taskToUserDao.findByTaskCode(crowdTestTaskResult.getCode());
+            List<TaskToUser> taskToUserList = taskToUserPOList.stream().map(taskToUserPO -> {
+                TaskToUser taskToUser = Converter.convert(TaskToUser.class, taskToUserPO);
+                // 获取人员详细信息
+                Optional<UserPO> userPOOptional = userDao.findById(taskToUser.getUserId());
+                if(userPOOptional.isPresent()){
+                    taskToUser.setUser(Converter.convert(User.class, userPOOptional.get()));
+                }else{
+                    throw new HttpBadRequestException("无此人员的信息");
+                }
+                // 获取每个人员的报告信息
+                List<CrowdTestReport> crowdTestReportListResult = getReportByTaskCodeAndUserId(crowdTestTaskPO.getCode(), taskToUser.getUserId());
+                taskToUser.setCrowdTestReportList(crowdTestReportListResult);
+                return taskToUser;
+            }).collect(Collectors.toList());
+            crowdTestTaskResult.setAcceptedUserList(taskToUserList);
+
+//            // 检索任务中的所有的报告
+//            List<CrowdTestReport> crowdTestReportListResult = getCrowdTestReportByCrowdTestTask(crowdTestTaskPO.getCode());
+//            crowdTestTaskResult.setCrowdTestReportList(crowdTestReportListResult);
             crowdTestTaskListResult.add(crowdTestTaskResult);
         }
         crowdTestProjectResult.setCrowdTestTaskList(crowdTestTaskListResult);
@@ -206,6 +239,17 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     }
 
     /**
+     * 通过任务code和人员id获取报告列表
+     * @param taskCode
+     * @param userId
+     * @return
+     */
+    private List<CrowdTestReport> getReportByTaskCodeAndUserId(String taskCode, Long userId) {
+        List<CrowdTestReportPO> crowdTestReportPOList = crowdTestReportDao.findByDependencyCodeAndUserIdAndScopeAndIsDeleted(taskCode, userId, ReportScopeType.TASK_SCOPE.getId(), DeletedStatus.isNotDeleted);
+        return crowdTestReportPOList.stream().map(crowdTestReportPO -> Converter.convert(CrowdTestReport.class, crowdTestReportPO)).collect(Collectors.toList());
+    }
+
+    /**
      * 通过任务信息获取报告信息
      * @param crowdTestTaskCode
      * @return

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

@@ -11,7 +11,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpSession;
-import java.util.List;
 
 /**
  * @author: Diors.Po
@@ -39,11 +38,12 @@ public class CrowdReportController {
     @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/report", method = RequestMethod.POST)
     public ReportDetailsDTO createTaskReport(@PathVariable("projectCode") String projectCode,
                                              @PathVariable("taskCode") String taskCode,
-                                             @RequestBody @Validated CrowdTestReportCommand command, BindingResult result){
+                                             @RequestBody @Validated CrowdTestReportCommand command,
+                                             BindingResult result, HttpSession session){
         log.info("projectCode: " + projectCode + ", taskCode: "+taskCode);
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
-        return reportService.createTaskReport(projectCode, taskCode, command);
+        return reportService.createTaskReport(projectCode, taskCode, command, Long.parseLong((String) session.getAttribute("userId")));
     }
 
     @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/report/{reportCode}", method = RequestMethod.PUT)

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/data/dto/TaskDetailsDTO.java

@@ -3,6 +3,7 @@ package com.mooctest.crowd.site.data.dto;
 import com.mooctest.crowd.site.data.TaskOperationControl;
 import com.mooctest.crowd.site.data.vo.CrowdReportVO;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
+import com.mooctest.crowd.site.data.vo.TaskToUserVO;
 import lombok.Data;
 
 import java.util.List;
@@ -14,6 +15,7 @@ import java.util.List;
 @Data
 public class TaskDetailsDTO {
     private CrowdTaskVO crowdTaskVO;
+    private List<TaskToUserVO> acceptedUserList;
     private List<CrowdReportVO> crowdReportVOList;
     private TaskOperationControl taskOperationControl;
 }

+ 1 - 5
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdReportVO.java

@@ -1,14 +1,9 @@
 package com.mooctest.crowd.site.data.vo;
 
-import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.domainobject.CrowdTestReport;
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
 
-import java.sql.Timestamp;
-
 /**
  * @Author: xuexb
  * @Date: 2019.7.15 20:36
@@ -18,6 +13,7 @@ public class CrowdReportVO {
     private String code;
     private String name;
     private Long crowdTestTaskId;
+    private Long userId;
     private int scope;
     private String type;
     private String description;

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java

@@ -30,6 +30,7 @@ public class CrowdTaskVO {
     private int status;
     private Timestamp datetime;
     private int participantCount;
+    private int acceptedCount;
     private StatusVO statusVO;
 
     public CrowdTaskVO(CrowdTestTask task){
@@ -49,6 +50,7 @@ public class CrowdTaskVO {
         agencyId = task.getEvaluationAgencyId();
         datetime = task.getDeadTime();
         participantCount = task.getParticipantCount();
+        acceptedCount = task.getAcceptedCount();
         this.renderStatus();
     }
 

+ 28 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/TaskToUserVO.java

@@ -0,0 +1,28 @@
+package com.mooctest.crowd.site.data.vo;
+
+import com.mooctest.crowd.domain.domainobject.TaskToUser;
+import lombok.Data;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * @author guochao
+ * @date 2019/7/6 17:54
+ */
+@Data
+public class TaskToUserVO {
+    private Long id;
+    private String taskCode;
+    private Long userId;
+    private Timestamp acceptTime;
+    private UserVO userVO;
+    private List<CrowdReportVO> crowdReportVOS;
+
+    public TaskToUserVO(TaskToUser taskToUser){
+        id = taskToUser.getId();
+        taskCode = taskToUser.getTaskCode();
+        userId = taskToUser.getUserId();
+        acceptTime = taskToUser.getAcceptTime();
+    }
+}

+ 26 - 5
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -5,6 +5,7 @@ import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.AccountNotExistException;
 import com.mooctest.crowd.domain.exception.CrowdTestReportNotExistException;
 import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
+import com.mooctest.crowd.domain.exception.HttpBadRequestException;
 import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
@@ -13,6 +14,7 @@ import com.mooctest.crowd.domain.model.UserPO;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
+import com.mooctest.crowd.domain.util.Converter;
 import com.mooctest.crowd.site.command.LoginCommand;
 import com.mooctest.crowd.site.command.RegisterCommand;
 import com.mooctest.crowd.site.data.ProjectOperationControl;
@@ -279,8 +281,13 @@ public class WebMediatorImpl implements ViewMediator {
                 .stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!task.isPresent())
             throw new CrowdTestTaskNotExistException();
-        Optional<CrowdTestReport> report = task.get().getCrowdTestReportList()
-                .stream().filter(crowdTestReport -> crowdTestReport.getCode().equals(reportCode)).findFirst();
+        // 查看当前任务指定用户
+        Optional<TaskToUser> taskToUserOptional = task.get().getAcceptedUserList().stream().filter(taskToUser -> taskToUser.getUserId().equals(userId)).findFirst();
+        if(!taskToUserOptional.isPresent())
+            throw new HttpBadRequestException("当前用户没有接收此任务!");
+        System.out.println(reportCode);
+        System.out.println(taskToUserOptional.get().toString());
+        Optional<CrowdTestReport> report = taskToUserOptional.get().getCrowdTestReportList().stream().filter(crowdTestReport -> crowdTestReport.getCode().equals(reportCode)).findFirst();
         if (!report.isPresent())
             throw new CrowdTestReportNotExistException();
         ReportDetailsDTO reportDetailsDTO  = new ReportDetailsDTO();
@@ -317,10 +324,24 @@ public class WebMediatorImpl implements ViewMediator {
             taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), userRepo.getByID(userId)));
         EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
         taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
+
+        List<TaskToUserVO> taskToUserVOS = task.get().getAcceptedUserList().stream().map(taskToUser -> {
+            TaskToUserVO taskToUserVO = new TaskToUserVO(taskToUser);
+            taskToUserVO.setUserVO(Converter.convert(UserVO.class, taskToUser.getUser()));
+            // 获取每个人员的报告信息
+            List<CrowdTestReport> crowdTestReportList = taskToUser.getCrowdTestReportList();
+            if(crowdTestReportList.size() > 0){
+                List<CrowdReportVO> crowdReportVOS = crowdTestReportList.stream().map(crowdTestReport -> new CrowdReportVO(crowdTestReport)).collect(Collectors.toList());
+                taskToUserVO.setCrowdReportVOS(crowdReportVOS);
+            }
+            return taskToUserVO;
+        }).collect(Collectors.toList());
+
+        taskDetailsDTO.setAcceptedUserList(taskToUserVOS);
         taskDetailsDTO.setCrowdTaskVO(taskVO);
-        List<CrowdReportVO> reportVOList = task.get().getCrowdTestReportList()
-                .stream().map(CrowdReportVO::new).collect(Collectors.toList());
-        taskDetailsDTO.setCrowdReportVOList(reportVOList);
+//        List<CrowdReportVO> reportVOList = task.get().getCrowdTestReportList()
+//                .stream().map(CrowdReportVO::new).collect(Collectors.toList());
+//        taskDetailsDTO.setCrowdReportVOList(reportVOList);
         return taskDetailsDTO;
     }
 

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

@@ -11,7 +11,7 @@ import com.mooctest.crowd.site.data.dto.ReportDetailsDTO;
 public interface CrowdReportService {
     ReportDetailsDTO getTaskReport(String projectCode, String taskCode, String reportCode, Long userId);
 
-    ReportDetailsDTO createTaskReport(String projectCode, String taskCode, CrowdTestReportCommand command);
+    ReportDetailsDTO createTaskReport(String projectCode, String taskCode, CrowdTestReportCommand command, Long userId);
 
     ReportDetailsDTO updateTaskReport(String projectCode, String taskCode, String reportCode, CrowdTestReportCommand command);
 

+ 16 - 5
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java

@@ -7,13 +7,13 @@ import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.site.command.CrowdTestReportCommand;
 import com.mooctest.crowd.site.data.dto.ReportDetailsDTO;
-import com.mooctest.crowd.site.data.vo.CrowdReportVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdReportService;
 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;
 
 /**
@@ -36,7 +36,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
     }
 
     @Override
-    public ReportDetailsDTO createTaskReport(String projectCode, String taskCode, CrowdTestReportCommand command) {
+    public ReportDetailsDTO createTaskReport(String projectCode, String taskCode, CrowdTestReportCommand command, Long userId) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         Optional<CrowdTestTask> task = project.getCrowdTestTaskList()
                 .stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
@@ -44,12 +44,23 @@ public class CrowdReportServiceImpl implements CrowdReportService {
             throw new CrowdTestTaskNotExistException();
         if (task.get().getStatus() != CrowdTestTaskStatus.HAS_RECEIVED)
             throw new BaseException("当前阶段无法创建报告");
+
+        // 判断报告的可操作性
+        List<TaskToUser> acceptedUserList = task.get().getAcceptedUserList();
+        Optional<TaskToUser> userOptional = acceptedUserList.stream().filter(user -> user.getUserId().equals(userId)).findFirst();
+        if(!userOptional.isPresent()){
+            throw new BaseException("当前用户没有此任务的操作权限!");
+        }
         CrowdTestReport report = command.toCrowdTestReport();
+        report.setUserId(userId);
         String reportCode = GenerateFlowCodeUtil.generateFlowCode("REPORT");
-        report.setScope(1);
+        report.setScope(ReportScopeType.TASK_SCOPE.getId());
         report.setDependencyCode(taskCode);
         report.setCode(reportCode);
-        task.get().getCrowdTestReportList().add(report);
+
+        List<CrowdTestReport> crowdTestReportList = userOptional.get().getCrowdTestReportList();
+        crowdTestReportList.add(report);
+        System.out.println(project.toString());
         projectRepo.saveCrowdTestProject(project);
         return getTaskReport(projectCode, taskCode, reportCode, task.get().getEvaluationAgencyId());
     }
@@ -70,7 +81,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         CrowdTestReport updatedReport = command.toCrowdTestReport();
         updatedReport.setId(report.get().getId());
         updatedReport.setCode(report.get().getCode());
-        updatedReport.setScope(1);
+        updatedReport.setScope(ReportScopeType.TASK_SCOPE.getId());
         updatedReport.setDependencyCode(report.get().getDependencyCode());
         task.get().getCrowdTestReportList().remove(report.get());
         task.get().getCrowdTestReportList().add(updatedReport);

+ 0 - 10
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -5,32 +5,23 @@ import com.mooctest.crowd.domain.dao.EvaluationAgencyDao;
 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.domainobject.User;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
 import com.mooctest.crowd.domain.exception.UnauthorizedException;
-import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
-import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
-import com.mooctest.crowd.site.data.TaskOperationControl;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 import com.mooctest.crowd.site.data.dto.TaskSquareDTO;
 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.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CrowdTaskService;
 import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 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
@@ -106,7 +97,6 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         CrowdTestTask task = project.getTask(taskCode);
         task.receive(userRepo.getByID(userId));
-//        project.receiveTask(taskCode, userRepo.getByID(userId));
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);
     }