Forráskód Böngészése

add:Task操作控制

xuexiaobo 6 éve
szülő
commit
f635b24247

+ 16 - 6
site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java

@@ -1,6 +1,8 @@
 package com.mooctest.crowd.site.controller;
 
 import com.mooctest.crowd.domain.exception.BaseException;
+import com.mooctest.crowd.domain.exception.UnauthorizedException;
+import com.mooctest.crowd.site.annotation.LoginRequired;
 import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 import com.mooctest.crowd.site.data.dto.TaskSquareDTO;
@@ -11,6 +13,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;
 
 /**
@@ -27,17 +30,22 @@ public class CrowdTaskController {
     private CrowdTaskService taskService;
 
     @RequestMapping(value = "/project/{projectCode}/task/{taskCode}", method = RequestMethod.GET)
-    public TaskDetailsDTO getTask(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode){
-        return taskService.getTaskDetails(projectCode, taskCode);
+    public TaskDetailsDTO getTask(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode, HttpSession session){
+        Object user = session.getAttribute("userId");
+        if (user == null)
+            return taskService.getTaskDetails(projectCode, taskCode, null);
+        Long userId = Long.parseLong((String)user );
+        return taskService.getTaskDetails(projectCode, taskCode, userId);
     }
 
+    @LoginRequired
     @RequestMapping(value = "/project/{projectCode}/task", method = RequestMethod.POST)
-    public TaskDetailsDTO createTask(@PathVariable("projectCode") String projectCode, @Validated @RequestBody CrowdTestTaskCommand command, BindingResult result){
+    public TaskDetailsDTO createTask(@PathVariable("projectCode") String projectCode, @Validated @RequestBody CrowdTestTaskCommand command, BindingResult result, HttpSession session){
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
         else if (!command.isLegal())
             throw new BaseException("信息不合法,项目可见性选择存在问题");
-        return taskService.createTask(projectCode, command);
+        return taskService.createTask(projectCode, command, Long.parseLong((String)session.getAttribute("userId")));
     }
 
     @RequestMapping(value = "/task/{taskCode}", method = RequestMethod.DELETE)
@@ -50,16 +58,18 @@ public class CrowdTaskController {
         return taskService.getAllTasks();
     }
 
+    @LoginRequired
     @RequestMapping(value = "/project/{projectCode}/task/{taskCode}", method = RequestMethod.PUT)
     public TaskDetailsDTO updateTask(@PathVariable("projectCode") String projectCode,
                                      @PathVariable("taskCode") String taskCode,
                                      @Validated @RequestBody CrowdTestTaskCommand command,
-                                     BindingResult result){
+                                     BindingResult result,
+                                     HttpSession session){
         log.info("修改Task信息");
         if (result.hasErrors())
             throw new BaseException(result.getFieldError().getDefaultMessage());
         else if (!command.isLegal())
             throw new BaseException("信息不合法,项目可见性选择存在问题");
-        return taskService.updateTask(projectCode, taskCode, command);
+        return taskService.updateTask(projectCode, taskCode, command, Long.parseLong((String)session.getAttribute("userId")));
     }
 }

+ 29 - 0
site/src/main/java/com/mooctest/crowd/site/data/TaskOperationControl.java

@@ -0,0 +1,29 @@
+package com.mooctest.crowd.site.data;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-08-21 20:55
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class TaskOperationControl {
+    private boolean receive = false;
+    private boolean update = false;
+    private boolean uploadReport = false;
+    private boolean finish = false;
+    private boolean confirmFinish = false;
+
+    public void hasAll(){
+        this.receive = true;
+        this.confirmFinish = true;
+        this.update = true;
+        this.finish = true;
+        this.uploadReport = true;
+    }
+}

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

@@ -1,5 +1,6 @@
 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 lombok.Data;
@@ -14,4 +15,5 @@ import java.util.List;
 public class TaskDetailsDTO {
     private CrowdTaskVO crowdTaskVO;
     private List<CrowdReportVO> crowdReportVOList;
+    private TaskOperationControl taskOperationControl;
 }

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

@@ -40,6 +40,7 @@ public class CrowdProjectVO {
     private Double budget;
     private String usage;
     private Integer status;
+    private Long regionManagerId;
 
     public CrowdProjectVO(CrowdTestProject project){
         this.id = project.getCode();
@@ -61,6 +62,7 @@ public class CrowdProjectVO {
         this.price = project.getFixedPrice();
         this.usage = null;
         this.status = project.getStatus();
+        this.regionManagerId = project.getRegionalManagerId();
     }
 
 }

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

@@ -3,6 +3,7 @@ package com.mooctest.crowd.site.data.vo;
 import com.mooctest.crowd.domain.domainobject.CrowdTestReport;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
+import com.mooctest.crowd.site.data.TaskOperationControl;
 import com.mooctest.crowd.site.data.enums.ProjectType;
 import lombok.AllArgsConstructor;
 import lombok.Data;

+ 8 - 1
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -185,7 +185,14 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public ProjectDetailsDTO renderProjectDetails(CrowdTestProject project) {
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
-        List<CrowdTaskVO> taskVOList = project.getCrowdTestTaskList().stream().map(CrowdTaskVO::new).collect(Collectors.toList());
+        List<CrowdTaskVO> taskVOList = project.getCrowdTestTaskList().stream().map(crowdTestTask -> {
+            CrowdTaskVO crowdTaskVO = new CrowdTaskVO(crowdTestTask);
+            if (crowdTestTask.getDistributionType()==0){
+                EvaluationAgencyPO agencyPO = agencyDao.findByUserId(crowdTestTask.getEvaluationAgencyId());
+                crowdTaskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
+            }
+            return crowdTaskVO;
+        }).collect(Collectors.toList());
         List<CrowdReportVO> reportVOList = null;
         if (project.getCrowdTestReportForProject() != null) {
             reportVOList = new ArrayList<>();

+ 3 - 3
site/src/main/java/com/mooctest/crowd/site/service/CrowdTaskService.java

@@ -13,11 +13,11 @@ import java.util.List;
  * @date 2019-07-29 18:47
  */
 public interface CrowdTaskService {
-    TaskDetailsDTO getTaskDetails(String projectCode, String taskCode);
+    TaskDetailsDTO getTaskDetails(String projectCode, String taskCode, Long userId);
 
-    TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command);
+    TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command, Long userId);
 
