Browse Source

主页渲染修改数据查询,加速啦!!!

xuexiaobo 6 years ago
parent
commit
da075a9d53

+ 8 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/CrowdTestProjectDao.java

@@ -1,6 +1,10 @@
 package com.mooctest.crowd.domain.dao;
 
+import com.mooctest.crowd.domain.domainobject.CrowdTestProject;
 import com.mooctest.crowd.domain.model.CrowdTestProjectPO;
+import com.mooctest.crowd.domain.model.RankInfo;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
@@ -27,6 +31,10 @@ public interface CrowdTestProjectDao extends CrudRepository<CrowdTestProjectPO,
 
     List<CrowdTestProjectPO> findByRegionalManagerIdAndIsDeleted(Long regionalManagerId, int isDeleted);
 
+
+    @Query(value = "SELECT new com.mooctest.crowd.domain.model.RankInfo(SUM(p.quotedPrice), p.userId) FROM CrowdTestProjectPO p GROUP BY p.userId ORDER BY SUM(p.quotedPrice) DESC")
+    List<RankInfo> findTotalPriceOfUser(Pageable pageable);
+
     @Override
     void delete(CrowdTestProjectPO crowdTestProjectPO);
 

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

@@ -1,6 +1,9 @@
 package com.mooctest.crowd.domain.dao;
 
 import com.mooctest.crowd.domain.model.CrowdTestTaskPO;
+import com.mooctest.crowd.domain.model.RankInfo;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
@@ -23,6 +26,13 @@ public interface CrowdTestTaskDao extends CrudRepository<CrowdTestTaskPO, Long>
     List<CrowdTestTaskPO> findByEvaluationAgencyIdAndIsDeleted(Long evaluationAgencyId, int isDeleted);
 
     List<CrowdTestTaskPO> findAllByIsDeleted(int isDeleted);
+
+    @Query(value = "SELECT new com.mooctest.crowd.domain.model.RankInfo(SUM(p.quotedPrice), p.evaluationAgencyId) FROM CrowdTestTaskPO p GROUP BY p.evaluationAgencyId ORDER BY SUM(p.quotedPrice) DESC")
+    List<RankInfo> findTotalPriceOfAgency(Pageable pageable);
+
+    @Query(nativeQuery = true, value = "select * from crowd_test_task where CTT_STATUS = 1 order by CTT_QUOTED_PRICE DESC LIMIT 4")
+    List<CrowdTestTaskPO> findHotTask();
+
     @Override
     void delete(CrowdTestTaskPO crowdTestProjectPO);
 

+ 3 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/EvaluationAgencyDao.java

@@ -1,7 +1,10 @@
 package com.mooctest.crowd.domain.dao;
 
 import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
+import com.mooctest.crowd.domain.model.RankInfo;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 import javax.transaction.Transactional;

+ 5 - 0
core/src/main/java/com/mooctest/crowd/domain/dao/UserDao.java

@@ -1,10 +1,14 @@
 package com.mooctest.crowd.domain.dao;
 
+import com.mooctest.crowd.domain.model.RankInfo;
 import com.mooctest.crowd.domain.model.UserPO;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 import javax.transaction.Transactional;
+import java.util.List;
 import java.util.Optional;
 
 @Transactional
@@ -27,4 +31,5 @@ public interface UserDao extends PagingAndSortingRepository<UserPO, Long>, JpaSp
 
     UserPO save(UserPO userPo);
 
+
 }

+ 2 - 1
core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestTaskPO.java

@@ -10,7 +10,8 @@ import java.sql.Timestamp;
  * @date 2019/7/11 14:14
  */
 @Data
