Browse Source

add:项目接收、拒绝、提交、结束等接口

xuexiaobo 6 years ago
parent
commit
daf169d705

+ 18 - 15
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -320,11 +320,11 @@ public class CrowdTestProject {
         //判断是否为区域管理员
         //判断是否为区域管理员
         RegionalManager regionalManager = user.getRegionalManager();
         RegionalManager regionalManager = user.getRegionalManager();
         if(regionalManager == null){
         if(regionalManager == null){
-            throw new UserNotExistException("当前用户不是区域管理员,没有权限接收项目");
+            throw new UserNotExistException("当前用户不是区域管理员,没有权限接收项目");
         }
         }
 
 
         //判断项目状态
         //判断项目状态
-        if(this.getStatus() != (CrowdTestProjectStatus.HAS_RECEIVED-1)){
+        if(this.getStatus() != CrowdTestProjectStatus.HAS_RELEASED){
             throw new CrowdTestProjectException("项目不能被接收,项目状态为: " + this.getStatus());
             throw new CrowdTestProjectException("项目不能被接收,项目状态为: " + this.getStatus());
         }else{
         }else{
             //项目是定向发布
             //项目是定向发布
@@ -620,34 +620,28 @@ public class CrowdTestProject {
 
 
         //判断是否是当前项目的区域管理员
         //判断是否是当前项目的区域管理员
         if(!this.regionalManagerId.equals(user.getId())){
         if(!this.regionalManagerId.equals(user.getId())){
-            throw new CrowdTestProjectException("当前用户没有权限提交项目!");
+            throw new CrowdTestProjectException("当前用户没有权限操作此项目!");
         }
         }
 
 
         //项目状态判断
         //项目状态判断
-        if(this.getStatus() != (CrowdTestProjectStatus.HAS_COMMITED-1)){
+        if(this.getStatus() != CrowdTestProjectStatus.HAS_RECEIVED){
             throw new CrowdTestProjectException("当前项目状态不可提交项目!状态为:"+this.getStatus());
             throw new CrowdTestProjectException("当前项目状态不可提交项目!状态为:"+this.getStatus());
         }
         }
 
 
         //判断项目下是否有任务
         //判断项目下是否有任务
-        List<CrowdTestTask> crowdTestTaskList = this.getCrowdTestTaskList();
-        if(crowdTestTaskList.size() < 1){
+        if(this.getCrowdTestTaskList()==null || this.getCrowdTestTaskList().size() < 1){
             throw new CrowdTestProjectException("还未创建任务,项目不能被提交");
             throw new CrowdTestProjectException("还未创建任务,项目不能被提交");
         }else{
         }else{
             //结束项目时查看是否已结束任务
             //结束项目时查看是否已结束任务
-            for(CrowdTestTask crowdTestTask : crowdTestTaskList){
-                if(crowdTestTask.getStatus() != CrowdTestTaskStatus.HAS_FINISHED){
-                    throw new CrowdTestTaskException("存在未结束的任务,项目不能被提交");
-                }
+            if(this.getCrowdTestTaskList().stream().anyMatch(task -> task.getStatus()!=CrowdTestTaskStatus.HAS_FINISHED)){
+                throw new CrowdTestTaskException("存在未结束的任务,项目不能被提交");
             }
             }
         }
         }
-
         //判断项目下是否有项目报告
         //判断项目下是否有项目报告
         if(this.getCrowdTestReportForProject() == null){
         if(this.getCrowdTestReportForProject() == null){
             throw new CrowdTestProjectException("还未创建项目报告,项目不能被提交");
             throw new CrowdTestProjectException("还未创建项目报告,项目不能被提交");
         }
         }
-
         this.setStatus(CrowdTestProjectStatus.HAS_COMMITED);
         this.setStatus(CrowdTestProjectStatus.HAS_COMMITED);
-        this.setEndTime(new Timestamp(System.currentTimeMillis()));
         return this;
         return this;
     }
     }
 
 
@@ -665,12 +659,21 @@ public class CrowdTestProject {
             throw new CrowdTestProjectException("当前用户没有权限结束项目!");
             throw new CrowdTestProjectException("当前用户没有权限结束项目!");
         }
         }
 
 
-        if(this.getStatus() != (CrowdTestProjectStatus.HAS_FINISHED - 1)){
-            throw new CrowdTestProjectException("项目不能被提交,当前状态为:"+this.getStatus());
+        if(this.getStatus() != CrowdTestProjectStatus.HAS_COMMITED){
+            throw new CrowdTestProjectException("项目不能确认结束,当前状态为:"+this.getStatus());
         }else{
         }else{
             this.setStatus(CrowdTestProjectStatus.HAS_FINISHED);
             this.setStatus(CrowdTestProjectStatus.HAS_FINISHED);
             this.setEndTime(new Timestamp(System.currentTimeMillis()));
             this.setEndTime(new Timestamp(System.currentTimeMillis()));
         }
         }
         return this;
         return this;
     }
     }
+
+    public void reject(Long userId) {
+        if (this.getProjectDistributionTypeId()!=0
+                || this.getStatus() != CrowdTestProjectStatus.HAS_RELEASED
+                || !this.getRegionalManagerId().equals(userId)){
+            throw new CrowdTestProjectException("非法的操作");
+        }
+        this.setStatus(CrowdTestProjectStatus.HAS_REJECTED);
+    }
 }
 }

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestTask.java