-    TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command);
+    TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command, Long userId);
 
     TaskSquareDTO getAllTasks();
 }

+ 51 - 5
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -5,12 +5,15 @@ 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.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;
@@ -20,6 +23,7 @@ import com.mooctest.crowd.site.data.vo.EvolutionAgencyVO;
 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;
@@ -34,6 +38,7 @@ import java.util.stream.Collectors;
  * @Email: 171256175@qq.com
  * @date 2019-07-29 18:47
  */
+@Slf4j
 @Service
 public class CrowdTaskServiceImpl implements CrowdTaskService {
 
@@ -44,6 +49,9 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     CrowdTestTaskDao taskDao;
 
     @Autowired
+    private UserRepo userRepo;
+
+    @Autowired
     private ViewMediator viewMediator;
 
     @Autowired
@@ -53,13 +61,17 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
 //    GenerateFlowCodeUtil codeUtil;
 
     @Override
-    public TaskDetailsDTO getTaskDetails(String projectCode, String taskCode) {
+    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.initPermission(project, task.get(), null));
+        else
+            taskDetailsDTO.setTaskOperationControl(this.initPermission(project, task.get(), userRepo.getByID(userId)));
         EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
         taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
         taskDetailsDTO.setCrowdTaskVO(taskVO);
@@ -72,7 +84,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     }
 
     @Override
-    public TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command) {
+    public TaskDetailsDTO createTask(String projectCode, CrowdTestTaskCommand command, Long userId) {
         CrowdTestTask task = command.toCrowdTask(projectCode);
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         String taskCode = GenerateFlowCodeUtil.generateFlowCode("TASK-"+ ProjectType.getCode(command.getType()));
@@ -80,11 +92,11 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         task.setStatus(CrowdTestTaskStatus.HAS_RELEASED);
         project.addTask(task);
         projectRepo.saveCrowdTestProject(project);
-        return getTaskDetails(projectCode, taskCode);
+        return getTaskDetails(projectCode, taskCode, userId);
     }
 
     @Override
-    public TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command) {
+    public TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command, Long userId) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         Optional<CrowdTestTask> task = project.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!task.isPresent())
@@ -100,7 +112,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         project.getCrowdTestTaskList().remove(task);
         project.getCrowdTestTaskList().add(updateTask);
         projectRepo.saveCrowdTestProject(project);
-        return getTaskDetails(projectCode, taskCode);
+        return getTaskDetails(projectCode, taskCode, userId);
     }
 
     @Override
@@ -116,4 +128,38 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         taskSquareDTO.setCrowdTaskVOList(taskVOList);
         return taskSquareDTO;
     }
+
+    private TaskOperationControl initPermission(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.getRoleList().stream().anyMatch(role -> role.getName().equals("RegionalManager"))&&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){
+            if ((task.getDistributionType()==0 && task.getEvaluationAgencyId().equals(user.getId()))
+                    ||(task.getDistributionType()==2 && task.getStatus()>CrowdTestTaskStatus.HAS_RELEASED && task.getEvaluationAgencyId().equals(user.getId()))){
+                if (task.getStatus()<CrowdTestTaskStatus.HAS_RECEIVED){
+                    taskOperationControl.setReceive(true);
+                } else if (task.getStatus() == CrowdTestTaskStatus.HAS_RECEIVED){
+                    taskOperationControl.setUploadReport(true);
+                } else if (task.getStatus() == CrowdTestTaskStatus.HAS_REPORTED){
+                    taskOperationControl.setFinish(true);
+                    taskOperationControl.setUploadReport(true);
+                } else if (task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED){
+                    taskOperationControl.setUploadReport(true);
+                }
+            } else {
+                if (task.getStatus()<CrowdTestTaskStatus.HAS_RECEIVED){
+                    taskOperationControl.setReceive(true);
+                }
+            }
+        }
+        return taskOperationControl;
+    }
 }