Browse Source

增加 项目分页查询和任务分页查询接口。修改为将热门任务和热门项目取前7个。

xuxuan 5 years ago
parent
commit
dfc8a43903

+ 4 - 3
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java

@@ -4,6 +4,7 @@ import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.domain.model.RankInfo;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
@@ -18,13 +19,13 @@ import java.util.List;
  */
 
 @Transactional
-public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO, Long>, JpaRepository<CrowdTestProjectPO,Long>, PagingAndSortingRepository<CrowdTestProjectPO,Long> {
+public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO, Long>, JpaRepository<CrowdTestProjectPO, Long>, PagingAndSortingRepository<CrowdTestProjectPO, Long> {
     //    @Override
 //    Optional<CrowdTestProjectPO> findById(Long id);
     List<CrowdTestProjectPO> findAll();
 
-    @Override
-    Page<CrowdTestProjectPO> findAll(Pageable pageable);
+     
+    Page<CrowdTestProjectPO> findAll(Specification<CrowdTestProjectPO> spec,Pageable pageable);
 
     CrowdTestProjectPO findByIdAndIsDeleted(Long id, int isDeleted);
 

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

@@ -1,10 +1,15 @@
 package com.mooctest.crowd.domain.dao;
 
+import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
 import com.mooctest.crowd.domain.model.RankInfo;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
 
 import javax.transaction.Transactional;
 import java.util.List;
@@ -15,7 +20,10 @@ import java.util.List;
  */
 
 @Transactional
-public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long> {
+public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>, JpaRepository<CrowdTestTaskPO, Long>, PagingAndSortingRepository<CrowdTestTaskPO, Long> {
+
+
+    Page<CrowdTestTaskPO> findAll(Specification specification, Pageable pageable);
 
     CrowdTestTaskPO findByIdAndIsDeleted(Long id, int isDeleted);
 
@@ -42,6 +50,5 @@ public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>
     @Override
     <S extends CrowdTestTaskPO> S save(S s);
 
-    @Override
-    <S extends CrowdTestTaskPO> Iterable<S> saveAll(Iterable<S> iterable);
+
 }

+ 8 - 0
core/src/main/java/com/mooctest/crowd/domain/repository/CrowdTestProjectRepo.java

@@ -8,6 +8,9 @@ import com.mooctest.crowd.domain.model.*;
 import com.mooctest.crowd.domain.util.Converter;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -39,6 +42,11 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     private UserDao userDao;
 
     @Override
+    public Page<CrowdTestProjectPO> findAll(Specification specification,Pageable pageable) {
+         return  crowdTestProjectDao.findAll(specification,pageable);
+    }
+
+    @Override
     public List<CrowdTestProjectPO> findAll(){
         return crowdTestProjectDao.findAll();
     }

+ 6 - 1
core/src/main/java/com/mooctest/crowd/domain/repository/ICrowdTestProjectRepo.java

@@ -3,6 +3,9 @@ package com.mooctest.crowd.domain.repository;
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.exception.CrowdTestProjectNotExistException;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
 
 import java.util.List;
 
@@ -11,7 +14,9 @@ import java.util.List;
  * @date 2019/7/6 19:10
  */
 public interface ICrowdTestProjectRepo {
-      List<CrowdTestProjectPO> findAll();
+    Page<CrowdTestProjectPO> findAll(Specification specification,Pageable pageable);
+
+    List<CrowdTestProjectPO> findAll();
 
     CrowdTestProject getByID(Long id) throws CrowdTestProjectNotExistException;
 

+ 31 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CrowTestSquareController.java

@@ -6,8 +6,12 @@ import com.mooctest.crowd.site.data.dto.CrowdTestSquareIndexDTO;
 import com.mooctest.crowd.site.service.CrowdProjectService;
 import com.mooctest.crowd.site.service.CrowdTaskService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -44,5 +48,32 @@ public class CrowTestSquareController {
         return crowdTestSquareIndexDTO;
     }
 
+    /**
+     * 众测项目分页查询接口
+     */
+
+    @GetMapping("/project/list")
+    public Page<CrowdTestProjectPO> findAllprojectByPage(
+            @RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize) {
+        Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
+        Page<CrowdTestProjectPO> page = crowdProjectService.findAll(pageable);
+        return page;
+    }
+
+    /**
+     * 众测任务分页查询接口
+     */
+    @GetMapping("/task/list")
+    public Page<CrowdTestTaskPO> getAllTaskByPage(
+            @RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize) {
+        Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
+        Page<CrowdTestTaskPO> page = crowdTaskService.findAll(pageable);
+        return page;
+    }
+
 
 }
+
+
+
+

+ 6 - 6
site/src/main/java/com/mooctest/crowd/site/data/dto/CrowdTestSquareIndexDTO.java

@@ -34,17 +34,17 @@ public class CrowdTestSquareIndexDTO {
     /**
      * 初始化热门任务 ,热门项目
      */
-    public void initHotTaskAndProject() {
-
+    public void initHotTaskAndProject(){
+        List<CrowdTestProjectPO>  projectPOS=this.cowdTestProjects.stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime)).collect(Collectors.toList());
+        this.cowdTestProjects=projectPOS;
         //根据参与人数和创建时间进行排序
         List<CrowdTestProjectPO> list1 = this.cowdTestProjects.stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime).reversed().thenComparing(Comparator.comparing(CrowdTestProjectPO::getJoinCount).reversed())).collect(Collectors.toList());
-        this.hotCrowdTestProject = list1;
+        //截取前七条
+        this.hotCrowdTestProject = list1.subList(0,7);
         List<CrowdTestTaskPO> tasklist1 = crowdTestTaskPOS.stream().sorted(Comparator.comparing(CrowdTestTaskPO::getAcceptedCount).reversed()).collect(Collectors.toList());
         List<CrowdTestTaskPO> tasklist2 = tasklist1.stream().sorted(Comparator.comparing(CrowdTestTaskPO::getCreateTime).reversed()).collect(Collectors.toList());
         //过滤掉已完成的
         tasklist2.stream().filter(ct -> ct.getStatus() != CrowdTestTaskStatus.HAS_FINISHED);
-        this.hotCrowdTask = tasklist2;
+        this.hotCrowdTask = tasklist2.subList(0,7);
     }
-
-
 }

