feat: 新增产品管理模块 + AI基于产品详情生成范式对话 + 一键远程部署脚本

- schema.sql: 新增 product 表(positioning/selling_points) + deal 表加 product_id + 序列重置 + ALTER TABLE 迁移
- server.py: 产品 CRUD API + deal 关联 product_id + 仪表盘产品线统计 + 范式对话动态读取产品详情
- index.html: 产品管理页面 + 录入成交产品下拉 + 仪表盘增强 + 范式对话产品选择 + 导航通用化
- run_demo.sh: python 改 python3 + 预置成交关联 product_id
- deploy.sh: 一键远程部署脚本(rsync+ssh+重启)
- deploy_remote.sh: 远程数据库迁移脚本
This commit is contained in:
selfrelease
2026-07-15 11:37:33 +08:00
parent 5926c73ff1
commit 2b0c35220a
6 changed files with 843 additions and 53 deletions
+24 -22
View File
@@ -30,7 +30,7 @@ bash "$ROOT/db/init_db.sh"
echo ""
echo "[2/5] 运行模拟采集代理..."
for sp_id in 1 2 3; do
python "$ROOT/agent/mock_sync.py" --salesperson-id $sp_id
python3 "$ROOT/agent/mock_sync.py" --salesperson-id $sp_id
done
# 4. AI 分析
@@ -38,10 +38,10 @@ echo ""
echo "[3/5] AI 分析..."
if [ -n "$DASHSCOPE_API_KEY" ]; then
echo " 使用千问 LLM 模式"
python "$ROOT/ai/analyze.py" --mode llm
python3 "$ROOT/ai/analyze.py" --mode llm
else
echo " 未设置 DASHSCOPE_API_KEY,使用规则模式"
python "$ROOT/ai/analyze.py" --mode rule
python3 "$ROOT/ai/analyze.py" --mode rule
fi
# 5. 预置成交数据
@@ -56,43 +56,45 @@ WHERE d1.id > d2.id
AND d1.customer_id = d2.customer_id
AND d1.product_name = d2.product_name
AND d1.deal_date = d2.deal_date;
-- 清理旧格式产品名数据(不带产品线前缀的旧名称)
DELETE FROM deal WHERE product_name IN ('益童宝3盒套餐', '益童宝6盒套餐', '益童宝单盒');
-- 预置成交(用 NOT EXISTS 防重复)
INSERT INTO deal (salesperson_id, customer_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, '益童宝3盒套餐', 798, '2026-07-05', 'closed'
INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, 1, '益童宝益生菌 3盒套餐', 798, '2026-07-05', 'closed'
FROM salesperson s, customer cu
WHERE s.id = 1 AND cu.salesperson_id = 1 AND cu.customer_name LIKE '辰辰%'
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝3盒套餐' AND deal_date = '2026-07-05');
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝益生菌 3盒套餐' AND deal_date = '2026-07-05');
INSERT INTO deal (salesperson_id, customer_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, '益童宝3盒套餐', 798, '2026-07-08', 'closed'
INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, 1, '益童宝益生菌 3盒套餐', 798, '2026-07-08', 'closed'
FROM salesperson s, customer cu
WHERE s.id = 1 AND cu.salesperson_id = 1 AND cu.customer_name LIKE '依依%'
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝3盒套餐' AND deal_date = '2026-07-08');
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝益生菌 3盒套餐' AND deal_date = '2026-07-08');
INSERT INTO deal (salesperson_id, customer_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, '益童宝6盒套餐', 1499, '2026-07-12', 'closed'
INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, 3, '益童宝益生菌 6盒套餐', 1499, '2026-07-12', 'closed'
FROM salesperson s, customer cu
WHERE s.id = 1 AND cu.salesperson_id = 1 AND cu.customer_name LIKE '糖糖%'
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝6盒套餐' AND deal_date = '2026-07-12');
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝益生菌 6盒套餐' AND deal_date = '2026-07-12');
INSERT INTO deal (salesperson_id, customer_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, '益童宝单盒', 298, '2026-07-10', 'closed'
INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, 2, '益童宝益生菌 单盒', 298, '2026-07-10', 'closed'
FROM salesperson s, customer cu
WHERE s.id = 2 AND cu.salesperson_id = 2 AND cu.customer_name LIKE '甜甜%'
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝单盒' AND deal_date = '2026-07-10');
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝益生菌 单盒' AND deal_date = '2026-07-10');
INSERT INTO deal (salesperson_id, customer_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, '益童宝3盒套餐', 798, '2026-07-06', 'closed'
INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, 1, '益童宝益生菌 3盒套餐', 798, '2026-07-06', 'closed'
FROM salesperson s, customer cu
WHERE s.id = 3 AND cu.salesperson_id = 3 AND cu.customer_name LIKE '阳阳%'
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝3盒套餐' AND deal_date = '2026-07-06');
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝益生菌 3盒套餐' AND deal_date = '2026-07-06');
INSERT INTO deal (salesperson_id, customer_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, '益童宝3盒套餐', 798, '2026-06-20', 'closed'
INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status)
SELECT s.id, cu.id, 1, '益童宝益生菌 3盒套餐', 798, '2026-06-20', 'closed'
FROM salesperson s, customer cu
WHERE s.id = 3 AND cu.salesperson_id = 3 AND cu.customer_name LIKE '糖糖%'
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝3盒套餐' AND deal_date = '2026-06-20');
AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝益生菌 3盒套餐' AND deal_date = '2026-06-20');
" 2>/dev/null || true
DEAL_COUNT=$($PSQL -t -c "SELECT count(*) FROM deal")
@@ -108,7 +110,7 @@ if lsof -ti:8770 >/dev/null 2>&1; then
sleep 1
fi
nohup python -m uvicorn web.server:app --port 8770 --host 127.0.0.1 \
nohup python3 -m uvicorn web.server:app --port 8770 --host 127.0.0.1 \
> "$ROOT/web.log" 2>&1 &
echo $! > "$PID_FILE"
sleep 2