Browse Source

Merge branch 'Dev' into 'Test'

Dev

See merge request crowd-2019/crowd-test-service-backend!46
郭超 5 years ago
parent
commit
eeafa3d1ec

+ 20 - 1
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -33,10 +33,12 @@ public class CrowdTestProject {
     private String distributionCity;
     private Double quotedPrice;
     private Double fixedPrice;
+    private Double restPrice;
     private int status;
     private Timestamp deadTime;
     private Timestamp endTime;
     private int isDeleted;
+    private int joinCount;
     private Timestamp createTime;
 
     private List<CrowdTestTask> crowdTestTaskList;
@@ -254,9 +256,25 @@ public class CrowdTestProject {
     public void addTask(CrowdTestTask task){
         if (!(this.getStatus() >= CrowdTestProjectStatus.HAS_RECEIVED || this.getStatus()<=CrowdTestTaskStatus.HAS_COMMITED))
             throw new BaseException("当前阶段不允许创建新任务");
+        if (this.getRestPrice() < task.getQuotedPrice()){
+            throw new BaseException("任务的报价不能超过项目的剩余价格,项目的剩余价格为:" + this.getRestPrice());
+        }
+        if (this.getDeadTime().getTime() < task.getDeadTime().getTime()){
+            throw new BaseException("任务截止时间不能超过项目的截止时间,项目的截止时间为:" + this.getDeadTime());
+        }
+        if (task.getDeadTime().getTime() < System.currentTimeMillis()){
+            throw new BaseException("任务截止时间不能小于当前时间");
+        }
+        this.setRestPrice(this.getRestPrice() - task.getQuotedPrice());
         this.getCrowdTestTaskList().add(task);
     }
 
+
+    public void removeTask(CrowdTestTask task) {
+        this.setRestPrice(this.getRestPrice() + task.getQuotedPrice());
+        this.getCrowdTestTaskList().remove(task);
+    }
+
     public CrowdTestTask getTask(String taskCode){
         Optional<CrowdTestTask> testTask = this.getCrowdTestTaskList().stream().filter(crowdTestTask -> crowdTestTask.getCode().equals(taskCode)).findFirst();
         if (!testTask.isPresent())
@@ -334,7 +352,7 @@ public class CrowdTestProject {
 
         //判断项目状态
         if(this.getStatus() != CrowdTestProjectStatus.HAS_RELEASED){
-            throw new CrowdTestProjectException("项目不能被接收,项目状态为: " + this.getStatus());
+            throw new CrowdTestProjectException("项目不能被接收,项目已被接收" );
         }else{
             //项目是定向发布
             if(this.getProjectDistributionTypeId() == 0){
@@ -693,4 +711,5 @@ public class CrowdTestProject {
         }
         this.setStatus(CrowdTestProjectStatus.HAS_REJECTED);
     }
+
 }

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

@@ -13,4 +13,5 @@ public class CrowdTestProjectStatus {
 //    public static final int HAS_REPORTED = 4; //生成项目报告
     public static final int HAS_COMMITED = 3; //提交项目
     public static final int HAS_FINISHED = 4; //结束项目
+    public static final int HAS_TIME_OUT = 5; //时间截止
 }

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

@@ -13,4 +13,5 @@ public class CrowdTestTaskStatus {
     public static final int HAS_COMMITED = 3;   //测评机构提交任务
 //    public static final int HAS_COMMITED_MANAGER = 4;   //区域管理员提交任务
     public static final int HAS_FINISHED = 4;   //结束任务
+    public static final int HAS_TIME_OUT = 5; //时间截止
 }

+ 6 - 0
core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestProjectPO.java

@@ -69,6 +69,9 @@ public class CrowdTestProjectPO implements Serializable {
     @Column(name = "CTP_FIXED_PRICE")
     private Double fixedPrice;
 
+    @Column(name = "CTP_REST_PRICE")
+    private Double restPrice;
+
     @Column(name = "CTP_STATUS")
     private int status;
 
@@ -81,6 +84,9 @@ public class CrowdTestProjectPO implements Serializable {
     @Column(name = "CTP_IS_DELETED")
     private int isDeleted;
 
+    @Column(name = "CTP_JOIN_COUNT")
+    private int joinCount;
+
     @Column(name = "CTP_CREATE_TIME")
     private Timestamp createTime;
 

+ 0 - 1
core/src/main/java/com/mooctest/crowd/domain/repository/EvaluationAgencyRepo.java

@@ -33,7 +33,6 @@ public class EvaluationAgencyRepo implements IEvaluationAgencyRepo {
 
     @Override
     public EvaluationAgency findAgencyById(Long id){
-        System.out.println(id);
         Optional<EvaluationAgencyPO> evaluationAgencyPO = evaluationAgencyDao.findById(id);
         if(!evaluationAgencyPO.isPresent()){
             throw new EvaluationAgencyResourceNotExist("测评信息不存在");

+ 12 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java

@@ -39,8 +39,10 @@ public class CrowdProjectVO {
     private Timestamp datetime;
     private Double price;
     private Double budget;
+    private Double restPrice;
     private String usage;
     private Integer status;
+    private int joinCount;
     private Long regionManagerId;
     private StatusVO statusVO;
     private Boolean needHandle = false; //该项目需要处理
@@ -63,8 +65,10 @@ public class CrowdProjectVO {
         this.datetime = project.getDeadTime();
         this.budget = project.getQuotedPrice();
         this.price = project.getFixedPrice();
+        this.restPrice = project.getRestPrice();
         this.usage = null;
         this.status = project.getStatus();
+        this.joinCount = project.getJoinCount();
         this.regionManagerId = project.getRegionalManagerId();
         this.renderStatus();
     }
@@ -77,12 +81,19 @@ public class CrowdProjectVO {
         }else if (this.status > CrowdTestProjectStatus.HAS_REJECTED && this.status < CrowdTestProjectStatus.HAS_RECEIVED){
             this.statusVO.setText("等待接收");
             this.statusVO.setStyle("warning");
-        }else if (this.status >= CrowdTestProjectStatus.HAS_RECEIVED && this.status < CrowdTestProjectStatus.HAS_FINISHED){
+        }else if (this.status == CrowdTestProjectStatus.HAS_RECEIVED){
             this.statusVO.setText("进行中");
             this.statusVO.setStyle("primary");
+        }else if (this.status == CrowdTestProjectStatus.HAS_COMMITED){
+            this.statusVO.setText("已提交");
+            this.statusVO.setStyle("primary");
         }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();

+ 75 - 36
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -172,7 +172,7 @@ public class WebMediatorImpl implements ViewMediator {
         //对于区域管理员
         if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("RegionalManager"))){
             List<CrowdTestProjectPO> crowdTestProjectPOList = projectDao.findByRegionalManagerIdAndIsDeleted(userId, DeletedStatus.isNotDeleted)
-                    .stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime).reversed().thenComparing(CrowdTestProjectPO::getStatus).reversed()).collect(Collectors.toList());
+                    .stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime).thenComparing(CrowdTestProjectPO::getStatus).reversed()).collect(Collectors.toList());
             //获取区域管理员正在处理中的项目列表
             myCrowdDTO.setHandlingProjects(crowdTestProjectPOList.stream().filter(crowdTestProjectPO -> crowdTestProjectPO.getStatus()>CrowdTestProjectStatus.HAS_RELEASED).map(crowdTestProjectPO -> {
                 CrowdTestProject project = new CrowdTestProject();
@@ -212,29 +212,26 @@ public class WebMediatorImpl implements ViewMediator {
         List<CrowdTaskVO> unfinishedTasks = null;
         List<CrowdTaskVO> finishedTasks = null;
         if (user.getRoleList().stream().anyMatch(role -> role.getName().equals("evaluationAgency"))) {
-//            allTaskOfAgency = taskDao.findByEvaluationAgencyIdAndIsDeleted(user.getEvaluationAgency().getUserId(), 0).stream()
-//                    .sorted(Comparator.comparing(CrowdTestTaskPO::getId).reversed().thenComparing(CrowdTestTaskPO::getStatus).reversed())
-//                    .map(crowdTestTaskPO -> {
-//                        CrowdTestTask task = new CrowdTestTask();
-//                        BeanUtils.copyProperties(crowdTestTaskPO, task);
-//                        return task;
-//                    }).collect(Collectors.toList());
-
-            allTaskOfAgency = taskToUserDao.findByUserId(user.getId()).stream()
-                    .map(taskToUserPO -> {
-                        CrowdTestTaskPO crowdTestTaskPO = taskDao.findByCodeAndIsDeleted(taskToUserPO.getTaskCode(), DeletedStatus.isNotDeleted);
-                        CrowdTestTask task = new CrowdTestTask();
-                        BeanUtils.copyProperties(crowdTestTaskPO, task);
-                        return task;
-                    }).collect(Collectors.toList());
-
-            unfinishedTasks = allTaskOfAgency.stream()
-                    .filter(crowdTestTask -> crowdTestTask.getStatus()>=CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus()<CrowdTestTaskStatus.HAS_FINISHED)
-                    .map(CrowdTaskVO::new).collect(Collectors.toList());
-
-            finishedTasks = allTaskOfAgency.stream()
-                    .filter(crowdTestTask -> crowdTestTask.getStatus()==CrowdTestTaskStatus.HAS_FINISHED)
-                    .map(CrowdTaskVO::new).collect(Collectors.toList());
+            List<TaskToUserPO> taskToUserPOS = taskToUserDao.findByUserId(user.getId());
+            if(taskToUserPOS != null && taskToUserPOS.size() > 0){
+                allTaskOfAgency = taskToUserPOS.stream()
+                        .map(taskToUserPO -> {
+                            CrowdTestTaskPO crowdTestTaskPO = taskDao.findByCodeAndIsDeleted(taskToUserPO.getTaskCode(), DeletedStatus.isNotDeleted);
+                            if(crowdTestTaskPO != null){
+                                CrowdTestTask task = new CrowdTestTask();
+                                BeanUtils.copyProperties(crowdTestTaskPO, task);
+                                return task;
+                            }
+                            return null;
+                        }).collect(Collectors.toList());
+                unfinishedTasks = allTaskOfAgency.stream()
+                        .filter(crowdTestTask -> crowdTestTask.getStatus()>=CrowdTestTaskStatus.HAS_RELEASED && crowdTestTask.getStatus()<CrowdTestTaskStatus.HAS_FINISHED)
+                        .map(CrowdTaskVO::new).collect(Collectors.toList());
+
+                finishedTasks = allTaskOfAgency.stream()
+                        .filter(crowdTestTask -> crowdTestTask.getStatus()==CrowdTestTaskStatus.HAS_FINISHED)
+                        .map(CrowdTaskVO::new).collect(Collectors.toList());
+            }
         }
         myCrowdDTO.setFinishedTasks(finishedTasks);
         myCrowdDTO.setUnfinishedTasks(unfinishedTasks);
@@ -258,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;
     }
 
@@ -339,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) {
@@ -391,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());
@@ -513,9 +547,14 @@ public class WebMediatorImpl implements ViewMediator {
                     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.getCrowdTestTaskList() == null || project.getCrowdTestTaskList().size() == 0){
+                        operationControl.setUploadReport(false);
+                    }else {
+                        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);
@@ -555,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);
             }
         }
@@ -600,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);

+ 3 - 2
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdTaskServiceImpl.java

@@ -82,8 +82,8 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         updateTask.setCreateTime(task.get().getCreateTime());
         updateTask.setRequirementFile(task.get().getRequirementFile());
         updateTask.setStatus(task.get().getStatus());
-        project.getCrowdTestTaskList().remove(task);
-        project.getCrowdTestTaskList().add(updateTask);
+        project.removeTask(task.get());
+        project.addTask(updateTask);
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);
     }
@@ -98,6 +98,7 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
         CrowdTestTask task = project.getTask(taskCode);
         task.receive(userRepo.getByID(userId));
+        project.setJoinCount(project.getJoinCount()+1);
         projectRepo.saveCrowdTestProject(project);
         return getTaskDetails(projectCode, taskCode, userId);
     }