();
foreach (var m in SUMMARY_METRICS)
results.Add(await _metrics.ComputeAsync(new MetricRequestDto
{
- Column = column, Metric = m, PeriodDateKst = d,
+ Column = column, Metric = m, PeriodDateKst = d, Period = period,
SourceTable = source, SessionId = sessionId
}, ct));
- return Ok(new { Column = column, Date = d.ToString("yyyy-MM-dd"), Source = source, Metrics = results });
+ return Ok(new { Column = column, Date = d.ToString("yyyy-MM-dd"), Source = source, Period = period, Metrics = results });
}
/// 엑셀 템플릿 등록.
diff --git a/src/Hc900Crawler/wwwroot/js/reports.js b/src/Hc900Crawler/wwwroot/js/reports.js
index 327fde1..65daadc 100644
--- a/src/Hc900Crawler/wwwroot/js/reports.js
+++ b/src/Hc900Crawler/wwwroot/js/reports.js
@@ -25,7 +25,7 @@ paneInit['reports'] = function () {
if (go) go.onclick = async () => {
out.innerHTML = '⏳ 조회 중...';
try {
- let url = `/api/report/summary?column=${encodeURIComponent(col.value)}&date=${date.value}&source=${$('rvSource').value}`;
+ let url = `/api/report/summary?column=${encodeURIComponent(col.value)}&date=${date.value}&source=${$('rvSource').value}&period=${$('rvPeriod').value}`;
if ($('rvSource').value === 'fast_record' && $('rvSess').value) url += `&sessionId=${$('rvSess').value}`;
const r = await fetch(url);
if (!r.ok) throw new Error('조회 실패 ' + r.status);
@@ -73,7 +73,8 @@ function rpVal(m, kind) { return m.Status === 'ok' && m.Value != null ? rpFmt(m.
function renderSummary(d) {
const by = {}; (d.Metrics || []).forEach(m => by[m.Metric] = m);
const cl = by['mass_balance_closure'];
- let html = `${d.Column} · ${d.Date} · ${d.Source}
`;
+ const pTxt = { DAILY: '일', MONTHLY: '월', YEARLY: '연' }[d.Period] || d.Period || '일';
+ let html = `${d.Column} · ${d.Date} · ${pTxt} · ${d.Source}
`;
// 물질수지 신뢰블록
if (cl) {
diff --git a/src/Hc900Crawler/wwwroot/panes/reports.html b/src/Hc900Crawler/wwwroot/panes/reports.html
index 623abc5..735047b 100644
--- a/src/Hc900Crawler/wwwroot/panes/reports.html
+++ b/src/Hc900Crawler/wwwroot/panes/reports.html
@@ -20,6 +20,13 @@
+