cur.execute("SELECT COUNT(*) FROM event_daily_prompts")
iflist(cur.fetchone().values())[0]==0:
mock_events=[
('daily_default','Daily Standard','Daily','Mỗi ngày',0,'- Tư vấn dựa trên yêu cầu cơ bản của khách hàng.\n- Tập trung vào tính tiện dụng và sự thoải mái.\n- Ưu tiên các sản phẩm mới nhất hoặc best seller nếu khách không có yêu cầu đặc biệt.'),
('womens_day','Quốc Tế Phụ Nữ 8/3','Campaign','08/03/2026',1,'- Ưu tiên gợi ý các sản phẩm váy đầm, đồ đôi, hoặc quà tặng cho phái nữ.\n- Gợi ý các combo quà tặng có giá trị cao.\n- Tone giọng: Nhẹ nhàng, tôn vinh phái đẹp, kèm lời chúc mừng 8/3.\n- Báo cho khách biết đang có chương trình giảm giá 30% cho đồ nữ.'),
('summer_sale','Đón Hè Sôi Động','Campaign','01/05/2026 - 31/05/2026',0,'- Tuyệt đối không gợi ý áo khoác dày, áo len.\n- Chỉ tập trung vào áo phông, đồ bơi, quần short, chất liệu thoáng mát (cotton, lanh).\n- Gợi ý đồ mặc đi biển, đi chơi ngày hè.'),
('black_friday','Black Friday Siêu Sale','Campaign','27/11/2026',0,'- NHẤN MẠNH vào giá sale cực sốc.\n- Up-sale mạnh tay, gợi ý mua theo combo để được giảm thêm.\n- Tạo cảm giác khan hiếm: \'Số lượng có hạn\', \'Sale lớn nhất năm\'.')
('daily_default','Daily Standard','Daily','Mỗi ngày',False,'- Tư vấn dựa trên yêu cầu cơ bản của khách hàng.\n- Tập trung vào tính tiện dụng và sự thoải mái.\n- Ưu tiên các sản phẩm mới nhất hoặc best seller nếu khách không có yêu cầu đặc biệt.'),
('womens_day','Quốc Tế Phụ Nữ 8/3','Campaign','08/03/2026',True,'- Ưu tiên gợi ý các sản phẩm váy đầm, đồ đôi, hoặc quà tặng cho phái nữ.\n- Gợi ý các combo quà tặng có giá trị cao.\n- Tone giọng: Nhẹ nhàng, tôn vinh phái đẹp, kèm lời chúc mừng 8/3.\n- Báo cho khách biết đang có chương trình giảm giá 30% cho đồ nữ.'),
('summer_sale','Đón Hè Sôi Động','Campaign','01/05/2026 - 31/05/2026',False,'- Tuyệt đối không gợi ý áo khoác dày, áo len.\n- Chỉ tập trung vào áo phông, đồ bơi, quần short, chất liệu thoáng mát (cotton, lanh).\n- Gợi ý đồ mặc đi biển, đi chơi ngày hè.'),
('black_friday','Black Friday Siêu Sale','Campaign','27/11/2026',False,'- NHẤN MẠNH vào giá sale cực sốc.\n- Up-sale mạnh tay, gợi ý mua theo combo để được giảm thêm.\n- Tạo cảm giác khan hiếm: \'Số lượng có hạn\', \'Sale lớn nhất năm\'.')
]
cur.executemany(
"""
...
...
@@ -148,7 +148,7 @@ def init_db() -> None:
conn.commit()
conn.close()
logger.info("Auto-Train DB initialized at %s",DB_PATH)
logger.info("Auto-Train DB initialized successfully.")
"MAX(CASE WHEN similar_items IS NOT NULL AND similar_items != '[]' AND similar_items != '' THEN 1 ELSE 0 END) OVER (PARTITION BY magento_ref_code) = 1 AS has_sim, "
"MAX(CASE WHEN outfit_recommendations IS NOT NULL AND outfit_recommendations != '[]' AND outfit_recommendations != '' THEN 1 ELSE 0 END) OVER (PARTITION BY magento_ref_code) = 1 AS has_out"
)
data_q=f"""
SELECT {select_cols}
WITH ranked AS (
SELECT {select_cols},
ROW_NUMBER() OVER (PARTITION BY magento_ref_code ORDER BY quantity_sold DESC NULLS LAST) as rn
cursor.execute(f"SELECT gender_by_product, age_by_product, product_group FROM {TABLE} WHERE magento_ref_code = %s OR internal_ref_code = %s OR product_color_code = %s LIMIT 1",(code,code,code))
<textarea class="outfit-reason-input" placeholder="Lý do phối set (reason)..." onchange="updateOutfitReason(${idx}, this.value)">${item.reason||''}</textarea>
reason=f"Màu {tgt_color} của {tgt_name} phối cùng màu {src_color} tạo điểm nhấn ấm áp, nổi bật. {src_name} phối {tgt_name} — giữ ấm hoàn hảo ngày lạnh."