Major Features: - ✅ Multi-tenant architecture (tenant isolation) - ✅ Employee CRUD with lifecycle management (onboarding/offboarding) - ✅ Department tree structure with email domain management - ✅ Company info management (single-record editing) - ✅ System functions CRUD (permission management) - ✅ Email account management (multi-account per employee) - ✅ Keycloak SSO integration (auth.lab.taipei) - ✅ Redis session storage (10.1.0.254:6379) - Solves Cookie 4KB limitation - Cross-system session sharing - Sliding expiration (8 hours) - Automatic token refresh Technical Stack: Backend: - FastAPI + SQLAlchemy - PostgreSQL 16 (10.1.0.20:5433) - Keycloak Admin API integration - Docker Mailserver integration (SSH) - Alembic migrations Frontend: - Next.js 14 (App Router) - NextAuth 4 with Keycloak Provider - Redis session storage (ioredis) - Tailwind CSS Infrastructure: - Redis 7 (10.1.0.254:6379) - Session + Cache - Keycloak 26.1.0 (auth.lab.taipei) - Docker Mailserver (10.1.0.254) Architecture Highlights: - Session管理由 Keycloak + Redis 統一控制 - 支援多系統 (HR/WebMail/Calendar/Drive/Office) 共享 session - Token 自動刷新,異質服務整合 - 未來可無縫遷移到雲端 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
13 KiB
HR Portal Phase 2.2 完成報告
階段: Phase 2.2 - 組織架構管理 (事業部與部門) 完成日期: 2026-02-15 狀態: ✅ 完成 (唯讀版本)
📋 執行摘要
成功完成 HR Portal 組織架構管理的基礎建設,包括資料庫擴充、後端 API 和前端 UI。建立了匠耘公司的三大事業部和九個部門的完整組織架構,並支援獨立網域配置策略。
✅ 完成項目
1. 資料庫遷移 (Alembic 0003)
檔案: backend/alembic/versions/0003_extend_organization_structure.py
擴充欄位
business_units 表:
- ✅
primary_domainVARCHAR(100) - 主要網域 - ✅
email_addressVARCHAR(255) - 事業部信箱 - ✅
email_quota_mbINTEGER (預設 10240) - 事業部信箱配額
departments 表:
- ✅
email_addressVARCHAR(255) - 部門信箱 - ✅
email_quota_mbINTEGER (預設 5120) - 部門信箱配額
email_accounts 表:
- ✅
account_typeVARCHAR(20) - 帳號類型 (personal/department/business_unit/organization) - ✅
department_idINTEGER - 部門 ID (外鍵) - ✅
business_unit_idINTEGER - 事業部 ID (外鍵)
初始資料插入
三大事業部:
1. 業務發展部 (BD) - ease.taipei
2. 技術發展部 (TD) - lab.taipei
3. 營運管理部 (OM) - porscheworld.tw
九個部門:
-- 業務發展部
- 玄鐵風能 (WIND) - wind@ease.taipei
- 虛擬公司 (VIRTUAL) - virtual@ease.taipei
- 國際碳權 (CARBON) - carbon@ease.taipei
-- 技術發展部
- 智能研發 (AI) - ai@lab.taipei
- 軟體開發 (DEV) - dev@lab.taipei
- 虛擬MIS (MIS) - mis@lab.taipei
-- 營運管理部
- 人資 (HR) - hr@porscheworld.tw
- 財務 (FIN) - finance@porscheworld.tw
- 總務 (ADMIN) - admin@porscheworld.tw
2. Models 更新
BusinessUnit Model
檔案: backend/app/models/business_unit.py
# 新增欄位
primary_domain = Column(String(100), comment="主要網域")
email_address = Column(String(255), comment="事業部信箱")
email_quota_mb = Column(Integer, default=10240, nullable=False)
Department Model
檔案: backend/app/models/department.py
# 新增欄位
email_address = Column(String(255), comment="部門信箱")
email_quota_mb = Column(Integer, default=5120, nullable=False)
EmailAccount Model
檔案: backend/app/models/email_account.py
# 新增欄位 (支援組織/事業部/部門信箱)
account_type = Column(String(20), default='personal', nullable=False)
department_id = Column(Integer, ForeignKey("departments.id"), nullable=True)
business_unit_id = Column(Integer, ForeignKey("business_units.id"), nullable=True)
3. 後端 API (已存在,無需修改)
檔案: backend/app/api/v1/business_units.py
可用端點
GET /api/v1/business-units/- 查詢事業部列表 ✅GET /api/v1/business-units/{id}- 查詢單一事業部 ✅GET /api/v1/business-units/{id}/departments- 查詢事業部的部門列表 ✅POST /api/v1/business-units/- 創建事業部 (已實作但未啟用)PUT /api/v1/business-units/{id}- 更新事業部 (已實作但未啟用)DELETE /api/v1/business-units/{id}- 停用事業部 (已實作但未啟用)
4. 前端組織架構查詢頁面
檔案: frontend/app/organization/page.tsx
核心功能
- ✅ 事業部列表顯示
- ✅ 樹狀展開/收合 (可展開查看部門)
- ✅ 事業部資訊 (名稱、代碼、網域、信箱)
- ✅ 部門卡片顯示 (名稱、代碼、信箱、配額)
- ✅ 網域配置說明
- ✅ 響應式設計 (支援桌面/平板/手機)
介面設計
┌─────────────────────────────────────────────────────────┐
│ 組織架構 │
├─────────────────────────────────────────────────────────┤
│ │
│ 🏢 匠耘 Porsche World │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📁 業務發展部 │ │
│ │ BD · ease.taipei 3 個部門 [▼] │ │
│ │ ─────────────────────────────────────────────────── │ │
│ │ 📋 玄鐵風能 (WIND) 📧 wind@ease.taipei │ │
│ │ 📋 虛擬公司 (VIRTUAL) 📧 virtual@ease.taipei │ │
│ │ 📋 國際碳權 (CARBON) 📧 carbon@ease.taipei │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📁 技術發展部 │ │
│ │ TD · lab.taipei 3 個部門 [▼] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📁 營運管理部 │ │
│ │ OM · porscheworld.tw 3 個部門 [▼] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 📧 網域配置說明 │
│ • ease.taipei - 業務發展部專用網域 │
│ • lab.taipei - 技術發展部專用網域 │
│ • porscheworld.tw - 營運管理部專用網域 │
└─────────────────────────────────────────────────────────┘
5. 匠耘組織架構文件
檔案: 1.專案規劃區/匠耘商業資料/組織架構.md
內容包含
- ✅ 公司資訊
- ✅ 組織架構圖
- ✅ 三大事業部詳細資訊
- ✅ 九個部門清單與業務範圍
- ✅ 郵件網域配置策略
- ✅ 網域權限規則
- ✅ 設計原則
🏗️ 組織架構總覽
匠耘 Porsche World 組織架構
匠耘 Porsche World (公司)
│
├── 業務發展部 (Business Development) [@ease.taipei]
│ ├── 玄鐵風能 (Wind Energy Licensing)
│ ├── 虛擬公司 (Virtual Company)
│ └── 國際碳權 (Carbon Credit Services)
│
├── 技術發展部 (Technology Development) [@lab.taipei]
│ ├── 智能研發 (Smart R&D Services)
│ ├── 軟體開發 (Software Development)
│ └── 虛擬MIS (Virtual MIS)
│
└── 營運管理部 (Operations Management) [@porscheworld.tw]
├── 人資 (Human Resources)
├── 財務 (Finance)
└── 總務 (General Affairs)
網域配置策略
事業部層級獨立網域 (非子網域)
| 事業部 | 獨立網域 | 說明 |
|---|---|---|
| 業務發展部 | ease.taipei | 客戶服務、業務應用 |
| 技術發展部 | lab.taipei | 技術開發、實驗環境 |
| 營運管理部 | porscheworld.tw | 公司營運、基礎設施 |
重要: 這三個網域都是在 ISP (中華電信) 購買的完全獨立網域,不是子網域模式 (如 wind.porscheworld.tw)。
📊 統計數據
資料庫
- 遷移版本: 0003 (extend_organization_structure)
- 新增欄位: 7 個
- 初始資料: 3 個事業部 + 9 個部門 = 12 筆
程式碼更新
- 更新檔案: 3 個 (Models)
models/business_unit.py(+3 欄位)models/department.py(+2 欄位)models/email_account.py(+3 欄位)
- 新增檔案: 2 個
frontend/app/organization/page.tsx(~250 行)1.專案規劃區/匠耘商業資料/組織架構.md(~300 行)
功能清單
- ✅ 事業部列表查詢
- ✅ 部門列表查詢 (依事業部)
- ✅ 樹狀組織架構顯示
- ✅ 部門卡片資訊 (信箱、配額)
- ✅ 網域配置說明
✨ 核心特色
1. 獨立網域策略
- 三個完全獨立的網域 (ease.taipei, lab.taipei, porscheworld.tw)
- 每個事業部使用專屬網域
- 所有員工和部門信箱都使用所屬事業部的網域
2. 樹狀組織架構
- 清晰的三層結構: 公司 → 事業部 → 部門
- 可展開/收合的互動式介面
- 卡片化設計,資訊一目了然
3. 部門信箱管理
- 每個部門都有專屬信箱
- 配額統一管理 (預設 5 GB)
- 支援未來擴展為實際郵件帳號
4. 擴展性設計
- EmailAccount 支援四種帳號類型 (personal/department/business_unit/organization)
- 為未來組織層級信箱預留空間
- 支援動態網域配置
🧪 測試建議
手動測試
- 訪問組織架構頁面 (http://localhost:10180/organization)
- 展開/收合各事業部
- 檢查部門資訊顯示是否正確
- 確認網域配置說明清晰
- 測試響應式設計 (手機/平板/桌面)
API 測試
GET /api/v1/business-units/- 事業部列表GET /api/v1/business-units/2- 業務發展部詳情GET /api/v1/business-units/2/departments- 業務發展部的部門列表- 確認回傳欄位包含 email_address 和 email_quota_mb
資料庫驗證
- 確認 3 個事業部資料正確
- 確認 9 個部門資料正確
- 確認網域配置正確 (ease.taipei, lab.taipei, porscheworld.tw)
- 確認外鍵約束正常
📚 下一步
Phase 2.3 - 員工新增/編輯表單
- 員工新增表單 (選擇事業部和部門)
- 員工編輯表單
- 根據員工所屬事業部自動選擇郵件網域
- create_full 選項 (一鍵創建所有帳號)
Phase 2.4 - 郵件帳號 Tab 優化
- 根據員工所屬事業部,自動選擇預設網域
- 網域選項根據事業部權限動態調整
- 支援跨事業部郵件帳號 (營運管理部特權)
Phase 2.5 - 組織信箱管理
- 組織層級信箱 (info@, support@, hr@)
- 事業部信箱管理
- 部門信箱實際創建 (整合 Docker Mailserver)
🎯 設計原則遵循
✅ 符合設計規範
- 事業部層級獨立網域策略 ✅
- 部門信箱命名規範 (wind@, dev@, hr@) ✅
- 配額統一管理 (事業部 10GB, 部門 5GB) ✅
- 擴展性設計 (EmailAccount 支援多種類型) ✅
✅ 資料一致性
- 所有組織資料集中管理 ✅
- 網域與事業部一對一映射 ✅
- 部門必須隸屬於事業部 ✅
- 外鍵約束保證參照完整性 ✅
📋 檢查清單
- 資料庫遷移 (Alembic 0003)
- Models 更新 (BusinessUnit, Department, EmailAccount)
- 後端 API (已存在,無需修改)
- 前端組織架構頁面
- 初始資料插入 (3 事業部 + 9 部門)
- 組織架構文件
- 網域配置說明
- 前端測試 (待執行)
- 整合測試 (待執行)
- 員工表單整合 (Phase 2.3)
🎉 結論
Phase 2.2 成功完成了組織架構管理的基礎建設,建立了匠耘公司完整的三大事業部和九個部門架構。採用事業部層級獨立網域策略,符合現階段由 ISP 管理網域的實際需求。
前端提供了直觀的樹狀組織架構查詢介面,讓 HR 人員可以清楚看到公司的組織結構和網域配置。後端資料庫和 API 已為未來的員工管理、郵件帳號創建等功能做好準備。
Phase 2.2 (組織架構管理) 完成! 🚀
接下來將繼續進行 Phase 2.3 (員工表單整合),讓員工可以選擇所屬事業部和部門,並根據事業部自動分配正確的郵件網域。
報告產出日期: 2026-02-15 撰寫者: Claude AI 前端伺服器: 待啟動 (http://localhost:10180) 後端 API: ✅ 運行中 (http://localhost:10181) 組織架構頁面: /organization