|
@@ -11,6 +11,7 @@ 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.dto.*;
|
|
|
import com.mooctest.crowd.site.data.enums.ProjectType;
|
|
|
import com.mooctest.crowd.site.data.vo.*;
|
|
@@ -183,7 +184,7 @@ public class WebMediatorImpl implements ViewMediator {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public ProjectDetailsDTO renderProjectDetails(CrowdTestProject project) {
|
|
|
+ public ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, User user) {
|
|
|
ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
|
|
|
List<CrowdTaskVO> taskVOList = project.getCrowdTestTaskList().stream().map(crowdTestTask -> {
|
|
|
CrowdTaskVO crowdTaskVO = new CrowdTaskVO(crowdTestTask);
|
|
@@ -206,6 +207,7 @@ public class WebMediatorImpl implements ViewMediator {
|
|
|
projectDetailsDTO.setProjectDetails(projectVO);
|
|
|
projectDetailsDTO.setTaskList(taskVOList);
|
|
|
projectDetailsDTO.setReportList(reportVOList);
|
|
|
+ projectDetailsDTO.setProjectOperationControl(initProjectPermission(project, user));
|
|
|
return projectDetailsDTO;
|
|
|
}
|
|
|
|
|
@@ -253,4 +255,50 @@ public class WebMediatorImpl implements ViewMediator {
|
|
|
});
|
|
|
return agencyList;
|
|
|
}
|
|
|
+
|
|
|
+ private ProjectOperationControl initProjectPermission(CrowdTestProject project, User user){
|
|
|
+ ProjectOperationControl operationControl = new ProjectOperationControl();
|
|
|
+ if (user==null)
|
|
|
+ return operationControl;
|
|
|
+ //需求提出者和系统管理员视角
|
|
|
+ if (project.getUserId().equals(user.getId())||user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))){
|
|
|
+ if (project.getStatus() < CrowdTestProjectStatus.HAS_RECEIVED){
|
|
|
+ operationControl.setUpdate(true);
|
|
|
+ } else if (project.getStatus() == CrowdTestProjectStatus.HAS_COMMITED){
|
|
|
+ operationControl.setConfirmFinish(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //区域管理员视角
|
|
|
+ if (user.getRegionalManager()!=null){
|
|
|
+ if ((project.getProjectDistributionTypeId() == 0 && project.getRegionalManagerId().equals(user.getId()))
|
|
|
+ || (project.getProjectDistributionTypeId()>0 && project.getStatus()>=CrowdTestProjectStatus.HAS_RECEIVED && project.getRegionalManagerId().equals(user.getId()))){
|
|
|
+ if (project.getStatus() == CrowdTestProjectStatus.HAS_RELEASED){
|
|
|
+ operationControl.setReceive(true);
|
|
|
+ operationControl.setReject(true);
|
|
|
+ } else if (project.getStatus() == CrowdTestProjectStatus.HAS_RECEIVED){
|
|
|
+ operationControl.setCreateTask(true);
|
|
|
+ if (project.getCrowdTestTaskList()
|
|
|
+ .stream().allMatch(task -> task.getStatus()==CrowdTestTaskStatus.HAS_REJECTED||task.getStatus()==CrowdTestTaskStatus.HAS_FINISHED)) {
|
|
|
+ operationControl.setUploadReport(true);
|
|
|
+ }
|
|
|
+ if (project.getCrowdTestReportForProject()!=null){
|
|
|
+ operationControl.setFinish(true);
|
|
|
+ }
|
|
|
+ } else if (project.getStatus() == CrowdTestProjectStatus.HAS_COMMITED){
|
|
|
+ operationControl.setCreateTask(true);
|
|
|
+ }
|
|
|
+ } //下面两种情况为非定向未被接收
|
|
|
+ else if (project.getProjectDistributionTypeId()==1){
|
|
|
+ if (project.getStatus()==CrowdTestProjectStatus.HAS_RELEASED
|
|
|
+ && user.getRegionalManager().getRegionalList().stream().anyMatch(regional -> regional.getName().equals(project.getDistributionCity()))){
|
|
|
+ operationControl.setReceive(true);
|
|
|
+ }
|
|
|
+ } else if (project.getProjectDistributionTypeId() == 2){
|
|
|
+ if (project.getStatus() == CrowdTestProjectStatus.HAS_RELEASED){
|
|
|
+ operationControl.setReceive(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return operationControl;
|
|
|
+ }
|
|
|
}
|