Files
hr-portal/Phase_2.2_完成報告.md
Porsche Chen 360533393f feat: HR Portal - Complete Multi-Tenant System with Redis Session Storage
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>
2026-02-23 20:12:43 +08:00

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_domain VARCHAR(100) - 主要網域
  • email_address VARCHAR(255) - 事業部信箱
  • email_quota_mb INTEGER (預設 10240) - 事業部信箱配額

departments 表:

  • email_address VARCHAR(255) - 部門信箱
  • email_quota_mb INTEGER (預設 5120) - 部門信箱配額

email_accounts 表:

  • account_type VARCHAR(20) - 帳號類型 (personal/department/business_unit/organization)
  • department_id INTEGER - 部門 ID (外鍵)
  • business_unit_id INTEGER - 事業部 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