Parcourir la source

增加list转为page的工具类,增加模糊查询接口。规范controller层返回格式。

xuxuan il y a 5 ans
Parent
commit
34529a82aa

+ 44 - 25
site/src/main/java/com/mooctest/crowd/site/controller/CrowTestSquareController.java

@@ -1,31 +1,38 @@
 package com.mooctest.crowd.site.controller;
 
+import com.google.gson.Gson;
+import com.mooctest.crowd.domain.domainobject.DeletedStatus;
+import com.mooctest.crowd.site.constants.CommonConstant;
 import com.mooctest.crowd.site.data.dto.CrowdTestSquareIndexDTO;
 import com.mooctest.crowd.site.data.dto.ProjectAndTaskDTO;
 import com.mooctest.crowd.site.data.response.ResponseVO;
+import com.mooctest.crowd.site.data.response.ServerCode;
 import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
 import com.mooctest.crowd.site.data.vo.CrowdTestProjectVO;
+import com.mooctest.crowd.site.data.vo.SearchConditionVO;
 import com.mooctest.crowd.site.service.CommonService;
 import com.mooctest.crowd.site.service.CrowdProjectService;
 import com.mooctest.crowd.site.service.CrowdTaskService;
-import org.jetbrains.annotations.NotNull;
+import com.mooctest.crowd.site.util.DataUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.*;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 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.Iterator;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.function.Function;
 
 
 /**
  * @author:xx
  * @date:2020/6/20
- * @description:
+ * @description:群智慧项目2.0众测广场所有接口
  */
 
 @RestController
@@ -46,56 +53,68 @@ public class CrowTestSquareController {
      * @return
      */
     @GetMapping("/list")
-    public CrowdTestSquareIndexDTO getAll() {
+    public ResponseVO getAll() {
         CrowdTestSquareIndexDTO crowdTestSquareIndexDTO = new CrowdTestSquareIndexDTO();
         List<CrowdTestProjectVO> list = crowdProjectService.findAll();
         List<CrowdTaskVO> crowdTestTasks = crowdTaskService.findAll();
         crowdTestSquareIndexDTO.setCrowdTestProjectVOs(list);
         crowdTestSquareIndexDTO.setCrowdTestTaskVOS(crowdTestTasks);
         crowdTestSquareIndexDTO.initHotTaskAndProject();
-        return crowdTestSquareIndexDTO;
+        return new ResponseVO(ServerCode.SUCCESS, crowdTestSquareIndexDTO);
     }
 
     /**
      * 众测项目分页查询接口
      */
-
     @GetMapping("/project/list")
-    public Page<CrowdProjectVO> findAllprojectByPage(
-            @RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize) {
-        Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
-        Page<CrowdProjectVO> page = commonService.getProjectInfo(pageable, null, 0);
-        return page;
+    public ResponseVO findAllprojectByPage(@RequestParam(name = "searchCondition") String searchCondition){
+        Gson gson = new Gson();
+        SearchConditionVO searchConditionVO = gson.fromJson(searchCondition, SearchConditionVO.class);
+        Pageable pageable = this.getPageable(searchConditionVO);
+        String keyword = searchConditionVO.getKeyword();
+       List<CrowdTestProjectVO> list = crowdProjectService.findAll(pageable);
+        Page<CrowdTestProjectVO> page = DataUtils.listToPage(list, pageable);
+        return new ResponseVO<>(ServerCode.SUCCESS, page);
     }
 
     /**
      * 众测任务分页查询接口
      */
     @GetMapping("/task/list")
-    public Page<CrowdTaskVO> getAllTaskByPage(
-            @RequestParam("pageNum") int pageNum, @RequestParam("pageSize") int pageSize) {
-        Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
+    public ResponseVO<Page<CrowdTaskVO>> getAllTaskByPage(@RequestParam(name = "searchCondition") String searchCondition){
+        Gson gson = new Gson();
+        SearchConditionVO searchConditionVO = gson.fromJson(searchCondition, SearchConditionVO.class);
+        Pageable pageable = this.getPageable(searchConditionVO);
+        String keyword = searchConditionVO.getKeyword();
         Page<CrowdTaskVO> page = commonService.getTaskinfo(pageable, null, 0);
-        return page;
+        return new ResponseVO<>(ServerCode.SUCCESS, page);
     }
 
     /**
      * 搜索框模糊查询接口
      */
     @GetMapping("search/list")
-    public ResponseVO<Page<ProjectAndTaskDTO>> findByNameLike(@RequestParam("name") String name){
+    public ResponseVO<Page<ProjectAndTaskDTO>> findByNameLike(@RequestParam("searchCondition") String searchCondition,
+                                                              @RequestParam("pageNum") int pageNum,
+                                                              @RequestParam("pageSize") int pageSize){
         ProjectAndTaskDTO projectAndTaskDTO = new ProjectAndTaskDTO();
-        List<CrowdTestProjectVO> list = crowdProjectService.findByNameLike(name);
-        List<CrowdTaskVO> taskVOList = crowdTaskService.findByNameLike(name);
+        List<CrowdTestProjectVO> list = crowdProjectService.findByNameLike(searchCondition);
+        List<CrowdTaskVO> taskVOList = crowdTaskService.findByNameLike(searchCondition);
         projectAndTaskDTO.setCrowdTaskVOList(taskVOList);
         projectAndTaskDTO.setProjectVOList(list);
-
-
-
-        return null;
-
+        List projectAndTaskDTOList = new ArrayList<>();
+        projectAndTaskDTOList.addAll(list);
+        projectAndTaskDTOList.addAll(taskVOList);
+        Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
+        Page<ProjectAndTaskDTO> projectAndTaskDTOPage = DataUtils.listToPage(projectAndTaskDTOList, pageable);
+        return new ResponseVO<>(ServerCode.SUCCESS, projectAndTaskDTOPage);
     }
 
+    Pageable getPageable(SearchConditionVO searchConditionVO){
+        int activePage = searchConditionVO.getActivePage() == 0?1:searchConditionVO.getActivePage();
+        Sort sort = new Sort(Sort.Direction.DESC,"id");
+        return new PageRequest(activePage-1, CommonConstant.DEFAULT_ROWS_ON_PAGE, sort);
+    }
 
 }
 

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

@@ -31,13 +31,13 @@ public class CrowdTestSquareIndexDTO {
     /**
      * 初始化热门任务 ,热门项目
      */
-    public void initHotTaskAndProject() {
-        List<CrowdTestProjectVO> projectVOS = this.crowdTestProjectVOs.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getCreateTime)).collect(Collectors.toList());
+    public void initHotTaskAndProject(){
+        List<CrowdTestProjectVO> projectVOS = this.crowdTestProjectVOs.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getCreateTime).reversed()).collect(Collectors.toList());
         this.crowdTestProjectVOs = projectVOS;
         //根据参与人数和创建时间进行排序
-        List<CrowdTestProjectVO> list1 = this.crowdTestProjectVOs.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getCreateTime).reversed().thenComparing(Comparator.comparing(CrowdTestProjectVO::getJoinCount).reversed())).collect(Collectors.toList());
+        List<CrowdTestProjectVO> list1 = projectVOS.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getJoinCount).reversed()).collect(Collectors.toList());
         //截取前七条
