# -*- coding: utf-8 -*- """ 확실한 매칭만 일괄 등록 """ import sys, io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend') from db.dbsetup import get_db_session from sqlalchemy import text from datetime import datetime # 확실한 매칭 목록 (MSSQL 제품명, DrugCode, APC) MAPPINGS = [ # 파라캅 ('파라캅L(5kg이상)', 'LB000003159', '0230338510101'), # 파라캅 L 정 10정 ('파라캅S(5kg이하)', 'LB000003160', '0230347110106'), # 파라캅 에스 정 10정 # 세레니아 ('세레니아정16mg(개멀미약)', 'LB000003353', '0231884610109'), # 세레니아 정 16mg / 4정 ('세레니아정24mg(개멀미약)', 'LB000003354', '0231884620107'), # 세레니아 정 24mg / 4정 ] session = get_db_session('PM_DRUG') today = datetime.now().strftime('%Y%m%d') print('=== 일괄 APC 매핑 ===\n') for name, drugcode, apc in MAPPINGS: # 기존 가격 조회 existing = session.execute(text(""" SELECT TOP 1 CD_MY_UNIT, CD_IN_UNIT FROM CD_ITEM_UNIT_MEMBER WHERE DRUGCODE = :dc ORDER BY SN DESC """), {'dc': drugcode}).fetchone() if not existing: print(f'❌ {name}: 기존 레코드 없음') continue # 이미 APC 있는지 확인 check = session.execute(text(""" SELECT 1 FROM CD_ITEM_UNIT_MEMBER WHERE DRUGCODE = :dc AND CD_CD_BARCODE = :apc """), {'dc': drugcode, 'apc': apc}).fetchone() if check: print(f'⏭️ {name}: 이미 등록됨') continue # INSERT try: session.execute(text(""" INSERT INTO CD_ITEM_UNIT_MEMBER ( DRUGCODE, CD_CD_UNIT, CD_NM_UNIT, CD_MY_UNIT, CD_IN_UNIT, CD_CD_BARCODE, CD_CD_POS, CHANGE_DATE ) VALUES ( :drugcode, '015', 1.0, :my_unit, :in_unit, :barcode, '', :change_date ) """), { 'drugcode': drugcode, 'my_unit': existing.CD_MY_UNIT, 'in_unit': existing.CD_IN_UNIT, 'barcode': apc, 'change_date': today }) session.commit() print(f'✅ {name} → {apc}') except Exception as e: session.rollback() print(f'❌ {name}: {e}') session.close() print('\n완료!')