From f0658bcda8a88b56698bd1faa61a6e1d578fcacd Mon Sep 17 00:00:00 2001 From: selfrelease Date: Wed, 15 Jul 2026 12:27:10 +0800 Subject: [PATCH] =?UTF-8?q?deploy:=20deploy.sh=20=E5=AE=8C=E6=95=B47?= =?UTF-8?q?=E6=AD=A5=E9=83=A8=E7=BD=B2=E6=B5=81=E7=A8=8B(=E4=BB=A3?= =?UTF-8?q?=E7=A0=81+=E8=BF=81=E7=A7=BB+mock=E6=95=B0=E6=8D=AE+AI=E5=88=86?= =?UTF-8?q?=E6=9E=90+=E6=88=90=E4=BA=A4+=E9=87=8D=E5=90=AF+=E9=AA=8C?= =?UTF-8?q?=E8=AF=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy.sh | 115 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 9 deletions(-) diff --git a/deploy.sh b/deploy.sh index e85dcab..b72dbb0 100644 --- a/deploy.sh +++ b/deploy.sh @@ -11,6 +11,10 @@ REMOTE_USER="root" REMOTE_PATH="/opt/wxsales" REMOTE_DEMO="${REMOTE_PATH}/demo" +# 数据库连接参数 +DB_DSN="host=127.0.0.1 port=5432 dbname=wxchat_sales user=postgres password=Why_701208" +DB_ENV="DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=postgres DB_PASSWORD=Why_701208 DB_NAME=wxchat_sales" + echo "==========================================" echo " 微信销售管理系统 - 远程部署" echo "==========================================" @@ -18,7 +22,7 @@ echo " 目标: ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}" echo "" # 1. Git 提交推送 -echo "[1/5] Git 提交推送..." +echo "[1/7] Git 提交推送..." cd "$(dirname "$0")" if [ -n "$(git status --porcelain)" ]; then @@ -32,22 +36,108 @@ fi # 2. 同步代码到远程 echo "" -echo "[2/5] 同步代码到远程服务器..." +echo "[2/7] 同步代码到远程服务器..." ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p ${REMOTE_PATH}" rsync -avz --delete --exclude='db/data' --exclude='db/socket' --exclude='__pycache__' \ --exclude='.git' --exclude='web.log' --exclude='.run.pid' \ "$(dirname "$0")/demo/" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DEMO}/" echo " ✓ 代码已同步" -# 3. 远程执行数据库迁移 + 重启服务 +# 3. 远程执行数据库迁移 echo "" -echo "[3/5] 远程数据库迁移..." +echo "[3/7] 远程数据库迁移..." ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} bash ${REMOTE_DEMO}/deploy_remote.sh echo " ✓ 数据库迁移完成" -# 4. 重启 Web 服务 +# 4. 同步 Mock 数据 + AI 分析 echo "" -echo "[4/5] 重启 Web 服务..." +echo "[4/7] 同步 Mock 数据 + AI 分析..." +ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} " + cd ${REMOTE_DEMO} + # 清空旧数据(保留 product/salesperson 预置数据) + su - postgres -c \"psql -h /run/postgresql -p 5432 -d wxchat_sales -c 'TRUNCATE message, conversation, contact, customer, deal RESTART IDENTITY CASCADE;'\" 2>/dev/null + echo ' ✓ 旧数据已清空' + + # 生成 3 个销售的 mock 对话数据 + for spid in 1 2 3; do + /usr/bin/python3 agent/mock_sync.py --salesperson-id \$spid --dsn '${DB_DSN}' 2>&1 | grep -E '\"contacts\"|\"new_messages\"' + done + echo ' ✓ Mock 对话数据已生成' + + # AI 分析识别客户 + /usr/bin/python3 ai/analyze.py --mode rule --force --dsn '${DB_DSN}' 2>&1 | python3 -c ' +import sys, json +d = json.load(sys.stdin) +print(f\" ✓ AI分析完成: {d[\"customers_identified\"]} 个客户, {d[\"summaries_generated\"]} 条摘要\") +' +" +echo " ✓ Mock 数据 + AI 分析完成" + +# 5. 预置成交记录 +echo "" +echo "[5/7] 预置成交记录..." +ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} " + su - postgres -c \"psql -h /run/postgresql -p 5432 -d wxchat_sales\" <<'DEALSQL' +-- 儿童益生菌预置成交 +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'); + +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'); + +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'); + +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'); + +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'); + +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'); + +-- 减肥益生菌预置成交 +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 4, '纤益益生菌 2盒套餐', 656, '2026-07-08', '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 = '纤益益生菌 2盒套餐' AND deal_date = '2026-07-08'); + +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 4, '纤益益生菌 2盒套餐', 656, '2026-07-14', '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 = '纤益益生菌 2盒套餐' AND deal_date = '2026-07-14'); + +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 5, '纤益益生菌 单盒', 328, '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'); + +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 4, '纤益益生菌 2盒套餐', 656, '2026-07-13', '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 = '纤益益生菌 2盒套餐' AND deal_date = '2026-07-13'); + +SELECT count(*) AS total_deals FROM deal; +DEALSQL +" +echo " ✓ 预置成交记录已插入" + +# 6. 重启 Web 服务 +echo "" +echo "[6/7] 重启 Web 服务..." ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} " # 停止旧进程 if lsof -ti:8770 >/dev/null 2>&1; then @@ -56,7 +146,7 @@ ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} " fi # 启动新进程 cd ${REMOTE_DEMO} - DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=postgres DB_PASSWORD=Why_701208 DB_NAME=wxchat_sales \ + ${DB_ENV} \ nohup /usr/bin/python3 -m uvicorn web.server:app --host 127.0.0.1 --port 8770 \ > ${REMOTE_DEMO}/web.log 2>&1 & sleep 2 @@ -69,9 +159,9 @@ ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} " fi " -# 5. 验证 +# 7. 验证 echo "" -echo "[5/5] 验证..." +echo "[7/7] 验证..." if curl -s --max-time 10 http://sale.all8ai.top/api/products | grep -q '"id"' 2>/dev/null; then echo " ✓ 域名访问正常: http://sale.all8ai.top" else @@ -80,7 +170,14 @@ fi PRODUCT_COUNT=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} \ "curl -s http://127.0.0.1:8770/api/products | python3 -c 'import sys,json; print(len(json.load(sys.stdin)))'" 2>/dev/null || echo "?") +CUSTOMER_COUNT=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} \ + "curl -s http://127.0.0.1:8770/api/customers | python3 -c 'import sys,json; print(len(json.load(sys.stdin)))'" 2>/dev/null || echo "?") +DEAL_COUNT=$(ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} \ + "su - postgres -c \"psql -h /run/postgresql -p 5432 -d wxchat_sales -t -c 'SELECT count(*) FROM deal;'\"" 2>/dev/null | xargs || echo "?") + echo " ✓ 产品数量: ${PRODUCT_COUNT}" +echo " ✓ 客户数量: ${CUSTOMER_COUNT}" +echo " ✓ 成交记录: ${DEAL_COUNT}" echo "" echo "=========================================="