Files
DashBoard/openspec/changes/archive/2026-01-29-resource-cache/tasks.md
beabigegg a787436115 feat: 新增 Resource Cache 模組與表名更新
- 新增 resource_cache.py 模組,Redis 快取 DW_MES_RESOURCE 表
- 實作每 4 小時背景同步(MAX(LASTCHANGEDATE) 版本控制)
- 整合 filter_cache 優先從 WIP Redis 快取載入站點群組
- 整合 health 端點顯示 resource_cache 狀態
- 修改 resource_service 與 resource_history_service 使用快取
- 更新表名 DWH.DW_PJ_LOT_V → DW_MES_LOT_V
- 新增單元測試 (28 tests) 與 E2E 測試 (15 tests)
- 修復 wip_service 測試的 cache mock 問題
- 新增 Oracle 授權物件文檔與查詢工具

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 15:08:16 +08:00

3.1 KiB
Raw Blame History

1. 新增 Resource Cache 模組

  • 1.1 建立 src/mes_dashboard/services/resource_cache.py 模組骨架
  • 1.2 實作 _load_from_oracle() - 從 Oracle 載入全表資料(套用全域篩選)
  • 1.3 實作 _sync_to_redis() - 使用 pipeline 原子寫入 Redis
  • 1.4 實作 _get_version_from_oracle() - 查詢 MAX(LASTCHANGEDATE)
  • 1.5 實作 _get_version_from_redis() - 讀取 Redis 版本
  • 1.6 實作 refresh_cache(force) - 版本比對與同步邏輯
  • 1.7 實作 init_cache() - 初始化載入

2. 實作查詢 API

  • 2.1 實作 get_all_resources() - 取得所有快取資料
  • 2.2 實作 get_resource_by_id() - 依 ID 取得單筆
  • 2.3 實作 get_resources_by_ids() - 批次取得
  • 2.4 實作 get_resources_by_filter() - Python 端篩選

3. 實作篩選器選項 API

  • 3.1 實作 get_distinct_values(column) - 取得欄位唯一值
  • 3.2 實作 get_resource_families() - 型號清單便捷方法
  • 3.3 實作 get_workcenters() - 站點清單便捷方法
  • 3.4 實作 get_departments() - 部門清單便捷方法

4. 實作快取狀態 API

  • 4.1 實作 get_cache_status() - 回傳快取狀態資訊
  • 4.2 實作 Oracle fallback 邏輯Redis 不可用時)

5. 整合背景同步任務

  • 5.1 修改 cache_updater.py 加入 resource 同步間隔配置
  • 5.2 實作 _check_resource_update() 方法
  • 5.3 在主迴圈加入 resource 同步檢查
  • 5.4 啟動時觸發初始同步

6. 環境變數配置

  • 6.1 新增 RESOURCE_CACHE_ENABLED 環境變數支援
  • 6.2 新增 RESOURCE_SYNC_INTERVAL 環境變數支援
  • 6.3 更新 .env.example 範例

7. 整合設備歷史績效

  • 7.1 修改 resource_history_service.get_filter_options() 使用 resource_cache
  • 7.2 驗證 /api/resource/history/options 端點正常運作 (18 workcenter_groups, 152 families)
  • 7.3 驗證前端 familiesDropdown 型號篩選器 (用戶確認可用)

8. 整合機台狀態報表

  • 8.1 修改 resource_service.query_resource_filter_options() 使用 resource_cache
  • 8.2 驗證 /resource/filter_options 端點正常運作 (18 workcenters, 152 families, 6 statuses)
  • 8.3 驗證前端所有篩選器(站點、型號、部門)(用戶確認可用)

9. 清理舊程式碼

  • 9.1 移除 filter_cache.get_resource_families() 函數
  • 9.2 移除 filter_cache._load_resource_families() 函數
  • 9.3 更新相關 import 語句

10. Health Check 整合

  • 10.1 修改 /health 端點加入 resource_cache 狀態
  • 10.2 快取未載入時加入 warning 訊息
  • 10.3 更新前端 health popup 顯示 resource cache 狀態(可選)

11. 測試

  • 11.1 新增 tests/test_resource_cache.py 單元測試 (28 tests passed)
  • 11.2 測試 Redis 同步邏輯
  • 11.3 測試查詢 API
  • 11.4 測試 fallback 機制
  • 11.5 測試環境變數配置
  • 11.6 執行整合測試驗證篩選器功能 (15 tests passed)
  • 11.7 新增 tests/e2e/test_resource_cache_e2e.py E2E 測試 (待服務重啟後驗證)