Ver código fonte

修改企业认证操作

guochao 6 anos atrás
pai
commit
777941a355

+ 19 - 15
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -320,11 +320,11 @@ public class CrowdTestProject {
         //判断是否为区域管理员
         RegionalManager regionalManager = user.getRegionalManager();
         if(regionalManager == null){
-            throw new UserNotExistException("当前用户不是区域管理员,没有权限接收项目");
+            throw new UserNotExistException("当前用户不是区域管理员,没有权限接收项目");
         }
 
         //判断项目状态
-        if(this.getStatus() != (CrowdTestProjectStatus.HAS_RECEIVED-1)){
+        if(this.getStatus() != CrowdTestProjectStatus.HAS_RELEASED){
             throw new CrowdTestProjectException("项目不能被接收,项目状态为: " + this.getStatus());
         }else{
             //项目是定向发布
@@ -620,34 +620,29 @@ public class CrowdTestProject {
 
         //判断是否是当前项目的区域管理员
         if(!this.regionalManagerId.equals(user.getId())){
-            throw new CrowdTestProjectException("当前用户没有权限提交项目!");
+            throw new CrowdTestProjectException("当前用户没有权限操作此项目!");
         }
 
         //项目状态判断
-        if(this.getStatus() != (CrowdTestProjectStatus.HAS_COMMITED-1)){
+        if(this.getStatus() != CrowdTestProjectStatus.HAS_RECEIVED){
             throw new CrowdTestProjectException("当前项目状态不可提交项目!状态为:"+this.getStatus());
         }
 
         //判断项目下是否有任务
-        List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
-        if(crowdTestTaskList.size() < 1){
+        if(this.getCrowdTestTaskList()==null || this.getCrowdTestTaskList().size() < 1){
             throw new CrowdTestProjectException("还未创建任务,项目不能被提交");
         }else{
             //结束项目时查看是否已结束任务
-            for(CrowdTestTask crowdTestTask : crowdTestTaskList){
-                if(crowdTestTask.getStatus() != CrowdTestTaskStatus.HAS_FINISHED){
-                    throw new CrowdTestTaskException("存在未结束的任务,项目不能被提交");
-                }
+            if(this.getCrowdTestTaskList().stream().filter(task -> task.getStatus()!=CrowdTestTaskStatus.HAS_REJECTED)
+                    .anyMatch(task -> task.getStatus()!=CrowdTestTaskStatus.HAS_FINISHED)){
+                throw new CrowdTestTaskException("存在未结束的任务,项目不能被提交");
             }
         }
-
         //判断项目下是否有项目报告
         if(this.getCrowdTestReportForProject() == null){
             throw new CrowdTestProjectException("还未创建项目报告,项目不能被提交");
         }
-
         this.setStatus(CrowdTestProjectStatus.HAS_COMMITED);
-        this.setEndTime(new Timestamp(System.currentTimeMillis()));
         return this;
     }
 
@@ -665,12 +660,21 @@ public class CrowdTestProject {
             throw new CrowdTestProjectException("当前用户没有权限结束项目!");
         }
 
-        if(this.getStatus() != (CrowdTestProjectStatus.HAS_FINISHED - 1)){
-            throw new CrowdTestProjectException("项目不能被提交,当前状态为:"+this.getStatus());
+        if(this.getStatus() != CrowdTestProjectStatus.HAS_COMMITED){
+            throw new CrowdTestProjectException("项目不能确认结束,当前状态为:"+this.getStatus());
         }else{
             this.setStatus(CrowdTestProjectStatus.HAS_FINISHED);
             this.setEndTime(new Timestamp(System.currentTimeMillis()));
         }
         return this;
     }
+
+    public void reject(Long userId) {
+        if (this.getProjectDistributionTypeId()!=0
+                || this.getStatus() != CrowdTestProjectStatus.HAS_RELEASED
+                || !this.getRegionalManagerId().equals(userId)){
+            throw new CrowdTestProjectException("非法的操作");
+        }
+        this.setStatus(CrowdTestProjectStatus.HAS_REJECTED);
+    }
 }

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

@@ -118,5 +118,6 @@ public class CrowdTestTask {
             throw new CrowdTestTaskException("评测机构未提请结束任务,无法确认结束!");
         }
         this.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
+        this.setEndTime(new Timestamp(System.currentTimeMillis()));
     }
 }

+ 20 - 7
site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java

@@ -10,7 +10,6 @@ import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
 import com.mooctest.crowd.site.service.CrowdProjectService;
 import com.mooctest.crowd.site.util.FileUtil;
-import lombok.extern.java.Log;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
@@ -18,7 +17,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.util.List;
@@ -141,18 +139,33 @@ public class CrowdProjectController {
      * 区域管理员接收项目
      * @param projectCode
      * @param userId
+     * @return
      */
     @LoginRequired
-    @RequestMapping(value = "/api/project/{projectCode}/regionManager/{userId}")
-    public void acceptProject(@PathVariable("projectCode") String projectCode, @PathVariable("userId") Long userId){
-        projectService.receiveProject(projectCode, userId);
+    @RequestMapping(value = "/api/project/{projectCode}/regionManager/{userId}", method = RequestMethod.PUT)
+    public ProjectDetailsDTO acceptProject(@PathVariable("projectCode") String projectCode, @PathVariable("userId") Long userId){
+        return projectService.receiveProject(projectCode, userId);
+    }
+
+    @LoginRequired
+    @RequestMapping(value = "/api/project/{projectCode}/status/rejected", method = RequestMethod.PUT)
+    public void rejectProejct(@PathVariable("projectCode") String projectCode, HttpSession session){
+        Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        projectService.rejectProject(projectCode, userId);
     }
 
     @LoginRequired
-    @RequestMapping(value = "/api/project/{projectCode}/status/reject")
-    public void rejectProejct(@PathVariable("proejctCode") String projectCode, HttpSession session){
+    @RequestMapping(value = "/api/project/{projectCode}/status/committed", method = RequestMethod.PUT)
+    public ProjectDetailsDTO commitProject(@PathVariable("projectCode") String projectCode, HttpSession session){
         Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        return projectService.commitProject(projectCode, userId);
+    }
 
+    @LoginRequired
+    @RequestMapping(value = "/api/project/{projectCode}/status/finished", method = RequestMethod.PUT)
+    public ProjectDetailsDTO confirmFinished(@PathVariable("projectCode") String projectCode, HttpSession session){
+        Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        return projectService.confirmFinished(projectCode, userId);
     }
 
     /**

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

@@ -10,6 +10,7 @@ import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpSession;
 import java.util.List;
 
 /**
@@ -28,8 +29,11 @@ public class CrowdReportController {
     @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/report/{reportCode}", method = RequestMethod.GET)
     public ReportDetailsDTO getTaskReport(@PathVariable("projectCode") String projectCode,
                                           @PathVariable("taskCode") String taskCode,
-                                          @PathVariable("reportCode") String reportCode){
-        return reportService.getTaskReport(projectCode, taskCode, reportCode);
+                                          @PathVariable("reportCode") String reportCode,
+                                          HttpSession session){
+        if (session.getAttribute("userId")==null)
+            return reportService.getTaskReport(projectCode, taskCode, reportCode, null);
+        return reportService.getTaskReport(projectCode, taskCode, reportCode, Long.parseLong((String)session.getAttribute("userId")));
     }
 
     @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/report", method = RequestMethod.POST)
@@ -70,8 +74,12 @@ public class CrowdReportController {
     }
 
     @RequestMapping(value = "/project/{projectCode}/report/{reportCode}", method = RequestMethod.GET)
-    public ReportDetailsDTO getProjectReport(@PathVariable("projectCode") String projectCode, @PathVariable("reportCode") String reportCode){
-        return reportService.getProjectReport(projectCode, reportCode);
+    public ReportDetailsDTO getProjectReport(@PathVariable("projectCode") String projectCode,
+                                             @PathVariable("reportCode") String reportCode,
+                                             HttpSession session){
+        if (session.getAttribute("userId")==null)
+            return reportService.getProjectReport(projectCode, reportCode, null);
+        return reportService.getProjectReport(projectCode, reportCode, Long.parseLong((String)session.getAttribute("userId")));
     }
 
     @RequestMapping(value = "/project/{projectCode}/report/{reportCode}", method = RequestMethod.DELETE)

+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/data/dto/ReportDetailsDTO.java

@@ -10,4 +10,5 @@ import lombok.Data;
 @Data
 public class ReportDetailsDTO {
     CrowdReportVO crowdReportVO;
+    boolean operational = false;
 }

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

@@ -28,13 +28,15 @@ public interface ViewMediator {
 
     MyCrowdDTO renderMyCrowd(Long userId);
 
-    TaskSquareDTO renderTaskSquare(CrowdTestTaskCommand crowdTestTaskCommand);
+    TaskSquareDTO renderTaskSquare();
 
     ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, User user);
 
-    ReportDetailsDTO renderReportDetails(CrowdTestReportCommand crowdTestReportCommand);
+    ReportDetailsDTO renderTaskReportDetails(String projectCode, String taskCode, String reportCode, Long userId);
 
-    TaskDetailsDTO renderTaskDetails(CrowdTestTaskCommand crowdTestTaskCommand);
+    ReportDetailsDTO renderProjectReportDetails(String projectCode, String reportCode, Long userId);
+
+    TaskDetailsDTO renderTaskDetails(String projectCode, String taskCode, Long userId);
 
     UserDTO renderUser(User user);
 

+ 99 - 12
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -3,29 +3,27 @@ package com.mooctest.crowd.site.mediator.impl;
 import com.mooctest.crowd.domain.dao.*;
 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.factory.CrowdTestProjectFactory;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
-import com.mooctest.crowd.domain.model.RegionalManagerPO;
 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.site.command.*;
 import com.mooctest.crowd.site.data.ProjectOperationControl;
+import com.mooctest.crowd.site.data.TaskOperationControl;
 import com.mooctest.crowd.site.data.dto.*;
-import com.mooctest.crowd.site.data.enums.ProjectType;
 import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Component;
-
 import java.util.ArrayList;
-import java.util.Comparator;
 import java.util.List;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -179,8 +177,17 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public TaskSquareDTO renderTaskSquare(CrowdTestTaskCommand crowdTestTaskCommand) {
-        return new TaskSquareDTO();
+    public TaskSquareDTO renderTaskSquare() {
+        List<CrowdTaskVO> taskVOList = taskDao.findAllByIsDeleted(0).stream().map(crowdTestTaskPO -> {
+            CrowdTestTask task = CrowdTestProjectFactory.defaultTask();
+            BeanUtils.copyProperties(crowdTestTaskPO, task);
+            return task;
+        }).collect(Collectors.toList()).stream().filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_RELEASED)
+                .filter(crowdTestTask -> crowdTestTask.getDistributionType()==2)
+                .map(CrowdTaskVO::new).collect(Collectors.toList());
+        TaskSquareDTO taskSquareDTO = new TaskSquareDTO();
+        taskSquareDTO.setCrowdTaskVOList(taskVOList);
+        return taskSquareDTO;
     }
 
     @Override
@@ -212,13 +219,54 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public ReportDetailsDTO renderReportDetails(CrowdTestReportCommand crowdTestReportCommand) {
-        return new ReportDetailsDTO();
+    public ReportDetailsDTO renderTaskReportDetails(String projectCode, String taskCode, String reportCode, Long userId) {
+        Optional<CrowdTestTask> task = projectRepo.getByProjectCode(projectCode).getCrowdTestTaskList()
+                .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();
+        if (!report.isPresent())
+            throw new CrowdTestReportNotExistException();
+        ReportDetailsDTO reportDetailsDTO  = new ReportDetailsDTO();
+        reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report.get()));
+        if (task.get().getStatus()<CrowdTestTaskStatus.HAS_FINISHED && task.get().getEvaluationAgencyId().equals(userId))
+            reportDetailsDTO.setOperational(true);
+        return reportDetailsDTO;
+    }
+
+    @Override
+    public ReportDetailsDTO renderProjectReportDetails(String projectCode, String reportCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        CrowdTestReport report = project.getCrowdTestReportForProject();
+        if (report==null)
+            throw new CrowdTestReportNotExistException();
+        ReportDetailsDTO reportDetailsDTO  = new ReportDetailsDTO();
+        reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report));
+        if (project.getStatus()<CrowdTestProjectStatus.HAS_FINISHED && project.getRegionalManagerId().equals(userId))
+            reportDetailsDTO.setOperational(true);
+        return reportDetailsDTO;
     }
 
     @Override
-    public TaskDetailsDTO renderTaskDetails(CrowdTestTaskCommand crowdTestTaskCommand) {
-        return new TaskDetailsDTO();
+    public TaskDetailsDTO renderTaskDetails(String projectCode, String taskCode, Long userId) {
+        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();
+        CrowdTaskVO taskVO = new CrowdTaskVO(task.get());
+        if (userId == null)
+            taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), null));
+        else
+            taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), userRepo.getByID(userId)));
+        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
+        taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
+        taskDetailsDTO.setCrowdTaskVO(taskVO);
+        List<CrowdReportVO> reportVOList = task.get().getCrowdTestReportList()
+                .stream().map(CrowdReportVO::new).collect(Collectors.toList());
+        taskDetailsDTO.setCrowdReportVOList(reportVOList);
+        return taskDetailsDTO;
     }
 
     @Override
@@ -301,4 +349,43 @@ public class WebMediatorImpl implements ViewMediator {
         }
         return operationControl;
     }
+
+    private TaskOperationControl initTaskPermission(CrowdTestProject project, CrowdTestTask task, User user){
+        TaskOperationControl taskOperationControl = new TaskOperationControl();
+        if (user==null)
+            return taskOperationControl;
+        //区域管理员或系统管理员视角
+        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))
+                ||(user.getRegionalManager()!=null&&user.getId().equals(project.getRegionalManagerId()))){
+            if (task.getStatus()<CrowdTestTaskStatus.HAS_RECEIVED){
+                taskOperationControl.setUpdate(true);
+            }else if (task.getStatus()==CrowdTestTaskStatus.HAS_COMMITED){
+                taskOperationControl.setConfirmFinish(true);
+            }
+        }
+        //评测机构视角
+        if (user.getEvaluationAgency()!=null && task.getStatus()!=CrowdTestTaskStatus.HAS_REJECTED){
+            if ((task.getDistributionType()==0 && task.getEvaluationAgencyId().equals(user.getId()))
+                    ||(task.getDistributionType()==2 && task.getStatus()>=CrowdTestTaskStatus.HAS_RECEIVED && task.getEvaluationAgencyId().equals(user.getId()))){
+                if (task.getStatus()==CrowdTestTaskStatus.HAS_RELEASED){
+                    taskOperationControl.setReceive(true);
+                    if (task.getDistributionType()==0)
+                        taskOperationControl.setReject(true);
+                } else if (task.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED){
+                    taskOperationControl.setUploadReport(true);
+                    if (task.getCrowdTestReportList().size()>0){
+                        taskOperationControl.setFinish(true);
+                    }
+                } else if (task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED){
+                    taskOperationControl.setUploadReport(true);
+                }
+            } else if (task.getDistributionType()==2){
+                if (task.getStatus()==CrowdTestTaskStatus.HAS_RELEASED){
+                    taskOperationControl.setReceive(true);
+                }
+            }
+        }
+        System.out.println(taskOperationControl);
+        return taskOperationControl;
+    }
 }

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

@@ -31,5 +31,11 @@ public interface CrowdProjectService {
 
     List<RegionalManagerVO> getRegionalManagerList();
 
-    void receiveProject(String projectCode, Long userId);
+    ProjectDetailsDTO receiveProject(String projectCode, Long userId);
+
+    void rejectProject(String projectCode, Long userId);
+
+    ProjectDetailsDTO commitProject(String projectCode, Long userId);
+
+    ProjectDetailsDTO confirmFinished(String projectCode, Long userId);
 }

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

@@ -9,7 +9,7 @@ import com.mooctest.crowd.site.data.dto.ReportDetailsDTO;
  * @date 2019-07-30 18:02
  */
 public interface CrowdReportService {
-    ReportDetailsDTO getTaskReport(String projectCode, String taskCode, String reportCode);
+    ReportDetailsDTO getTaskReport(String projectCode, String taskCode, String reportCode, Long userId);
 
     ReportDetailsDTO createTaskReport(String projectCode, String taskCode, CrowdTestReportCommand command);
 
@@ -17,7 +17,7 @@ public interface CrowdReportService {
 
     void deleteTaskReport(String projectCode, String taskCode, String reportCode);
 
-    ReportDetailsDTO getProjectReport(String projectCode, String reportCode);
+    ReportDetailsDTO getProjectReport(String projectCode, String reportCode, Long userId);
 
     ReportDetailsDTO createProjectReport(String projectCode, CrowdTestReportCommand command);
 

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

@@ -176,12 +176,35 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     }
 
     @Override
-    public void receiveProject(String projectCode, Long userId) {
+    public ProjectDetailsDTO receiveProject(String projectCode, Long userId) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-//        if (project.getProjectDistributionTypeId())
         User user = userRepo.getByID(userId);
         project.receiveProject(user);
         projectRepo.saveCrowdTestProject(project);
+        return getProjectDetails(projectCode, userId);
+    }
+
+    @Override
+    public void rejectProject(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.reject(userId);
+        projectRepo.saveCrowdTestProject(project);
+    }
+
+    @Override
+    public ProjectDetailsDTO commitProject(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.commitCrowdTestProject(userRepo.getByID(userId));
+        projectRepo.saveCrowdTestProject(project);
+        return getProjectDetails(projectCode, userId);
+    }
+
+    @Override
+    public ProjectDetailsDTO confirmFinished(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.finishCrowdTestProject(userRepo.getByID(userId));
+        projectRepo.saveCrowdTestProject(project);
+        return getProjectDetails(projectCode, userId);
     }
 
     private List<CrowdTestProject> transferExcel2Projects(MultipartFile file){

+ 11 - 26
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdReportServiceImpl.java

@@ -8,6 +8,7 @@ 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;
@@ -26,22 +27,12 @@ public class CrowdReportServiceImpl implements CrowdReportService {
     @Autowired
     private CrowdTestProjectRepo projectRepo;
 
-//    @Autowired
-//    private GenerateFlowCodeUtil codeUtil;
+    @Autowired
+    private ViewMediator viewMediator;
 
     @Override
-    public ReportDetailsDTO getTaskReport(String projectCode, String taskCode, String reportCode) {
-        Optional<CrowdTestTask> task = projectRepo.getByProjectCode(projectCode).getCrowdTestTaskList()
-                .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();
-        if (!report.isPresent())
-            throw new CrowdTestReportNotExistException();
-        ReportDetailsDTO reportDetailsDTO  = new ReportDetailsDTO();
-        reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report.get()));
-        return reportDetailsDTO;
+    public ReportDetailsDTO getTaskReport(String projectCode, String taskCode, String reportCode, Long userId) {
+        return viewMediator.renderTaskReportDetails(projectCode, taskCode, reportCode, userId);
     }
 
     @Override
@@ -60,7 +51,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         report.setCode(reportCode);
         task.get().getCrowdTestReportList().add(report);
         projectRepo.saveCrowdTestProject(project);
-        return getTaskReport(projectCode, taskCode, reportCode);
+        return getTaskReport(projectCode, taskCode, reportCode, task.get().getEvaluationAgencyId());
     }
 
     @Override
@@ -84,7 +75,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         task.get().getCrowdTestReportList().remove(report.get());
         task.get().getCrowdTestReportList().add(updatedReport);
         projectRepo.saveCrowdTestProject(project);
-        return getTaskReport(projectCode, taskCode, reportCode);
+        return getTaskReport(projectCode, taskCode, reportCode, task.get().getEvaluationAgencyId());
     }
 
     @Override
@@ -95,14 +86,8 @@ public class CrowdReportServiceImpl implements CrowdReportService {
     }
 
     @Override
-    public ReportDetailsDTO getProjectReport(String projectCode, String reportCode) {
-        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-        CrowdTestReport report = project.getCrowdTestReportForProject();
-        if (report==null)
-            throw new CrowdTestReportNotExistException();
-        ReportDetailsDTO reportDetailsDTO  = new ReportDetailsDTO();
-        reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report));
-        return reportDetailsDTO;
+    public ReportDetailsDTO getProjectReport(String projectCode, String reportCode, Long userId) {
+       return viewMediator.renderProjectReportDetails(projectCode, reportCode, userId);
     }
 
     @Override
@@ -116,7 +101,7 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         report.setCode(reportCode);
         project.setCrowdTestReportForProject(report);
         projectRepo.saveCrowdTestProject(project);
-        return getProjectReport(projectCode, reportCode);
+        return getProjectReport(projectCode, reportCode, project.getRegionalManagerId());
     }
 
     @Override
@@ -133,6 +118,6 @@ public class CrowdReportServiceImpl implements CrowdReportService {
         updatedReport.setDependencyCode(report.getDependencyCode());
         project.setCrowdTestReportForProject(updatedReport);
         projectRepo.saveCrowdTestProject(project);
-        return getProjectReport(projectCode, reportCode);
+        return getProjectReport(projectCode, reportCode, project.getRegionalManagerId());
     }
 }

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

@@ -61,25 +61,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public TaskDetailsDTO getTaskDetails(String projectCode, String taskCode, Long userId) {
-        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();
-        CrowdTaskVO taskVO = new CrowdTaskVO(task.get());
-        if (userId == null)
-            taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), null));
-        else
-            taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), userRepo.getByID(userId)));
-        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
-        taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
-        taskDetailsDTO.setCrowdTaskVO(taskVO);
-        List<CrowdReportVO> reportVOList = task.get().getCrowdTestReportList()
-                .stream().map(crowdTestReport -> {
-            return new CrowdReportVO(crowdTestReport);
-        }).collect(Collectors.toList());
-        taskDetailsDTO.setCrowdReportVOList(reportVOList);
-        return taskDetailsDTO;
+        return viewMediator.renderTaskDetails(projectCode, taskCode, userId);
     }
 
     @Override
