|  | @@ -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");
 |