Pine_Voice_Mobile / data_engine.py
dammmmmmmmm's picture
Upload 21 files
214cd33 verified
import pandas as pd
import json
import os
class DataEngine:
def __init__(self, csv_path="test_customer.csv", json_path="product_collection.json"):
self.csv_path = csv_path
self.json_path = json_path
self.products = {}
self.customers_df = None
self._load_data()
def _load_data(self):
# 1. Nạp JSON Sản phẩm
try:
with open(self.json_path, 'r', encoding='utf-8') as f:
product_list = json.load(f)
self.products = {item['id']: item for item in product_list}
print("✅ [DataEngine] Đã nạp JSON gói cước.")
except Exception as e:
print(f"❌ [DataEngine] Lỗi JSON: {e}")
# 2. Nạp CSV Khách hàng
try:
self.customers_df = pd.read_csv(self.csv_path)
# Ép kiểu Customer ID sang string để tìm kiếm chính xác
self.customers_df['Customer ID'] = self.customers_df['Customer ID'].astype(str)
# Xử lý khoảng trắng thừa ở cột id gói cước
if 'id' in self.customers_df.columns:
self.customers_df['id'] = self.customers_df['id'].astype(str).str.strip()
print("✅ [DataEngine] Đã nạp CSV khách hàng.")
except Exception as e:
print(f"❌ [DataEngine] Lỗi CSV: {e}")
def get_full_context(self, customer_id):
if self.customers_df is None: return None
str_id = str(customer_id).strip()
row = self.customers_df[self.customers_df['Customer ID'] == str_id]
if row.empty:
return None
customer_data = row.iloc[0].to_dict()
# --- XỬ LÝ LOGIC TÊN GỌI (VÌ CSV KHÔNG CÓ CỘT NAME) ---
gender = str(customer_data.get('Gender', '')).lower()
if 'female' in gender:
display_name = "Chị"
elif 'male' in gender:
display_name = "Anh"
else:
display_name = "Quý khách"
# Thêm trường hiển thị tên vào dict trả về
customer_data['Display_Name'] = display_name
# Lấy thông tin gói cước
current_pkg_id = str(customer_data.get('id', '')).strip()
pkg_info = self.products.get(current_pkg_id, {
"name": f"Gói {current_pkg_id}",
"desc": "Không có mô tả",
"price": 0
})
return {
"customer": customer_data,
"current_package": pkg_info
}