@@ -116,16 +98,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 
     @Override
     public TaskSquareDTO getAllTasks() {
-        List<CrowdTaskVO> taskVOList = taskDao.findAllByIsDeleted(0).stream().map(crowdTestTaskPO -> {
-            CrowdTestTask task = CrowdTestProjectFactory.defaultTask();
-            BeanUtils.copyProperties(crowdTestTaskPO, task);
-            return task;
-        }).collect(Collectors.toList()).stream().filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_RELEASED)
-                .filter(crowdTestTask -> crowdTestTask.getDistributionType()==2)
-                .map(CrowdTaskVO::new).collect(Collectors.toList());
-        TaskSquareDTO taskSquareDTO = new TaskSquareDTO();
-        taskSquareDTO.setCrowdTaskVOList(taskVOList);
-        return taskSquareDTO;
+       return viewMediator.renderTaskSquare();
     }
 
     @Override
@@ -165,43 +138,4 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);
     }
-
-    private TaskOperationControl initTaskPermission(CrowdTestProject project,CrowdTestTask task, User user){
-        TaskOperationControl taskOperationControl = new TaskOperationControl();
-        if (user==null)
-            return taskOperationControl;
-        //区域管理员或系统管理员视角
-        if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))
-                ||(user.getRegionalManager()!=null&&user.getId().equals(project.getRegionalManagerId()))){
-            if (task.getStatus()<CrowdTestTaskStatus.HAS_RECEIVED){
-                taskOperationControl.setUpdate(true);
-            }else if (task.getStatus()==CrowdTestTaskStatus.HAS_COMMITED){
-                taskOperationControl.setConfirmFinish(true);
-            }
-        }
-        //评测机构视角
-        if (user.getEvaluationAgency()!=null && task.getStatus()!=CrowdTestTaskStatus.HAS_REJECTED){
-            if ((task.getDistributionType()==0 && task.getEvaluationAgencyId().equals(user.getId()))
-                    ||(task.getDistributionType()==2 && task.getStatus()>=CrowdTestTaskStatus.HAS_RECEIVED && task.getEvaluationAgencyId().equals(user.getId()))){
-                if (task.getStatus()==CrowdTestTaskStatus.HAS_RELEASED){
-                    taskOperationControl.setReceive(true);
-                    if (task.getDistributionType()==0)
-                        taskOperationControl.setReject(true);
-                } else if (task.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED){
-                    taskOperationControl.setUploadReport(true);
-                    if (task.getCrowdTestReportList().size()>0){
-                        taskOperationControl.setFinish(true);
-                    }
-                } else if (task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED){
-                    taskOperationControl.setUploadReport(true);
-                }
-            } else if (task.getDistributionType()==2){
-                if (task.getStatus()==CrowdTestTaskStatus.HAS_RELEASED){
-                    taskOperationControl.setReceive(true);
-                }
-            }
-        }
-        System.out.println(taskOperationControl);
-        return taskOperationControl;
-    }
 }

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

