chore: 테스트 스크립트 gitignore 추가 및 추적 제거

This commit is contained in:
thug0bin 2026-02-28 10:46:31 +09:00
parent 9019347d48
commit 009d133aef
24 changed files with 7 additions and 1281 deletions

7
.gitignore vendored
View File

@ -87,5 +87,12 @@ tmp/
*.tmp
.claude/
# Test/Debug scripts (일회성 분석용)
backend/scripts/check_*.py
backend/scripts/find_*.py
backend/scripts/search_*.py
backend/scripts/compare_*.py
backend/scripts/analyze_*.py
# GUI settings (user-specific)
gui_settings.json

View File

@ -1,82 +0,0 @@
# -*- coding: utf-8 -*-
"""
CD_GOODS / CD_BARCODE에서 외부 DB와 매핑 가능한 분석
"""
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=' * 60)
print('=== CD_GOODS 주요 컬럼 (외부 매핑 후보) ===')
print('=' * 60)
# CD_GOODS 샘플
result = session.execute(text("""
SELECT TOP 3
DrugCode, GoodsName, BARCODE, BaseCode,
SUNG_CODE, TITLECODE, EffctCode
FROM CD_GOODS
WHERE GoodsSelCode = 'B'
ORDER BY DrugCode
"""))
for row in result:
print(f'\nDrugCode: {row.DrugCode}')
print(f' GoodsName: {row.GoodsName}')
print(f' BARCODE: {row.BARCODE or "(없음)"}')
print(f' BaseCode: {row.BaseCode or "(없음)"}')
print(f' SUNG_CODE: {row.SUNG_CODE or "(없음)"}')
print(f' TITLECODE: {row.TITLECODE or "(없음)"}')
print('\n' + '=' * 60)
print('=== CD_BARCODE 주요 컬럼 (외부 매핑 후보) ===')
print('=' * 60)
# CD_BARCODE 샘플
result2 = session.execute(text("""
SELECT TOP 3
DRUGCODE, BARCODE, BASECODE, ETCNAME, SPLNAME,
SUNG_CODE, DIK_CODE, TITLECODE
FROM CD_BARCODE
WHERE BASECODE IS NOT NULL AND BASECODE != ''
"""))
for row in result2:
print(f'\nDRUGCODE: {row.DRUGCODE}')
print(f' BARCODE: {row.BARCODE}')
print(f' BASECODE: {row.BASECODE}')
print(f' ETCNAME: {row.ETCNAME}')
print(f' SPLNAME: {row.SPLNAME}')
print(f' SUNG_CODE: {row.SUNG_CODE or "(없음)"}')
print(f' DIK_CODE: {row.DIK_CODE or "(없음)"}')
print(f' TITLECODE: {row.TITLECODE}')
print('\n' + '=' * 60)
print('=== 매핑 키 후보 통계 ===')
print('=' * 60)
# 각 코드 현황
result3 = session.execute(text("""
SELECT
COUNT(*) as total,
SUM(CASE WHEN BARCODE IS NOT NULL AND BARCODE != '' THEN 1 ELSE 0 END) as has_barcode,
SUM(CASE WHEN BASECODE IS NOT NULL AND BASECODE != '' THEN 1 ELSE 0 END) as has_basecode,
SUM(CASE WHEN SUNG_CODE IS NOT NULL AND SUNG_CODE != '' THEN 1 ELSE 0 END) as has_sungcode,
SUM(CASE WHEN DIK_CODE IS NOT NULL AND DIK_CODE != '' THEN 1 ELSE 0 END) as has_dikcode,
SUM(CASE WHEN TITLECODE IS NOT NULL AND TITLECODE != '' THEN 1 ELSE 0 END) as has_titlecode
FROM CD_BARCODE
"""))
row = result3.fetchone()
print(f'\nCD_BARCODE 전체: {row.total:,}')
print(f' BARCODE 있음: {row.has_barcode:,}개 ({row.has_barcode/row.total*100:.1f}%)')
print(f' BASECODE 있음: {row.has_basecode:,}개 ({row.has_basecode/row.total*100:.1f}%)')
print(f' SUNG_CODE 있음: {row.has_sungcode:,}개 ({row.has_sungcode/row.total*100:.1f}%)')
print(f' DIK_CODE 있음: {row.has_dikcode:,}개 ({row.has_dikcode/row.total*100:.1f}%)')
print(f' TITLECODE 있음: {row.has_titlecode:,}개 ({row.has_titlecode/row.total*100:.1f}%)')
session.close()

View File