-        this.crowdTestProjectVOs = list1.subList(0, 7);
+        this.hotCrowdTestProjectVOs = list1.subList(0, 7);
         List<CrowdTaskVO> tasklist1 = crowdTestTaskVOS.stream().sorted(Comparator.comparing(CrowdTaskVO::getAcceptedCount).reversed()).collect(Collectors.toList());
         List<CrowdTaskVO> tasklist2 = tasklist1.stream().sorted(Comparator.comparing(CrowdTaskVO::getCreateTime).reversed()).collect(Collectors.toList());
         //过滤掉已完成的

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

@@ -7,10 +7,12 @@ import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
 import lombok.Data;
 
 import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static com.mooctest.crowd.site.data.vo.CrowdTestProjectVO.getDistanceTimes;
 
 /**
  * @Author: xuexb
@@ -42,6 +44,7 @@ public class CrowdTaskVO {
     private FullStatusVO fullStatusVO;
     private Timestamp createTime;
     private List<TaskToUserVO> taskToUserVOS = new ArrayList<>();
+    private String time_interval;
 
 
 
@@ -68,6 +71,22 @@ public class CrowdTaskVO {
         acceptedCount = task.getAcceptedCount();
         createTime = task.getCreateTime();
         participantHasCommittedCount = task.getParticipantHasCommittedCount();
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date date = df.parse(df.format(task.getCreateTime()));
+            long[] times = getDistanceTimes(date);
+            if(times[0]>0){
+                this.time_interval=times[0]+"天前发布";
+            }else if(times[1]>0){
+                this.time_interval=times[1]+"小时前发布";
+            }else if(times[2]>0){
+                this.time_interval=times[2]+"分钟前发布";
+            }else{
+                this.time_interval=times[3]+"秒前发布";
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
         this.renderStatus();
     }
 

+ 36 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTestProjectVO.java

@@ -9,6 +9,10 @@ import lombok.Data;
 
 import javax.persistence.Column;
 import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -44,8 +48,9 @@ public class CrowdTestProjectVO {
     private int isDeleted;
     private int joinCount;
     private Timestamp createTime;
+    private  String  time_interval;
 
-    public CrowdTestProjectVO(CrowdTestProject crowdTestProject) {
+    public  CrowdTestProjectVO(CrowdTestProject crowdTestProject) {
         id=crowdTestProject.getId();
         code=crowdTestProject.getCode();
         name = crowdTestProject.getName();
@@ -71,7 +76,37 @@ public class CrowdTestProjectVO {
         isDeleted = crowdTestProject.getIsDeleted();
         joinCount = crowdTestProject.getJoinCount();
         createTime = crowdTestProject.getCreateTime();
+        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Date date = df.parse(df.format(crowdTestProject.getCreateTime()));
+            long[] times = getDistanceTimes(date);
+            if(times[0]>0){
+                this.time_interval=times[0]+"天前发布";
+            }else if(times[1]>0){
+                this.time_interval=times[1]+"小时前发布";
+            }else if(times[2]>0){
+                this.time_interval=times[2]+"分钟前发布";
+            }else{
+                this.time_interval=times[3]+"秒前发布";
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
 
 
     }
+    public static long[] getDistanceTimes(Date date) {
+        long day = 0;
+        long hour = 0;
+        long min = 0;
+        long sec = 0;
+        long diff;
+        diff = System.currentTimeMillis() - date.getTime();
+        day = diff / (24 * 60 * 60 * 1000);
+        hour = (diff / (60 * 60 * 1000) - day * 24);
+        min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
+        sec = (diff/1000-day*24*60*60-hour*60*60-min*60);
+        long[] times = {day, hour, min, sec};
+        return times;
+    }
 }

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

@@ -1,16 +1,12 @@
 package com.mooctest.crowd.site.service;
 
 import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
-import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
 import com.mooctest.crowd.site.command.GenerateProjectCommand;
 import com.mooctest.crowd.site.data.dto.ProjectDetailsDTO;
 import com.mooctest.crowd.site.data.vo.CrowdTestProjectVO;
 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;
@@ -23,7 +19,7 @@ import java.util.List;
 public interface CrowdProjectService {
     List<CrowdTestProjectVO> findByNameLike(String name);
 
-    Page<CrowdTestProject> findAll(Pageable pageable);
+    List<CrowdTestProjectVO> findAll(Pageable pageable);
 
     List<CrowdTestProjectVO> findAll();
 

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

@@ -7,7 +7,6 @@ import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.BaseException;
 import com.mooctest.crowd.domain.exception.Excel2ProjectException;
 import com.mooctest.crowd.domain.factory.CrowdTestProjectFactory;
-import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
 import com.mooctest.crowd.site.command.CrowdTestProjectCommand;
@@ -25,15 +24,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.beans.BeanUtils;
 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;
@@ -79,9 +74,9 @@ public class CrowdProjectServiceImpl implements CrowdProjectService {
      * @return
      */
     @Override