+ 51 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTestProjectVO.java

@@ -0,0 +1,51 @@
+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.model.CrowdTestProjectPO;
+import com.mooctest.crowd.domain.model.TechnicalArticlesPO;
+import lombok.Data;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * @author:xx
+ * @date:2020/6/23
+ * @description:
+ */
+
+@Data
+public class CrowdTestProjectVO {
+    private Long id;
+    private String name;
+    private String code;
+    private Long userId;
+    private Long regionalManagerId;
+    private Long projectDistributionTypeId;
+    private String platform;
+    private String linkMan;
+    private String linkManMobile;
+    private String type;
+    private String description;
+    private String projectFile;
+    private String requirementFile;
+    private String distributionProvince;
+    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;
+    private CrowdTestReport crowdTestReportForProject;
+
+    public void setName(Iterable<CrowdTestProjectPO> crowdTestProjectPO) {
+
+    }
+}

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

@@ -8,6 +8,8 @@ import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.vo.RegionalManagerVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -19,7 +21,9 @@ import java.util.List;
  */
 public interface CrowdProjectService {
 
-    List<CrowdTestProjectPO> findAll();
+    Page<CrowdTestProjectPO> findAll(Pageable pageable);
+
+    List<CrowdTestProjectPO> findAll( );
 
     ProjectDetailsDTO getProjectDetails(String projectCode, Long userId);
 

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

@@ -1,11 +1,11 @@
 package com.mooctest.crowd.site.service;
 
-import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
 import com.mooctest.crowd.site.command.CrowdTestTaskCommand;
 import com.mooctest.crowd.site.data.dto.TaskDetailsDTO;
 import com.mooctest.crowd.site.data.dto.TaskSquareDTO;
-
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import java.util.List;
 
 /**
@@ -14,6 +14,9 @@ import java.util.List;
  * @date 2019-07-29 18:47
  */
 public interface CrowdTaskService {
+
+    Page<CrowdTestTaskPO> findAll(Pageable pageable);
+
     List<CrowdTestTaskPO> findAll();
 
     TaskDetailsDTO getTaskDetails(String projectCode, String taskCode, Long userId);

+ 82 - 58
site/src/main/java/com/mooctest/crowd/site/service/impl/CrowdProjectServiceImpl.java

@@ -25,9 +25,13 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.persistence.criteria.*;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -43,7 +47,7 @@ import java.util.stream.Collectors;
  */
 @Slf4j
 @Service
-public class CrowdProjectServiceImpl implements CrowdProjectService {
+public class CrowdProjectServiceImpl implements CrowdProjectService{
 
     @Autowired
     private ViewMediator viewMediator;
@@ -58,16 +62,34 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     private OperationMediator operationMediator;
 
 
-
+    /**
+     * 众测项目分页查询服务,过滤掉已完成的。
+     *
+     * @param pageable
+     * @return
+     */
+    @Override
+    public Page<CrowdTestProjectPO> findAll(Pageable pageable) {
+
+        Specification<CrowdTestProjectPO> queryContion = new Specification<CrowdTestProjectPO>() {
+            @Override
+            public Predicate toPredicate(Root<CrowdTestProjectPO> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                Path<Object> custName = root.get("status");
+                Predicate predicate = cb.notEqual(custName, CrowdTestProjectStatus.HAS_FINISHED);
+                return predicate;
+            }
+        };
+        return projectRepo.findAll(queryContion, pageable);
+    }
 
     @Override
     public List<CrowdTestProjectPO> findAll() {
-        return  projectRepo.findAll();
+        return projectRepo.findAll();
     }
 
     @Override
     public ProjectDetailsDTO getProjectDetails(String projectCode, Long userId) {
-        if (userId==null)
+        if (userId == null)
             return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode), null);
         return viewMediator.renderProjectDetails(projectRepo.getByProjectCode(projectCode), userRepo.getByID(userId));
     }
@@ -76,7 +98,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     public ProjectDetailsDTO createCrowdProject(CrowdTestProjectCommand command) {
         CrowdTestProject project = command.toCrowdProject();
         project.setStatus(CrowdTestProjectStatus.HAS_RELEASED);
-        log.info("\n"+project.toString()+"\n");
+        log.info("\n" + project.toString() + "\n");
         String projectCode = GenerateFlowCodeUtil.generateFlowCode("PROJ");
         project.setCode(projectCode);
         ProjectDetailsDTO projectDetailsDTO = new ProjectDetailsDTO();
@@ -91,7 +113,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED)
             throw new BaseException("结项项目禁止修改!");
         if (!project.getUserId().equals(crowdTestProjectCommand.getUserId()))
-            throw new BaseException("UserId不一致, newUserId: "+crowdTestProjectCommand.getUserId()+", oldUserId: "+project.getUserId());
+            throw new BaseException("UserId不一致, newUserId: " + crowdTestProjectCommand.getUserId() + ", oldUserId: " + project.getUserId());
         //todo 后面需要加入是否有权限进行更新
         projectRepo.saveCrowdTestProject(operationMediator.updateProject(project, crowdTestProjectCommand));
         return getProjectDetails(projectCode, crowdTestProjectCommand.getUserId());
@@ -118,9 +140,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
             task.setEndTime(command.getDatetime());
             task.setDeadTime(command.getDatetime());
             task.setRequirementFile(command.getFile());
-            task.setName(command.getName()+"-"+type);
-            task.setQuotedPrice(command.getPrice()/command.getType().size());
-            task.setFixedPrice(command.getPrice()/command.getType().size());
+            task.setName(command.getName() + "-" + type);
+            task.setQuotedPrice(command.getPrice() / command.getType().size());
+            task.setFixedPrice(command.getPrice() / command.getType().size());
             tasks.add(task);
         });
 
