docs: 회원 상세 기능 구현 계획 문서
- 마일리지 내역 + POS 구매 이력 연동 계획 - 전화번호 기반 통합 조회 전략 - API/UI 설계 초안
This commit is contained in:
parent
625012f5ee
commit
a7e96e5efa
210
docs/member-detail-feature.md
Normal file
210
docs/member-detail-feature.md
Normal file
@ -0,0 +1,210 @@
|
||||
# 회원 상세 기능 구현 계획
|
||||
|
||||
> 작성일: 2026-02-27
|
||||
> 상태: 계획 중
|
||||
|
||||
## 개요
|
||||
|
||||
회원 검색 페이지(`/admin/members`)에서 "상세" 버튼 클릭 시, 해당 회원의 구매 이력 및 QR 적립 내역을 조회하는 기능.
|
||||
|
||||
## 현재 상태
|
||||
|
||||
- ✅ 회원 검색 API (`/api/members/search`) - 완료
|
||||
- ✅ 회원 기본정보 조회 (`/api/members/<cuscode>`) - 완료
|
||||
- ❌ 회원 구매 이력 조회 - 미구현
|
||||
- ❌ 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/<cuscode>/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/<phone>/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 | 계획 문서 작성 |
|
||||
Loading…
Reference in New Issue
Block a user