package com.estate.expert.admin.service.impl;
|
|
import com.estate.expert.admin.controller.stat.objects.ProjectStat;
|
import com.estate.expert.admin.domain.common.response.PageResp;
|
import com.estate.expert.admin.domain.exam.eval.score.EvalScoreResultMiniInfo;
|
import com.estate.expert.admin.domain.plan.PlanType;
|
import com.estate.expert.admin.service.DigitalMapService;
|
import com.estate.expert.admin.service.ProjectService;
|
import com.estate.expert.admin.service.eval.EvalScoreService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.List;
|
|
/**
|
* 数字地图服务实现
|
*/
|
@Slf4j
|
@Service
|
public class DigitalMapServiceImpl implements DigitalMapService {
|
|
@Resource
|
private ProjectService projectService;
|
|
@Resource
|
private EvalScoreService evalScoreService;
|
|
public PageResp<ProjectStat> projectStats(List<Integer> projectIds, PlanType planType) {
|
if(projectIds == null || projectIds.isEmpty())
|
return PageResp.of(List.of());
|
|
var projects = projectService.toDto(projectService.findAllById(projectIds));
|
var evalScores = evalScoreService.listMini(projectIds, planType);
|
var res = projects.stream().map(project -> {
|
var evalScoresForProject = evalScores.stream().filter(evalScore -> evalScore.getProject().getId().equals(project.getId())).toList();
|
var averageScore = 0f;
|
if (!evalScoresForProject.isEmpty())
|
averageScore = evalScoresForProject.stream().map(EvalScoreResultMiniInfo::getDisplayScore).reduce(0f, Float::sum) / evalScoresForProject.size();
|
return new ProjectStat(project, averageScore, evalScoresForProject);
|
}).toList();
|
return PageResp.of(res);
|
}
|
}
|