@@ -145,7 +167,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     }
 
     @Override
-    public List<CrowdTestProject> generateProjectByExcel(Long userId, MultipartFile file){
+    public List<CrowdTestProject> generateProjectByExcel(Long userId, MultipartFile file) {
         User user = userRepo.getByID(userId);
         List<CrowdTestProject> projects = transferExcel2Projects(file);
         projects.forEach(project -> {
@@ -159,11 +181,11 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
             task.setEndTime(project.getEndTime());
             task.setDeadTime(project.getDeadTime());
             task.setRequirementFile(project.getRequirementFile());
-            task.setName(project.getName()+"-"+task.getType());
+            task.setName(project.getName() + "-" + task.getType());
             task.setQuotedPrice(project.getQuotedPrice());
             task.setFixedPrice(project.getFixedPrice());
             task.setDescription(project.getDescription());
-            if (user.getEvaluationAgency()==null)
+            if (user.getEvaluationAgency() == null)
                 task.setEvaluationAgencyId(1L);
             else
                 task.setEvaluationAgencyId(user.getEvaluationAgency().getId());
@@ -172,7 +194,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
             project.getCrowdTestReportForProject().setCode(GenerateFlowCodeUtil.generateReportCode());
             project.getCrowdTestReportForProject().setDependencyCode(project.getCode());
             project.getCrowdTestReportForProject().setDescription(project.getDescription());
-            project.getCrowdTestReportForProject().setName(project.getName()+"测试报告");
+            project.getCrowdTestReportForProject().setName(project.getName() + "测试报告");
             project.getCrowdTestReportForProject().setType(project.getType());
             project.getCrowdTestReportForProject().setTestObject(project.getName());
         });
@@ -219,32 +241,32 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     @Override
     public boolean modifyData(String projectCode) {
         CrowdTestProject project = projectRepo.getByProjectCode(projectCode);
-        if(project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED && project.getLinkMan().contains("先生")){
+        if (project.getStatus() == CrowdTestProjectStatus.HAS_FINISHED && project.getLinkMan().contains("先生")) {
             project.setRestPrice(0.00);
             project.setJoinCount(1);
             project.getCrowdTestTaskList().stream()
                     .filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_FINISHED)
                     .map(crowdTestTask -> {
-                crowdTestTask.setParticipantCount(1);
-                crowdTestTask.setAcceptedCount(1);
-                crowdTestTask.setParticipantHasCommittedCount(1);
-                crowdTestTask.setFullStatus(1);
-                TaskToUser taskToUser = new TaskToUser();
-                taskToUser.setValue(crowdTestTask.getCode(), crowdTestTask.getEvaluationAgencyId(), crowdTestTask.getQuotedPrice(),
-                        1,crowdTestTask.getDistributionType(), 1, crowdTestTask.getCreateTime());
-                taskToUser.setCommitReportTime(crowdTestTask.getCreateTime());
-                taskToUser.setIsCommitted(1);
-                taskToUser.setCommitTaskTime(crowdTestTask.getCreateTime());
-                List<CrowdTestReport> reportList = projectRepo.getCrowdTestReportByCrowdTestTask(crowdTestTask.getCode());
-                List<CrowdTestReport> testReportList = reportList.stream().peek(crowdTestReport -> crowdTestReport.setUserId(crowdTestTask.getEvaluationAgencyId())).collect(Collectors.toList());
-                taskToUser.setCrowdTestReportList(testReportList);
-                crowdTestTask.getAcceptedUserList().add(taskToUser);
-                return crowdTestTask;
-            }).collect(Collectors.toList());
+                        crowdTestTask.setParticipantCount(1);
+                        crowdTestTask.setAcceptedCount(1);
+                        crowdTestTask.setParticipantHasCommittedCount(1);
+                        crowdTestTask.setFullStatus(1);
+                        TaskToUser taskToUser = new TaskToUser();
+                        taskToUser.setValue(crowdTestTask.getCode(), crowdTestTask.getEvaluationAgencyId(), crowdTestTask.getQuotedPrice(),
+                                1, crowdTestTask.getDistributionType(), 1, crowdTestTask.getCreateTime());
+                        taskToUser.setCommitReportTime(crowdTestTask.getCreateTime());
+                        taskToUser.setIsCommitted(1);
+                        taskToUser.setCommitTaskTime(crowdTestTask.getCreateTime());
+                        List<CrowdTestReport> reportList = projectRepo.getCrowdTestReportByCrowdTestTask(crowdTestTask.getCode());
+                        List<CrowdTestReport> testReportList = reportList.stream().peek(crowdTestReport -> crowdTestReport.setUserId(crowdTestTask.getEvaluationAgencyId())).collect(Collectors.toList());
+                        taskToUser.setCrowdTestReportList(testReportList);
+                        crowdTestTask.getAcceptedUserList().add(taskToUser);
+                        return crowdTestTask;
+                    }).collect(Collectors.toList());
             List<CrowdTestReport> reportList = projectRepo.getCrowdTestReportByCrowdTestTask(project.getCode()).stream().peek(crowdTestReport -> crowdTestReport.setUserId(project.getRegionalManagerId())).collect(Collectors.toList());
             project.setCrowdTestReportForProject(reportList.get(0));
 
-        }else{
+        } else {
             project.setIsDeleted(1);
             project.getCrowdTestTaskList().stream().peek(crowdTestTask -> crowdTestTask.setIsDeleted(1)).collect(Collectors.toList());
         }
@@ -253,15 +275,15 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     }
 
     @Override