@ -1,53 +0,0 @@
# -*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
# 동물약(POS_BOON='010103')을 CD_BARCODE와 JOIN해서 BASECODE 찾기
print('=== 동물약 BASECODE 조회 (CD_GOODS + CD_BARCODE JOIN) ===\n')
result = session.execute(text("""
SELECT
g.DrugCode,
g.GoodsName,
g.BARCODE as goods_barcode,
b.BARCODE as std_barcode,
b.BASECODE,
b.SUNG_CODE,
b.DIK_CODE,
b.ETCNAME
FROM CD_GOODS g
LEFT JOIN CD_BARCODE b ON g.DrugCode = b.DRUGCODE
WHERE g.POS_BOON = '010103' AND g.GoodsSelCode = 'B'
ORDER BY g.GoodsName
"""))
found = 0
not_found = 0
for row in result:
if row.BASECODE:
found += 1
mark = '[O]'
else:
not_found += 1
mark = '[X]'
print(f'{mark} {row.GoodsName}')
print(f' DrugCode: {row.DrugCode}')
print(f' CD_GOODS.BARCODE: {row.goods_barcode or "(없음)"}')
if row.BASECODE:
print(f' CD_BARCODE.BARCODE: {row.std_barcode}')
print(f' BASECODE: {row.BASECODE}')
print(f' SUNG_CODE: {row.SUNG_CODE}')
print()
print('---')
print(f'CD_BARCODE에서 찾음: {found}')
print(f'CD_BARCODE에 없음: {not_found}')
session.close()

View File

@ -1,44 +0,0 @@
# -*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE, BaseCode
FROM CD_GOODS
WHERE POS_BOON = '010103' AND GoodsSelCode = 'B'
ORDER BY GoodsName
"""))
print('=== 동물약 바코드/표준코드 현황 ===\n')
barcode_count = 0
basecode_count = 0
total = 0
for row in result:
barcode = row.BARCODE.strip() if row.BARCODE else ''
basecode = row.BaseCode.strip() if row.BaseCode else ''
if barcode: barcode_count += 1
if basecode: basecode_count += 1
total += 1
b_mark = 'O' if barcode else 'X'
c_mark = 'O' if basecode else 'X'
print(f'{row.GoodsName}')
print(f' DrugCode: {row.DrugCode}')
print(f' Barcode: {b_mark} [{barcode}]')
print(f' BaseCode: {c_mark} [{basecode}]')
print()
print('---')
print(f'Total: {total}')
print(f'With Barcode: {barcode_count}')
print(f'With BaseCode: {basecode_count}')
session.close()

View File

@ -1,76 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=' * 60)
print('=== 1. CD_GOODS 테이블 확인 (안텔민뽀삐) ===')
print('=' * 60)
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE, BaseCode
FROM CD_GOODS
WHERE DrugCode = 'LB000003158'
"""))
for row in result:
print(f'DrugCode: {row.DrugCode}')
print(f'GoodsName: {row.GoodsName}')
print(f'BARCODE: {row.BARCODE or "(없음)"}')
print(f'BaseCode: {row.BaseCode or "(없음)"}')
print()
print('=' * 60)
print('=== 2. CD_BARCODE 테이블 확인 (DrugCode로 검색) ===')
print('=' * 60)
result2 = session.execute(text("""
SELECT *
FROM CD_BARCODE
WHERE DRUGCODE = 'LB000003158'
"""))
columns = result2.keys()
rows = list(result2)
if rows:
for row in rows:
print(f'\n--- 바코드 레코드 ---')
for col in columns:
val = getattr(row, col)
if val:
print(f' {col}: {val}')
else:
print('(CD_BARCODE에 레코드 없음)')
print()
print('=' * 60)
print('=== 3. CD_BARCODE에서 APC로 직접 검색 ===')
print('=' * 60)
result3 = session.execute(text("""
SELECT *
FROM CD_BARCODE
WHERE BARCODE = '0230237010107'
OR BASECODE = '0230237010107'
OR TITLECODE = '0230237010107'
"""))
rows3 = list(result3)
if rows3:
for row in rows3:
print(f'\n--- APC로 찾은 레코드 ---')
for col in columns:
val = getattr(row, col)
if val:
print(f' {col}: {val}')
else:
print('(APC로 검색된 레코드 없음)')
session.close()

View File

