|  | @@ -20,6 +20,7 @@ import com.mooctest.crowd.site.command.RegisterCommand;
 | 
	
		
			
				|  |  |  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.RoleType;
 | 
	
		
			
				|  |  |  import com.mooctest.crowd.site.data.vo.*;
 | 
	
		
			
				|  |  |  import com.mooctest.crowd.site.mediator.ViewMediator;
 | 
	
		
			
				|  |  |  import lombok.extern.slf4j.Slf4j;
 | 
	
	
		
			
				|  | @@ -74,6 +75,9 @@ public class WebMediatorImpl implements ViewMediator {
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private EnterpriseAuthenticationDao enterpriseAuthenticationDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private TaskToUserDao taskToUserDao;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @Value("${agency}")
 | 
	
		
			
				|  |  |      private String agencyId;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -208,16 +212,26 @@ public class WebMediatorImpl implements ViewMediator {
 | 
	
		
			
				|  |  |          List<CrowdTaskVO> unfinishedTasks = null;
 | 
	
		
			
				|  |  |          List<CrowdTaskVO> finishedTasks = null;
 | 
	
		
			
				|  |  |          if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("evaluationAgency"))) {
 | 
	
		
			
				|  |  | -            allTaskOfAgency = taskDao.findByEvaluationAgencyIdAndIsDeleted(user.getEvaluationAgency().getUserId(), 0).stream()
 | 
	
		
			
				|  |  | -                    .sorted(Comparator.comparing(CrowdTestTaskPO::getId).reversed().thenComparing(CrowdTestTaskPO::getStatus).reversed())
 | 
	
		
			
				|  |  | -                    .map(crowdTestTaskPO -> {
 | 
	
		
			
				|  |  | +//            allTaskOfAgency = taskDao.findByEvaluationAgencyIdAndIsDeleted(user.getEvaluationAgency().getUserId(), 0).stream()
 | 
	
		
			
				|  |  | +//                    .sorted(Comparator.comparing(CrowdTestTaskPO::getId).reversed().thenComparing(CrowdTestTaskPO::getStatus).reversed())
 | 
	
		
			
				|  |  | +//                    .map(crowdTestTaskPO -> {
 | 
	
		
			
				|  |  | +//                        CrowdTestTask task = new CrowdTestTask();
 | 
	
		
			
				|  |  | +//                        BeanUtils.copyProperties(crowdTestTaskPO, task);
 | 
	
		
			
				|  |  | +//                        return task;
 | 
	
		
			
				|  |  | +//                    }).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            allTaskOfAgency = taskToUserDao.findByUserId(user.getId()).stream()
 | 
	
		
			
				|  |  | +                    .map(taskToUserPO -> {
 | 
	
		
			
				|  |  | +                        CrowdTestTaskPO crowdTestTaskPO = taskDao.findByCodeAndIsDeleted(taskToUserPO.getTaskCode(), DeletedStatus.isNotDeleted);
 | 
	
		
			
				|  |  |                          CrowdTestTask task = new CrowdTestTask();
 | 
	
		
			
				|  |  |                          BeanUtils.copyProperties(crowdTestTaskPO, task);
 | 
	
		
			
				|  |  |                          return task;
 | 
	
		
			
				|  |  |                      }).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              unfinishedTasks = allTaskOfAgency.stream()
 | 
	
		
			
				|  |  |                      .filter(crowdTestTask -> crowdTestTask.getStatus()>=CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus()<CrowdTestTaskStatus.HAS_FINISHED)
 | 
	
		
			
				|  |  |                      .map(CrowdTaskVO::new).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              finishedTasks = allTaskOfAgency.stream()
 | 
	
		
			
				|  |  |                      .filter(crowdTestTask -> crowdTestTask.getStatus()==CrowdTestTaskStatus.HAS_FINISHED)
 | 
	
		
			
				|  |  |                      .map(CrowdTaskVO::new).collect(Collectors.toList());
 | 
	
	
		
			
				|  | @@ -283,19 +297,24 @@ public class WebMediatorImpl implements ViewMediator {
 | 
	
		
			
				|  |  |          if (!task.isPresent())
 | 
	
		
			
				|  |  |              throw new CrowdTestTaskNotExistException();
 | 
	
		
			
				|  |  |          System.out.println("renderTaskReportDetails userID: " + userId);
 | 
	
		
			
				|  |  | -        // 查看当前任务指定用户
 | 
	
		
			
				|  |  | -        Optional<TaskToUser> taskToUserOptional = task.get().getAcceptedUserList().stream().filter(taskToUser -> taskToUser.getUserId().equals(userId)).findFirst();
 | 
	
		
			
				|  |  | -        if(!taskToUserOptional.isPresent())
 | 
	
		
			
				|  |  | -            throw new HttpBadRequestException("当前用户没有接收此任务!");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Optional<CrowdTestReport> report = taskToUserOptional.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()));
 | 
	
		
			
				|  |  | -        System.out.println(task.get().toString());
 | 
	
		
			
				|  |  | -        if (task.get().getStatus()<CrowdTestTaskStatus.HAS_FINISHED)
 | 
	
		
			
				|  |  | -            reportDetailsDTO.setOperational(true);
 | 
	
		
			
				|  |  | +        if(userRepo.getByID(userId).getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.REGIONAL_MANAGER)) && !userId.equals(projectRepo.getByProjectCode(projectCode).getRegionalManagerId())){
 | 
	
		
			
				|  |  | +            // 区域管理员
 | 
	
		
			
				|  |  | +            throw new HttpBadRequestException("当前用户没有不是此任务的区域管理员!");
 | 
	
		
			
				|  |  | +        }else if(!userRepo.getByID(userId).getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.REGIONAL_MANAGER))){
 | 
	
		
			
				|  |  | +            // 测评机构
 | 
	
		
			
				|  |  | +            Optional<TaskToUser> taskToUserOptional = task.get().getAcceptedUserList().stream().filter(taskToUser -> taskToUser.getUserId().equals(userId)).findFirst();
 | 
	
		
			
				|  |  | +            if(!taskToUserOptional.isPresent())
 | 
	
		
			
				|  |  | +                throw new HttpBadRequestException("当前用户没有接收此任务!");
 | 
	
		
			
				|  |  | +            Optional<CrowdTestReport> report = taskToUserOptional.get().getCrowdTestReportList().stream().filter(crowdTestReport -> crowdTestReport.getCode().equals(reportCode)).findFirst();
 | 
	
		
			
				|  |  | +            if (!report.isPresent())
 | 
	
		
			
				|  |  | +                throw new CrowdTestReportNotExistException();
 | 
	
		
			
				|  |  | +            reportDetailsDTO.setCrowdReportVO(new CrowdReportVO(report.get()));
 | 
	
		
			
				|  |  | +            if (task.get().getStatus()<CrowdTestTaskStatus.HAS_FINISHED)
 | 
	
		
			
				|  |  | +                reportDetailsDTO.setOperational(true);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 区域管理员
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          return reportDetailsDTO;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -321,27 +340,52 @@ public class WebMediatorImpl implements ViewMediator {
 | 
	
		
			
				|  |  |              throw new CrowdTestTaskNotExistException();
 | 
	
		
			
				|  |  |          CrowdTaskVO taskVO = new CrowdTaskVO(task.get());
 | 
	
		
			
				|  |  |          System.out.println("renderTaskDetails userId:" + userId);
 | 
	
		
			
				|  |  | -        if (userId == null)
 | 
	
		
			
				|  |  | +        if (userId == null) {
 | 
	
		
			
				|  |  |              taskDetailsDTO.setTaskOperationControl(this.initTaskPermission(project, task.get(), null));
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | +        } else{
 | 
	
		
			
				|  |  |              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);
 | 
	
		
			
				|  |  | +            // 区域管理员视图
 | 
	
		
			
				|  |  | +            List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
 | 
	
		
			
				|  |  | +            if(userId.equals(project.getRegionalManagerId())){
 | 
	
		
			
				|  |  | +                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());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            return taskToUserVO;
 | 
	
		
			
				|  |  | -        }).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            // 测评机构视图
 | 
	
		
			
				|  |  | +            else if(userRepo.getByID(userId).getRoleList().stream().anyMatch(role -> role.getName().equals(RoleType.AGENCY.getName()))){
 | 
	
		
			
				|  |  | +                Optional<TaskToUser> taskToUserOptional = task.get().getAcceptedUserList().stream().filter(taskToUser -> taskToUser.getUserId().equals(userId)).findFirst();
 | 
	
		
			
				|  |  | +                if(!taskToUserOptional.isPresent())
 | 
	
		
			
				|  |  | +                    throw new HttpBadRequestException("当前用户没有接收此任务!");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                taskToUserVOS = task.get().getAcceptedUserList().stream()
 | 
	
		
			
				|  |  | +                        .filter(taskToUser -> taskToUser.getUserId().equals(userId)).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.setAcceptedUserList(taskToUserVOS);
 | 
	
		
			
				|  |  |          taskDetailsDTO.setCrowdTaskVO(taskVO);
 | 
	
		
			
				|  |  | +//        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
 | 
	
		
			
				|  |  | +//        taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          return taskDetailsDTO;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -514,7 +558,7 @@ public class WebMediatorImpl implements ViewMediator {
 | 
	
		
			
				|  |  |                              taskOperationControl.setReject(true);
 | 
	
		
			
				|  |  |                      } else if (task.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED){
 | 
	
		
			
				|  |  |                          taskOperationControl.setUploadReport(true);
 | 
	
		
			
				|  |  | -                        if (task.getParticipantHasReportCount() == task.getAcceptedCount()){
 | 
	
		
			
				|  |  | +                        if (task.getParticipantHasCommittedCount() == task.getAcceptedCount()){
 | 
	
		
			
				|  |  |                              taskOperationControl.setFinish(true);
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      } else if (task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED){
 |