Jelajahi Sumber

修复时间问题

guo00guo 5 tahun lalu
induk
melakukan
f7b08cbfb2

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

@@ -88,6 +88,10 @@ public class CrowdProjectVO {
         }else if (this.status == CrowdTestProjectStatus.HAS_FINISHED) {
             this.statusVO.setText("已完成");
             this.statusVO.setStyle("success");
+        }else if (this.status == CrowdTestProjectStatus.HAS_TIME_OUT) {
+            this.statusVO.setText("已截止");
+            this.statusVO.setStyle("primary");
         }
+
     }
 }

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

@@ -1,5 +1,6 @@
 package com.mooctest.crowd.site.data.vo;
 
+import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskAcceptStatus;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
@@ -79,6 +80,9 @@ public class CrowdTaskVO {
         }else if (this.status == CrowdTestTaskStatus.HAS_FINISHED) {
             this.statusVO.setText("已完成");
             this.statusVO.setStyle("success");
+        }else if (this.status == CrowdTestTaskStatus.HAS_TIME_OUT) {
+            this.statusVO.setText("已截止");
+            this.statusVO.setStyle("primary");
         }
 
         this.fullStatusVO = new FullStatusVO();

+ 46 - 9
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -255,35 +255,55 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public ProjectDetailsDTO renderProjectDetails(CrowdTestProject project, User user) {
+        boolean saveFlag = false;
+        // 判断项目是否截止
+        if (project.getDeadTime().getTime() <= System.currentTimeMillis() && project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED){
+            project.setStatus(CrowdTestProjectStatus.HAS_TIME_OUT);
+            saveFlag = true;
+        }
+
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
-        List<CrowdTaskVO> taskVOList = project.getCrowdTestTaskList().stream().map(crowdTestTask -> {
+        List<CrowdTestTask> crowdTestTaskList = project.getCrowdTestTaskList();
+        List<CrowdTaskVO> taskVOList = new ArrayList<>();
+        for(CrowdTestTask crowdTestTask : crowdTestTaskList){
+            // 判断任务是否截止
+            if(crowdTestTask.getDeadTime().getTime() <= System.currentTimeMillis() && crowdTestTask.getStatus() < CrowdTestTaskStatus.HAS_FINISHED){
+                crowdTestTask.setStatus(CrowdTestTaskStatus.HAS_TIME_OUT);
+                saveFlag = true;
+            }
+
             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());
+            taskVOList.add(crowdTaskVO);
+        }
+
         List<CrowdReportVO> reportVOList = null;
         if (project.getCrowdTestReportForProject() != null) {
             reportVOList = new ArrayList<>();
             reportVOList.add(new CrowdReportVO(project.getCrowdTestReportForProject()));
         }
         CrowdProjectVO projectVO = new CrowdProjectVO(project);
-        if (project.getStatus() > CrowdTestProjectStatus.HAS_RELEASED){
+        if (project.getStatus() > CrowdTestProjectStatus.HAS_RELEASED && project.getRegionalManagerId() != null){
             Optional<UserPO> regionManager = userDao.findById(project.getRegionalManagerId());
             projectVO.setInstitution(regionManager.isPresent()?regionManager.get().getName():"区域管理员已注销");
         }
         List<PieChartDataVO> progress = new ArrayList<>();
-        progress.add(new PieChartDataVO("已完成", project.getCrowdTestTaskList()
+        progress.add(new PieChartDataVO("已完成", crowdTestTaskList
                 .stream().filter(task -> task.getStatus()==CrowdTestTaskStatus.HAS_FINISHED).count()));
-        progress.add(new PieChartDataVO("进行中", project.getCrowdTestTaskList()
+        progress.add(new PieChartDataVO("进行中", crowdTestTaskList
                 .stream().filter(task -> task.getStatus()>CrowdTestTaskStatus.HAS_CREATED&&task.getStatus()<CrowdTestTaskStatus.HAS_FINISHED).count()));
         projectDetailsDTO.setProjectDetails(projectVO);
         projectDetailsDTO.setTaskList(taskVOList);
         projectDetailsDTO.setReportList(reportVOList);
         projectDetailsDTO.setProjectOperationControl(initProjectPermission(project, user));
         projectDetailsDTO.setProgress(progress);
+
+        if(saveFlag){
+            projectRepo.saveCrowdTestProject(project);
+        }
         return projectDetailsDTO;
     }
 
@@ -336,9 +356,24 @@ public class WebMediatorImpl implements ViewMediator {
     public TaskDetailsDTO renderTaskDetails(String projectCode, String taskCode, Long userId) {
         TaskDetailsDTO taskDetailsDTO = new TaskDetailsDTO();
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
+
+        boolean saveFlag = false;
+        // 判断项目是否截止
+        if (project.getDeadTime().getTime() <= System.currentTimeMillis() && project.getStatus() < CrowdTestProjectStatus.HAS_FINISHED){
+            project.setStatus(CrowdTestProjectStatus.HAS_TIME_OUT);
+            saveFlag = true;
+        }
+
         Optional<CrowdTestTask> task =  project.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!task.isPresent())
             throw new CrowdTestTaskNotExistException();
+
+        // 判断任务是否截止
+        if(task.get().getDeadTime().getTime() <= System.currentTimeMillis() && task.get().getStatus() < CrowdTestTaskStatus.HAS_FINISHED){
+            task.get().setStatus(CrowdTestTaskStatus.HAS_TIME_OUT);
+            saveFlag = true;
+        }
+
         CrowdTaskVO taskVO = new CrowdTaskVO(task.get());
         System.out.println("renderTaskDetails userId:" + userId);
         if (userId == null) {
@@ -388,7 +423,9 @@ public class WebMediatorImpl implements ViewMediator {
             taskDetailsDTO.setAcceptedUserList(taskToUserVOS);
         }
 
-
+        if(saveFlag){
+            projectRepo.saveCrowdTestProject(project);
+        }
         taskDetailsDTO.setCrowdTaskVO(taskVO);
 //        EvaluationAgencyPO agencyPO = agencyDao.findByUserId(task.get().getEvaluationAgencyId());
 //        taskVO.setInstitution(agencyPO==null?"该机构已注销":agencyPO.getEvaluationAgencyName());
@@ -557,7 +594,7 @@ public class WebMediatorImpl implements ViewMediator {
                 taskOperationControl.setUpdate(true);
             }
             taskOperationControl.setFinish(false);
-            if (task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED){
+            if (task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED || task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT){
                 taskOperationControl.setConfirmFinish(false);
             }
         }
@@ -602,7 +639,7 @@ public class WebMediatorImpl implements ViewMediator {
                 }
             }
         }
-        if(task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED){
+        if(task.getStatus() == CrowdTestTaskStatus.HAS_FINISHED || task.getStatus() == CrowdTestTaskStatus.HAS_TIME_OUT){
             taskOperationControl.noAll();
         }
         System.out.println(taskOperationControl);