@ -1,64 +0,0 @@
# -*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
# 1. BaseCode가 있는 제품 수 확인
result = session.execute(text("""
SELECT
COUNT(*) as total,
SUM(CASE WHEN BaseCode IS NOT NULL AND BaseCode != '' THEN 1 ELSE 0 END) as with_basecode
FROM CD_GOODS
WHERE GoodsSelCode = 'B'
"""))
row = result.fetchone()
print(f'=== BaseCode 사용 현황 ===')
print(f'판매중 전체 제품: {row.total}')
print(f'BaseCode 있는 제품: {row.with_basecode}')
print()
# 2. BaseCode가 있는 제품 샘플 (최대 20개)
result2 = session.execute(text("""
SELECT TOP 20 DrugCode, GoodsName, BaseCode, POS_BOON
FROM CD_GOODS
WHERE GoodsSelCode = 'B'
AND BaseCode IS NOT NULL
AND BaseCode != ''
ORDER BY GoodsName
"""))
print('=== BaseCode 있는 제품 샘플 ===')
count = 0
for row in result2:
count += 1
print(f'{row.GoodsName}')
print(f' DrugCode: {row.DrugCode}')
print(f' BaseCode: {row.BaseCode}')
print(f' 분류: {row.POS_BOON}')
print()
if count == 0:
print('(BaseCode가 있는 제품이 없습니다)')
# 3. 분류별 BaseCode 사용 현황
print('=== 분류(POS_BOON)별 BaseCode 현황 ===')
result3 = session.execute(text("""
SELECT
POS_BOON,
COUNT(*) as total,
SUM(CASE WHEN BaseCode IS NOT NULL AND BaseCode != '' THEN 1 ELSE 0 END) as with_basecode
FROM CD_GOODS
WHERE GoodsSelCode = 'B'
GROUP BY POS_BOON
HAVING SUM(CASE WHEN BaseCode IS NOT NULL AND BaseCode != '' THEN 1 ELSE 0 END) > 0
ORDER BY with_basecode DESC
"""))
for row in result3:
print(f'분류 {row.POS_BOON}: {row.with_basecode}/{row.total}')
session.close()

View File

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
result = session.execute(text("""
SELECT
COUNT(*) as total,
SUM(CASE WHEN BASECODE IS NULL THEN 1 ELSE 0 END) as null_count,
SUM(CASE WHEN BASECODE = '' THEN 1 ELSE 0 END) as empty_count,
SUM(CASE WHEN BASECODE IS NOT NULL AND BASECODE != '' THEN 1 ELSE 0 END) as has_value
FROM CD_BARCODE
"""))
row = result.fetchone()
print('=== CD_BARCODE.BASECODE 현황 ===')
print(f'전체: {row.total:,}')
print(f'NULL: {row.null_count:,}')
print(f'빈문자열: {row.empty_count:,}')
print(f'값 있음: {row.has_value:,}개 ({row.has_value/row.total*100:.1f}%)')
session.close()

View File

@ -1,74 +0,0 @@
# -*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
# PM_DRUG, PM_PRES, PM_BASE 모든 DB 확인
databases = ['PM_DRUG', 'PM_PRES', 'PM_BASE']
for db_name in databases:
print(f'\n{"="*50}')
print(f'=== {db_name} 데이터베이스 ===')
print(f'{"="*50}')
try:
session = get_db_session(db_name)
# 1. BaseCode 컬럼이 있는 테이블 찾기
result = session.execute(text("""
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%BaseCode%'
OR COLUMN_NAME LIKE '%BASECODE%'
OR COLUMN_NAME LIKE '%basecode%'
ORDER BY TABLE_NAME
"""))
tables = list(result)
if tables:
print(f'\nBaseCode 관련 컬럼 발견:')
for row in tables:
print(f' - {row.TABLE_NAME}.{row.COLUMN_NAME}')
else:
print(f'\nBaseCode 관련 컬럼 없음')
# 2. 표준코드 관련 컬럼 찾기 (Stand, Standard 등)
result2 = session.execute(text("""
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%Stand%'
OR COLUMN_NAME LIKE '%Standard%'
OR COLUMN_NAME LIKE '%KD%'
ORDER BY TABLE_NAME
"""))
tables2 = list(result2)
if tables2:
print(f'\n표준코드 관련 컬럼:')
for row in tables2:
print(f' - {row.TABLE_NAME}.{row.COLUMN_NAME}')
session.close()
except Exception as e:
print(f'Error: {e}')
# 3. CD_GOODS의 BaseCode가 실제로 어떤 값인지 상위 10개 확인
print(f'\n{"="*50}')
print('=== CD_GOODS.BaseCode 샘플 데이터 ===')
print(f'{"="*50}')
session = get_db_session('PM_DRUG')
result = session.execute(text("""
SELECT TOP 10 DrugCode, GoodsName, BaseCode
FROM CD_GOODS
ORDER BY DrugCode
"""))
for row in result:
bc = row.BaseCode if row.BaseCode else '(NULL/빈값)'
print(f'{row.DrugCode}: BaseCode=[{bc}]')
session.close()

View File