-    public Page<CrowdTestProject> findAll(Pageable pageable) {
+    public List<CrowdTestProjectVO> findAll(Pageable pageable) {
 
-        return  projectRepo.findAllByPage(pageable,null,0);
+        return  viewMediator.crowdTestProjects();
     }
 
 

+ 70 - 0
site/src/main/java/com/mooctest/crowd/site/util/DataUtils.java

@@ -0,0 +1,70 @@
+package com.mooctest.crowd.site.util;
+
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+
+
+/**
+ * @author:xx
+ * @date:2020/6/28
+ * @description: 将list转为page工具类
+ */
+
+
+public class DataUtils {
+    /**
+     * pageSize 每页数量以pageable中为准
+     * page 从0开始
+     *
+     * @param list
+     * @param pageable
+     * @param <T>
+     * @return
+     */
+    public static <T> Page<T> listToPage(List<T> list, Pageable pageable) {
+        return getPage(list, pageable);
+    }
+
+    /**
+     * pageSize 每页数量为15
+     * page 从0开始
+     *
+     * @param list
+     * @param page
+     * @param <T>
+     * @return
+     */
+    public static <T> Page<T> listToPage(List<T> list, int page) {
+        PageRequest pageable = PageRequest.of(page, 15);
+        return getPage(list, pageable);
+    }
+
+    private static <T> Page<T> getPage(List<T> list, Pageable pageable) {
+        //第n页起始值
+        int pageStart = pageable.getPageNumber() * pageable.getPageSize();
+        //第n页期望结尾值
+        int expectPageEnd = pageStart + pageable.getPageSize() - 1;
+        return Optional.of(list.size())
+                .filter(size -> size >= pageStart)
+                .map(size -> getRealSubList(pageStart, expectPageEnd, list, pageable))
+                .orElseGet(() -> getEmptySubList(list, pageable));
+    }
+
+    private static <T> PageImpl<T> getRealSubList(int pageStart, int expectPageEnd, List<T> list, Pageable pageable) {
+        int realPageEnd = (list.size() > expectPageEnd || list.size() == expectPageEnd) ? expectPageEnd + 1 : list.size();
+        return new PageImpl<>(list.subList(pageStart, realPageEnd), pageable, list.size());
+    }
+
+    private static <T> PageImpl<T> getEmptySubList(List<T> list, Pageable pageable) {
+        return new PageImpl<>(new ArrayList(), pageable, list.size());
+    }
+}
+
+
+