beabigegg
5299d187bc
security: 移除程式碼中硬編碼的敏感資訊
...
- 移除 database.py、settings.py、auth_service.py 中的硬編碼預設值
- 移除 tools/*.py 中的硬編碼 IP 位址和服務名稱
- 更新 generate_documentation.py 移除硬編碼的帳號密碼
- 更新 MES_Database_Reference.md 和 Oracle_Authorized_Objects.md 移除敏感資訊
- 更新 .env.example 和 README.md 使用 placeholder 值
- 所有敏感設定現在必須透過 .env 檔案配置
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-04 16:34:32 +08:00
beabigegg
ed60701465
feat: 新增設備維修查詢工具與修復 AJAX 認證重定向問題
...
設備維修查詢工具:
- 新增 job_query_routes.py 與 job_query_service.py 提供工單查詢 API
- 新增 SQL 查詢檔案 (job_list, job_txn_detail, job_txn_export)
- 新增 job_query.html 前端頁面支援設備選擇、日期範圍查詢與 CSV 匯出
- 整合 portal.html 導航與 page_status.json 頁面註冊
- 新增完整測試 (test_job_query_routes.py, test_job_query_service.py)
AJAX 認證修復:
- 修復 admin 路由對 AJAX 請求返回 302 導致前端卡住的問題
- 新增 _is_ajax_request() 偵測函式於 permissions.py
- 修改 admin_required 裝飾器對 AJAX 請求返回 JSON 401
- 修改 app.py before_request 鉤子支援 AJAX 認證失敗處理
- 更新 performance.html 使用 fetchWithAuth() 處理 401 重定向
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-04 15:45:03 +08:00
beabigegg
dd0ae3ee54
feat: Excel 批次查詢新增進階條件功能
...
- 新增欄位類型偵測:自動識別 Excel 與 Oracle 欄位類型並顯示類型標籤
- 新增 LIKE 模糊查詢:支援包含/開頭/結尾三種模式,上限 100 個關鍵字
- 新增日期範圍篩選:支援起始/結束日期,範圍限制 365 天
- 新增大型資料表效能警告:超過 1000 萬筆時提示使用日期範圍縮小查詢
- 新增 /execute-advanced API 端點整合所有進階條件
- 新增 /table-metadata 端點取得欄位類型資訊
- 新增完整測試套件:76 個測試(單元/整合/E2E)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-04 14:05:19 +08:00
beabigegg
cd7f5a522b
fix: 修復 Worker 退出時執行緒卡住導致 timeout 問題
...
- 增加 graceful_timeout 從 10s 到 30s,給予執行緒足夠清理時間
- worker_exit hook 新增停止背景同步執行緒邏輯
- 調整 SLOW_QUERY_THRESHOLD 預設值為 5.0s (即時視圖查詢通常需 2-5s)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-04 13:18:28 +08:00
beabigegg
0669a92c39
feat: 效能監控頁面新增日誌分頁與 UI 優化
...
- 系統日誌改為每頁顯示 50 筆,新增分頁控制項
- 新增 count_logs() 方法支援總數查詢
- query_logs() 支援 offset 參數進行分頁
- API 新增 total 欄位回傳過濾後總數
- 「返回首頁」連結移至 Header 區域
- 新增 2 個分頁功能測試案例
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-04 08:32:31 +08:00
beabigegg
13acbfc71b
feat: 新增效能監控、熔斷器保護與 Worker 重啟控制功能
...
新增功能:
- 效能監控儀表板 (/admin/performance):系統狀態、查詢延遲、日誌檢視
- 熔斷器 (Circuit Breaker):CLOSED/OPEN/HALF_OPEN 狀態保護資料庫
- 效能指標收集:P50/P95/P99 延遲追蹤、慢查詢統計
- SQLite 日誌儲存:結構化日誌、保留策略、手動清理功能
- Worker Watchdog:透過 systemd 服務支援優雅重啟
- 統一 API 回應格式:success_response/error_response 標準化
- 深度健康檢查端點 (/health/deep)
- 404/500 錯誤頁面模板
Bug 修復:
- 修復 circuit_breaker.py get_status() 死鎖問題
- 修復 health_routes.py 模組匯入路徑錯誤
新增依賴:psutil (Worker 狀態監控)
測試覆蓋:59 個新增測試案例
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-04 08:14:42 +08:00
beabigegg
c11b13a7e3
fix: 修復 /health 端點瀏覽器快取導致前端顯示過時更新時間
...
- 後端 /health 端點加入 Cache-Control no-cache 標頭
- 前端 fetch 呼叫加入 cache: 'no-store' 選項
- 修復 portal.html 無效的 timeout 選項
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-03 19:17:19 +08:00
beabigegg
c034985e07
feat: 設備即時概況頁面加入 visibility 自動刷新
...
- 切回頁面時立即刷新資料(visibilitychange 事件)
- Tab 隱藏時跳過自動刷新,節省資源
- 加入 console.log 追蹤刷新觸發時機
與 WIP Overview 頁面行為一致。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-03 19:06:26 +08:00
beabigegg
5517e5f767
fix: 新增分佈式鎖防止多 Worker 同時更新快取
...
多個 Gunicorn workers 同時執行快取更新會導致資料庫連接競爭,
造成 F5 重新整理時前端卡住。
變更內容:
- redis_client.py: 新增 try_acquire_lock/release_lock 函數
- cache_updater.py: WIP 與 Resource 快取更新加入分佈式鎖
- realtime_equipment_cache.py: 設備狀態快取更新加入分佈式鎖
鎖機制採用 Redis SET NX EX 原子操作,fail-open 設計確保
Redis 故障時不會阻塞正常操作。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-03 18:50:02 +08:00
beabigegg
d5aa2fa749
perf: 為設備快取加入 Process-Level Cache 防止 GIL 競爭
...
- 為 resource_cache 和 realtime_equipment_cache 加入 30 秒 TTL 的進程級快取
- 使用 Double-Check Locking 確保只有一個執行緒解析 JSON
- 背景同步更新 Redis 時主動清除進程級快取
- 修復測試以清除進程級快取避免測試干擾
解決 F5 刷新設備即時概況頁面時因併發 JSON 解析導致的卡頓問題
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-03 18:19:30 +08:00
beabigegg
373a1f0f0e
perf: 移除舊版 resource summary API 並加入 WIP DataFrame 記憶體快取
...
問題診斷:
- 舊版 /api/resource/summary API 使用慢速 SQL (JOIN + ROW_NUMBER),導致 55s 逾時
- 壓力測試持續呼叫此 API,佔滿所有 worker threads
- 每次 WIP API 請求都解析 14.8MB JSON,8 個並發請求造成 GIL 競爭
變更內容:
- 移除舊版 /api/resource/summary 路由和 query_resource_status_summary 函數
- 刪除未使用的 status_summary.sql
- 更新壓力測試和整合測試使用新版 /api/resource/status/summary
- 加入 ProcessLevelCache 類別實作 process-level DataFrame 快取 (30s TTL)
- 使用 double-check locking 確保只有一個 thread 解析 JSON
效能改善:
- 新版 API 使用 Redis 三層快取,回應時間 < 100ms
- Process-level 快取避免重複解析 14MB JSON,大幅改善並發效能
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-03 18:00:41 +08:00
beabigegg
de38959568
docs: 更新 README 並封存 sql-query-management-refactor 提案
...
- 更新 README.md 反映目前開發狀態 (v3.0)
- 新增設備狀態監控、設備歷史查詢功能說明
- 新增 Redis 快取系統、SQL 查詢安全架構狀態
- 擴展專案結構說明,展示 sql/ 模組細節
- 新增 Redis 環境需求與設定說明
- 補充 2026-01-29 ~ 2026-02-03 變更日誌
- 封存 sql-query-management-refactor 至 archive/2026-02-03-
- 同步 3 個新 specs 至主目錄 (sql-loader, query-builder, common-filters)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-03 16:40:01 +08:00
beabigegg
f36e55e8a1
refactor: 重構 SQL 查詢管理架構,提升安全性與效能
...
- 新增 sql 模組:SQLLoader (LRU 快取)、QueryBuilder (參數化查詢)、CommonFilters (共用篩選器)
- 將 18 個內嵌 SQL 抽取至獨立 .sql 檔案 (dashboard, resource, wip, resource_history)
- 修復 SQL 注入漏洞:所有使用者輸入改用 Oracle bind variables (:param)
- 優化 dashboard KPI 與 workcenter_cards 端點,從 55 秒超時降至 0.1-0.16 秒
- 標記 utils.py 舊函數為 deprecated,保持向下相容
- 新增 51 個 SQL 模組單元測試,全部通過
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-03 16:32:19 +08:00
beabigegg
c3899c4593
fix: 修復 Excel 批次查詢的表名驗證支援 schema.table 格式
...
原本的正則表達式不支援帶 schema 前綴的表名(如 DWH.DW_MES_LOTMATERIALSHISTORY),
導致查詢失敗並顯示「無效的資料表名稱」錯誤。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 20:29:02 +08:00
beabigegg
bd3591703b
feat: WIP Overview Hold Summary 改為柏拉圖視覺化
...
將 Hold Summary 從單一表格改為兩張柏拉圖呈現品質異常與非品質異常 Hold 分佈,
便於快速辨識主要原因並支援 80/20 法則分析。
- 新增 ECharts 柏拉圖:Y軸(左)為 QTY 柱狀圖、Y軸(右)為累計百分比折線
- 每張圖下方保留摘要表格顯示 Hold Reason、Lots、QTY、累計%
- 保留點擊 drill-down 至 Hold Detail 頁面功能
- 響應式設計:大螢幕並排、小螢幕堆疊
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 19:03:02 +08:00
beabigegg
ef83060109
feat: 新增本地認證模式支援開發測試環境
...
- 新增 LOCAL_AUTH_ENABLED/USERNAME/PASSWORD 環境變數設定
- 當本地認證啟用時,使用環境變數中的帳密驗證
- 本地認證用戶自動取得管理員權限
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 18:10:46 +08:00
beabigegg
65f43fbe0c
feat: 設備頁面統一排序、階層篩選與標籤優化
...
- 統一設備即時概況與歷史績效頁面的 workcenter 排序,依據 WORKCENTERSEQUENCE_GROUP 升序排列
- 設備即時概況的工站狀態矩陣支援階層點選篩選:站點 → 型號 → 機台
- 將 Availability% 標籤統一改為 AVAIL%
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 17:16:27 +08:00
beabigegg
bb060dd5b2
feat: 設備即時概況新增 JOB 分析與 tooltip 優化
...
- 新增 JOB 統計卡片顯示有維修單的設備數量
- 點擊 JOBORDER 顯示完整 JOB 詳細資訊 tooltip
- 修正 JOB 數量計算錯誤 (NaN 值被誤計為有效)
- 改善 tooltip UX: 從 hover 改為 click 觸發的浮動視窗
- 移除狀態篩選器 (可透過矩陣點擊篩選)
- 擴充 realtime_equipment_cache 支援完整 JOB 欄位
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 16:02:47 +08:00
beabigegg
2f50680eaf
feat: WIP Detail 頁面新增 Lot 詳細資訊面板
...
- 點選 Lot Details 表格中的 LOT ID 可展開詳細資訊面板
- 新增 /api/wip/lot/<lotid> API 端點
- 詳細資訊欄位名稱採用 PowerBI 命名慣例
- 修正 numpy 型別 JSON 序列化問題
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 14:51:06 +08:00
beabigegg
76d71d69ff
feat: WIP 篩選器互相影響 autocomplete 建議
...
當使用者在 WIP Overview 或 WIP Detail 頁面套用篩選時,
其他篩選欄位的 autocomplete 會根據已選擇的條件過濾,
避免選擇會導致空結果的組合。
- 更新 search_workorders/lot_ids/packages/types 函數支援交叉過濾參數
- API /meta/search 新增 workorder/lotid/package/type 參數
- 前端 autocomplete 請求時自動帶入當前已填入的篩選值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 14:27:34 +08:00
beabigegg
8b137a942e
feat: WIP 頁面新增 Package/Type 篩選並統一使用 PACKAGE_LEF
...
- 新增 PACKAGE 和 TYPE 篩選欄位至 WIP Overview 和 WIP Detail
- 所有 Package 欄位改用 PACKAGE_LEF (原 PRODUCTLINENAME)
- Workcenter x Package Matrix 改用 PACKAGE_LEF
- 新增 search_packages 和 search_types 模糊搜索函數
- API 參數 type 改為 field 以避免與 PJ_TYPE 欄位混淆
- 統一篩選標籤為大寫 (WORKORDER, LOT ID, PACKAGE, TYPE)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 14:09:06 +08:00
beabigegg
88d30065cd
feat: 統一設備即時機況與歷史績效頁面的 KPI 卡片
...
- 統一 9 張卡片順序: OU%, Availability%, PRD, SBY, UDT, SDT, EGT, NST, 機台數
- 即時機況顯示機台數與佔比%, 歷史績效顯示 HR 與佔比%
- 佔比計算分母包含 NST (PRD+SBY+UDT+SDT+EGT+NST)
- 新增 by_status 字典提供各 E10 狀態的獨立計數
- 統一快取狀態顯示使用過濾後的設備數 (resource_cache)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 13:40:21 +08:00
beabigegg
2a1cda30bd
refactor: 統一設備維度資料來源至 resource_cache
...
- 重構 resource_history_service 使用 resource_cache 作為設備主檔來源
- 移除 Oracle JOIN,改用 HISTORYID IN 過濾 SHIFT 資料
- 新增 _get_filtered_resources、_build_resource_lookup 等輔助函數
- resource_cache 新增 WORKCENTERNAME IS NOT NULL 篩選條件
- 設備即時概況矩陣新增可點選篩選功能
- 新增 _clean_nan_values 處理 JSON 序列化 NaN/NaT 值
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-02-02 13:04:56 +08:00
beabigegg
f823d8cefd
feat: 新增設備即時狀態快取與合併查詢 API
...
- 新增 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 >
2026-01-30 07:51:30 +08:00
beabigegg
23e105e92c
Fix DWH schema prefixes and table fields
2026-01-29 17:49:35 +08:00
beabigegg
1510646a36
feat: 新增設備歷史績效頁面 Availability% 指標
...
在設備歷史績效頁面新增 Availability%(可用率)指標,與 OU% 互補以提供更完整的設備效能分析。
- 新增 _calc_availability_pct() 計算函數,公式: (PRD+SBY+EGT)/(PRD+SBY+EGT+SDT+UDT+NST)
- KPI 區新增 Availability% 卡片(綠色顯示)
- 趨勢圖改為雙線顯示 OU%(藍)與 Availability%(綠)
- API 回應新增 availability_pct 欄位(KPI、Trend、Detail)
- CSV 匯出新增 Availability% 欄位
- 新增單元測試與 E2E 測試驗證
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-29 16:37:58 +08:00
beabigegg
05e8f3f554
chore: 發布設備歷史績效頁面
...
將 /resource-history 頁面狀態從 dev 改為 released
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-29 15:25:57 +08:00
beabigegg
a1b49a92c6
chore: 更新資料表配置與新增設備歷史績效頁面管理
...
- 新增 DW_MES_EQUIPMENTSTATUS_WIP_V 與 DW_MES_SPEC_WORKCENTER_V 視圖
- 更新所有資料表 row_count 為最新數據 (2026-01-29)
- 將 /resource-history 頁面加入 page_status.json 進行管理
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-29 15:19:53 +08:00
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
beabigegg
3234c7088a
feat: 導入 Redis 快取層與 Worker 穩定性強化
...
- 新增 Redis 表級快取機制,減少 Oracle 查詢負載
- 實作 CacheUpdater 背景任務,每 10 分鐘檢查 SYS_DATE 並更新快取
- 所有 WIP API 端點改為 cache-first + Oracle fallback 架構
- 新增 /health 端點顯示資料庫、Redis、快取狀態
- 前端 Portal 新增即時健康狀態指示器
- SQLAlchemy 連線設置 call_timeout=55s 防止 Worker 卡死
- Gunicorn 加入 max_requests=1000 確保 Worker 定期重啟
- 完整測試覆蓋:67 項單元/整合/E2E 測試
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-29 11:38:30 +08:00
beabigegg
d5f0df3384
feat: 新增機台稼動歷史分析功能
...
新增 Resource History Analysis 功能模組:
- 後端服務:query_summary、query_detail、export_csv 查詢函數
- API 路由:/api/resource/history/* 端點 (options/summary/detail/export)
- 前端頁面:KPI 卡片、OU% 趨勢圖、E10 狀態堆疊圖、熱力圖、階層式表格
- 支援時間粒度切換(日/週/月/年)與多維度篩選
- 查詢範圍擴展至 730 天(兩年)
其他改進:
- 新增 filter_cache 服務統一管理工站與型號快取
- MesApi 修復 JSON 解析失敗時誤觸重試的問題
- 新增 _safe_float() 處理 NaN 值避免 JSON 序列化錯誤
- E10 狀態分布圖表 tooltip 顯示各狀態百分比
- 新增完整測試套件(單元/整合/E2E)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-29 08:53:32 +08:00
beabigegg
e21d736b3e
chore: 新增未追蹤的專案檔案
...
OpenSpec Changes:
- archive/2026-01-27-wip-status-filter: WIP 狀態篩選功能規格
- db-connection-stability: 資料庫連線穩定性規格(進行中)
Documents:
- DW_PJ_LOT_V_POWERBI_SQL.txt: Power BI SQL 查詢參考
Frontend Design:
- WIP_main.pen: WIP 主頁設計稿
- Hold_detail.pen: Hold 明細頁設計稿
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 15:07:24 +08:00
beabigegg
460a6f7490
docs: 更新 README.md 反映專案現況
...
- 更新專案狀態(已完成功能清單)
- 新增完整部署指南(deploy.sh、手動部署)
- 新增環境變數設定說明
- 新增功能說明(WIP、Hold、管理員功能)
- 更新技術架構(Flask + Gunicorn)
- 新增測試指令說明
- 新增故障排除指南
- 新增變更日誌
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 15:05:47 +08:00
beabigegg
468aa65adf
test: 新增 admin-auth 完整測試套件
...
Unit Tests (30 tests):
- auth_service: LDAP 認證、管理員檢查
- page_registry: 頁面狀態管理、並發安全
- permissions: 權限檢查函數、裝飾器
Integration Tests (17 tests):
- 登入/登出路由
- 權限中介層
- Admin API
- Context Processor
E2E Tests (10 tests):
- 完整登入登出流程
- 頁面存取控制
- 頁面管理流程
- Portal 動態 tabs
- Session 持久性
- 安全性場景
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 15:00:10 +08:00
beabigegg
b5d63fb87d
feat: 管理員認證系統與部署配置優化
...
Admin Authentication:
- 新增 LDAP 認證服務整合公司 AD API
- 新增頁面狀態管理 (released/dev)
- 非管理員無法存取 dev 狀態頁面
- Portal 動態顯示/隱藏 tabs 基於權限
Deployment Configuration:
- 更新 .env.example 包含所有環境變數
- start_server.sh 自動載入 .env 檔案
- 新增 deploy.sh 部署腳本
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 14:53:20 +08:00
beabigegg
c8fc749bbd
feat: 新增 Hold Detail 頁面與修復 WIP Detail 篩選問題
...
Hold Detail 功能:
- 新增 /hold-detail 頁面,點擊 Hold Reason 可查看詳細資料
- 顯示摘要統計(總批次、總數量、平均/最大滯留天數、站點數)
- 按站點、封裝類型、滯留天數分佈展示
- Lot Details 表格含分頁與篩選功能
- 新增 Hold Comment 欄位顯示
WIP Detail 修復:
- 修復狀態卡片篩選後分頁總數仍顯示未篩選數量的問題
- 現在篩選 RUN/QUEUE/HOLD 後,分頁正確顯示篩選後的總數
測試: 120 passed (20 hold routes + 67 wip routes/service)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 13:38:15 +08:00
beabigegg
babe3fc7f8
feat: WIP 查詢排除原物料 (WORKORDER IS NULL)
...
在 _build_base_conditions() 新增預設條件排除 WORKORDER 為 NULL 的紀錄,
避免將原物料納入 WIP 統計計算。
影響範圍:
- /api/wip/overview/summary
- /api/wip/overview/matrix
- /api/wip/overview/hold
- /api/wip/detail/<workcenter>
- /api/wip/meta/workcenters
- /api/wip/meta/packages
- /api/wip/meta/search
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 10:41:03 +08:00
beabigegg
fcfa942762
feat: Hold 狀態分類為品質異常與非品質異常
...
將 WIP Overview 與 Detail 頁面的 HOLD 狀態拆分為兩個獨立卡片:
- 品質異常 Hold(紅色):預設分類,未知原因也歸此類
- 非品質異常 Hold(橘色):11 個特定 Hold Reason
Backend:
- 新增 NON_QUALITY_HOLD_REASONS 常數 Set 與 is_quality_hold() 輔助函數
- API 新增 hold_type 參數(quality/non-quality)支援篩選
- Summary 回應新增 qualityHold/nonQualityHold 統計欄位
- Hold Summary 表格每筆資料新增 holdType 欄位
Frontend:
- WIP Overview: 3 欄改為 4 欄,新增兩張 Hold 卡片與類型標籤
- WIP Detail: 4 欄改為 5 欄,新增兩張 Hold 卡片
- 點擊卡片可篩選對應 Hold 類型的資料
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 10:21:04 +08:00
beabigegg
b00750436e
feat: 新增壓力測試套件 - API 負載測試與前端穩定性驗證
...
新增全端壓力測試以驗證系統在高負載下的穩定性:
後端 API 負載測試:
- 並發請求測試 (10 用戶, 200 請求)
- WIP Summary: 100% 成功率, 343 req/s
- WIP Matrix: 100% 成功率, 119 req/s
- 回應一致性驗證
前端 Playwright 壓力測試 (11 項):
- Toast 系統: 快速建立、類型循環、記憶體清理
- MesApi: 快速請求、並發處理、AbortController
- 頁面導航: Tab 切換、iframe 載入
- JS 錯誤監控
測試檔案:
- tests/stress/test_api_load.py
- tests/stress/test_frontend_stress.py
- scripts/run_stress_tests.py
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 09:17:57 +08:00
beabigegg
a06faa7c83
feat: 全域連線管理 - 統一 API 客戶端與 Toast 通知系統
...
實作統一的前端連線管理架構:
- 新增 MesApi 客戶端:timeout、exponential backoff retry、AbortController 支援
- 新增 Toast 通知系統:info/success/warning/error/loading 類型
- 新增 _base.html 基礎模板:統一載入核心 JS 模組
- 遷移全部 6 個頁面使用新架構
測試覆蓋:
- 17 個單元測試驗證模板整合
- 12 個整合測試驗證 API 格式
- 32 個 E2E 測試 (Playwright) 驗證完整功能
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-28 08:04:52 +08:00
beabigegg
42dd06b2c0
fix: 防止 Worker Timeout 與改進錯誤訊息
...
- 加入 Oracle call_timeout (55s) 防止慢查詢阻塞 Gunicorn worker
- 改進前端 fetchWithTimeout 錯誤訊息,顯示超時的 URL
- 區分超時錯誤與網路錯誤,便於問題診斷
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-27 21:01:46 +08:00
beabigegg
3d4db4f530
fix: 修復前端連線問題 - Portal iframe 延遲載入與請求取消機制
...
問題:
- Portal 同時載入 4 個 iframe,產生大量並行請求
- 瀏覽器連線數限制(約 6 個)導致請求排隊 timeout
- loadAllData 的並行請求沒有 AbortController 支援
修復:
- Portal: 移除 WIP 工站明細 tab(改從 Overview 進入)
- Portal: iframe 延遲載入(data-src),點擊 tab 時才載入
- wip_overview: loadAllData 加入統一 AbortController
- wip_overview: fetchSummary/fetchHold 支援 signal 參數
- wip_detail: loadAllData 加入 AbortController 支援
效果:
- Portal 載入時只載入 1 個 iframe(減少 75% 初始請求)
- 快速切換篩選時,舊請求會被取消
- 避免請求堆積導致 timeout
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-27 20:44:27 +08:00
beabigegg
cbc19c9920
feat: 新增 WIP 狀態篩選功能 - 點擊卡片快速篩選 RUN/QUEUE/HOLD
...
- 後端 API 支援 status 參數篩選 (RUN/QUEUE/HOLD)
- WIP Overview: 點擊狀態卡片可篩選 Matrix 顯示
- WIP Detail: 移除舊 Status 下拉選單,改用卡片篩選
- 加入 AbortController 防止快速切換時請求堆積導致 timeout
- 選中卡片視覺強化 (放大、深色背景、陰影)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-27 20:30:19 +08:00
beabigegg
fcfa4fb919
feat: Phase 2 連線池化與優雅關閉改進
...
- NullPool 改為 QueuePool 連線池
- pool_size=5, max_overflow=10, pool_recycle=1800
- pool_pre_ping 確保連線有效性
- 新增連線池監控事件 (checkout/checkin/invalidate/connect)
- 新增 keep-alive 機制 (每 5 分鐘 ping)
- 新增 dispose_engine() 清理函數
- Gunicorn worker_exit hook 自動清理連線
- 降低 graceful_timeout 至 10 秒加速重啟
- 降低 tcp_connect_timeout 至 10 秒減少等待
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-27 18:34:31 +08:00
beabigegg
99eb77b149
feat: 資料庫連線穩定性改進與 UI 優化
...
- 新增結構化錯誤記錄:logging 模組取代 print,含 ORA 錯誤碼擷取
- 新增查詢時間統計:>1s 慢查詢標記為 WARNING
- 密碼 URL 編碼:處理特殊字元避免連線字串解析錯誤
- 新增日誌輪替:服務啟動時自動歸檔舊日誌,保留最近 10 份
- 修正 Equipment 欄位:EQUIPMENTNAME → EQUIPMENTS
- UI 簡化:移除 WIP 狀態卡片的 pcs 後綴
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-27 18:13:05 +08:00
beabigegg
2e67846d4f
feat: WIP IT 標準對齊 - RUN/QUEUE/HOLD 分類與 API 格式優化
...
- 後端:使用 IT 標準 WIP Status 計算邏輯(EQUIPMENTCOUNT/CURRENTHOLDCOUNT)
- API:回傳格式改為 camelCase,新增 byWipStatus 分組統計
- Overview:新增 RUN/QUEUE/HOLD 狀態卡片,Matrix 表格固定欄位樣式
- Detail:KPI 卡片改為狀態分類,表格新增 WIP Status 欄位
- 修復:URL 雙重編碼、race condition、API 逾時增加至 60 秒
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-27 15:43:43 +08:00
beabigegg
5b11d0567f
feat: WIP 進階篩選功能與資料庫連線穩定性改進
...
新增功能:
- WORKORDER/LOT ID 模糊搜尋與 autocomplete 下拉選單
- DUMMY lot 預設排除機制 (可透過 include_dummy 參數覆蓋)
- WIP Detail 頁面,支援四種篩選條件組合
- 搜尋 API 端點 GET /api/wip/meta/search
穩定性改進:
- 改用 NullPool 取代連線池,避免長時間閒置連線被防火牆中斷
- 新增 gunicorn worker timeout (60s),防止 worker 卡死
- 前端 fetchWithTimeout 機制,30 秒 API 逾時處理
- 改進 start_server.sh 停止邏輯,處理孤兒 worker 進程
其他:
- Echarts 下載至本地,避免 CDN 追蹤保護警告
- 新增 WIP 篩選功能單元測試
- 更新 MES 核心表分析報告,加入 DWH.DW_PJ_LOT_V 說明
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-27 13:48:18 +08:00
beabigegg
e75f4712f6
chore: 移除 Windows 啟動腳本
...
移除 Windows 平台專用的 .bat 啟動腳本,統一使用 Linux shell 腳本。
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-26 19:20:34 +08:00
beabigegg
20af254868
refactor: 重構為 Application Factory 架構
...
將 Flask 應用重構為正式的 Python package 結構:
- 新增 src/mes_dashboard/ package 取代 apps/ 目錄
- 實作 Application Factory pattern (create_app())
- 移除所有 sys.path.insert hacks,使用標準 import
- 新增 pyproject.toml 定義 package metadata
- 新增 gunicorn.conf.py 部署設定
- 新增 NoOpCache 抽象層,預留未來擴充
- 新增單元測試 tests/test_app_factory.py
- 更新 .gitignore 支援新架構
- 新增 OpenSpec 規格文件追蹤變更
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-26 19:19:23 +08:00
ymirliu
ad0cdb2a5c
feat: 重構 WIP 報表為即時 WIP 分布表
...
主要變更:
- 完全重寫 wip_report.html 為 Pivot 分布表格式
- 新增 3 個 WIP Distribution API (filter_options, pivot_columns, distribution)
- 橫向展開 Workcenter + Spec 組合,只顯示有資料的欄位
- 套用 WORKCENTER_GROUPS 合併邏輯 (切割→焊接→成型等12組)
- 新增 Lot Status 篩選 (Active/Hold,基於 HOLDREASONNAME)
- 排除 DUMMY 工單
- 摘要卡片顯示: 總LOT數、總數量、HOLD LOT數、HOLD數量
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2026-01-19 12:01:00 +08:00