@ -1,71 +0,0 @@
# -*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
# 1. CD_BARCODE 테이블 구조
print('=== CD_BARCODE 테이블 구조 ===')
result = session.execute(text("""
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'CD_BARCODE'
ORDER BY ORDINAL_POSITION
"""))
for row in result:
print(f' {row.COLUMN_NAME} ({row.DATA_TYPE})')
# 2. CD_BARCODE 데이터 샘플
print('\n=== CD_BARCODE 샘플 데이터 (BASECODE 있는 것) ===')
result2 = session.execute(text("""
SELECT TOP 20 *
FROM CD_BARCODE
WHERE BASECODE IS NOT NULL AND BASECODE != ''
"""))
columns = result2.keys()
print(f'컬럼: {list(columns)}')
print()
count = 0
for row in result2:
count += 1
print(f'--- Row {count} ---')
for col in columns:
val = getattr(row, col)
if val:
print(f' {col}: {val}')
if count == 0:
print('(BASECODE가 있는 레코드 없음)')
# BASECODE 없어도 샘플 보기
print('\n=== CD_BARCODE 전체 샘플 (상위 5개) ===')
result3 = session.execute(text("""
SELECT TOP 5 *
FROM CD_BARCODE
"""))
for row in result3:
print(f'---')
for col in columns:
val = getattr(row, col)
print(f' {col}: {val}')
# 3. CD_BARCODE 전체 레코드 수
print('\n=== CD_BARCODE 통계 ===')
result4 = session.execute(text("""
SELECT
COUNT(*) as total,
SUM(CASE WHEN BASECODE IS NOT NULL AND BASECODE != '' THEN 1 ELSE 0 END) as with_basecode,
SUM(CASE WHEN DSTANDARD IS NOT NULL AND DSTANDARD != '' THEN 1 ELSE 0 END) as with_dstandard
FROM CD_BARCODE
"""))
row = result4.fetchone()
print(f'전체 레코드: {row.total}')
print(f'BASECODE 있음: {row.with_basecode}')
print(f'DSTANDARD 있음: {row.with_dstandard}')
session.close()

View File

@ -1,53 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=== CD_GOODS (안텔민킹 - LB000003157) ===')
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE, BaseCode
FROM CD_GOODS
WHERE DrugCode = 'LB000003157'
"""))
for row in result:
print(f'DrugCode: {row.DrugCode}')
print(f'GoodsName: {row.GoodsName}')
print(f'BARCODE: [{row.BARCODE}]')
print(f'BaseCode: [{row.BaseCode}]')
print('\n=== CD_BARCODE (DrugCode = LB000003157) ===')
result2 = session.execute(text("""
SELECT DRUGCODE, BARCODE, BASECODE, TITLECODE, ETCNAME
FROM CD_BARCODE
WHERE DRUGCODE = 'LB000003157'
"""))
for row in result2:
print(f'DRUGCODE: {row.DRUGCODE}')
print(f'BARCODE: {row.BARCODE}')
print(f'BASECODE: {row.BASECODE}')
print(f'TITLECODE: {row.TITLECODE}')
print(f'ETCNAME: {row.ETCNAME}')
print('\n=== APC로 직접 검색 ===')
result3 = session.execute(text("""
SELECT DRUGCODE, BARCODE, BASECODE, ETCNAME
FROM CD_BARCODE
WHERE BARCODE = '0230237010107'
"""))
rows = list(result3)
if rows:
for row in rows:
print(f'★ 발견! DRUGCODE: {row.DRUGCODE}, BARCODE: {row.BARCODE}')
else:
print('(APC로 검색 안됨)')
session.close()

View File

@ -1,74 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=== 안텔민킹 (LB000003157) 바코드 전체 조회 ===\n')
# 1. CD_SALEGOODS에서 같은 DrugCode로 여러 행?
print('1. CD_SALEGOODS (DrugCode = LB000003157):')
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_SALEGOODS
WHERE DrugCode = 'LB000003157'
"""))
for row in result:
print(f' {row.BARCODE}')
# 2. 바코드 전용 테이블이 따로 있나?
print('\n2. 바코드 관련 테이블에서 LB000003157 검색:')
tables = [
'CD_BARCODE',
'CD_Bundle',
'CD_ITEM_UNIT_MEMBER',
'CD_NameTag',
'BI_DRUG_MAPPING',
'PharmBridgeMapping'
]
for tbl in tables:
try:
result = session.execute(text(f"""
SELECT * FROM {tbl}
WHERE DrugCode = 'LB000003157' OR DRUGCODE = 'LB000003157'
"""))
rows = list(result)
if rows:
print(f'\n{tbl}: {len(rows)}개 발견!')
for row in rows:
print(f' {dict(row._mapping)}')
except:
pass
# 3. 바코드 값으로 역검색 (APC)
print('\n3. APC 0230237810109 검색 (전체 테이블):')
apc = '0230237810109'
for tbl in ['CD_GOODS', 'CD_SALEGOODS', 'CD_BARCODE', 'CD_Bundle', 'BI_DRUG_MAPPING', 'PharmBridgeMapping']:
try:
# 바코드 관련 컬럼 찾기
cols = session.execute(text(f"""
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '{tbl}' AND COLUMN_NAME LIKE '%BARCODE%'
"""))
for col_row in cols:
col = col_row.COLUMN_NAME
result = session.execute(text(f"""
SELECT * FROM {tbl} WHERE {col} = '{apc}'
"""))
rows = list(result)
if rows:
print(f'{tbl}.{col}: {len(rows)}개!')
for row in rows:
print(f' {dict(row._mapping)}')
except Exception as e:
pass
session.close()

