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 projectStats(List 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); } }