- 新增 realtime_equipment_cache 模組,從 DW_MES_EQUIPMENTSTATUS_WIP_V 同步設備即時狀態 - 新增 resource_service 合併三層快取(resource-cache、realtime-equipment、workcenter-mapping) - 新增 /api/resource/status/* API 端點提供設備狀態查詢 - 更新 health_routes 顯示 realtime equipment cache 狀態 - 更新 portal.html 顯示設備即時快取資訊 - 重構 resource_status.html 前端頁面 - 新增相關 OpenSpec 規格文件與測試 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.1 KiB
6.1 KiB
ADDED Requirements
Requirement: Resource Status Merged Query API
系統 SHALL 提供 API 合併 resource-cache 與 realtime-equipment-cache 資料。
Scenario: Get merged resource status
- WHEN 呼叫
get_merged_resource_status() - THEN 系統 SHALL 回傳合併後的設備狀態清單
- AND 每筆資料包含 resource-cache 的主檔欄位(RESOURCENAME, WORKCENTERNAME, RESOURCEFAMILYNAME, PJ_DEPARTMENT, PJ_ISPRODUCTION, PJ_ISKEY, PJ_ISMONITOR)
- AND 每筆資料包含 realtime-equipment-cache 的即時欄位(EQUIPMENTASSETSSTATUS, EQUIPMENTASSETSSTATUSREASON, STATUS_CATEGORY, JOBORDER, JOBSTATUS, LOT_COUNT, TOTAL_TRACKIN_QTY, LATEST_TRACKIN_TIME)
- AND 每筆資料包含 workcenter-mapping-cache 的分組欄位(WORKCENTER_GROUP, WORKCENTER_SHORT)
Scenario: Merge by RESOURCEID
- WHEN 合併資料時
- THEN 系統 SHALL 以 resource-cache 為主表
- AND 使用 RESOURCEID 作為 JOIN key 與 realtime-equipment-cache 合併
- AND 使用 WORKCENTERNAME 作為 JOIN key 與 workcenter-mapping-cache 合併
Scenario: Handle missing realtime status
- WHEN resource-cache 中的設備在 realtime-equipment-cache 找不到對應資料
- THEN 即時欄位 SHALL 回傳
None - AND 記錄 debug 日誌
Scenario: Handle missing workcenter group
- WHEN WORKCENTERNAME 在 workcenter-mapping-cache 找不到對應
- THEN WORKCENTER_GROUP 與 WORKCENTER_SHORT SHALL 回傳
None
Requirement: Resource Status Merged Query with Filter
系統 SHALL 支援帶篩選條件的合併查詢。
Scenario: Filter by workcenter groups
- WHEN 呼叫
get_merged_resource_status(workcenter_groups=['焊接', '成型']) - THEN 系統 SHALL 只回傳 WORKCENTER_GROUP 在指定清單中的設備
Scenario: Filter by equipment flags
- WHEN 呼叫
get_merged_resource_status(is_production=True, is_key=True) - THEN 系統 SHALL 只回傳符合 PJ_ISPRODUCTION=1 且 PJ_ISKEY=1 的設備
Scenario: Filter by status category
- WHEN 呼叫
get_merged_resource_status(status_categories=['PRODUCTIVE', 'STANDBY']) - THEN 系統 SHALL 只回傳 STATUS_CATEGORY 在指定清單中的設備
Scenario: Combined filters
- WHEN 呼叫
get_merged_resource_status(workcenter_groups=['焊接'], is_production=True, status_categories=['DOWN']) - THEN 系統 SHALL 回傳同時符合所有條件的設備
Requirement: Resource Status Summary Statistics
系統 SHALL 提供設備狀態統計摘要 API。
Scenario: Get status summary
- WHEN 呼叫
get_resource_status_summary() - THEN 系統 SHALL 回傳包含以下統計的 Dict:
total_count: 設備總數by_status_category: 各 STATUS_CATEGORY 的設備數by_workcenter_group: 各 WORKCENTER_GROUP 的設備數with_active_job: 有維修工單的設備數with_wip: 有 WIP 的設備數(LOT_COUNT > 0)
Scenario: Summary respects filters
- WHEN 呼叫
get_resource_status_summary(workcenter_groups=['焊接']) - THEN 統計 SHALL 只計算符合篩選條件的設備
Requirement: Resource Status Workcenter Matrix
系統 SHALL 提供工站 × 狀態矩陣 API。
Scenario: Get workcenter status matrix
- WHEN 呼叫
get_workcenter_status_matrix() - THEN 系統 SHALL 回傳 List[Dict],每筆包含:
workcenter_group: 工站分組名稱workcenter_sequence: 排序序號total: 該分組設備總數PRD: 狀態為 PRD 的數量SBY: 狀態為 SBY 的數量UDT: 狀態為 UDT 的數量SDT: 狀態為 SDT 的數量EGT: 狀態為 EGT 的數量NST: 狀態為 NST 的數量OTHER: 其他狀態的數量
Scenario: Matrix sorted by sequence
- WHEN 回傳矩陣資料
- THEN 資料 SHALL 按 workcenter_sequence 升序排列
Requirement: Health Check Integration
健康檢查 SHALL 包含即時設備狀態快取狀態。
Scenario: Equipment status cache in health check
- WHEN 呼叫
GET /health - THEN 回應 body SHALL 包含
equipment_status_cache區塊:{ "equipment_status_cache": { "enabled": true, "loaded": true, "count": 1803, "updated_at": "2026-01-29T14:00:00" } }
Scenario: Workcenter mapping in health check
- WHEN 呼叫
GET /health - THEN 回應 body SHALL 包含
workcenter_mapping區塊:{ "workcenter_mapping": { "loaded": true, "workcenter_count": 18, "group_count": 8 } }
Requirement: API Response Extension
機台狀況表 API 回應 SHALL 擴充新欄位。
Scenario: Extended response fields
- WHEN 呼叫
GET /api/resource/status - THEN 每筆設備資料 SHALL 包含以下新增欄位:
WORKCENTER_GROUP: 工站分組WORKCENTER_SHORT: 工站簡稱STATUS_CATEGORY: 狀態分類JOBORDER: 維修工單號JOBSTATUS: 工單狀態LOT_COUNT: 當前 WIP 批次數TOTAL_TRACKIN_QTY: Track-In 總數量LATEST_TRACKIN_TIME: 最新 Track-In 時間
Scenario: Backward compatible response
- WHEN 呼叫現有 API
- THEN 原有欄位 SHALL 保持不變
- AND 新欄位為追加,不影響現有消費者
Scenario: Null handling for new fields
- WHEN 新欄位資料不存在
- THEN 該欄位 SHALL 回傳
null(而非省略)
Requirement: Filter Options Extension
篩選選項 API SHALL 新增工站分組選項。
Scenario: Workcenter groups in filter options
- WHEN 呼叫
GET /api/resource/status/options - THEN 回應 SHALL 包含
workcenter_groups欄位 - AND 內容為所有 WORK_CENTER_GROUP 清單(按 sequence 排序)
Scenario: Status categories in filter options
- WHEN 呼叫
GET /api/resource/status/options - THEN 回應 SHALL 包含
status_categories欄位 - AND 內容為
['PRODUCTIVE', 'STANDBY', 'DOWN', 'ENGINEERING', 'NOT_SCHEDULED', 'INACTIVE', 'OTHER']