Files
ewoooc/scripts/install_ppt_cleanup.sh
OoO 38967ceea3
All checks were successful
CD Pipeline / deploy (push) Successful in 13m18s
feat(ppt): redesign all 6 reports to professional standard + cache versioning
PPT 模板全面升版至市場專業標準(McKinsey / BCG 月報級別):

Monthly v3.1(10 頁)
- 暖紙感封面(去黑底)+ elevator pitch(亮點/警訊/動能徽章)
- KPI 卡含 △% vs 上月 + 紅綠燈、YoY 同期對比帶
- matplotlib 業績趨勢折線(本月+上月+日均線+高低點)
- 品類分析雙視圖:橫條 + 帕雷托累計(80% 主力線)
- TOP 50 商品(自動分頁)+ vs 上月 △ 排名變化 / 🆕 新進榜
- MCP 情報 4 卡片結構化、AI 行動結構化分區、附錄頁

Daily / Weekly / Strategy / Promo / Competitor v3.0
- 統一暖紙封面、AI 頁去黑底改暖紙 + 焦糖橘色條
- 日週改 matplotlib 折線(含日均線、高低點)
- 全部加附錄頁(資料來源 / 計算口徑 / 模板版本)

Cache 版本控制
- TEMPLATE_VERSIONS 字典自動注入 cache key (tpl_ver)
- 模板升版舊快取自動 miss → 重生
- 新增 _invalidate_ppt_cache() 與 cleanup_expired_ppt_cache() helper
- 新增 /cache status / flush / cleanup Telegram 指令

字型系統
- _set_run_fonts() 用 lxml 直寫 a:latin/a:ea,中英分軌
- 中文走 Microsoft JhengHei,數字/英文走 Consolas(點陣等寬)
- Dockerfile 加 fonts-noto-cjk + fonts-noto-cjk-extra

部署排程
- scripts/install_ppt_cleanup.sh 一鍵安裝 launchd(每日 03:15)
- scripts/ppt_cleanup.sh 清 7 天前過期 PPT 檔 + DB row

資料層
- routes monthly: query_monthly_summary LIMIT 10 → 50,補 orders 欄位
- routes monthly: 拉 prev_month / prev_year 比較資料供 KPI △ 與商品 △ 計算

煙霧測試 6/6 全綠:
- 日報 v3.0 (5 頁) / 週報 v3.0 (6 頁) / 月報 v3.1 (10 頁)
- 策略 v3.0 (6 頁) / 促銷 v3.0 (6 頁) / 競品 v3.0 (5 頁)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 16:26:27 +08:00

75 lines
3.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# scripts/install_ppt_cleanup.sh
# 一鍵安裝:將 PPT cleanup 排程到 macOS launchd每日 03:15 執行)。
#
# 用法:
# bash scripts/install_ppt_cleanup.sh # 安裝
# bash scripts/install_ppt_cleanup.sh --uninstall # 解除安裝
# bash scripts/install_ppt_cleanup.sh --test # 安裝後立刻跑一次
set -euo pipefail
# ── 路徑解析 ────────────────────────────────────────────────────────────
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
LOG_DIR="${PROJECT_DIR}/logs"
SCRIPT_PATH="${SCRIPT_DIR}/ppt_cleanup.sh"
PLIST_NAME="com.openclaw.ppt-cleanup"
PLIST_SRC="${SCRIPT_DIR}/${PLIST_NAME}.plist"
PLIST_DST="${HOME}/Library/LaunchAgents/${PLIST_NAME}.plist"
mkdir -p "$LOG_DIR"
mkdir -p "$(dirname "$PLIST_DST")"
chmod +x "$SCRIPT_PATH"
# ── 解除安裝 ────────────────────────────────────────────────────────────
if [[ "${1:-}" == "--uninstall" ]]; then
if launchctl list | grep -q "$PLIST_NAME"; then
launchctl unload "$PLIST_DST" 2>/dev/null || true
fi
rm -f "$PLIST_DST"
echo "✅ 已解除安裝 ${PLIST_NAME}"
exit 0
fi
# ── 安裝 ────────────────────────────────────────────────────────────────
echo "🔧 安裝 PPT cleanup launchd job..."
echo " PROJECT_DIR : $PROJECT_DIR"
echo " SCRIPT_PATH : $SCRIPT_PATH"
echo " LOG_DIR : $LOG_DIR"
echo " PLIST_DST : $PLIST_DST"
# 替換 plist 中的 placeholder
sed -e "s|__SCRIPT_PATH__|${SCRIPT_PATH}|g" \
-e "s|__LOG_DIR__|${LOG_DIR}|g" \
-e "s|__PROJECT_DIR__|${PROJECT_DIR}|g" \
"$PLIST_SRC" > "$PLIST_DST"
# 重新載入 launchd job
launchctl unload "$PLIST_DST" 2>/dev/null || true
launchctl load "$PLIST_DST"
echo "✅ 已安裝 ${PLIST_NAME}(每日 03:15 執行)"
echo ""
echo "驗證:"
launchctl list | grep "$PLIST_NAME" || echo " job 尚未列出,可重啟 Mac 或執行 launchctl load"
# ── 即刻測試 ────────────────────────────────────────────────────────────
if [[ "${1:-}" == "--test" ]]; then
echo ""
echo "🚀 立即觸發一次測試..."
launchctl start "$PLIST_NAME"
sleep 2
echo "📋 stdout 最後 20 行:"
tail -20 "${LOG_DIR}/ppt_cleanup.stdout.log" 2>/dev/null || echo " (尚無輸出)"
echo "📋 stderr 最後 20 行:"
tail -20 "${LOG_DIR}/ppt_cleanup.stderr.log" 2>/dev/null || echo " (無 stderr正常"
fi
echo ""
echo "🛠 後續操作:"
echo " 立即觸發: launchctl start $PLIST_NAME"
echo " 解除安裝: bash $0 --uninstall"
echo " 查看日誌: tail -f ${LOG_DIR}/ppt_cleanup.log"