-    public boolean modifyAllData(){
+    public boolean modifyAllData() {
         List<CrowdTestProject> projectList = projectRepo.getAllCrowdTestProject();
-        for(CrowdTestProject crowdTestProject : projectList){
+        for (CrowdTestProject crowdTestProject : projectList) {
             modifyData(crowdTestProject.getCode());
         }
         return true;
     }
 
-    private List<CrowdTestProject> transferExcel2Projects(MultipartFile file){
+    private List<CrowdTestProject> transferExcel2Projects(MultipartFile file) {
         List<String> logList = new ArrayList<>();
         List<CrowdTestProject> projects = new ArrayList<>();
         Workbook workbook = null;
@@ -283,36 +305,36 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
         Row keyRow = sheet.getRow(0);
         int cellCount = keyRow.getPhysicalNumberOfCells();
-        log.info("CellCount: "+cellCount);
+        log.info("CellCount: " + cellCount);
         log.info("Rows: " + sheet.getPhysicalNumberOfRows());
-        for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++ ){
+        for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
             CrowdTestProject project = CrowdTestProjectFactory.defaulstCrowdTestProject();
             CrowdTestReport report = CrowdTestProjectFactory.defaultProjectReport();
             Row row = sheet.getRow(i);
-            if (row == null){
+            if (row == null) {
                 logList.add("表中存在错误的单元格,请把与内容无关的单元格置空");
                 break;
             }
-            for (int j = 0; j < cellCount; j++){
+            for (int j = 0; j < cellCount; j++) {
                 Cell cell = row.getCell(j);
-                if (cell == null ) {
+                if (cell == null) {
                     logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
                     log.error("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
                     continue;
                 }
                 cell.setCellType(CellType.STRING);
-                log.info("ROW: "+i+", COL: "+j +", DATA: "+ cell.getStringCellValue());
-                if (cell.getStringCellValue().trim().equals("")){
+                log.info("ROW: " + i + ", COL: " + j + ", DATA: " + cell.getStringCellValue());
+                if (cell.getStringCellValue().trim().equals("")) {
                     logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
                     continue;
                 }
-                switch (j){
+                switch (j) {
                     case 0:
                         project.setName(cell.getStringCellValue().trim());
                         break;
                     case 1:
-                        if(!(cell.getStringCellValue().trim().equals("IOS")||cell.getStringCellValue().trim().equals("WEB")||cell.getStringCellValue().trim().equals("ANDROID"))){
-                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "测试平台数据不合法:"+cell.getStringCellValue());
+                        if (!(cell.getStringCellValue().trim().equals("IOS") || cell.getStringCellValue().trim().equals("WEB") || cell.getStringCellValue().trim().equals("ANDROID"))) {
+                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "测试平台数据不合法:" + cell.getStringCellValue());
                             break;
                         }
                         List<String> platforms = new ArrayList<>();
@@ -323,15 +345,15 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
                         project.setLinkMan(cell.getStringCellValue().trim());
                         break;
                     case 3:
-                        if (!isRightPhone(cell.getStringCellValue().trim())){
-                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "不合法的手机号码:"+cell.getStringCellValue());
+                        if (!isRightPhone(cell.getStringCellValue().trim())) {
+                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "不合法的手机号码:" + cell.getStringCellValue());
                             break;
                         }
                         project.setLinkManMobile(cell.getStringCellValue().trim());
                         break;
                     case 4:
-                        if (ProjectType.getCode(cell.getStringCellValue().trim())==null){
-                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "错误的测试服务类型:"+cell.getStringCellValue());
+                        if (ProjectType.getCode(cell.getStringCellValue().trim()) == null) {
+                            logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "错误的测试服务类型:" + cell.getStringCellValue());
                             break;
                         }
                         List<String> types = new ArrayList<>();
@@ -359,7 +381,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
         projects.forEach(project -> {
             log.info(project.toString());
         });
-        if (logList.size()>0)
+        if (logList.size() > 0)
             throw new Excel2ProjectException(logList);
         return projects;
     }
@@ -367,7 +389,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     /**
      * 匹配平台类型 0,1,2 任意  ^[0-2](([,][0-2])?([,][0-2])?)$
      */
-    private boolean isPlatform(String str)throws PatternSyntaxException {
+    private boolean isPlatform(String str) throws PatternSyntaxException {
         String regExp = "^[0-2](([,][0-2])?([,][0-2])?)$";
         Pattern p = Pattern.compile(regExp);
         Matcher m = p.matcher(str);
@@ -377,7 +399,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     /**
      * 匹配项目类型 0,1,2,3,4,5,6 任意  ^[0-6](([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?)$
      */
-    private boolean isType(String str)throws PatternSyntaxException {
+    private boolean isType(String str) throws PatternSyntaxException {
         String regExp = "^[0-6](([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?([,][0-6])?)$";
         Pattern p = Pattern.compile(regExp);
         Matcher m = p.matcher(str);
@@ -386,21 +408,23 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
 
     /**
      * 判断手机号或者座机是正确
+     *
      * @param phone
      * @return
      */
-    private boolean isRightPhone(String phone){
-        if(phone.startsWith("0")){
-            if(!isTel(phone)){
+    private boolean isRightPhone(String phone) {
+        if (phone.startsWith("0")) {
+            if (!isTel(phone)) {
                 return false;
             }
-        }else{
-            if(!(isChinaPhoneLegal(phone) || isHKPhoneLegal(phone))){
+        } else {
+            if (!(isChinaPhoneLegal(phone) || isHKPhoneLegal(phone))) {
                 return false;
             }
         }
         return true;
     }
+
     /**
      * 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任意数
      * 此方法中前三位格式有:
@@ -420,7 +444,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     /**
      * 香港手机号码8位数,5|6|8|9开头+7位任意数
      */
-    private boolean isHKPhoneLegal(String str)throws PatternSyntaxException {
+    private boolean isHKPhoneLegal(String str) throws PatternSyntaxException{
         String regExp = "^(5|6|8|9)\\d{7}$";
         Pattern p = Pattern.compile(regExp);
         Matcher m = p.matcher(str);
@@ -430,7 +454,7 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
     /**
      * 座机号
      */
-    private boolean isTel(String str)throws PatternSyntaxException {
+    private boolean isTel(String str) throws PatternSyntaxException{
         String regExp = "^0[1-9](\\d{1,2}\\-?)\\d{7,8}";
         Pattern p = Pattern.compile(regExp);
         Matcher m = p.matcher(str);

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

@@ -6,6 +6,7 @@ import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.CrowdTestTaskNotExistException;
 import com.mooctest.crowd.domain.exception.UnauthorizedException;
+import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
@@ -19,8 +20,14 @@ import com.mooctest.crowd.site.service.CrowdTaskService;
 import com.mooctest.crowd.site.util.GenerateFlowCodeUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.*;
+
+
 import java.util.List;
 import java.util.Optional;
 
@@ -49,6 +56,19 @@ public class CrowdTaskServiceImpl implements CrowdTaskService {
     private EvaluationAgencyDao agencyDao;
 
 
+    @Override
+    public Page<CrowdTestTaskPO> findAll(Pageable pageable) {
+
+        Specification<CrowdTestTaskPO> queryContion = new Specification<CrowdTestTaskPO>() {
+            @Override
+            public Predicate toPredicate(Root<CrowdTestTaskPO> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                Path<Object> custName = root.get("status");
+                Predicate predicate = cb.notEqual(custName, CrowdTestTaskStatus.HAS_FINISHED);
+                return predicate;
+            }
+        };
+        return taskDao.findAll(queryContion, pageable);
+    }
 
 
     @Override