From a7e96e5efac7b465c5e3297de485e38f79feb2ec Mon Sep 17 00:00:00 2001 From: thug0bin Date: Fri, 27 Feb 2026 15:00:49 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=ED=9A=8C=EC=9B=90=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EA=B3=84=ED=9A=8D?= =?UTF-8?q?=20=EB=AC=B8=EC=84=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 마일리지 내역 + POS 구매 이력 연동 계획 - 전화번호 기반 통합 조회 전략 - API/UI 설계 초안 --- docs/member-detail-feature.md | 210 ++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 docs/member-detail-feature.md diff --git a/docs/member-detail-feature.md b/docs/member-detail-feature.md new file mode 100644 index 0000000..d801be0 --- /dev/null +++ b/docs/member-detail-feature.md @@ -0,0 +1,210 @@ +# 회원 상세 기능 구현 계획 + +> 작성일: 2026-02-27 +> 상태: 계획 중 + +## 개요 + +회원 검색 페이지(`/admin/members`)에서 "상세" 버튼 클릭 시, 해당 회원의 구매 이력 및 QR 적립 내역을 조회하는 기능. + +## 현재 상태 + +- ✅ 회원 검색 API (`/api/members/search`) - 완료 +- ✅ 회원 기본정보 조회 (`/api/members/`) - 완료 +- ❌ 회원 구매 이력 조회 - 미구현 +- ❌ QR 적립 내역 연동 - 미구현 + +## 데이터 소스 + +### 1. 마일리지 DB (SQLite) +``` +파일: backend/db/mileage.db +테이블: transactions (적립/사용 내역) + +주요 컬럼: +- phone: 전화번호 (010XXXXXXXX) +- points: 적립/사용 포인트 +- type: earn (적립) / use (사용) +- amount: 구매금액 +- created_at: 거래일시 +- receipt_id: 영수증 ID (연동용) +``` + +### 2. POS DB (MSSQL - PM_PRES) +``` +테이블: SALE_MAIN (판매 메인) +테이블: SALE_SUB (판매 상세 - 품목별) + +SALE_MAIN: +- SL_NO_order: 거래번호 +- SL_NM_custom: 고객명 +- SL_CD_custom: 고객코드 +- SL_MY_total: 총액 +- SL_DT_appl: 거래일자 + +SALE_SUB: +- SL_NO_order: 거래번호 (FK) +- DrugCode: 상품코드 +- QUAN: 수량 +- SL_TOTAL_PRICE: 금액 +``` + +### 3. 회원 DB (MSSQL - PM_BASE) +``` +테이블: CD_PERSON + +주요 컬럼: +- CUSCODE: 고객코드 +- PANAME: 이름 +- PHONE, TEL_NO, PHONE2: 전화번호 3곳 +``` + +## 연동 전략 + +### 문제점 +- POS(SALE_MAIN)에는 `SL_CD_custom`(고객코드) 사용 +- 마일리지 DB에는 `phone`(전화번호) 사용 +- **전화번호 → 고객코드** 또는 **고객코드 → 전화번호** 매핑 필요 + +### 해결 방안 + +#### 방안 1: 전화번호 기반 통합 (권장) +``` +1. CD_PERSON에서 전화번호로 CUSCODE 조회 +2. CUSCODE로 SALE_MAIN 조회 +3. 마일리지 DB에서 전화번호로 적립 내역 조회 +4. 두 결과 병합하여 표시 +``` + +#### 방안 2: 마일리지 테이블에 CUSCODE 추가 +```sql +ALTER TABLE users ADD COLUMN cuscode TEXT; +``` +- QR 적립 시 POS 고객코드 연동 + +## API 설계 + +### GET /api/members//history + +**Response:** +```json +{ + "success": true, + "member": { + "cuscode": "0000012345", + "name": "김영빈", + "phone": "01027027390" + }, + "mileage": { + "balance": 19005, + "total_earned": 25000, + "total_used": 5995, + "transactions": [ + { + "date": "2026-02-27 01:29", + "type": "earn", + "points": 555, + "amount": 18500, + "products": ["투엑스벤포파워", "마데카솔"] + } + ] + }, + "purchases": [ + { + "date": "20260227", + "order_no": "20260227001234", + "total": 18500, + "items": [ + {"name": "투엑스벤포파워", "qty": 1, "price": 9000}, + {"name": "마데카솔연고", "qty": 1, "price": 9500} + ] + } + ] +} +``` + +## UI 설계 + +### 회원 상세 모달 + +``` +┌─────────────────────────────────────────────┐ +│ 👤 김영빈 │ +│ 📱 010-2702-7390 │ +│ 💰 잔여 포인트: 19,005P │ +├─────────────────────────────────────────────┤ +│ [QR 적립 내역] [POS 구매 이력] │ +├─────────────────────────────────────────────┤ +│ 📅 2026-02-27 01:29 │ +│ +555P (18,500원 구매) │ +│ └ 투엑스벤포파워, 마데카솔연고 │ +│ │ +│ 📅 2026-02-27 01:25 │ +│ +360P (12,000원 구매) │ +│ └ 벤포파워Z x2 │ +├─────────────────────────────────────────────┤ +│ [ 메시지 발송 ] [ 닫기 ] │ +└─────────────────────────────────────────────┘ +``` + +## 구현 단계 + +### Phase 1: 마일리지 내역 연동 (우선) +1. [ ] `/api/members//mileage` API 추가 +2. [ ] SQLite에서 전화번호로 적립/사용 내역 조회 +3. [ ] 회원 상세 모달 UI 구현 + +### Phase 2: POS 구매 이력 연동 +1. [ ] 전화번호 → CUSCODE 매핑 로직 +2. [ ] SALE_MAIN/SALE_SUB 조회 API +3. [ ] 품목 상세 표시 + +### Phase 3: 통합 뷰 +1. [ ] 마일리지 + POS 데이터 병합 +2. [ ] 타임라인 형태로 통합 표시 +3. [ ] 상품 추천 (자주 구매 품목) + +## 예상 쿼리 + +### 마일리지 내역 (SQLite) +```sql +SELECT + t.created_at, t.type, t.points, t.amount, + u.name, u.phone, u.balance +FROM transactions t +JOIN users u ON t.user_id = u.id +WHERE u.phone = '01027027390' +ORDER BY t.created_at DESC +LIMIT 50; +``` + +### POS 구매 이력 (MSSQL) +```sql +-- 1. 전화번호로 고객코드 조회 +SELECT CUSCODE FROM PM_BASE.dbo.CD_PERSON +WHERE PHONE = '01027027390' OR TEL_NO = '01027027390'; + +-- 2. 고객코드로 구매 이력 조회 +SELECT + M.SL_NO_order, M.SL_DT_appl, M.SL_MY_total, + S.DrugCode, G.GoodsName, S.QUAN, S.SL_TOTAL_PRICE +FROM PM_PRES.dbo.SALE_MAIN M +JOIN PM_PRES.dbo.SALE_SUB S ON M.SL_NO_order = S.SL_NO_order +LEFT JOIN PM_DRUG.dbo.CD_GOODS G ON S.DrugCode = G.DrugCode +WHERE M.SL_CD_custom = '0000012345' +ORDER BY M.SL_DT_appl DESC; +``` + +## 참고 + +- 마일리지 테이블 구조: `backend/db/dbsetup.py` +- POS 테이블 가이드: `docs/alimipharm-set-product-structure.md` +- 회원 검색 API: `backend/app.py` → `/api/members/search` + +--- + +## 히스토리 + +| 날짜 | 내용 | +|------|------| +| 2026-02-27 | 계획 문서 작성 |