瀏覽代碼

update: 修改首页的搜索条件,通过分类确定搜索类型

guo00guo 5 年之前
父節點
當前提交
47917ba095

+ 11 - 0
site/pom.xml

@@ -110,6 +110,17 @@
 			<artifactId>easypoi-annotation</artifactId>
 			<version>3.0.3</version>
 		</dependency>
+		<!-- Shiro -->
+		<dependency>
+			<groupId>org.apache.shiro</groupId>
+			<artifactId>shiro-spring</artifactId>
+			<version>1.3.2</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.shiro</groupId>
+			<artifactId>shiro-ehcache</artifactId>
+			<version>1.3.2</version>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 30 - 0
site/src/main/java/com/mooctest/crowd/site/controller/BaseController.java

@@ -0,0 +1,30 @@
+package com.mooctest.crowd.site.controller;
+
+import org.apache.shiro.authz.UnauthenticatedException;
+import org.apache.shiro.authz.UnauthorizedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author liuzicong
+ */
+public abstract class BaseController {
+
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+
+    @ExceptionHandler({UnauthenticatedException.class})
+    public String authenticationException(HttpServletRequest request, HttpServletResponse response) {
+        response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+        return "";
+    }
+
+    @ExceptionHandler({UnauthorizedException.class})
+    public String authorizationException(HttpServletRequest request, HttpServletResponse response){
+        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+        return  "";
+    }
+}

+ 58 - 0
site/src/main/java/com/mooctest/crowd/site/controller/BaseSearchController.java

@@ -0,0 +1,58 @@
+package com.mooctest.crowd.site.controller;
+
+import com.mooctest.crowd.site.constants.CommonConstant;
+import com.mooctest.crowd.site.data.ColumnFilter;
+import com.mooctest.crowd.site.data.enums.ColumnFilterType;
+import com.mooctest.crowd.site.data.vo.SearchConditionVO;
+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 java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author henrylee
+ */
+public abstract class BaseSearchController extends BaseController{
+    public abstract Page<?> search(String searchCondition);
+    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 (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, CommonConstant.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;
+    }
+
+    Map<String, String> getExcludeCondition(SearchConditionVO searchConditionVO){
+        Map<String, String> result = new HashMap<>();
+        for (ColumnFilter columnFilter:searchConditionVO.getColumnFilters()) {
+            if (ColumnFilterType.ENUM.getName().equals(columnFilter.getType())
+                    && columnFilter.getValue().equals("all") && columnFilter.getExclude()!=null ) {
+                for(String ex: columnFilter.getExclude()){
+                    result.put(columnFilter.getField(), ex);
+                }
+            }
+        }
+        return result;
+
+    }
+}

文件差異過大導致無法顯示
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


+ 16 - 0
site/src/main/java/com/mooctest/crowd/site/data/dto/IndexPageDTO.java

@@ -0,0 +1,16 @@
+package com.mooctest.crowd.site.data.dto;
+
+import com.mooctest.crowd.site.data.vo.AgencyVO;
+import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
+import com.mooctest.crowd.site.data.vo.ExpertVO;
+import com.mooctest.crowd.site.data.vo.ResourceVO;
+import lombok.Data;
+import org.springframework.data.domain.Page;
+
+@Data
+public class IndexPageDTO {
+    Page<CrowdProjectVO> crowdProjectPage;
+    Page<AgencyVO> agencyPage;
+    Page<ResourceVO> resourcePage;
+    Page<ExpertVO> expertPage;
+}

+ 17 - 0
site/src/main/java/com/mooctest/crowd/site/data/enums/ColumnFilterType.java

@@ -0,0 +1,17 @@
+package com.mooctest.crowd.site.data.enums;
+import lombok.Getter;
+
+public enum ColumnFilterType {
+
+    SORT("sort",(short)1),
+    ENUM("enums",(short)2);
+
+    @Getter
+    private String name;
+    @Getter
+    private short index;
+    ColumnFilterType(String name, short index){
+        this.name = name;
+        this.index = index;
+    }
+}

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