-@Entity(name = "crowd_test_task")
+@Entity
+@Table(name = "crowd_test_task")
 public class
 CrowdTestTaskPO {
     @Id

+ 18 - 0
core/src/main/java/com/mooctest/crowd/domain/model/RankInfo.java

@@ -0,0 +1,18 @@
+package com.mooctest.crowd.domain.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-08-20 01:19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RankInfo {
+    Double totalPrice;
+    Long entityId;
+}

+ 14 - 5
site/src/main/java/com/mooctest/crowd/site/controller/TestController.java

@@ -1,19 +1,21 @@
 package com.mooctest.crowd.site.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.mooctest.crowd.domain.dao.CrowdTestProjectDao;
+import com.mooctest.crowd.domain.dao.CrowdTestTaskDao;
+import com.mooctest.crowd.domain.dao.UserDao;
 import com.mooctest.crowd.site.annotation.LoginRequired;
 import com.mooctest.crowd.site.anticorruption.impl.data.UserInfo;
 import com.mooctest.crowd.site.service.CrowdProjectService;
-import com.mooctest.crowd.site.service.UploadService;
-import com.mooctest.crowd.site.util.FileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.client.RestTemplate;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
@@ -33,6 +35,12 @@ public class TestController {
     private CrowdProjectService projectService;
 
     @Autowired
+    private CrowdTestProjectDao projectDao;
+
+    @Autowired
+    private CrowdTestTaskDao taskDao;
+
+    @Autowired
     private RestTemplate restTemplate;
 
     @RequestMapping(value = "/test/rest", method = RequestMethod.POST)
@@ -52,8 +60,9 @@ public class TestController {
     }
 
     @RequestMapping(value = "/test", method = RequestMethod.POST)
-    public Object exceptionTest(MultipartFile file) throws IOException {
-        return FileUtil.checkFile(file.getInputStream());
+    public Object exceptionTest() throws IOException {
+        Pageable pageable = PageRequest.of(0, 10);
+        return taskDao.findTotalPriceOfAgency(pageable);
     }
 
     @RequestMapping(value = "/session/put", method = RequestMethod.GET)

+ 1 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/EvolutionAgencyVO.java

@@ -14,4 +14,5 @@ import lombok.NoArgsConstructor;
 public class EvolutionAgencyVO {
     private String logo;
     private String name;
+    private Double allTaskPrice;
 }

+ 122 - 78
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -2,8 +2,12 @@ package com.mooctest.crowd.site.mediator.impl;
 
 import com.mooctest.crowd.domain.dao.CrowdTestProjectDao;
 import com.mooctest.crowd.domain.dao.CrowdTestTaskDao;
+import com.mooctest.crowd.domain.dao.EvaluationAgencyDao;
+import com.mooctest.crowd.domain.dao.UserDao;
 import com.mooctest.crowd.domain.domainobject.*;
 import com.mooctest.crowd.domain.exception.AccountNotExistException;
+import com.mooctest.crowd.domain.model.EvaluationAgencyPO;
+import com.mooctest.crowd.domain.model.UserPO;
 import com.mooctest.crowd.domain.repository.CrowdTestProjectRepo;
 import com.mooctest.crowd.domain.repository.EvaluationAgencyRepo;
 import com.mooctest.crowd.domain.repository.UserRepo;
@@ -14,6 +18,8 @@ import com.mooctest.crowd.site.mediator.ViewMediator;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -40,6 +46,12 @@ public class WebMediatorImpl implements ViewMediator {
     private CrowdTestTaskDao taskDao;
 
     @Autowired
+    private UserDao userDao;
+
+    @Autowired
+    private EvaluationAgencyDao agencyDao;
+
+    @Autowired
     private CrowdTestProjectDao projectDao;
 
     @Override
@@ -54,88 +66,120 @@ public class WebMediatorImpl implements ViewMediator {
 
     @Override
     public IndexDTO renderIndex() {
-        ArrayList<CrowdTaskVO> allTasks = new ArrayList<>();
-        List<CrowdTestProject> allProjects = projectRepo.getAllCrowdTestProject();
-        allProjects.forEach(project -> {
-            allTasks.addAll(project.getCrowdTestTaskList()
-                    .stream().filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_RELEASED)
-                    .map(crowdTestTask -> new CrowdTaskVO(crowdTestTask)).collect(Collectors.toList()));
-        });
-
-        //对Project按照UserId进行分组
-        Map<Long, List<CrowdTestProject>> projectsGroup = new HashMap<>();
-        allProjects.forEach(project -> {
-            if (!projectsGroup.keySet().contains(project.getUserId()))
-                projectsGroup.put(project.getUserId(), new ArrayList<>());
-            projectsGroup.get(project.getUserId()).add(project);
-        });
-        //根据组的项目总价进行排序,提取UserId
-        List<Long> userIds = projectsGroup.entrySet().stream().sorted((o1, o2) -> {
-            Double sumPrice1 = o1.getValue().stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum();
-            Double sumPrice2 = o2.getValue().stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum();
-            if (sumPrice1 > sumPrice2)
-                return -1;
-            else if (sumPrice1 < sumPrice2)
-                return 1;
-            else
-                return 0;
-        }).map(Map.Entry::getKey).collect(Collectors.toList());
-        for (Long id : userIds)
-            log.info("UserId from Project: " + id);
-        if (userIds.size()>10)
-            userIds = userIds.subList(0,9);
-        List<UserVO> userRanks = userIds.stream().map(id -> new UserVO(userRepo.getByID(id))).collect(Collectors.toList());
-        userRanks.forEach(userVO -> userVO.setAllProjectPrice(projectsGroup.get(userVO.getId()).stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum()));
-
-        allTasks.sort(Comparator.comparing(CrowdTaskVO::getQuotePrice).reversed());
-        List<CrowdTaskVO> hotTasks = allTasks.subList(0,3);
-        List<EvolutionAgencyVO> agencyVOS = new ArrayList<>();
-        EvolutionAgencyVO agency1 = new EvolutionAgencyVO();
-        agency1.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency1.setName("agency1");
-        EvolutionAgencyVO agency2 = new EvolutionAgencyVO();
-        agency2.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency2.setName("agency2");
-        EvolutionAgencyVO agency3 = new EvolutionAgencyVO();
-        agency3.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency3.setName("agency3");
-        EvolutionAgencyVO agency4 = new EvolutionAgencyVO();
-        agency4.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency4.setName("agency4");
-        EvolutionAgencyVO agency5 = new EvolutionAgencyVO();
-        agency5.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency5.setName("agency5");
-        EvolutionAgencyVO agency6 = new EvolutionAgencyVO();
-        agency6.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency6.setName("agency6");
-        EvolutionAgencyVO agency7 = new EvolutionAgencyVO();
-        agency7.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency7.setName("agency7");
-        EvolutionAgencyVO agency8 = new EvolutionAgencyVO();
-        agency8.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency8.setName("agency8");
-        EvolutionAgencyVO agency9 = new EvolutionAgencyVO();
-        agency9.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency9.setName("agency9");
-        EvolutionAgencyVO agency10 = new EvolutionAgencyVO();
-        agency10.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
-        agency10.setName("agency10");
-        agencyVOS.add(agency1);
-        agencyVOS.add(agency2);
-        agencyVOS.add(agency3);
-        agencyVOS.add(agency4);
-        agencyVOS.add(agency5);
-        agencyVOS.add(agency6);
-        agencyVOS.add(agency7);
-        agencyVOS.add(agency8);
-        agencyVOS.add(agency9);
-        agencyVOS.add(agency10);
-        IndexDTO indexDTO = new IndexDTO();
 
+        Pageable pageable = PageRequest.of(0, 10);
+        //获取用户排名
+        List<UserVO> userRanks = projectDao.findTotalPriceOfUser(pageable).stream().map(rankInfo -> {
+            Optional<UserPO> userPO = userDao.findById(rankInfo.getEntityId());
+            if (userPO.isPresent()) {
+                UserVO userVO = new UserVO();
+                userVO.setName(userPO.get().getName());
+                userVO.setUserName(userPO.get().getUserName());
+                userVO.setAllProjectPrice(rankInfo.getTotalPrice());
+                return userVO;
+            }
+            return null;
+        }).collect(Collectors.toList());
+        //获取机构排名
+        List<EvolutionAgencyVO> agencyRanks = taskDao.findTotalPriceOfAgency(pageable).stream().map(rankInfo -> {
+            Optional<EvaluationAgencyPO> agency = agencyDao.findById(rankInfo.getEntityId());
+            if (agency.isPresent()) {
+                EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
+                agencyVO.setName(agency.get().getEvaluationAgencyName());
+                agencyVO.setLogo(agency.get().getAgencyPhoto());
+                agencyVO.setAllTaskPrice(rankInfo.getTotalPrice());
+                return agencyVO;
+            }
+            return null;
+        }).collect(Collectors.toList());
+        //获取热门任务
+        List<CrowdTaskVO> hotTasks = taskDao.findHotTask().stream().map(crowdTestTaskPO -> {
+            CrowdTestTask task = new CrowdTestTask();
+            BeanUtils.copyProperties(crowdTestTaskPO, task);
+            return new CrowdTaskVO(task);
+        }).collect(Collectors.toList());
+
+//        ArrayList<CrowdTaskVO> allTasks = new ArrayList<>();
+//        List<CrowdTestProject> allProjects = projectRepo.getAllCrowdTestProject();
+//        allProjects.forEach(project -> {
+//            allTasks.addAll(project.getCrowdTestTaskList()
+//                    .stream().filter(crowdTestTask -> crowdTestTask.getStatus() == CrowdTestTaskStatus.HAS_RELEASED)
+//                    .map(crowdTestTask -> new CrowdTaskVO(crowdTestTask)).collect(Collectors.toList()));
+//        });
 
+//        //对Project按照UserId进行分组
+//        Map<Long, List<CrowdTestProject>> projectsGroup = new HashMap<>();
+//        allProjects.forEach(project -> {
+//            if (!projectsGroup.keySet().contains(project.getUserId()))
+//                projectsGroup.put(project.getUserId(), new ArrayList<>());
+//            projectsGroup.get(project.getUserId()).add(project);
+//        });
+//        //根据组的项目总价进行排序,提取UserId
+//        List<Long> userIds = projectsGroup.entrySet().stream().sorted((o1, o2) -> {
+//            Double sumPrice1 = o1.getValue().stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum();
+//            Double sumPrice2 = o2.getValue().stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum();
+//            if (sumPrice1 > sumPrice2)
+//                return -1;
+//            else if (sumPrice1 < sumPrice2)
+//                return 1;
+//            else
+//                return 0;
+//        }).map(Map.Entry::getKey).collect(Collectors.toList());
+//        for (Long id : userIds)
+//            log.info("UserId from Project: " + id);
+//        if (userIds.size()>10)
+//            userIds = userIds.subList(0,9);
+//        List<UserVO> userRanks = userIds.stream().map(id -> new UserVO(userRepo.getByID(id))).collect(Collectors.toList());
+//        userRanks.forEach(userVO -> userVO.setAllProjectPrice(projectsGroup.get(userVO.getId()).stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum()));
+//
+//        allTasks.sort(Comparator.comparing(CrowdTaskVO::getQuotePrice).reversed());
+//        List<CrowdTaskVO> hotTasks = allTasks.subList(0,3);
+//        List<EvolutionAgencyVO> agencyVOS = new ArrayList<>();
+//        EvolutionAgencyVO agency1 = new EvolutionAgencyVO();
+//        agency1.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency1.setName("agency1");
+//        EvolutionAgencyVO agency2 = new EvolutionAgencyVO();
+//        agency2.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency2.setName("agency2");
+//        EvolutionAgencyVO agency3 = new EvolutionAgencyVO();
+//        agency3.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency3.setName("agency3");
+//        EvolutionAgencyVO agency4 = new EvolutionAgencyVO();
+//        agency4.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency4.setName("agency4");
+//        EvolutionAgencyVO agency5 = new EvolutionAgencyVO();
+//        agency5.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency5.setName("agency5");
+//        EvolutionAgencyVO agency6 = new EvolutionAgencyVO();
+//        agency6.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency6.setName("agency6");
+//        EvolutionAgencyVO agency7 = new EvolutionAgencyVO();
+//        agency7.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency7.setName("agency7");
+//        EvolutionAgencyVO agency8 = new EvolutionAgencyVO();
+//        agency8.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency8.setName("agency8");
+//        EvolutionAgencyVO agency9 = new EvolutionAgencyVO();
+//        agency9.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency9.setName("agency9");
+//        EvolutionAgencyVO agency10 = new EvolutionAgencyVO();
+//        agency10.setLogo("http://www.mooctest.net/assets/img/mooctest.png");
+//        agency10.setName("agency10");
+//        agencyVOS.add(agency1);
+//        agencyVOS.add(agency2);
+//        agencyVOS.add(agency3);
+//        agencyVOS.add(agency4);
+//        agencyVOS.add(agency5);
+//        agencyVOS.add(agency6);
+//        agencyVOS.add(agency7);
+//        agencyVOS.add(agency8);
+//        agencyVOS.add(agency9);
+//        agencyVOS.add(agency10);
+
+        IndexDTO indexDTO = new IndexDTO();
         indexDTO.setHotTaskList(hotTasks);
         indexDTO.setUserRank(userRanks);
-        indexDTO.setAgencyRank(agencyVOS);
+        indexDTO.setAgencyRank(agencyRanks);
         List<String> img = new ArrayList<>();
         img.add("http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/Image/daylight.jpg");
         img.add("http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/Image/invictus.jpg");