@@ -1,101 +0,0 @@
-package com.mooctest.crowd.site.mediator.impl;
-
-import com.mooctest.crowd.domain.domainobject.Account;
-import com.mooctest.crowd.domain.domainobject.User;
-import com.mooctest.crowd.domain.factory.AccountFactory;
-import com.mooctest.crowd.domain.factory.UserFactory;
-import com.mooctest.crowd.site.command.AccountCommand;
-import com.mooctest.crowd.site.command.CrowdTestReportCommand;
-import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
-import com.mooctest.crowd.site.data.dto.*;
-import com.mooctest.crowd.site.mediator.ViewMediator;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import static org.junit.Assert.assertNotNull;
-
-/**
- * @Author: xuexb
- * @Date: 2019.7.16 20:39
- */
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(AccountFactory.class)
-public class WebMediatorImplTest {
-
-
-    private ViewMediator viewMediator;
-    private Account account;
-
-    @Before
-    public void setUp(){
-        account = new Account();
-        account.setPassword("CORRECT_PWD");
-        account.setMobileNum("EXiSTS_MOBILE");
-
-        viewMediator = new WebMediatorImpl();
-    }
-
-//    @Test
-//    public void should_return_true_when_login_success() throws PasswordErrorException, BadRequestException, AccountNotExistException {
-//        //arrange
-//        PowerMockito.mockStatic(AccountFactory.class);
-//        PowerMockito.when(AccountFactory.createAccount()).thenReturn(account);
-//        LoginCommand cmd = new LoginCommand("EXiSTS_MOBILE", "CORRECT_PWD", "CODE");
-//        //action
-//        UserDTO success = viewMediator.loginByMobileAndPwd(cmd);
-//    }
-
-
-
-    @Test
-    public void should_return_index_dto_when_render_index(){
-        //arrange
-        //action
-        //assert
-    }
-
-
-    @Test
-    public void should_return_task_square_dto_when_render_task_square_success(){
-        //arrange
-        CrowdTestTaskCommand crowdTestTaskCommand = new CrowdTestTaskCommand();
-        //action
-        TaskSquareDTO taskSquareDTO = viewMediator.renderTaskSquare(crowdTestTaskCommand);
-        //assert
-        assertNotNull(taskSquareDTO);
-    }
-
-    @Test
-    public void should_return_report_details_dto_when_render_report_details_success(){
-        //arrange
-        CrowdTestReportCommand crowdTestReportCommand = new CrowdTestReportCommand();
-        //action
-        ReportDetailsDTO reportDetailsDTO = viewMediator.renderReportDetails(crowdTestReportCommand);
-        //assert
-        assertNotNull(reportDetailsDTO);
-    }
-
-    @Test
-    public void should_return_task_details_dto_when_render_task_details_success(){
-        //arrange
-        CrowdTestTaskCommand crowdTestTaskCommand = new CrowdTestTaskCommand();
-        //action
-        TaskDetailsDTO taskDetailsDTO = viewMediator.renderTaskDetails(crowdTestTaskCommand);
-        //assert
-        assertNotNull(taskDetailsDTO);
-    }
-
-    @Test
-    public void should_return_user_dto_when_render_user_success(){
-        //arrage
-        User user = UserFactory.createUser();
-        user.setEvaluationAgency(UserFactory.defaultAgency());
-        //action
-        UserDTO userDTO = viewMediator.renderUser(user);
-        //assert
-        assertNotNull(userDTO);
-    }
-}