|
@@ -10,19 +10,18 @@ import com.mooctest.crowd.site.command.*;
|
|
|
import com.mooctest.crowd.site.data.dto.*;
|
|
|
import com.mooctest.crowd.site.data.vo.*;
|
|
|
import com.mooctest.crowd.site.mediator.ViewMediator;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Comparator;
|
|
|
-import java.util.Iterator;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @Author: xuexb
|
|
|
* @Date: 2019.7.16 20:27
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Component("WebMediator")
|
|
|
public class WebMediatorImpl implements ViewMediator {
|
|
|
|
|
@@ -49,16 +48,38 @@ public class WebMediatorImpl implements ViewMediator {
|
|
|
@Override
|
|
|
public IndexDTO renderIndex() {
|
|
|
ArrayList<CrowdTaskVO> allTasks = new ArrayList<>();
|
|
|
- projectRepo.getAllCrowdTestProject().forEach(project -> {
|
|
|
+ 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()));
|
|
|
});
|
|
|
- List<UserVO> allUser = userRepo.getAllUser().stream().map(user -> new UserVO(user)).collect(Collectors.toList());
|
|
|
- allUser.forEach(userVO -> {
|
|
|
- userVO.setAllProjectPrice(projectRepo.getCrowdListByUserId(userVO.getId()).stream().mapToDouble(CrowdTestProject::getQuotedPrice).sum());
|
|
|
+
|
|
|
+ //对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);
|
|
|
});
|
|
|
- allUser.sort(Comparator.comparing(UserVO::getAllProjectPrice).reversed());
|
|
|
+ //根据组的项目总价进行排序,提取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<>();
|
|
@@ -103,10 +124,10 @@ public class WebMediatorImpl implements ViewMediator {
|
|
|
agencyVOS.add(agency9);
|
|
|
agencyVOS.add(agency10);
|
|
|
IndexDTO indexDTO = new IndexDTO();
|
|
|
+
|
|
|
+
|
|
|
indexDTO.setHotTaskList(hotTasks);
|
|
|
- if (allUser.size()>10)
|
|
|
- allUser = allUser.subList(0, 10);
|
|
|
- indexDTO.setUserRank(allUser);
|
|
|
+ indexDTO.setUserRank(userRanks);
|
|
|
indexDTO.setAgencyRank(agencyVOS);
|
|
|
List<String> img = new ArrayList<>();
|
|
|
img.add("http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/Image/daylight.jpg");
|