View File

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
import sys
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
result = session.execute(text("""
SELECT DrugCode, GoodsName
FROM CD_GOODS
WHERE DrugCode = 'LB000003158'
"""))
row = result.fetchone()
name = row.GoodsName
print('GoodsName:', name)
print('repr:', repr(name))
# 각 글자 확인
for i, char in enumerate(name):
print(f' [{i}] {char} = U+{ord(char):04X}')
session.close()

View File

@ -1,82 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
apc = '0230237810109'
print(f'=== APC "{apc}" 검색 ===\n')
# 1. CD_GOODS에서 안텔민킹 확인
print('1. CD_GOODS (안텔민킹):')
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE, BaseCode
FROM CD_GOODS
WHERE DrugCode = 'LB000003157'
"""))
for row in result:
print(f' BARCODE: [{row.BARCODE}]')
# 2. CD_BARCODE에서 DRUGCODE로 검색
print('\n2. CD_BARCODE (DRUGCODE=LB000003157):')
result2 = session.execute(text("""
SELECT DRUGCODE, BARCODE, BASECODE, ETCNAME
FROM CD_BARCODE
WHERE DRUGCODE = 'LB000003157'
"""))
rows = list(result2)
if rows:
for row in rows:
print(f' BARCODE: {row.BARCODE}, BASECODE: {row.BASECODE}')
else:
print(' (없음)')
# 3. CD_BARCODE에서 APC 직접 검색
print(f'\n3. CD_BARCODE에서 BARCODE="{apc}":')
result3 = session.execute(text(f"""
SELECT DRUGCODE, BARCODE, BASECODE, ETCNAME
FROM CD_BARCODE
WHERE BARCODE = '{apc}'
"""))
rows = list(result3)
if rows:
for row in rows:
print(f' ★ 발견! DRUGCODE: {row.DRUGCODE}')
else:
print(' (없음)')
# 4. CD_GOODS에서 BARCODE로 검색
print(f'\n4. CD_GOODS에서 BARCODE="{apc}":')
result4 = session.execute(text(f"""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_GOODS
WHERE BARCODE = '{apc}'
"""))
rows = list(result4)
if rows:
for row in rows:
print(f' ★ 발견! {row.DrugCode}: {row.GoodsName}')
else:
print(' (없음)')
# 5. 전체 DB에서 LIKE 검색
print(f'\n5. 전체 LIKE 검색:')
result5 = session.execute(text(f"""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_GOODS
WHERE BARCODE LIKE '%{apc}%'
"""))
rows = list(result5)
if rows:
for row in rows:
print(f'{row.DrugCode}: BARCODE=[{row.BARCODE}]')
else:
print(' (없음)')
session.close()

View File

@ -1,58 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('anipharmacopeia')
# 안텔민킹 APC로 검색
apc = '0230237810109'
print(f'=== PostgreSQL에서 APC {apc} 조회 ===\n')
# anipharmacopeia 테이블 확인
result = session.execute(text("""
SELECT * FROM anipharmacopeia
WHERE apc = :apc
"""), {'apc': apc})
row = result.fetchone()
if row:
print('★ 발견!\n')
cols = result.keys()
for col in cols:
val = getattr(row, col)
if val:
print(f' {col}: {val}')
else:
print('(없음)')
# 개/고양이 관련 컬럼 확인
print('\n=== 개/고양이 관련 컬럼 확인 ===\n')
result2 = session.execute(text("""
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'anipharmacopeia'
AND (column_name LIKE '%dog%' OR column_name LIKE '%cat%'
OR column_name LIKE '%canine%' OR column_name LIKE '%feline%'
OR column_name LIKE '%animal%' OR column_name LIKE '%species%'
OR column_name LIKE '%target%' OR column_name LIKE '%use%')
"""))
for r in result2:
print(f' {r.column_name}: {r.data_type}')
# 전체 컬럼 목록
print('\n=== 전체 컬럼 목록 ===\n')
result3 = session.execute(text("""
SELECT column_name FROM information_schema.columns
WHERE table_name = 'anipharmacopeia'
ORDER BY ordinal_position
"""))
for r in result3:
print(f' {r.column_name}')
session.close()

View File

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine, text
conn = create_engine('postgresql://admin:trajet6640@192.168.0.87:5432/apdb_master').connect()
# 안텔민 전체 - 유니코드 확인
result = conn.execute(text("""
SELECT apc, product_name
FROM apc
WHERE product_name ILIKE '%안텔민%'
ORDER BY product_name
"""))
print('=== PostgreSQL 안텔민 전체 (유니코드 확인) ===\n')
for row in result:
name = row.product_name
print(f'APC: {row.apc}')
print(f'Name: {name}')
# "사" 또는 "뽀" 글자 찾아서 유니코드 확인
for i, c in enumerate(name):
if c in ['', '', '', '']:
print(f' [{i}] "{c}" = U+{ord(c):04X}')
print()
conn.close()

View File

@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
from sqlalchemy import create_engine, text
conn = create_engine('postgresql://admin:trajet6640@192.168.0.87:5432/apdb_master').connect()
print('=== apc 테이블 전체 컬럼 ===\n')
result = conn.execute(text("""
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'apc'
ORDER BY ordinal_position
"""))
for r in result:
print(f' {r.column_name}: {r.data_type}')
# 안텔민킹 전체 데이터
apc_code = '0230237810109'
print(f'\n=== 안텔민킹 ({apc_code}) 전체 데이터 ===\n')
result2 = conn.execute(text(f"SELECT * FROM apc WHERE apc = '{apc_code}'"))
row = result2.fetchone()
if row:
cols = result2.keys()
for col in cols:
val = getattr(row, col)
if val:
print(f' {col}: {val}')
conn.close()

View File

@ -1,47 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=== CD_SALEGOODS 테이블 구조 ===\n')
result = session.execute(text("""
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'CD_SALEGOODS'
ORDER BY ORDINAL_POSITION
"""))
for row in result:
print(f' {row.COLUMN_NAME}: {row.DATA_TYPE}')
print('\n=== CD_SALEGOODS에서 안텔민 검색 ===\n')
result2 = session.execute(text("""
SELECT *
FROM CD_SALEGOODS
WHERE DrugCode LIKE 'LB00000315%' OR BARCODE LIKE '0230237%'
"""))
rows = list(result2)
if rows:
for row in rows:
print(f'★ 발견!')
print(f' {dict(row._mapping)}')
else:
print('(없음)')
print('\n=== CD_SALEGOODS 최근 데이터 (상위 10개) ===\n')
result3 = session.execute(text("""
SELECT TOP 10 *
FROM CD_SALEGOODS
ORDER BY DrugCode DESC
"""))
for row in result3:
print(dict(row._mapping))
session.close()

View File

@ -1,80 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=== CD_ITEM_UNIT_MEMBER 테이블 구조 ===\n')
result = session.execute(text("""
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'CD_ITEM_UNIT_MEMBER'
ORDER BY ORDINAL_POSITION
"""))
for row in result:
print(f' {row.COLUMN_NAME}: {row.DATA_TYPE}')
print('\n=== 관계 확인: 안텔민킹 ===\n')
# CD_GOODS
print('1. CD_GOODS:')
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_GOODS WHERE DrugCode = 'LB000003157'
"""))
for row in result:
print(f' DrugCode: {row.DrugCode}')
print(f' GoodsName: {row.GoodsName}')
print(f' BARCODE: [{row.BARCODE}]')
# CD_SALEGOODS
print('\n2. CD_SALEGOODS:')
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_SALEGOODS WHERE DrugCode = 'LB000003157'
"""))
for row in result:
print(f' DrugCode: {row.DrugCode}')
print(f' BARCODE: [{row.BARCODE}]')
# CD_ITEM_UNIT_MEMBER
print('\n3. CD_ITEM_UNIT_MEMBER:')
result = session.execute(text("""
SELECT DRUGCODE, CD_CD_UNIT, CD_CD_BARCODE, CHANGE_DATE
FROM CD_ITEM_UNIT_MEMBER
WHERE DRUGCODE = 'LB000003157'
ORDER BY SN DESC
"""))
for row in result:
print(f' DRUGCODE: {row.DRUGCODE} | UNIT: {row.CD_CD_UNIT} | BARCODE: {row.CD_CD_BARCODE} | DATE: {row.CHANGE_DATE}')
# CD_SALEGOODS.BARCODE 와 CD_ITEM_UNIT_MEMBER.CD_CD_BARCODE 비교
print('\n=== 다른 제품으로 관계 확인 (안텔민) ===\n')
result = session.execute(text("""
SELECT
g.DrugCode,
g.GoodsName,
s.BARCODE as SALE_BARCODE,
u.CD_CD_BARCODE as UNIT_BARCODE,
u.CD_CD_UNIT
FROM CD_GOODS g
LEFT JOIN CD_SALEGOODS s ON g.DrugCode = s.DrugCode
LEFT JOIN CD_ITEM_UNIT_MEMBER u ON g.DrugCode = u.DRUGCODE
WHERE g.GoodsName LIKE N'%안텔민%'
ORDER BY g.DrugCode, u.SN DESC
"""))
current_drug = None
for row in result:
if row.DrugCode != current_drug:
print(f'\n{row.DrugCode}: {row.GoodsName}')
print(f' CD_SALEGOODS.BARCODE: {row.SALE_BARCODE}')
current_drug = row.DrugCode
print(f' └ CD_ITEM_UNIT_MEMBER: {row.UNIT_BARCODE} (UNIT: {row.CD_CD_UNIT})')
session.close()

View File

@ -1,64 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=== 테이블별 레코드 수 ===\n')
tables = ['CD_GOODS', 'CD_SALEGOODS', 'CD_BARCODE']
for tbl in tables:
result = session.execute(text(f"SELECT COUNT(*) as cnt FROM {tbl}"))
cnt = result.fetchone().cnt
print(f'{tbl}: {cnt:,}')
print('\n=== 안텔민 비교 (CD_GOODS vs CD_SALEGOODS) ===\n')
# CD_GOODS
print('CD_GOODS:')
result = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_GOODS
WHERE GoodsName LIKE N'%안텔민%'
"""))
for row in result:
print(f' {row.DrugCode}: {row.GoodsName} | BARCODE: [{row.BARCODE}]')
# CD_SALEGOODS
print('\nCD_SALEGOODS:')
result2 = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_SALEGOODS
WHERE GoodsName LIKE N'%안텔민%'
"""))
for row in result2:
print(f' {row.DrugCode}: {row.GoodsName} | BARCODE: [{row.BARCODE}]')
# CD_BARCODE
print('\nCD_BARCODE (안텔민 관련):')
result3 = session.execute(text("""
SELECT DRUGCODE, BARCODE, ETCNAME
FROM CD_BARCODE
WHERE ETCNAME LIKE N'%안텔민%'
"""))
rows = list(result3)
if rows:
for row in rows:
print(f' {row.DRUGCODE}: {row.ETCNAME} | BARCODE: [{row.BARCODE}]')
else:
print(' (없음 - 동물약은 CD_BARCODE에 없음)')
print('\n=== CD_BARCODE는 어떤 용도? (샘플) ===\n')
result4 = session.execute(text("""
SELECT TOP 5 DRUGCODE, BARCODE, ETCNAME, CL_GUBUN
FROM CD_BARCODE
"""))
for row in result4:
print(f' {row.DRUGCODE}: {row.ETCNAME} | {row.CL_GUBUN}')
session.close()

View File

@ -1,26 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
from sqlalchemy import create_engine, text
conn = create_engine('postgresql://admin:trajet6640@192.168.0.87:5432/apdb_master').connect()
# 안텔민 뽀삐 10정 검색
result = conn.execute(text("""
SELECT apc, product_name, image_url1, godoimage_url_f
FROM apc
WHERE product_name ILIKE '%안텔민%뽀삐%'
AND product_name ILIKE '%10 정%'
"""))
print('=== 안텔민 뽀삐 정 10정 APC ===\n')
for row in result:
print(f'★ APC: {row.apc}')
print(f' 제품명: {row.product_name}')
print(f' 이미지: {row.image_url1}')
print(f' 고도몰: {row.godoimage_url_f}')
print()
conn.close()

View File

@ -1,53 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=== PM_DRUG 전체 테이블 목록 ===\n')
result = session.execute(text("""
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_NAME
"""))
for row in result:
print(row.TABLE_NAME)
print('\n=== BARCODE 관련 컬럼이 있는 테이블 ===\n')
result2 = session.execute(text("""
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%BARCODE%' OR COLUMN_NAME LIKE '%BAR%'
ORDER BY TABLE_NAME
"""))
for row in result2:
print(f'{row.TABLE_NAME}.{row.COLUMN_NAME}')
print('\n=== LB000003157 이 들어있는 테이블 찾기 ===\n')
# 주요 테이블들에서 검색
tables_to_check = ['CD_GOODS', 'CD_BARCODE', 'CD_ETCGOODS', 'TEMP_ETCGOODS']
for tbl in tables_to_check:
try:
result = session.execute(text(f"""
SELECT TOP 1 * FROM {tbl} WHERE DrugCode = 'LB000003157' OR DRUGCODE = 'LB000003157'
"""))
row = result.fetchone()
if row:
print(f'{tbl}: 발견!')
print(f' {dict(row._mapping)}')
except Exception as e:
pass
session.close()

View File

@ -1,85 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
session = get_db_session('PM_DRUG')
print('=' * 60)
print('=== 1. CD_BARCODE 최근 추가된 행 (상위 20개) ===')
print('=' * 60)
# ACTDATE가 최근인 것들
result = session.execute(text("""
SELECT TOP 20 DRUGCODE, BARCODE, BASECODE, ETCNAME, ACTDATE
FROM CD_BARCODE
ORDER BY ACTDATE DESC
"""))
for row in result:
print(f'{row.ACTDATE} | {row.DRUGCODE} | {row.BARCODE} | {row.ETCNAME}')
print('\n' + '=' * 60)
print('=== 2. CD_BARCODE에서 "안텔민" 포함 (ETCNAME) ===')
print('=' * 60)
result2 = session.execute(text("""
SELECT DRUGCODE, BARCODE, BASECODE, ETCNAME
FROM CD_BARCODE
WHERE ETCNAME LIKE N'%안텔민%'
"""))
rows = list(result2)
if rows:
for row in rows:
print(f'{row.DRUGCODE} | {row.BARCODE} | {row.ETCNAME}')
else:
print('(없음)')
print('\n' + '=' * 60)
print('=== 3. CD_GOODS에서 안텔민 BARCODE 확인 ===')
print('=' * 60)
result3 = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_GOODS
WHERE GoodsName LIKE N'%안텔민%'
"""))
for row in result3:
print(f'{row.DrugCode} | {row.GoodsName} | BARCODE: [{row.BARCODE}]')
print('\n' + '=' * 60)
print('=== 4. 0230237 로 시작하는 바코드 검색 ===')
print('=' * 60)
result4 = session.execute(text("""
SELECT DRUGCODE, BARCODE, ETCNAME
FROM CD_BARCODE
WHERE BARCODE LIKE '0230237%'
"""))
rows = list(result4)
if rows:
for row in rows:
print(f'{row.DRUGCODE} | {row.BARCODE} | {row.ETCNAME}')
else:
print('(없음)')
# CD_GOODS에서도
result5 = session.execute(text("""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_GOODS
WHERE BARCODE LIKE '0230237%'
"""))
rows = list(result5)
if rows:
for row in rows:
print(f'{row.DrugCode} | {row.GoodsName} | {row.BARCODE}')
session.close()

