feat: 처방약품 사용량 페이지 - 주문량 지오영+수인 합산

- GET /api/geoyoung/orders/summary-by-kd 추가
- admin_rx_usage.html: 두 도매상 병렬 조회 후 합산 표시
- 콘솔에 도매상별 주문량 로깅
This commit is contained in:
thug0bin
2026-03-07 17:07:25 +09:00
parent e5744e4f0f
commit 33c6cd2d5c
2 changed files with 140 additions and 7 deletions

View File

@@ -894,7 +894,7 @@
<script>
let usageData = [];
let cart = [];
let orderDataByKd = {}; // 수인약품 주문량 (KD코드별)
let orderDataByKd = {}; // 도매상 주문량 합산 (KD코드별) - 지오영 + 수인
// 초기화
document.addEventListener('DOMContentLoaded', function() {
@@ -907,20 +907,53 @@
loadOrderData(); // 수인약품 주문량 로드
});
// ──────────────── 수인약품 주문량 조회 ────────────────
// ──────────────── 도매상 주문량 조회 (지오영 + 수인 합산) ────────────────
async function loadOrderData() {
const startDate = document.getElementById('startDate').value;
const endDate = document.getElementById('endDate').value;
orderDataLoading = true;
orderDataByKd = {};
try {
const res = await fetch(`/api/sooin/orders/summary-by-kd?start_date=${startDate}&end_date=${endDate}`);
const data = await res.json();
if (data.success) {
orderDataByKd = data.by_kd_code || {};
console.log('📦 수인약품 주문량:', Object.keys(orderDataByKd).length, '품목,', data.order_count, '건 주문');
// 지오영 + 수인 병렬 조회
const [geoRes, sooinRes] = await Promise.all([
fetch(`/api/geoyoung/orders/summary-by-kd?start_date=${startDate}&end_date=${endDate}`).then(r => r.json()).catch(() => ({ success: false })),
fetch(`/api/sooin/orders/summary-by-kd?start_date=${startDate}&end_date=${endDate}`).then(r => r.json()).catch(() => ({ success: false }))
]);
let totalOrders = 0;
// 지오영 데이터 합산
if (geoRes.success && geoRes.by_kd_code) {
for (const [kd, data] of Object.entries(geoRes.by_kd_code)) {
if (!orderDataByKd[kd]) {
orderDataByKd[kd] = { product_name: data.product_name, spec: data.spec, boxes: 0, units: 0, sources: [] };
}
orderDataByKd[kd].boxes += data.boxes || 0;
orderDataByKd[kd].units += data.units || 0;
orderDataByKd[kd].sources.push('지오영');
}
totalOrders += geoRes.order_count || 0;
console.log('🏭 지오영 주문량:', Object.keys(geoRes.by_kd_code).length, '품목,', geoRes.order_count, '건');
}
// 수인 데이터 합산
if (sooinRes.success && sooinRes.by_kd_code) {
for (const [kd, data] of Object.entries(sooinRes.by_kd_code)) {
if (!orderDataByKd[kd]) {
orderDataByKd[kd] = { product_name: data.product_name, spec: data.spec, boxes: 0, units: 0, sources: [] };
}
orderDataByKd[kd].boxes += data.boxes || 0;
orderDataByKd[kd].units += data.units || 0;
orderDataByKd[kd].sources.push('수인');
}
totalOrders += sooinRes.order_count || 0;
console.log('💜 수인 주문량:', Object.keys(sooinRes.by_kd_code).length, '품목,', sooinRes.order_count, '건');
}
console.log('📦 합산 주문량:', Object.keys(orderDataByKd).length, '품목,', totalOrders, '건 주문');
} catch(err) {
console.warn('주문량 조회 실패:', err);
orderDataByKd = {};