필터 UI 수정 및 대시보드 연동
This commit is contained in:
@@ -552,14 +552,22 @@ export class GenomeService {
|
||||
farms.sort((a, b) => b.avgEbv - a.avgEbv);
|
||||
}
|
||||
|
||||
// 형질별 평균 및 순위 계산
|
||||
// 형질별 평균 및 순위 계산 (표준 경쟁 순위 방식: 동률 시 같은 순위, 다음 순위 건너뜀)
|
||||
const traitAverages = Array.from(traitDataMap.entries()).map(([traitName, data]) => {
|
||||
const avgEbv = Math.round((data.sum / data.count) * 100) / 100;
|
||||
const avgEpd = Math.round((data.epdSum / data.count) * 100) / 100; // 육종가(EPD) 평균
|
||||
const rankings = traitRankingMap.get(traitName) || [];
|
||||
const totalFarms = rankings.length;
|
||||
const rankIndex = rankings.findIndex(r => r.farmNo === farmNo);
|
||||
const rank = rankIndex >= 0 ? rankIndex + 1 : null;
|
||||
|
||||
// 표준 경쟁 순위 계산: 동률 처리
|
||||
let rank: number | null = null;
|
||||
const farmData = rankings.find(r => r.farmNo === farmNo);
|
||||
if (farmData) {
|
||||
// 나보다 높은 점수를 가진 농장 수 + 1 = 내 순위
|
||||
const higherCount = rankings.filter(r => r.avgEbv > farmData.avgEbv).length;
|
||||
rank = higherCount + 1;
|
||||
}
|
||||
|
||||
const percentile = rank !== null && totalFarms > 0 ? Math.round((rank / totalFarms) * 100) : null;
|
||||
|
||||
return {
|
||||
@@ -1793,9 +1801,14 @@ export class GenomeService {
|
||||
// 내림차순 정렬
|
||||
farmAverages.sort((a, b) => b.avgScore - a.avgScore);
|
||||
|
||||
// 8. 현재 농가 순위 찾기
|
||||
const myFarmIndex = farmAverages.findIndex(f => f.farmNo === farmNo);
|
||||
// 8. 현재 농가 순위 찾기 (표준 경쟁 순위: 동률 시 같은 순위)
|
||||
const myFarmData = farmAverages.find(f => f.farmNo === farmNo);
|
||||
let farmRankInRegion: number | null = null;
|
||||
if (myFarmData) {
|
||||
// 나보다 높은 점수를 가진 농장 수 + 1 = 내 순위
|
||||
const higherCount = farmAverages.filter(f => f.avgScore > myFarmData.avgScore).length;
|
||||
farmRankInRegion = higherCount + 1;
|
||||
}
|
||||
|
||||
// 9. 보은군 전체 평균
|
||||
const regionAvgScore = allScores.length > 0
|
||||
@@ -1807,10 +1820,10 @@ export class GenomeService {
|
||||
farmerName: farm.farmerName || null,
|
||||
farmAvgScore: myFarmData?.avgScore ?? null,
|
||||
regionAvgScore,
|
||||
farmRankInRegion: myFarmIndex >= 0 ? myFarmIndex + 1 : null,
|
||||
farmRankInRegion,
|
||||
totalFarmsInRegion: farmAverages.length,
|
||||
percentile: myFarmIndex >= 0 && farmAverages.length > 0
|
||||
? Math.round(((myFarmIndex + 1) / farmAverages.length) * 100)
|
||||
percentile: farmRankInRegion !== null && farmAverages.length > 0
|
||||
? Math.round((farmRankInRegion / farmAverages.length) * 100)
|
||||
: null,
|
||||
farmCowCount: myFarmData?.cowCount || 0,
|
||||
regionCowCount: allScores.length,
|
||||
|
||||
Reference in New Issue
Block a user