View File

@ -1,57 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
apc = '0230237010107'
for db_name in ['PM_DRUG', 'PM_PRES', 'PM_BASE']:
print(f'\n{"="*60}')
print(f'=== {db_name} 데이터베이스에서 "{apc}" 검색 ===')
print(f'{"="*60}')
try:
session = get_db_session(db_name)
# 모든 테이블에서 해당 값 검색
tables = session.execute(text("""
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
"""))
for table_row in tables:
table_name = table_row.TABLE_NAME
# 각 테이블의 문자열 컬럼에서 검색
try:
columns = session.execute(text(f"""
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '{table_name}'
AND DATA_TYPE IN ('varchar', 'nvarchar', 'char', 'nchar', 'text')
"""))
for col_row in columns:
col_name = col_row.COLUMN_NAME
try:
result = session.execute(text(f"""
SELECT TOP 1 * FROM [{table_name}]
WHERE [{col_name}] = '{apc}'
"""))
row = result.fetchone()
if row:
print(f'\n★ 발견! {table_name}.{col_name}')
print(f' 레코드: {dict(row._mapping)}')
except:
pass
except:
pass
session.close()
except Exception as e:
print(f'Error: {e}')
print('\n검색 완료!')

View File

@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
import sys
import io
# ═══════════════════════════════════════════════════════════
# 인코딩 설정 (Windows CP949 문제 방지)
# ═══════════════════════════════════════════════════════════
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')
from db.dbsetup import get_db_session
from sqlalchemy import text
keyword = sys.argv[1] if len(sys.argv) > 1 else '안텔민'
session = get_db_session('PM_DRUG')
result = session.execute(text(f"""
SELECT DrugCode, GoodsName, BARCODE
FROM CD_GOODS
WHERE GoodsName LIKE N'%{keyword}%'
"""))
print(f'=== MSSQL "{keyword}" 검색 ===')
for row in result:
bc = row.BARCODE if row.BARCODE else '(없음)'
print(f'{row.DrugCode}: {row.GoodsName} | 바코드: {bc}')
session.close()