# Google Drive 自動匯入功能說明 ## ✨ 功能概述 系統現在支援從 Google Drive 自動匯入當日業績 Excel 檔案! ### 主要特點 - 🔄 **自動化流程**:每 30 分鐘自動檢查 Google Drive - 📥 **自動下載**:發現新檔案立即下載到本地 - 💾 **自動匯入**:解析 Excel 並匯入到資料庫 - 🗑️ **自動清理**:匯入完成後刪除 Google Drive 原檔 - 📊 **進度追蹤**:完整的任務狀態與進度顯示 - 🌐 **網頁介面**:直觀的設定和監控介面 --- ## 📁 新增檔案清單 ### 後端服務 - `services/google_drive_service.py` - Google Drive API 服務模組 - `services/import_service.py` - 自動匯入服務邏輯 - `database/import_models.py` - 匯入任務與配置資料表模型 - `auto_import_routes.py` - API 路由(Blueprint) ### 前端介面 - `web/auto_import_index.html` - 自動匯入管理頁面 ### 配置與文檔 - `config/` - 存放 Google Drive API 憑證(需自行設定) - `GOOGLE_DRIVE_SETUP.md` - 詳細的設定指南 - `AUTO_IMPORT_README.md` - 本檔案 - `test_google_drive.py` - 測試腳本 ### 資料庫 - 新增資料表:`import_jobs` - 匯入任務記錄 - 新增資料表:`import_config` - 匯入配置 --- ## 🚀 快速開始 ### 1. 安裝依賴 ```bash pip install -r requirements.txt ``` 新增的套件: - `google-auth` - `google-auth-oauthlib` - `google-auth-httplib2` - `google-api-python-client` ### 2. 設定 Google Drive API 請參考:[GOOGLE_DRIVE_SETUP.md](GOOGLE_DRIVE_SETUP.md) 簡要步驟: 1. 建立 Google Cloud 專案 2. 啟用 Google Drive API 3. 建立 OAuth 2.0 憑證 4. 下載憑證檔案並放到 `config/google_credentials.json` 5. 執行首次認證 ### 3. 配置資料夾路徑 1. 在 Google Drive 建立資料夾結構: ``` 我的雲端硬碟/ └── 業績報表/ └── 當日業績/ ``` 2. 開啟網頁介面:http://localhost/auto_import 3. 設定: - **Google Drive 資料夾路徑**:`業績報表/當日業績` - **檔案名稱模式**:`即時業績_當日` 4. 點擊「儲存配置」 ### 4. 測試連接 執行測試腳本: ```bash python3 test_google_drive.py ``` 或在網頁介面點擊「測試連接」 ### 5. 上傳測試檔案 將當日業績 Excel 檔案上傳到 Google Drive 的 `業績報表/當日業績` 資料夾 ### 6. 手動測試匯入 在網頁介面點擊「立即匯入」,觀察匯入進度 --- ## 🎯 使用方式 ### 自動模式(推薦) 系統每 30 分鐘自動執行: 1. 檢查 Google Drive 指定資料夾 2. 發現新的 Excel 檔案 3. 自動下載到本地 `data/temp/` 4. 自動匯入到資料庫 5. 自動刪除 Google Drive 原檔 6. 清理本地暫存檔 ### 手動模式 在網頁介面點擊「立即匯入」可手動觸發匯入流程。 ### 監控進度 開啟:http://localhost/auto_import 可以看到: - ✅ 匯入配置 - 📋 檔案清單 - 📊 匯入任務歷史 - 🔄 即時進度更新(每 10 秒自動刷新) --- ## 📊 資料表結構 ### import_jobs(匯入任務) | 欄位 | 類型 | 說明 | |-----|-----|-----| | id | INTEGER | 任務 ID | | job_type | VARCHAR | 任務類型(daily_sales, vendor_stockout) | | status | VARCHAR | 狀態(pending, downloading, importing, completed, failed) | | drive_file_id | VARCHAR | Google Drive 檔案 ID | | drive_file_name | VARCHAR | 檔案名稱 | | drive_file_size | INTEGER | 檔案大小(bytes) | | local_file_path | VARCHAR | 本地檔案路徑 | | progress_percent | FLOAT | 進度百分比 (0-100) | | current_step | VARCHAR | 當前步驟描述 | | total_rows | INTEGER | 總行數 | | processed_rows | INTEGER | 已處理行數 | | success_rows | INTEGER | 成功匯入行數 | | error_rows | INTEGER | 錯誤行數 | | created_at | DATETIME | 建立時間 | | started_at | DATETIME | 開始時間 | | completed_at | DATETIME | 完成時間 | | error_message | TEXT | 錯誤訊息 | | import_summary | TEXT | 匯入摘要(JSON) | ### import_config(匯入配置) | 欄位 | 類型 | 說明 | |-----|-----|-----| | id | INTEGER | 配置 ID | | config_key | VARCHAR | 配置鍵 | | config_value | TEXT | 配置值 | | config_type | VARCHAR | 配置類型(string, int, bool, json) | | description | VARCHAR | 配置說明 | | created_at | DATETIME | 建立時間 | | updated_at | DATETIME | 更新時間 | --- ## 🔧 API 端點 ### 查詢任務清單 ``` GET /api/import_jobs?limit=20 ``` ### 查詢單一任務 ``` GET /api/import_jobs/{job_id} ``` ### 取得配置 ``` GET /api/import_config ``` ### 設定配置 ``` POST /api/import_config Content-Type: application/json { "folder_path": "業績報表/當日業績", "file_pattern": "即時業績_當日" } ``` ### 測試連接 ``` POST /api/test_drive_connection ``` ### 列出檔案 ``` POST /api/list_drive_files Content-Type: application/json { "folder_path": "業績報表/當日業績", "file_pattern": "即時業績_當日" } ``` ### 手動觸發匯入 ``` POST /api/manual_import ``` --- ## ⚙️ 排程設定 在 `app.py` 中已註冊排程: ```python # 每半小時執行一次 Google Drive 自動匯入任務 schedule.every(30).minutes.do(run_auto_import_task) ``` ### 修改檢查頻率 編輯 `app.py`: ```python # 每 15 分鐘 schedule.every(15).minutes.do(run_auto_import_task) # 每小時 schedule.every(1).hours.do(run_auto_import_task) # 每天早上 8 點 schedule.every().day.at("08:00").do(run_auto_import_task) ``` --- ## 🔒 安全性 ### 敏感檔案保護 以下檔案已加入 `.gitignore`: - `config/google_credentials.json` - OAuth 2.0 憑證 - `config/google_token.pickle` - 存取權杖 - `config/*.json` - 所有 JSON 配置 - `config/*.pickle` - 所有 pickle 檔案 ### OAuth 權限範圍 目前使用:`https://www.googleapis.com/auth/drive`(完整 Drive 存取) 如需更嚴格控制,可修改 `services/google_drive_service.py` 中的 `SCOPES`: ```python # 僅存取應用程式建立的檔案 SCOPES = ['https://www.googleapis.com/auth/drive.file'] # 僅讀取檔案 SCOPES = ['https://www.googleapis.com/auth/drive.readonly'] ``` ### 授權管理 - 檢查授權:https://myaccount.google.com/permissions - 撤銷授權:刪除 `config/google_token.pickle` 並重新認證 --- ## 📝 日誌 ### 查看自動匯入日誌 ```bash tail -f logs/system.log | grep AutoImport ``` ### 查看排程統計 ```bash cat data/scheduler_stats.json | jq '.auto_import_task' ``` --- ## 🐛 故障排除 ### 問題 1:認證失敗 **解決方法**: 1. 確認 `config/google_credentials.json` 存在 2. 刪除 `config/google_token.pickle` 並重新認證 3. 執行:`python3 test_google_drive.py` ### 問題 2:找不到資料夾 **解決方法**: 1. 確認資料夾路徑正確(區分大小寫) 2. 確認使用正確的 Google 帳號 3. 在網頁介面點擊「列出檔案」測試 ### 問題 3:檔案沒有被刪除 **解決方法**: 1. 檢查任務狀態是否為「已完成」 2. 查看日誌:`tail -f logs/system.log` 3. 確認 Google Drive API 權限正確 ### 問題 4:匯入失敗 **解決方法**: 1. 檢查 Excel 檔案格式是否正確 2. 查看任務的錯誤訊息 3. 手動測試:在網頁介面點擊「立即匯入」 --- ## 🔄 工作流程 ``` ┌─────────────────┐ │ Google Drive │ │ 新檔案上傳 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 排程任務執行 │ │ (每 30 分鐘) │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 檢查檔案清單 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 建立匯入任務 │ │ (import_jobs) │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 下載到本地 │ │ data/temp/ │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 解析 Excel │ │ 匯入資料庫 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 刪除 Drive 原檔 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 清理本地檔案 │ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 任務完成 │ │ 更新狀態記錄 │ └─────────────────┘ ``` --- ## 📚 相關文檔 - [Google Drive API 設定指南](GOOGLE_DRIVE_SETUP.md) - [Docker 部署指南](DEPLOY_README.md) - [GCP Cloud Run 部署](deploy_docker_guide.md) --- ## 🎉 完成! 您現在擁有一個完全自動化的當日業績匯入系統! **使用流程:** 1. 將 Excel 檔案上傳到 Google Drive 2. 系統每 30 分鐘自動檢查 3. 自動下載、匯入、刪除 4. 在網頁介面監控進度 **無需手動操作!** 🚀