Преглед изворни кода

添加paper list搜索根据某个字段的值进行过滤

HenryLee пре 7 година
родитељ
комит
62bfcd2671

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/ColumnFilterType.java

@@ -4,7 +4,7 @@ import lombok.Getter;
 public enum  ColumnFilterType {
 
     SORT("sort",(short)1),
-    ENUM("enum",(short)2);
+    ENUM("enums",(short)2);
 
     @Getter
     private String name;

+ 3 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/PaperService.java

@@ -6,6 +6,7 @@ import cn.iselab.mooctest.site.models.Paper2Case;
 import cn.iselab.mooctest.site.web.data.CaseBlockVO;
 
 import java.util.List;
+import java.util.Map;
 
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -25,9 +26,9 @@ public interface PaperService {
 
     boolean isUsedByExam(long paperId);
 
-    Page<Paper> findAll(Pageable pageable, String keyword);
+    Page<Paper> findAll(Pageable pageable, String keyword, Map<String,String> extraCondition);
 
-    Page<Paper> findAllByOwnerId(long ownerId,String keyword, Pageable pageable);
+    Page<Paper> findAllByOwnerId(long ownerId,String keyword, Pageable pageable, Map<String,String> extraCondition);
 
     boolean deletePaperCase(long paperId, long caseId);
 

+ 13 - 5
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/PaperServiceImpl.java

@@ -28,6 +28,7 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -69,14 +70,14 @@ public class PaperServiceImpl extends BaseService implements PaperService {
     }
 
     @Override
-    public Page<Paper> findAll(Pageable pageable, String keyword) {
-        Specifications<Paper> where =  Specifications.where(getWhereClause(null, keyword));
+    public Page<Paper> findAll(Pageable pageable, String keyword, Map<String,String> extraCondition) {
+        Specifications<Paper> where =  Specifications.where(getWhereClause(null, keyword,extraCondition));
         return paperDao.findAll(where, pageable);
     }
 
     @Override
-    public Page<Paper> findAllByOwnerId(long ownerId, String keyword, Pageable pageable) {
-        Specifications<Paper> where =  Specifications.where(getWhereClause(ownerId, keyword));
+    public Page<Paper> findAllByOwnerId(long ownerId, String keyword, Pageable pageable, Map<String,String> extraCondition) {
+        Specifications<Paper> where =  Specifications.where(getWhereClause(ownerId, keyword,extraCondition));
         return paperDao.findAll(where, pageable);
     }
 
@@ -170,12 +171,19 @@ public class PaperServiceImpl extends BaseService implements PaperService {
 
     }
 
-    private Specification<Paper> getWhereClause(Long ownerId, String keyword) {
+    private Specification<Paper> getWhereClause(Long ownerId, String keyword, Map<String,String> extraCondition) {
         User thirdUser = userDao.findByEmail(OwningPartyConstants.THIRDEMAIL);
         return new Specification<Paper>() {
             @Override
             public Predicate toPredicate(Root<Paper> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
                 Predicate predicate = cb.conjunction();
+                if (extraCondition != null) {
+                    for (String key:extraCondition.keySet()) {
+                        predicate.getExpressions().add(
+                                cb.equal(a.get(key), extraCondition.get(key))
+                        );
+                    }
+                }
                 if(ownerId!=null) {
                     predicate.getExpressions().add(
                             cb.equal(a.<Long>get("ownerId"), ownerId)

+ 17 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/BaseSearchController.java

@@ -10,21 +10,36 @@ import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @author henrylee
  */
 public abstract class BaseSearchController {
     public abstract  Page<?> search(String searchCondition);
-    public abstract SearchConditionVO getDefaultCondition();
     Pageable getPageable(SearchConditionVO searchConditionVO){
         int activePage = searchConditionVO.getActivePage() == 0?1:searchConditionVO.getActivePage();
         Sort sort = new Sort(Sort.Direction.DESC,"id");
         for (ColumnFilter columnFilter:searchConditionVO.getColumnFilters()) {
-            if (columnFilter.getType() == ColumnFilterType.SORT.getName() || columnFilter.getValue() != null) {
+            if (ColumnFilterType.SORT.getName().equals(columnFilter.getType()) && columnFilter.getValue() != null) {
                 sort = new Sort(Sort.Direction.fromString(columnFilter.getValue()),columnFilter.getField());
                 break;
             }
         }
         return new PageRequest(activePage-1, Constants.DEFAULT_ROWS_ON_PAGE, sort);
     }
+    Map<String,String> getExtraCondition(SearchConditionVO searchConditionVO) {
+        Map<String,String> result = searchConditionVO.getExtraCondition();
+        if (result == null) {
+            result = new HashMap<>();
+        }
+        for (ColumnFilter columnFilter:searchConditionVO.getColumnFilters()) {
+            if (ColumnFilterType.ENUM.getName().equals(columnFilter.getType())
+                    && columnFilter.getValue() != null && !columnFilter.getValue().equals("all")) {
+                result.put(columnFilter.getField(),columnFilter.getValue());
+            }
+        }
+        return result;
+    }
 }

+ 7 - 8
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/PaperController.java

@@ -1,6 +1,8 @@
 package cn.iselab.mooctest.site.web.ctrl;
 
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.common.enums.ColumnFilterType;
+import cn.iselab.mooctest.site.web.data.ColumnFilter;
 import cn.iselab.mooctest.site.web.data.SearchConditionVO;
 import cn.iselab.mooctest.site.web.response.ErrorResult;
 import cn.iselab.mooctest.site.web.response.StatusCode;
@@ -23,6 +25,8 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 
@@ -101,7 +105,7 @@ public class PaperController extends BaseSearchController{
         }
         Pageable pageable = new PageRequest(Integer.parseInt(activePage) - 1, Integer.parseInt(rowsOnPage), sort);
         if (caseId == null) {
-            return paperLogic.getPaperList(isPublic, keyword, pageable);
+            return paperLogic.getPaperList(isPublic, keyword, pageable,null);
         } else {
             return detailStatisticsLogic.findPapersByCaseId(caseId, isPublic, pageable);
         }
@@ -143,17 +147,12 @@ public class PaperController extends BaseSearchController{
         Pageable pageable = super.getPageable(searchConditionVO);
         Boolean isPublic = searchConditionVO.getIsPublic();
         String keyword = searchConditionVO.getKeyword();
-        Map<String,String> extraCondition = searchConditionVO.getExtraCondition();
+        Map<String,String> extraCondition = super.getExtraCondition(searchConditionVO);
         if (extraCondition != null && extraCondition.containsKey("caseId")){
             return detailStatisticsLogic.findPapersByCaseId(Long.parseLong(extraCondition.get("caseId")),
                     isPublic, pageable);
         }else {
-            return paperLogic.getPaperList(isPublic, keyword, pageable);
+            return paperLogic.getPaperList(isPublic, keyword, pageable,extraCondition);
         }
     }
-
-    @Override
-    public SearchConditionVO getDefaultCondition() {
-        return null;
-    }
 }

+ 3 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/PaperLogic.java

@@ -5,6 +5,8 @@ import cn.iselab.mooctest.site.web.data.PaperVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
+import java.util.Map;
+
 /**
  * Created by major on 2017/6/15.
  */
@@ -17,7 +19,7 @@ public interface PaperLogic {
 
     PaperVO createPaper(PaperVO paperVO);
     PaperVO updatePaper(PaperVO paperVO);
-    Page<PaperVO> getPaperList(boolean isPublic, String keyword, Pageable pageable);
+    Page<PaperVO> getPaperList(boolean isPublic, String keyword, Pageable pageable,Map<String,String> extraCondition);
 
     boolean deletePaperCase(long paperId, long caseId);
 

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/PaperLogicImpl.java

@@ -22,6 +22,7 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by major on 2017/6/15.
@@ -128,11 +129,11 @@ public class PaperLogicImpl extends BaseLogic implements PaperLogic {
     }
 
     @Override
-    public Page<PaperVO> getPaperList(boolean isPublic,String keyword, Pageable pageable) {
-        Page<Paper> papers = paperService.findAll(pageable, keyword);
+    public Page<PaperVO> getPaperList(boolean isPublic,String keyword, Pageable pageable,Map<String,String> extraCondition) {
+        Page<Paper> papers = paperService.findAll(pageable, keyword,extraCondition);
         if(!isPublic){
             Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
-            papers = paperService.findAllByOwnerId(userId,keyword,pageable);
+            papers = paperService.findAllByOwnerId(userId,keyword,pageable,extraCondition);
         }
 
         return paperVOWrapper.wrapPaperList(papers);

+ 3 - 3
mooctest-site-server/src/main/resources/bootstrap.yaml

@@ -4,10 +4,10 @@ spring:
         name: mooctest-site-server
     cloud:
         zookeeper:
-            enabled: false  # true:开启zookeeper外部化配置, false:读取本地配置;
+            enabled: true  # true:开启zookeeper外部化配置, false:读取本地配置;
             connect-string: 101.37.175.111:2181
             config:
                 root: /config
-                enabled: false
+                enabled: true
                 watcher:
-                    enabled: false
+                    enabled: true

+ 6 - 6
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/PaperLogicImplTest.java

@@ -164,14 +164,14 @@ public class PaperLogicImplTest extends AbstractShiroTest {
     public void testGetPaperList(){
         PageRequest pr = new PageRequest(1,10);
         String keyword = "keyword";
-        when(paperService.findAll(pr,keyword)).thenReturn(paperPage);
-        when(paperService.findAllByOwnerId(currentUserId,keyword,pr)).thenReturn(paperPage);
+        when(paperService.findAll(pr,keyword,null)).thenReturn(paperPage);
+        when(paperService.findAllByOwnerId(currentUserId,keyword,pr,null)).thenReturn(paperPage);
 
-        paperLogic.getPaperList(true,keyword,pr);
-        verify(paperService).findAll(pr,keyword);
+        paperLogic.getPaperList(true,keyword,pr,null);
+        verify(paperService).findAll(pr,keyword,null);
 
-        paperLogic.getPaperList(false,keyword,pr);
-        verify(paperService).findAllByOwnerId(currentUserId,keyword,pr);
+        paperLogic.getPaperList(false,keyword,pr,null);
+        verify(paperService).findAllByOwnerId(currentUserId,keyword,pr,null);
     }
 
     @Test