@@ -118,5 +118,6 @@ public class CrowdTestTask {
             throw new CrowdTestTaskException("评测机构未提请结束任务,无法确认结束!");
             throw new CrowdTestTaskException("评测机构未提请结束任务,无法确认结束!");
         }
         }
         this.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
         this.setStatus(CrowdTestTaskStatus.HAS_FINISHED);
+        this.setEndTime(new Timestamp(System.currentTimeMillis()));
     }
     }
 }
 }

+ 20 - 7
site/src/main/java/com/mooctest/crowd/site/controller/CrowdProjectController.java

@@ -10,7 +10,6 @@ import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
 import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
 import com.mooctest.crowd.site.service.CrowdProjectService;
 import com.mooctest.crowd.site.service.CrowdProjectService;
 import com.mooctest.crowd.site.util.FileUtil;
 import com.mooctest.crowd.site.util.FileUtil;
-import lombok.extern.java.Log;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.BindingResult;
@@ -18,7 +17,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.List;
 import java.util.List;
@@ -141,18 +139,33 @@ public class CrowdProjectController {
      * 区域管理员接收项目
      * 区域管理员接收项目
      * @param projectCode
      * @param projectCode
      * @param userId
      * @param userId
+     * @return
      */
      */
     @LoginRequired
     @LoginRequired
-    @RequestMapping(value = "/api/project/{projectCode}/regionManager/{userId}")
-    public void acceptProject(@PathVariable("projectCode") String projectCode, @PathVariable("userId") Long userId){
-        projectService.receiveProject(projectCode, userId);
+    @RequestMapping(value = "/api/project/{projectCode}/regionManager/{userId}", method = RequestMethod.PUT)
+    public ProjectDetailsDTO acceptProject(@PathVariable("projectCode") String projectCode, @PathVariable("userId") Long userId){
+        return projectService.receiveProject(projectCode, userId);
+    }
+
+    @LoginRequired
+    @RequestMapping(value = "/api/project/{projectCode}/status/rejected", method = RequestMethod.PUT)
+    public void rejectProejct(@PathVariable("projectCode") String projectCode, HttpSession session){
+        Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        projectService.rejectProject(projectCode, userId);
     }
     }
 
 
     @LoginRequired
     @LoginRequired
-    @RequestMapping(value = "/api/project/{projectCode}/status/reject")
-    public void rejectProejct(@PathVariable("proejctCode") String projectCode, HttpSession session){
+    @RequestMapping(value = "/api/project/{projectCode}/status/committed", method = RequestMethod.PUT)
+    public ProjectDetailsDTO commitProject(@PathVariable("projectCode") String projectCode, HttpSession session){
         Long userId = Long.parseLong((String)session.getAttribute("userId"));
         Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        return projectService.commitProject(projectCode, userId);
+    }
 
 
+    @LoginRequired
+    @RequestMapping(value = "/api/project/{projectCode}/status/finished", method = RequestMethod.PUT)
+    public ProjectDetailsDTO confirmFinished(@PathVariable("projectCode") String projectCode, HttpSession session){
+        Long userId = Long.parseLong((String)session.getAttribute("userId"));
+        return projectService.confirmFinished(projectCode, userId);
     }
     }
 
 
     /**
     /**

+ 7 - 1
site/src/main/java/com/mooctest/crowd/site/service/CrowdProjectService.java

@@ -31,5 +31,11 @@ public interface CrowdProjectService {
 
 
     List<RegionalManagerVO> getRegionalManagerList();
     List<RegionalManagerVO> getRegionalManagerList();
 
 
-    void receiveProject(String projectCode, Long userId);
+    ProjectDetailsDTO receiveProject(String projectCode, Long userId);
+
+    void rejectProject(String projectCode, Long userId);
+
+    ProjectDetailsDTO commitProject(String projectCode, Long userId);
+
+    ProjectDetailsDTO confirmFinished(String projectCode, Long userId);
 }
 }

+ 25 - 2
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -176,12 +176,35 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     }
     }
 
 
     @Override
     @Override
-    public void receiveProject(String projectCode, Long userId) {
+    public ProjectDetailsDTO receiveProject(String projectCode, Long userId) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-//        if (project.getProjectDistributionTypeId())
         User user = userRepo.getByID(userId);
         User user = userRepo.getByID(userId);
         project.receiveProject(user);
         project.receiveProject(user);
         projectRepo.saveCrowdTestProject(project);
         projectRepo.saveCrowdTestProject(project);
+        return getProjectDetails(projectCode, userId);
+    }
+
+    @Override
+    public void rejectProject(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.reject(userId);
+        projectRepo.saveCrowdTestProject(project);
+    }
+
+    @Override
+    public ProjectDetailsDTO commitProject(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.commitCrowdTestProject(userRepo.getByID(userId));
+        projectRepo.saveCrowdTestProject(project);
+        return getProjectDetails(projectCode, userId);
+    }
+
+    @Override
+    public ProjectDetailsDTO confirmFinished(String projectCode, Long userId) {
+        CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+        project.finishCrowdTestProject(userRepo.getByID(userId));
+        projectRepo.saveCrowdTestProject(project);
+        return getProjectDetails(projectCode, userId);
     }
     }
 
 
     private List<CrowdTestProject> transferExcel2Projects(MultipartFile file){
     private List<CrowdTestProject> transferExcel2Projects(MultipartFile file){