15th_final and clean

This commit is contained in:
beabigegg
2025-09-04 16:37:33 +08:00
parent e680d2af5a
commit f093f4bbc2
134 changed files with 1302 additions and 18016 deletions

468
README.md
View File

@@ -1,281 +1,319 @@
# PANJIT Document Translator
# PANJIT 文件翻譯系統
企業級文件翻譯管理系統,提供 Web 化介面,支援多語言文件翻譯、使用者權限管理、任務排隊處理及成本追蹤功能。
## 專案簡介
## 功能特色
PANJIT 文件翻譯系統是一個企業級的多語言文件翻譯平台,支持多種文件格式的自動翻譯。系統採用 Flask + Vue.js 架構,整合 LDAP 認證、Celery 異步處理、通知系統等企業功能。
- 🔐 **LDAP 認證**:整合公司 AD 帳號系統
- 📄 **多格式支援**:支援 DOCX、PDF、PPTX、XLSX 等格式
- 🌐 **多語言翻譯**:支援 12+ 種語言互
- **非同步處理**:使用 Celery 任務佇列
- 💰 **成本追蹤**:即時記錄 API 使用成本
- 📊 **統計報表**:完整的使用量分析和圖表展示
- 📧 **通知系統**SMTP 郵件通知
- 🛡️ **權限管理**:使用者資料隔離
- 🔍 **即時監控**:系統健康狀態檢查
- 🎯 **管理後台**:完整的管理員功能和報表匯出
- 📱 **響應式設計**:支援桌面和行動裝置
- 🔄 **組合翻譯**:多語言組合檔案輸出
### 主要功能
- **多格式翻譯**:支援 Word (.docx)、PowerPoint (.pptx)、Excel (.xlsx)、PDF 文件翻
- **多語言支援**:支援繁體中文、簡體中文、英語、日語、韓語、越南語等
- **LDAP 認證**:整合企業 Active Directory 用戶系統
- **異步處理**:使用 Celery + Redis 處理翻譯任務
- **即時通知**WebSocket 即時狀態更新 + 郵件通知
- **檔案管理**:支援單檔下載、批量下載、合併檔案下載
- **管理後台**:系統統計、用戶管理等功能
## 技術架構
### 後端
- **Python 3.8+** - 主要開發語言
- **Flask 3.0** - Web 框架
- **SQLAlchemy** - ORM 資料庫操作
- **Celery** - 非同步任務處理
- **Redis** - 快取與訊息佇列
- **MySQL** - 主要資料庫
- **LDAP3** - AD 認證
**後端**
- Python 3.8+
- Flask 3.0 + SQLAlchemy 2.0
- MySQL 資料庫
- Celery 4.5 + Redis
- LDAP3 認證
- Socket.IO 即時通信
### 前端
- **Vue 3** - 前端框架 (Composition API)
- **Element Plus** - UI 組件庫
- **Vite** - 建置工具
- **Pinia** - 狀態管理
- **Vue Router** - 路由管理
- **ECharts** - 數據圖表
**前端**
- Vue.js 3.0 + Composition API
- Element Plus UI 框架
- Pinia 狀態管理
- Vite 建置工具
## 快速開始
## 系統需求
### 環境需求
- Python 3.8 或更高版本
- Python 3.8+
- Node.js 16+
- Redis Server
- MySQL Server使用現有環境
- Git
- MySQL 資料庫(已配置
- Windows 10+ 或 Linux 系統
### 安裝步驟
## 快速啟動
1. **下載專案**
### 開發環境
1. **克隆專案**
```bash
cd C:\Users\EGG\WORK\data\user_scrip\TOOL\Document_translator_V2
```
2. **配置環境變數**
2. **後端啟動**
```bash
copy .env.example .env
# 編輯 .env 檔案設定您的環境變數
```
3. **建立 API 配置檔案**
```bash
# 建立 api.txt 檔案並設定 Dify API
echo base_url:YOUR_DIFY_API_BASE_URL > api.txt
echo api:YOUR_DIFY_API_KEY >> api.txt
```
4. **啟動開發環境**
```bash
# Windows - 後端
# 使用提供的啟動腳本
start_dev.bat
# 或手動啟動後端
# 或手動啟動
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
python app.py
```
5. **啟動前端**(另開視窗)
3. **前端啟動**(另開命令視窗)
```bash
cd frontend
npm install
npm run dev
# 或使用提供的腳本
# 或使用批次檔
start_frontend.bat
```
6. **啟動 Celery Worker**(另開視窗)
4. **Celery Worker 啟動**(另開命令視窗)
```bash
venv\Scripts\activate
celery -A celery_app worker --loglevel=info --pool=solo
celery -A app.celery worker --loglevel=info --pool=solo
# 或使用批次檔
start_celery_worker.bat
```
### 系統訪問
- **前端界面**: http://127.0.0.1:5173 (開發)
- **後端 API**: http://127.0.0.1:5000
- **API 文檔**: http://127.0.0.1:5000/api
- **健康檢查**: http://127.0.0.1:5000/api/v1/health
- **前端界面**: http://127.0.0.1:5173 (開發模式)
- **後端 API**: http://127.0.0.1:12010 (生產模式)
- **API 文檔**: http://127.0.0.1:12010/api
- **健康檢查**: http://127.0.0.1:12010/api/v1/health
## 專案結構
```
Document_translator_V2/
├── app/ # 後端應用
│ ├── api/ # API 路由
│ ├── models/ # 資料模型
│ ├── services/ # 業務邏輯
│ ├── tasks/ # Celery 任務
│ └── utils/ # 工具函數
├── frontend/ # 前端應用
│ ├── src/
│ │ ├── components/ # Vue 組件
│ │ ├── views/ # 頁面視圖
│ │ ├── stores/ # Pinia 狀態
│ │ └── utils/ # 工具函數
│ └── package.json
├── uploads/ # 檔案上傳目錄
├── logs/ # 日誌目錄
├── app.py # 主應用入口
├── celery_app.py # Celery 配置
├── requirements.txt # Python 依賴
└── .env # 環境變數
```
## 配置說明
### 環境變數 (.env)
系統需要以下環境變數配置:
```env
# 資料庫配置
DATABASE_URL=mysql+pymysql://user:pass@host:port/db_name
MYSQL_HOST=mysql.theaken.com
MYSQL_PORT=33306
MYSQL_USER=A060
MYSQL_DATABASE=db_A060
# LDAP 配置
LDAP_SERVER=panjit.com.tw
LDAP_PORT=389
LDAP_BIND_USER_DN=CN=LdapBind,CN=Users,DC=PANJIT,DC=COM,DC=TW
# SMTP 配置
SMTP_SERVER=mail.panjit.com.tw
SMTP_PORT=25
SMTP_SENDER_EMAIL=todo-system@panjit.com.tw
# Redis 配置
REDIS_URL=redis://localhost:6379/0
```
### API 配置 (api.txt)
系統使用 Dify API 進行翻譯,需要配置:
```
base_url:YOUR_DIFY_API_BASE_URL
api:YOUR_DIFY_API_KEY
```
## 部署指南
### Docker 部署
1. **建置映像**
```bash
docker build -t panjit-translator .
```
2. **啟動服務**
```bash
docker-compose up -d
```
3. **檢查狀態**
```bash
docker-compose ps
docker logs panjit-translator
```
### 生產環境
1. **使用 Gunicorn 啟動**
```bash
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:12010 app:app
```
2. **前端建置**
```bash
cd frontend
npm run build
```
3. **配置 Web 服務器**
將 `frontend/dist` 部署到 Nginx 或 Apache
## API 文檔
### 認證相關
- `POST /api/v1/auth/login` - 用戶登入
- `POST /api/v1/auth/logout` - 用戶登出
- `GET /api/v1/auth/me` - 獲取當前用戶
| 端點 | 方法 | 描述 | 認證 |
|------|------|------|------|
| `/api/v1/auth/login` | POST | 使用者登入 | - |
| `/api/v1/auth/logout` | POST | 使用者登出 | ✓ |
| `/api/v1/auth/me` | GET | 取得當前使用者 | ✓ |
### 檔案管理
| 端點 | 方法 | 描述 | 認證 |
|------|------|------|------|
| `/api/v1/files/upload` | POST | 上傳檔案 | ✓ |
| `/api/v1/files/{uuid}/download/{lang}` | GET | 下載翻譯檔案 | ✓ |
| `/api/v1/files/supported-formats` | GET | 支援的檔案格式 | - |
### 檔案上傳
- `POST /api/v1/files/upload` - 上傳檔案
### 任務管理
- `GET /api/v1/jobs` - 獲取任務列表
- `GET /api/v1/jobs/{uuid}` - 獲取任務詳情
- `POST /api/v1/jobs/{uuid}/retry` - 重試任務
| 端點 | 方法 | 描述 | 認證 |
|------|------|------|------|
| `/api/v1/jobs` | GET | 取得任務列表 | ✓ |
| `/api/v1/jobs/{uuid}` | GET | 任務詳細資訊 | ✓ |
| `/api/v1/jobs/{uuid}/retry` | POST | 重試失敗任務 | ✓ |
### 檔案下載
- `GET /api/v1/files/{uuid}/download/{lang}` - 下載指定語言版本
- `GET /api/v1/files/{uuid}/download/batch` - 批量下載 (ZIP)
- `GET /api/v1/files/{uuid}/download/combine` - 下載合併檔案
### 管理功能
### 通知系統
- `GET /api/v1/notifications` - 獲取通知列表
- `POST /api/v1/notifications/{id}/read` - 標記已讀
| 端點 | 方法 | 描述 | 認證 |
|------|------|------|------|
| `/api/v1/admin/stats` | GET | 系統統計 | 管理員 |
| `/api/v1/admin/jobs` | GET | 所有任務 | 管理員 |
| `/api/v1/admin/users` | GET | 使用者列表 | 管理員 |
| `/api/v1/admin/health` | GET | 系統健康狀態 | 管理員 |
| `/api/v1/admin/export/{type}` | GET | 報表匯出 | 管理員 |
## 測試
### 執行測試
```bash
# Windows
run_tests.bat
# 或手動執行
pytest tests/ -v
pytest tests/ --cov=app --cov-report=html
```
### 測試覆蓋率
測試覆蓋率報告會生成到 `htmlcov/index.html`,目標覆蓋率 > 80%。
## 資料庫結構
### 主要資料表
- `dt_users` - 使用者資訊
- `dt_translation_jobs` - 翻譯任務
- `dt_job_files` - 檔案記錄
- `dt_translation_cache` - 翻譯快取
- `dt_api_usage_stats` - API 使用統計
- `dt_system_logs` - 系統日誌
## 部署指南
### 開發環境
使用提供的 `start_dev.bat` 腳本快速啟動開發環境。
### 生產環境
1. **安裝 Gunicorn**
```bash
pip install gunicorn
```
2. **配置環境變數**
```bash
export FLASK_ENV=production
export DATABASE_URL=your_production_db_url
```
3. **啟動應用程式**
```bash
gunicorn -w 4 -b 0.0.0.0:5000 app:app
```
4. **啟動 Celery**
```bash
celery -A app.celery worker -D
celery -A app.celery beat -D
```
## 監控與維護
### 健康檢查
系統提供完整的健康檢查端點:
- **基本檢查**: `/api/v1/health/ping`
- **完整檢查**: `/api/v1/health`
- **系統指標**: `/api/v1/health/metrics`
### 日誌管理
- **應用日誌**: `logs/app.log`
- **系統日誌**: 儲存在資料庫 `dt_system_logs` 表
- **日誌等級**: DEBUG, INFO, WARNING, ERROR, CRITICAL
### 自動清理
系統會自動執行以下清理任務:
- **每日凌晨 2 點**: 清理 7 天以上的舊檔案
- **每日早上 8 點**: 發送管理員報告
- **手動清理**: 通過管理員 API 執行
## 安全性
- ✅ LDAP 認證整合
- ✅ 使用者工作隔離
- ✅ 檔案權限控制
- ✅ SQL 注入防護
- ✅ 速率限制
- ✅ 敏感資料保護
### 系統管理
- `GET /api/v1/admin/stats` - 系統統計
- `GET /api/v1/health` - 健康檢查
## 故障排除
### 常見問題
1. **Redis 連失敗**
- 檢查 Redis 服務是否運行
- 確認 `REDIS_URL` 設定正確
1. **Redis 連失敗**
- 確認 Redis 服務是否運行
- 檢查 REDIS_URL 設定
2. **LDAP 認證失敗**
- 檢查 LDAP 設定參數
- 確認網路連線正常
2. **資料庫連接失敗**
- 確認 MySQL 連接參數
- 檢查網路連
3. **檔案上傳失敗**
- 檢查 `UPLOAD_FOLDER` 權限
- 確認檔案大小限制
3. **LDAP 認證失敗**
- 確認 LDAP 服務器設定
- 檢查服務帳號權限
4. **翻譯任務卡住**
- 檢查 Celery Worker 狀態
- 查看 Dify API 連線
4. **檔案上傳失敗**
- 檢查 uploads 目錄權限
- 確認磁碟空間充足
### 除錯模式
### 日誌查看
```bash
export FLASK_DEBUG=true
export LOG_LEVEL=DEBUG
python app.py
# 應用日誌
tail -f logs/app.log
# Celery 日誌
tail -f logs/celery.log
# 查看錯誤日誌
grep ERROR logs/app.log
```
## 貢獻指南
## 維護指南
1. Fork 專案
2. 建立功能分支
3. 提交變更
4. 執行測試
5. 建立 Pull Request
### 資料庫維護
```bash
# 備份資料庫
mysqldump -u A060 -p db_A060 > backup_$(date +%Y%m%d).sql
# 清理舊檔案90天前
find uploads/ -mtime +90 -delete
```
### 日誌清理
```bash
# 清理應用日誌保留30天
find logs/ -name "*.log" -mtime +30 -delete
```
## Docker 部署
### 快速部署
```bash
# 1. 建置 Docker 映像
docker build -t panjit-translator .
# 2. 運行容器
docker run -d -p 12010:12010 --name panjit-translator panjit-translator
# 3. 檢查服務狀態
docker ps
docker logs panjit-translator
```
### 服務管理
```bash
# 停止服務
docker stop panjit-translator
# 啟動服務
docker start panjit-translator
# 重啟服務
docker restart panjit-translator
```
### 部署方式
```bash
# Docker 部署 (推薦)
docker build -t panjit-translator .
docker run -d -p 12010:12010 --name panjit-translator panjit-translator
```
## 支援與聯絡
**PANJIT IT Team**
- Email: it-support@panjit.com.tw
- 內線電話: 2481
- 辦公時間: 週一至週五 9:00-18:00
## 版本資訊
- **版本**: v2.0.0
- **發布日期**: 2025-09-04
- **維護人員**: PANJIT IT Team
## 授權條款
本專案僅供 PANJIT 公司內部使用。
## 聯繫資訊
- **開發團隊**: PANJIT IT Team
- **維護人員**: System Administrator
- **問題回報**: 請聯繫系統管理員
---
**版本**: 2.0.0
**建立日期**: 2024-01-28
**最後更新**: 2025-09-03
**狀態**: 生產就緒
此軟體為 PANJIT 集團內部使用系統,版權歸 PANJIT 所有,僅供公司內部使用。