feat(returns): 반품 입고/조회 시 복수 송장번호 주문 매칭 기능 추가 및 예외 처리 강화
- 복수 송장번호 검색 기능 최적화: routers/returns.py 파일의 단건 조회(/lookup) 및 벌크 입고(/receive/bulk) 내 orders 테이블 대상 SQL 쿼리 개선 / 기존 단일 송장번호 완전 일치 검사(B-Tree 인덱스 스캔)를 유지하면서, 불일치 시 명시적 IS NOT NULL 및 빈값 검사 방어 코드를 수행하여 안정성 확보 / 쉼표(,)나 공백( ) 외에도 슬래시(/) 및 세미콜론(;) 구분자('[,\s/;]+')까지 함께 분리 지원하여 다양한 입력 형태 호환 보장
- 코드 안정성 확보: 다중행 SQL 문자열에 raw string(r 접두사)를 적용하여 Python의 이스케이프 시퀀스 구문 경고(SyntaxWarning: '\s' is an invalid escape sequence) 해결
This commit is contained in:
+11
-5
@@ -68,12 +68,15 @@ async def return_lookup(tracking_no: str):
|
||||
conn = get_order_db_conn()
|
||||
cur = conn.cursor()
|
||||
# 주문일시(order_date 또는 upload_date) 기준 가장 최신 1건 조회
|
||||
cur.execute("""
|
||||
cur.execute(r"""
|
||||
SELECT vendor, recipient_name, recipient_phone, recipient_mobile, address
|
||||
FROM orders
|
||||
WHERE tracking_number = %s
|
||||
WHERE tracking_number = %s
|
||||
OR (tracking_number IS NOT NULL
|
||||
AND tracking_number != ''
|
||||
AND %s = ANY(regexp_split_to_array(tracking_number, '[,\s/;]+')))
|
||||
ORDER BY order_date DESC LIMIT 1
|
||||
""", (tracking_no,))
|
||||
""", (tracking_no, tracking_no))
|
||||
row = cur.fetchone()
|
||||
conn.close()
|
||||
|
||||
@@ -164,12 +167,15 @@ async def create_return_receive_bulk(req: BulkReturnReceive):
|
||||
else:
|
||||
remarks = "고객이 반품"
|
||||
# 2. Check orders
|
||||
cur_order.execute("""
|
||||
cur_order.execute(r"""
|
||||
SELECT vendor, recipient_name, recipient_phone, recipient_mobile, address
|
||||
FROM orders
|
||||
WHERE tracking_number = %s
|
||||
OR (tracking_number IS NOT NULL
|
||||
AND tracking_number != ''
|
||||
AND %s = ANY(regexp_split_to_array(tracking_number, '[,\s/;]+')))
|
||||
ORDER BY order_date DESC LIMIT 1
|
||||
""", (tracking_no,))
|
||||
""", (tracking_no, tracking_no))
|
||||
ord_row = cur_order.fetchone()
|
||||
if ord_row:
|
||||
mall = ord_row['vendor'] or ""
|
||||
|
||||
Reference in New Issue
Block a user