@@ -2,12 +2,15 @@ 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.IndexPageDTO;
 import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
 import com.mooctest.crowd.site.data.vo.*;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.util.Map;
+
 @Service
 public interface CommonService {
     IndexDTO getIndexInfo();
@@ -16,15 +19,11 @@ public interface CommonService {
 
     IndexInfoDTO getIndexInfos();
 
+    IndexPageDTO getIndexPageInfo(Pageable pageable, Map<String, String> extraCondition, String keyword, int deletedStatus);
+
     Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus);
 
     Page<CrowdTaskVO> getTaskinfo(Pageable pageable, String keyword, int deletedStatus);
 
-    Page<AgencyVO> getAgencyInfo(Pageable pageable, String keyword, int deletedStatus);
-
-    Page<ResourceVO> getResourceInfo(Pageable pageable, String keyword);
-
-    Page<ExpertVO> getExpertInfo(Pageable pageable, String keyword);
-
     ApplicationTypeVO getTestTypeByApplicationType(String applicationCode);
 }

+ 21 - 15
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

@@ -6,6 +6,7 @@ import com.mooctest.crowd.domain.repository.CrowdTestTaskRepo;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
 import com.mooctest.crowd.site.data.dto.IndexDTO;
 import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
+import com.mooctest.crowd.site.data.dto.IndexPageDTO;
 import com.mooctest.crowd.site.data.dto.MyCrowdDTO;
 import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
@@ -16,6 +17,8 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.util.Map;
+
 @Service
 public class CommonServiceImpl implements CommonService {
     @Autowired
@@ -50,6 +53,24 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
+    public IndexPageDTO getIndexPageInfo(Pageable pageable, Map<String, String> extraCondition, String keyword, int deletedStatus) {
+        IndexPageDTO indexPageDTO = new IndexPageDTO();
+        for(String key:extraCondition.keySet()) {
+            String value = extraCondition.get(key);
+            if(value.equals("0")){
+                indexPageDTO.setCrowdProjectPage(projectRepo.findAllByPage(pageable, keyword, deletedStatus).map(crowdTestProject -> new CrowdProjectVO(crowdTestProject)));
+            }else if(value.equals("1")){
+                indexPageDTO.setAgencyPage(agencyRepo.findAllByPage(pageable, keyword, deletedStatus).map(agency -> new AgencyVO(agency)));
+            }else if(value.equals("2")){
+                indexPageDTO.setResourcePage(commonRepo.findAllResourceByPage(pageable, keyword).map(resource -> new ResourceVO(resource)));
+            }else if(value.equals("3")){
+                indexPageDTO.setExpertPage(commonRepo.findAllExpertByPage(pageable, keyword).map(expert -> new ExpertVO(expert)));
+            }
+        }
+        return indexPageDTO;
+    }
+
+    @Override
     public Page<CrowdProjectVO> getProjectInfo(Pageable pageable, String keyword, int deletedStatus) {
         return projectRepo.findAllByPage(pageable, keyword, deletedStatus).map(crowdTestProject -> new CrowdProjectVO(crowdTestProject));
     }
@@ -60,21 +81,6 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
-    public Page<AgencyVO> getAgencyInfo(Pageable pageable, String keyword, int deletedStatus) {
-        return agencyRepo.findAllByPage(pageable, keyword, deletedStatus).map(agency -> new AgencyVO(agency));
-    }
-
-    @Override
-    public Page<ResourceVO> getResourceInfo(Pageable pageable, String keyword) {
-        return commonRepo.findAllResourceByPage(pageable, keyword).map(resource -> new ResourceVO(resource));
-    }
-
-    @Override
-    public Page<ExpertVO> getExpertInfo(Pageable pageable, String keyword) {
-        return commonRepo.findAllExpertByPage(pageable, keyword).map(expert -> new ExpertVO(expert));
-    }
-
-    @Override
     public ApplicationTypeVO getTestTypeByApplicationType(String applicationCode) {
         return null;
     }

部分文件因文件數量過多而無法顯示