fix: OTC 라벨 모듈 import 경로 수정 (PM2 환경 호환)
This commit is contained in:
parent
ee300f80ca
commit
b6d0fadb3c
@ -6,6 +6,9 @@ Flask 웹 서버 - QR 마일리지 적립
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 현재 디렉토리를 Python path에 추가 (PM2 실행 시 utils 모듈 찾기 위함)
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
# Windows 콘솔 UTF-8 강제 (한글 깨짐 방지)
|
||||
if sys.platform == 'win32':
|
||||
import io
|
||||
@ -39,9 +42,18 @@ except ImportError:
|
||||
logging.warning("OpenAI 라이브러리가 설치되지 않았습니다. AI 분석 기능을 사용할 수 없습니다.")
|
||||
|
||||
# Path setup
|
||||
sys.path.insert(0, os.path.dirname(__file__))
|
||||
BACKEND_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, BACKEND_DIR)
|
||||
from db.dbsetup import DatabaseManager
|
||||
|
||||
# OTC 라벨 프린터 import
|
||||
try:
|
||||
from utils.otc_label_printer import generate_preview_image, print_otc_label
|
||||
OTC_LABEL_AVAILABLE = True
|
||||
except ImportError as e:
|
||||
OTC_LABEL_AVAILABLE = False
|
||||
logging.warning(f"OTC 라벨 프린터 모듈 로드 실패: {e}")
|
||||
|
||||
app = Flask(__name__)
|
||||
app.secret_key = 'pharmacy-qr-mileage-secret-key-2026'
|
||||
|
||||
@ -4132,6 +4144,29 @@ def api_rx_usage():
|
||||
'today': row.today_patients # 오늘 사용한 환자
|
||||
} for row in patient_rows}
|
||||
|
||||
# 조회 기간 내 주문량 조회 (orders.db에서)
|
||||
import sqlite3
|
||||
orders_db_path = os.path.join(os.path.dirname(__file__), 'db', 'orders.db')
|
||||
orders_conn = sqlite3.connect(orders_db_path)
|
||||
orders_cur = orders_conn.cursor()
|
||||
|
||||
# 조회 기간 내 성공한 주문량 집계
|
||||
orders_cur.execute('''
|
||||
SELECT
|
||||
oi.drug_code,
|
||||
SUM(oi.order_qty) as ordered_qty,
|
||||
SUM(oi.total_dose) as ordered_dose
|
||||
FROM order_items oi
|
||||
JOIN orders o ON oi.order_id = o.id
|
||||
WHERE o.order_date >= ? AND o.order_date <= ?
|
||||
AND o.status IN ('submitted', 'success', 'confirmed')
|
||||
AND oi.status IN ('success', 'pending')
|
||||
GROUP BY oi.drug_code
|
||||
''', (start_date, end_date))
|
||||
|
||||
ordered_map = {row[0]: {'qty': row[1] or 0, 'dose': row[2] or 0} for row in orders_cur.fetchall()}
|
||||
orders_conn.close()
|
||||
|
||||
# 전문의약품 품목별 사용량 집계 쿼리 (현재고: IM_total.IM_QT_sale_debit, 위치: CD_item_position.CD_NM_sale)
|
||||
rx_query = text("""
|
||||
SELECT
|
||||
@ -4185,6 +4220,13 @@ def api_rx_usage():
|
||||
# 소수 환자 약품인지 확인 (1년간 3명 이하)
|
||||
patient_info = patient_map.get(drug_code)
|
||||
|
||||
# 조회 기간 내 주문량
|
||||
order_info = ordered_map.get(drug_code, {'qty': 0, 'dose': 0})
|
||||
ordered_dose = order_info['dose']
|
||||
|
||||
# 잔여 필요량 = 사용량 - 주문량 (음수면 0)
|
||||
remaining_dose = max(0, dose - ordered_dose)
|
||||
|
||||
items.append({
|
||||
'drug_code': drug_code,
|
||||
'product_name': product_name,
|
||||
@ -4197,9 +4239,11 @@ def api_rx_usage():
|
||||
'current_stock': int(row.current_stock or 0), # 현재고
|
||||
'location': row.location or '', # 약국 내 위치
|
||||
'thumbnail': None,
|
||||
'patient_count': patient_info['count'] if patient_info else None, # 1년간 사용 환자 수 (3명 이하만)
|
||||
'patient_names': patient_info['names'] if patient_info else None, # 환자 이름 (3명 이하만)
|
||||
'today_patients': patient_info['today'] if patient_info else None # 오늘 사용한 환자
|
||||
'patient_count': patient_info['count'] if patient_info else None,
|
||||
'patient_names': patient_info['names'] if patient_info else None,
|
||||
'today_patients': patient_info['today'] if patient_info else None,
|
||||
'ordered_dose': ordered_dose, # 조회 기간 내 주문량
|
||||
'remaining_dose': remaining_dose # 잔여 필요량
|
||||
})
|
||||
|
||||
total_qty += qty
|
||||
@ -6332,7 +6376,8 @@ def api_preview_otc_label():
|
||||
dosage_instruction = data.get('dosage_instruction', '')
|
||||
usage_tip = data.get('usage_tip', '')
|
||||
|
||||
from utils.otc_label_printer import generate_preview_image
|
||||
if not OTC_LABEL_AVAILABLE:
|
||||
return jsonify({'success': False, 'error': 'OTC 라벨 모듈이 로드되지 않았습니다.'}), 500
|
||||
|
||||
preview_url = generate_preview_image(drug_name, effect, dosage_instruction, usage_tip)
|
||||
|
||||
@ -6364,7 +6409,8 @@ def api_print_otc_label():
|
||||
dosage_instruction = data.get('dosage_instruction', '')
|
||||
usage_tip = data.get('usage_tip', '')
|
||||
|
||||
from utils.otc_label_printer import print_otc_label
|
||||
if not OTC_LABEL_AVAILABLE:
|
||||
return jsonify({'success': False, 'error': 'OTC 라벨 모듈이 로드되지 않았습니다.'}), 500
|
||||
|
||||
success = print_otc_label(drug_name, effect, dosage_instruction, usage_tip)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user