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