File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package kr.itn.itnhub.dashboard;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 대시보드 화면 하나가 쓰는 서비스. 집계 쿼리는 {@link DashboardMapper#findOrgRows()} 한 번이고,
* 상단 KPI는 그 결과를 Java에서 접어 만든다 - 같은 원본에서 계산해야 타일 숫자와 아래 표/칸반
* 숫자가 어긋나지 않는다(쿼리를 따로 두면 두 결과 사이에 시차가 생긴다).
*/
@Service
public class DashboardService {
/** ②목록접수. 시안 KPI "서류제출"의 기준으로 쓴다. */
private static final int STAGE_DOC_SUBMITTED = 2;
/** ⑪법률검토 최종완료. 시안 KPI "완료"의 기준. */
private static final int STAGE_COMPLETED = 11;
/** ⑫보고서 작성. */
private static final int STAGE_REPORT = 12;
private final DashboardMapper mapper;
public DashboardService(DashboardMapper mapper) {
this.mapper = mapper;
}
public DashboardResponse dashboard() {
List<DashboardOrgRow> rows = mapper.findOrgRows();
return new DashboardResponse(summarize(rows), rows);
}
DashboardSummary summarize(List<DashboardOrgRow> rows) {
int docSubmitted = 0;
int reviewTotal = 0;
int reviewDone = 0;
int processTotal = 0;
int processDone = 0;
int unresolvedRe = 0;
int reportWriting = 0;
int completed = 0;
for (DashboardOrgRow row : rows) {
reviewTotal += row.reviewTotal();
reviewDone += row.reviewDone();
processTotal += row.processTotal();
processDone += row.processDone();
unresolvedRe += row.reCount();
Integer stage = row.stage();
if (stage == null) {
continue;
}
if (stage >= STAGE_DOC_SUBMITTED) {
docSubmitted++;
}
if (stage >= STAGE_COMPLETED) {
completed++;
}
if (stage >= STAGE_REPORT) {
reportWriting++;
}
}
// 신청 기관 수는 명부에 등록된 기관 전체다 - 명부에 올라온 것 자체가 신청이므로
// 단계값 유무와 무관하다(채널 생성 전 기관도 신청은 한 상태다).
return new DashboardSummary(rows.size(), docSubmitted, reviewTotal, reviewDone,
processTotal, processDone, unresolvedRe, reportWriting, completed);
}
}