Browse Source

add: 首页项目分页信息

guo00guo 5 years ago
parent
commit
9a9fdbcf3d

+ 2 - 1
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java

@@ -6,6 +6,7 @@ import com.mooctest.crowd.domain.model.RankInfo;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
@@ -19,7 +20,7 @@ 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>, JpaSpecificationExecutor<CrowdTestProjectPO> {
     //    @Override
 //    Optional<CrowdTestProjectPO> findById(Long id);
     List<CrowdTestProjectPO> findAll();

+ 34 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/adapter/UpdateAdapter.java

@@ -0,0 +1,34 @@
+package com.mooctest.crowd.domain.dao.adapter;
+
+import com.google.common.collect.Lists;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2020-01-03 21:16
+ */
+public interface UpdateAdapter<T, ID> extends CrudRepository<T, ID> {
+
+    default T findOne(ID id){
+        return findById(id).orElse(null);
+    }
+
+    @Override
+    Optional<T> findById(ID id);
+
+    default List<T> findAll(List<ID> ids){
+        return Lists.newArrayList(findAllById(ids));
+    }
+
+    default List<T> save(List<T> ts){
+        return Lists.newArrayList(saveAll(ts));
+    }
+
+    default void delete(List<T> ts){
+        deleteAll(ts);
+    }
+}

+ 5 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/CrowdTestProject.java

@@ -45,6 +45,11 @@ public class CrowdTestProject {
     private List<CrowdTestTask> crowdTestTaskList;
     private CrowdTestReport crowdTestReportForProject;
 
+//    public CrowdTestProject wrapperCrowdTestProjectPO(CrowdTestProjectPO crowdTestProjectPO){
+//        CrowdTestProject crowdTestProject = Converter.convert(CrowdTestProject.class, crowdTestProjectPO);
+//        return crowdTestProject;
+//    }
+
     /**
      * 更新项目信息
      * @param crowdTestProjectModify

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

@@ -7,9 +7,18 @@ import com.mooctest.crowd.domain.exception.HttpBadRequestException;
 import com.mooctest.crowd.domain.model.*;
 import com.mooctest.crowd.domain.util.Converter;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 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.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Component;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -44,6 +53,27 @@ public class CrowdTestProjectRepo implements ICrowdTestProjectRepo {
     }
 
     @Override
+    public Page<CrowdTestProject> findAllByPage(Pageable pageable, String keyword, int deletedStatus){
+        Specifications<CrowdTestProjectPO> where =  Specifications.where(getProjectByIsNotDeleted(keyword, deletedStatus));
+        return crowdTestProjectDao.findAll(where, pageable).map(crowdTestProjectPO -> Converter.convert(CrowdTestProject.class, crowdTestProjectPO));
+    }
+
+    private Specification<CrowdTestProjectPO> getProjectByIsNotDeleted(String keyword, int deletedStatus) {
+        return new Specification<CrowdTestProjectPO>() {
+            @Override
+            public Predicate toPredicate(Root<CrowdTestProjectPO> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
+                Predicate predicate = cb.conjunction();
+                if(keyword != null) {
+                    predicate.getExpressions().add(
+                            cb.like(a.<String>get("name"), "%" + StringUtils.trim(keyword) + "%")
+                    );
+                }
+                predicate.getExpressions().add(cb.equal(a.get("isDeleted"), deletedStatus));
+                return predicate;
+            }
+        };
+    }
+    @Override
     public CrowdTestProject getByID(Long crowdTestProjectId) throws CrowdTestProjectNotExistException {
 
         CrowdTestProjectPO crowdTestProjectPO = crowdTestProjectDao.findByIdAndIsDeleted(crowdTestProjectId, DeletedStatus.isNotDeleted);

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

@@ -3,6 +3,8 @@ 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 java.util.List;
 
@@ -11,7 +13,9 @@ import java.util.List;
  * @date 2019/7/6 19:10
  */
 public interface ICrowdTestProjectRepo {
-      List<CrowdTestProjectPO> findAll();
+    List<CrowdTestProjectPO> findAll();
+
+    Page<CrowdTestProject> findAllByPage(Pageable pageable, String keyword, int deletedStatus);
 
     CrowdTestProject getByID(Long id) throws CrowdTestProjectNotExistException;
 

+ 4 - 0
site/src/main/java/com/mooctest/crowd/site/constants/CommonConstant.java

@@ -7,4 +7,8 @@ package com.mooctest.crowd.site.constants;
  */
 public class CommonConstant {
     public static final Long DEFAULT_REGIONAL_MANAGERID = 1L;
+
+    public static final Integer DEFAULT_ROWS_ON_PAGE = 10;
+
+    public static final Integer DEFAULT_RECOURSE_ROWS_ON_PAGE = 7;
 }

File diff suppressed because it is too large
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


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

@@ -38,7 +38,7 @@ public class CrowTestSquareController {
         CrowdTestSquareIndexDTO crowdTestSquareIndexDTO = new CrowdTestSquareIndexDTO();
         List<CrowdTestProjectPO> list = crowdProjectService.findAll();
         List<CrowdTestTaskPO> crowdTestTasks = crowdTaskService.findAll();
-        crowdTestSquareIndexDTO.setCowdTestProjects(list);
+        crowdTestSquareIndexDTO.setCrowdTestProjects(list);
         crowdTestSquareIndexDTO.setCrowdTestTaskPOS(crowdTestTasks);
         crowdTestSquareIndexDTO.initHotTaskAndProject();
         return crowdTestSquareIndexDTO;

+ 15 - 0
site/src/main/java/com/mooctest/crowd/site/data/ColumnFilter.java

@@ -0,0 +1,15 @@
+package com.mooctest.crowd.site.data;
+
+import lombok.Data;
+
+/**
+ * @author guochao
+ * @date 2020-06-23 17:09
+ */
+@Data
+public class ColumnFilter {
+    private String field;
+    private String value;
+    private String type;
+    private String[] exclude;
+}

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

@@ -18,7 +18,7 @@ import java.util.stream.Collectors;
 public class CrowdTestSquareIndexDTO {
 
     //众测项目
-    private List<CrowdTestProjectPO> cowdTestProjects;
+    private List<CrowdTestProjectPO> crowdTestProjects;
 
     //众测任务
     private List<CrowdTestTaskPO> crowdTestTaskPOS;
@@ -37,7 +37,7 @@ public class CrowdTestSquareIndexDTO {
     public void initHotTaskAndProject() {
 
         //根据参与人数和创建时间进行排序
-        List<CrowdTestProjectPO> list1 = this.cowdTestProjects.stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime).reversed().thenComparing(Comparator.comparing(CrowdTestProjectPO::getJoinCount).reversed())).collect(Collectors.toList());
+        List<CrowdTestProjectPO> list1 = this.crowdTestProjects.stream().sorted(Comparator.comparing(CrowdTestProjectPO::getCreateTime).reversed().thenComparing(Comparator.comparing(CrowdTestProjectPO::getJoinCount).reversed())).collect(Collectors.toList());
         this.hotCrowdTestProject = list1;
         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());

+ 39 - 0
site/src/main/java/com/mooctest/crowd/site/data/response/ResponseVO.java

@@ -0,0 +1,39 @@
+package com.mooctest.crowd.site.data.response;
+
+import com.mooctest.crowd.site.exception.ServerException;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResponseVO<T> {
+    private int code;
+    private String msg;
+    private T data;
+
+    public ResponseVO(ServerCode serverCode){
+        this.code = serverCode.getCode();
+        this.msg = serverCode.getMsg();
+    }
+
+    public ResponseVO(ServerCode serverCode,T data){
+        this.code = serverCode.getCode();
+        this.msg = serverCode.getMsg();
+        this.data = data;
+    }
+
+    public ResponseVO(ServerException e) {
+        this.code = e.getErrorCode();
+        this.msg = e.getError();
+    }
+
+    public ResponseVO(ServerException e, T data) {
+        this.code = e.getErrorCode();
+        this.msg = e.getError();
+        this.data = data;
+    }
+
+
+}

+ 47 - 0
site/src/main/java/com/mooctest/crowd/site/data/response/ServerCode.java

@@ -0,0 +1,47 @@
+package com.mooctest.crowd.site.data.response;
+
+/**
+ * Created on 2018/10/9
+ */
+public enum ServerCode {
+
+    SUCCESS(20000,"OK"),
+
+    //通用错误状态码,30000-39999
+    PARAM_WRONG(30000,"参数错误"),
+    ENTITY_NOT_A_COURSE(30001, "找不到该课程相关信息"),
+    ENTITY_NOT_A_COURSE_RESOURCE(30002, "找不到该课程资源相关信息"),
+
+    //考试相关状态码: 40000-49999
+    EXAM_ENDED(40000,"考试已结束"),
+
+    //分数相关状态码:50000-59999
+    UPLOAD_RECORD_FAIL(50000,"存储提交记录失败"),
+    NO_APPLY_FOUND(50001,"未找到申请提交记录"),
+
+    //系统错误:60000-69999
+    SYSTEM_ERROR(60000,"系统错误"),
+    DATA_NOT_CONSISTENT(60001,"数据不一致"),
+
+    //Node相关错误: 70000-79999
+    META_NODE_NOT_EXIST(70000,"元node不存在"),
+
+    //用户相关错误: 80000-89999
+    NO_USER_FOUND(80000, "无法获取用户参数");
+
+    private int code;
+    private String msg;
+    ServerCode(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+}

+ 21 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/SearchConditionVO.java

@@ -0,0 +1,21 @@
+package com.mooctest.crowd.site.data.vo;
+
+import com.mooctest.crowd.site.data.ColumnFilter;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author guochao
+ * @date 2020-06-23 17:08
+ */
+@Data
+public class SearchConditionVO {
+    private Boolean isPublic;
+    private String keyword;
+    private Integer activePage;
+    private Integer totalPage;
+    private List<ColumnFilter> columnFilters;
+    private Map<String,String> extraCondition;
+}

+ 19 - 0
site/src/main/java/com/mooctest/crowd/site/exception/ServerException.java

@@ -0,0 +1,19 @@
+package com.mooctest.crowd.site.exception;
+
+import com.mooctest.crowd.site.data.response.ServerCode;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ServerException extends RuntimeException {
+    private int errorCode;
+    private String error;
+
+    public ServerException(ServerCode serverCode){
+        this.errorCode = serverCode.getCode();
+        this.error = serverCode.getMsg();
+    }
+}

+ 5 - 0
site/src/main/java/com/mooctest/crowd/site/service/CommonService.java

@@ -3,6 +3,9 @@ package com.mooctest.crowd.site.service;
 import com.mooctest.crowd.site.data.dto.IndexDTO;
 import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
 import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
+import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
 @Service
@@ -12,4 +15,6 @@ public interface CommonService {
     MyCrowdDTO getPersonCrowd(Long userId);
 
     IndexInfoDTO getIndexInfos();
+
+    Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus);
 }

+ 13 - 0
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

@@ -1,12 +1,16 @@
 package com.mooctest.crowd.site.service.impl;
 
+import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.site.data.dto.IndexDTO;
 import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
 import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
+import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CommonService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
 @Service
@@ -16,6 +20,9 @@ public class CommonServiceImpl implements CommonService {
     @Qualifier("WebMediator")
     private ViewMediator viewMediator;
 
+    @Autowired
+    private CrowdTestProjectRepo projectRepo;
+
     @Override
     public IndexDTO getIndexInfo() {
         return viewMediator.renderIndex();
@@ -30,4 +37,10 @@ public class CommonServiceImpl implements CommonService {
     public IndexInfoDTO getIndexInfos() {
         return viewMediator.renderIndexInfos();
     }
+
+    @Override
+    public Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus) {
+        return projectRepo.findAllByPage(pageable, keyword, deletedStatus).map(crowdTestProject -> new CrowdProjectVO(crowdTestProject));
+    }
+
 }

Some files were not shown because too many files changed in this diff