Browse Source

add:接收任务接口

xuexiaobo 6 years ago
parent
commit
2f6a92afbe

+ 1 - 1
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestTaskDao.java

@@ -30,7 +30,7 @@ public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>
     @Query(value = "SELECT new com.mooctest.crowd.domain.model.RankInfo(SUM(p.quotedPrice), p.evaluationAgencyId) FROM CrowdTestTaskPO p where p.evaluationAgencyId is not null and p.status>1 GROUP BY p.evaluationAgencyId ORDER BY SUM(p.quotedPrice) DESC")
     List<RankInfo> findTotalPriceOfAgency(Pageable pageable);
 
-    @Query(nativeQuery = true, value = "select * from crowd_test_task where CTT_STATUS = 1 order by CTT_QUOTED_PRICE DESC LIMIT 4")
+    @Query(nativeQuery = true, value = "select * from crowd_test_task where CTT_STATUS=1 and CTT_DISTRIBUTION_TYPE=2 order by CTT_QUOTED_PRICE DESC LIMIT 4")
     List<CrowdTestTaskPO> findHotTask();
 
     @Override

+ 53 - 39
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -428,7 +428,6 @@ public class CrowdTestProject {
         }
     }
 
-
     /**
      * 接收任务(测评机构)
      * @return
@@ -437,45 +436,60 @@ public class CrowdTestProject {
         //判断是否为测评机构
         EvaluationAgency evaluationAgency = user.getEvaluationAgency();
         if(evaluationAgency == null){
-            throw new UserNotExistException("当前用户不是测评机构,没有权限接收任务");
+            throw new UnauthorizedException("当前用户不是测评机构,没有权限接收任务");
         }
-
-        List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
-        List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
-        for(CrowdTestTask crowdTestTask : crowdTestTaskList){
-            if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
-                //判断任务状态
-                if(crowdTestTask.getStatus() != (CrowdTestTaskStatus.HAS_RECEIVED - 1)){
-                    throw new CrowdTestTaskException("任务当前状态不能被接收,当前状态为:"+crowdTestTask.getStatus());
-                }else{
-                    //任务是定向发布
-                    if(crowdTestTask.getDistributionType() == 0){
-                        if(!crowdTestTask.getEvaluationAgencyId().equals(user.getId())){
-                            throw new CrowdTestTaskException("当前用户没有权限接收此定向发布的任务!");
-                        }else{
-                            crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
-                        }
-                    }
-                    //任务是区域发布
-                    else if(crowdTestTask.getDistributionType() == 1){
-                        //判断测评机构的区域是否符合要求
-                        if(!crowdTestTask.getDistributionCity().equals(user.getCity())){
-                            throw new CrowdTestTaskException("任务发布的区域不符合当前测评机构的区域!");
-                        }else{
-                            crowdTestTask.setEvaluationAgencyId(user.getId());
-                            crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
-                        }
-                    }
-                    //任务是广场发布
-                    else{
-                        crowdTestTask.setEvaluationAgencyId(user.getId());
-                        crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
-                    }
-                }
-            }
-            crowdTestTaskListResult.add(crowdTestTask);
-        }
-        this.setCrowdTestTaskList(crowdTestTaskList);
+        Optional<CrowdTestTask> taskOp = this.getCrowdTestTaskList().stream().filter(task -> task.getCode().equals(crowdTestTaskCode)).findFirst();
+        //任务是否不存在
+        if (!taskOp.isPresent())
+            throw new CrowdTestTaskNotExistException();
+        CrowdTestTask task = taskOp.get();
+        //任务当前状态
+        if (task.getStatus()!=CrowdTestTaskStatus.HAS_RELEASED)
+            throw new CrowdTestTaskException("任务当前状态不能被接收,当前状态为:"+task.getStatus());
+        //定向发布类型
+        if (task.getDistributionType() == 0) {
+            if (!task.getEvaluationAgencyId().equals(user.getId()))
+                throw new CrowdTestTaskException("当前用户没有权限接收此定向发布的任务!");
+        }
+        task.setEvaluationAgencyId(user.getId());
+        task.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
+//
+//        List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
+//        List<CrowdTestTask> crowdTestTaskListResult = new ArrayList<>();
+//        for(CrowdTestTask crowdTestTask : crowdTestTaskList){
+//            if(crowdTestTaskCode.equals(crowdTestTask.getCode())){
+//                //判断任务状态
+//                if(crowdTestTask.getStatus() != (CrowdTestTaskStatus.HAS_RECEIVED - 1)){
+//                    throw new CrowdTestTaskException("任务当前状态不能被接收,当前状态为:"+crowdTestTask.getStatus());
+//                }else{
+//                    //任务是定向发布
+//                    if(crowdTestTask.getDistributionType() == 0){
+//                        if(!crowdTestTask.getEvaluationAgencyId().equals(user.getId())){
+//                            throw new CrowdTestTaskException("当前用户没有权限接收此定向发布的任务!");
+//                        }else{
+//                            crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
+//                        }
+//                    }
+//                    //任务是区域发布
+//                    else if(crowdTestTask.getDistributionType() == 1){
+//                        //判断测评机构的区域是否符合要求
+//                        if(!crowdTestTask.getDistributionCity().equals(user.getCity())){
+//                            throw new CrowdTestTaskException("任务发布的区域不符合当前测评机构的区域!");
+//                        }else{
+//                            crowdTestTask.setEvaluationAgencyId(user.getId());
+//                            crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
+//                        }
+//                    }
+//                    //任务是广场发布
+//                    else{
+//                        crowdTestTask.setEvaluationAgencyId(user.getId());
+//                        crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_RECEIVED);
+//                    }
+//                }
+//            }
+//            crowdTestTaskListResult.add(crowdTestTask);
+//        }
+//        this.setCrowdTestTaskList(crowdTestTaskList);
         return this;
 
     }

+ 4 - 0
core/src/main/java/com/mooctest/crowd/domain/exception/UnauthorizedException.java

@@ -9,4 +9,8 @@ public class UnauthorizedException extends BaseException {
     public UnauthorizedException(){
         super("请登录后访问");
     }
+
+    public UnauthorizedException(String msg){
+        super(msg);
+    }
 }

+ 12 - 1
site/src/main/java/com/mooctest/crowd/site/controller/CrowdTaskController.java

@@ -14,7 +14,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpSession;
-import java.util.List;
 
 /**
  * @author: Diors.Po
@@ -72,4 +71,16 @@ public class CrowdTaskController {
             throw new BaseException("信息不合法,项目可见性选择存在问题");
         return taskService.updateTask(projectCode, taskCode, command, Long.parseLong((String)session.getAttribute("userId")));
     }
+
+    @LoginRequired
+    @RequestMapping(value = "/project/{projectCode}/task/{taskCode}/agency/{userId}", method = RequestMethod.PUT)
+    public TaskDetailsDTO acceptTask(@PathVariable("projectCode") String projectCode, @PathVariable("taskCode") String taskCode,
+                                     @PathVariable("userId") Long userId, HttpSession session){
+        Long loginUserId = Long.parseLong((String)session.getAttribute("userId"));
+        log.info("userId in Url: " + userId + ", userId in session: " + loginUserId);
+        if(!loginUserId.equals(userId)) {
+            throw new UnauthorizedException("非法操作,操作用户不一致");
+        }
+        return taskService.acceptTask(projectCode, taskCode, userId);
+    }
 }

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

@@ -1,10 +1,12 @@
 package com.mooctest.crowd.site.service;
 
 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.vo.EvolutionAgencyVO;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -20,4 +22,6 @@ public interface CrowdTaskService {
     TaskDetailsDTO updateTask(String projectCode, String taskCode, CrowdTestTaskCommand command, Long userId);
 
     TaskSquareDTO getAllTasks();
+
+    TaskDetailsDTO acceptTask(String projectCode, String taskCode, Long userId);
 }

+ 10 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -127,8 +127,17 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         return taskSquareDTO;
     }
 
+    @Override
+    public TaskDetailsDTO acceptTask(String projectCode, String taskCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.receiveTask(taskCode, userRepo.getByID(userId));
+        projectRepo.saveCrowdTestProject(project);
+        return getTaskDetails(projectCode, taskCode, userId);
+    }
+
     private TaskOperationControl initPermission(CrowdTestProject project,CrowdTestTask task, User user){
         TaskOperationControl taskOperationControl = new TaskOperationControl();
+        log.info("userInfo"+user.toString());
         if (user==null)
             return taskOperationControl;
         if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("SystemAdministrator"))
@@ -162,6 +171,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
                 }
             }
         }
+        System.out.println(taskOperationControl);
         return taskOperationControl;
     }
 }