智慧巡檢系統 | 數位化設備管理解決方案

系統總覽

全面智慧化巡檢,保養、維修、認證安全有保障

核心價值主張

數位化管理

支援跨平台檢後表單建置與認證,機器人自動回覆與異常告警

符合法規

協助企業建置完整設備檢核與安全合法化的流程紀錄

提升效率

降低人力成本,提升維護管理效率,即時掌握設備狀態

系統效益數據
70%
減少人工紙本作業
24/7
全天候即時監控
50%
提升維護效率
100%
法規符合度
重點特色

1. 數位化設備管理

  • • 支援跨平台檢後表單
  • • 機器建置資訊管理
  • • 相關證照證明存檔

2. 定期任務排程

  • • 系統自動發送任務提醒
  • • 支援按週期(年/季/月/周)提醒
  • • 可排任務執行順序

3. 設備歷程管理

  • • 建立完整歷程紀錄資料庫
  • • 點選設備即呈現歷程記錄
  • • 維護、認證、報修記錄

4. 線上提示與管理

  • • 員工在單據提示頁查看待處理事項
  • • 真正式提現化表單管理

5. 即時警報與簽核

  • • 多管道即時警報通知
  • • 機器人自動回覆

6. 自動產出合規報告

  • • 歷史資料查詢一鍵生成
  • • 數位化資源整理與教材管理
適用產業與場景
  • 製造業:生產設備定期維護與檢核,符合ISO認證要求
  • 商業大樓:機電設備、消防設備、電梯等定期檢查
  • 醫療機構:醫療設備定期保養與校正記錄
  • 物流倉儲:堆高機、輸送帶等設備巡檢管理
  • 飯店服務業:空調、鍋爐、電力系統定期維護
  • 運輸業:車輛定期檢驗與保養記錄管理
  • 船舶業:船舶設備與公用設施定期檢查
  • 能源產業:發電設備、輸配電設施巡檢維護
  • 系統特色

    智慧化設備管理的關鍵優勢

    智慧管理系統的特色

    需求改變,系統就要重來?

    智慧「機械/設備」巡檢管理系統相較於傳統開發,協助使用者面對「機械檢核」、「設備維護」與「安全認證」這些重複又繁雜的工作,只需要快速在系統上調整欄位與表單。

    老舊單據查核與檔案太多找不到?

    檔案、證照通通保存在雲端,避免紙本證照遺失、過期失效。所有機械設備履歷完整記錄,一鍵查詢資料與產出合規報告,大幅節省人力成本。

    主管佈告欄、報修防呆、維護及預防保養

    真正數位化保險,保設備也保證安全!標準式、計畫性及預防性保養全方位管理,提醒機制及多管道通知確保不遺漏任何一項維護工作。

    整合企業資源核心:智慧管理數據中心串接跨平台、整合數據,可擴充連接CRM、ERP、專案管理、產銷庫存系統,甚至IoT、MES、APS等智慧製造系統。
    系統優勢特色

    Point 1

    客製法檢表單標準

    自動檢核表單欄位與提示

    Point 2

    提升巡檢效率與品質

    支援多種巡檢模式、手機填報更便利

    Point 3

    預防性危害、遠端巡檢

    隨時隨地查看設備狀態、避免意外

    Point 4

    線上提示與管理

    直覺式操作化表單管理

    Point 5

    即時警報與簽核

    多管道即時簽核與通知

    Point 6

    自動產出合規報告

    歷程回顧一鍵生成

    Point 7

    數據驅動決策

    統計數據與歷程管理一目瞭然

    Point 8

    優化巡檢、保養、請修

    數位化自動帶回檢修體據

    Point 9

    整合企業資源核心

    數位化資源串接與串接

    技術架構優勢
    技術特點 傳統系統 智慧巡檢系統
    跨平台支援 僅限電腦端 Web + 手機APP + 平板
    資料保存 紙本易遺失 雲端永久保存
    即時更新 手動輸入延遲 即時同步更新
    數據分析 人工統計耗時 AI自動分析報表
    提醒機制 人為疏失風險高 多管道自動提醒

    系統規格(客戶版)

    完整的功能模組,滿足企業全方位需求

    六大核心模組

    C1 機械/設備管理

    建立完整設備資料庫、證照管理、設備分類與歸屬

    C2 機械/設備巡檢管理

    定期巡檢排程、巡檢表單客製、自動提醒與通知

    C3 巡檢單管理

    巡檢表單填報、照片上傳、異常處理流程管理

    C4 簽核管理

    多層級簽核流程、電子簽名、簽核歷程追蹤

    C5 權限管理

    角色權限設定、資料存取控制、操作日誌記錄

    C6 數據管理

    數據分析報表、匯出功能、歷史資料查詢

    系統架構說明
    智慧巡檢系統採用模組化設計,各模組間相互協作,共同構建完整的設備管理生態系統。
  • 模組化架構:各功能模組獨立運作,可依需求彈性擴充
  • 資料互通:各模組資料即時同步,避免資訊孤島
  • 雲端架構:採用雲端部署,隨時隨地存取資料
  • 資安保護:多層次資安防護,確保資料安全無虞
  • 自動備份:定時自動備份,資料永不遺失
  • 彈性擴展:支援大量資料與高併發使用
  • C1 機械/設備管理

    建立完整的設備資料庫與生命週期管理

    主要功能
  • 設備基本資料:設備編號、名稱、型號、規格、製造商等完整資訊
  • 設備分類管理:依公司、廠區、部門、類別進行多層級分類
  • 證照管理:設備相關證照、檢驗報告、保固書等文件管理
  • 生命週期管理:記錄設備從採購、安裝、使用到報廢的完整歷程
  • 圖片/文件儲存:設備照片、操作手冊、維護SOP等文件雲端保存
  • QR Code生成:自動產生設備專屬QR Code,掃描即可查看資訊
  • 位置管理:設備位置定位與樓層平面圖標註
  • 變更歷程記錄:所有設備資料變更自動記錄,可追溯查詢
  • 功能規格詳情
    功能項目 說明 支援程度
    設備資料建立 單筆新增或批次匯入Excel 完整支援
    多層級分類 支援5層以上階層式分類 完整支援
    文件上傳 支援PDF、圖片、Word等多種格式 完整支援
    QR Code掃描 手機APP掃描QR Code即時查看設備資訊 完整支援
    證照到期提醒 證照到期前自動提醒更新 進階功能
    設備履歷查詢 查詢設備完整維護保養歷史記錄 完整支援

    C2 機械/設備巡檢管理

    定期巡檢排程與智能提醒系統

    主要功能
  • 巡檢排程:支援年/季/月/周/日多種週期設定
  • 自動提醒:系統自動發送巡檢任務通知
  • 表單客製:彈性設計巡檢項目與檢核標準
  • 人員指派:指定負責人與協辦人員
  • 巡檢路線:規劃最佳巡檢路徑與順序
  • 時間管理:設定標準作業時間與逾期警示
  • 執行追蹤:即時掌握巡檢執行進度
  • 異常處理:異常立即通報與處理流程
  • 巡檢類型與週期
    巡檢類型週期設定適用場景
    日常巡檢每日/每週生產設備、安全設施
    定期保養每月/每季空調、電梯、鍋爐
    法定檢查每半年/每年壓力容器、起重機
    季節性維護依季節冷氣、暖氣系統

    C3 巡檢單管理

    數位化巡檢表單與記錄管理

    巡檢單功能

    手機填報

    現場掃描QR Code直接填寫巡檢表單,支援離線模式

    照片上傳

    拍照記錄設備狀況,自動加上時間與GPS定位

    電子簽名

    巡檢人員電子簽名確認,具法律效力

    異常處理流程

    步驟1:發現異常

    巡檢人員現場發現異常,立即在系統中標記異常項目

    步驟2:分類通報

    系統依異常等級自動通知相關人員(緊急/一般/輕微)

    步驟3:派工處理

    維護人員接收任務,現場處理並回報處理結果

    步驟4:驗收確認

    主管或巡檢人員驗收確認,完成異常處理流程

    C4 簽核管理

    彈性多層級簽核流程設定

    簽核流程類型

    類型1順序簽核

    依序經過各級主管審核,適用於一般維護作業

    範例:巡檢人員 → 組長 → 課長 → 核准

    類型2會簽流程

    多部門同時會簽,適用於跨部門協調事項

    範例:工務部 + 安環部 + 品保部同時審核

    類型3緊急簽核

    緊急狀況快速簽核,事後補簽流程

    範例:設備故障緊急停機 → 立即處理 → 事後補簽

    類型4條件簽核

    依金額或重要性自動選擇簽核層級

    範例:費用<1萬組長核、>1萬課長核、>10萬廠長核
    簽核功能特色
  • 行動簽核:手機APP隨時隨地審核文件,提升簽核效率
  • 到期提醒:簽核逾時自動提醒,避免流程延宕
  • 代理人機制:出差或請假時可設定代理簽核人
  • 簽核追蹤:完整記錄簽核歷程,可追溯查詢
  • 意見批註:簽核時可加註意見或退回修正
  • 權限控管:依職位與角色設定簽核權限範圍
  • C5 權限管理

    彈性角色權限與資料安全控管

    角色權限設定
    角色權限範圍典型職務
    系統管理員完整系統設定與資料管理權限IT人員
    部門主管本部門資料查看與簽核權限課長、經理
    巡檢人員巡檢表單填報與設備查詢權限現場巡檢員
    維護人員維修派工與設備保養權限維修技師
    稽核人員所有資料唯讀查詢權限內稽、品保
    資安防護機制

    帳號安全

    密碼強度檢核、定期更換密碼、異常登入警示

    資料加密

    傳輸加密、資料庫加密、敏感資訊遮罩保護

    操作記錄

    完整log記錄、異常操作告警、稽核軌跡追蹤

    C6 數據管理

    智能數據分析與決策支援

    數據報表功能
  • 設備稼動率分析:設備使用率與停機時間統計
  • 維護成本分析:各設備維護費用與趨勢分析
  • 巡檢執行率:巡檢計劃達成率與逾期分析
  • 異常統計報表:異常類型分布與處理時效分析
  • 人員效率分析:巡檢人員工作量與效率評估
  • 保養計劃達成:預防保養執行狀況追蹤
  • 法規符合報告:一鍵產出符合法規要求的檢查報告
  • 設備健康度:設備狀態綜合評估與預測
  • 匯出功能

    Excel匯出

    支援大量資料匯出,方便二次分析

    PDF報表

    自動產生PDF格式正式報表

    圖表視覺化

    多種圖表類型,數據一目了然

    系統操作說明

    詳細的操作指引,快速上手系統功能

    操作手冊章節
  • D1 機械/設備管理操作:設備建檔、修改、查詢操作說明
  • D2 機械/設備巡檢管理操作:巡檢排程、表單設計操作
  • D3 巡檢單管理操作:手機填報、照片上傳操作
  • D4 簽核管理操作:簽核流程設定與審核操作
  • D5 權限管理操作:角色建立、權限分配操作
  • D6 數據管理操作:報表查詢、匯出操作說明
  • 作業流程(SOP)

    標準作業程序,確保系統正確運作

    三大核心流程

    E1 客戶測試流程

    系統上線前測試驗證流程

    E2 基礎設置流程

    系統初始化設定標準程序

    E3 技術維護流程

    日常維護與故障排除程序

    系統規格(開發版)

    技術架構與開發規格文件

    技術架構

    後端技術

    Python + ERPNext + Frappe Framework

    前端技術

    Vue.js + JavaScript + Tailwind CSS

    資料庫

    MariaDB / PostgreSQL

    開發模組結構
  • F1 機械/設備管理模組:資料模型、API接口設計
  • F2 巡檢管理模組:排程引擎、通知系統設計
  • F3 巡檢單模組:表單引擎、離線同步機制
  • F4 簽核模組:工作流引擎、簽核邏輯設計
  • F5 權限模組:RBAC權限模型、資安設計
  • F6 數據模組:BI引擎、報表生成系統
  • 一、ERPNext DocType 設計架構
    設計理念:採用 ERPNext 的 DocType 架構,確保資料結構的彈性、可擴充性與維護性。所有 DocType 遵循 Frappe Framework 最佳實踐,支援多語言、權限控管、工作流程與自動化規則。

    1.1 核心 DocType 架構圖

    ERPNext DocType 架構關聯圖 Equipment 設備主檔 • 設備基本資料 • 設備類別、狀態 1對多 Inspection Schedule 巡檢排程 • 週期設定 • 排程規則 自動生成 Inspection Order 巡檢單 • 單據資訊 • 執行狀態 Inspection Item 檢查項目範本 • 檢查項目定義 • 標準值、警戒值 Inspection Result 檢查記錄 • 實際檢查值 • 異常記錄、照片 Maintenance Order 維修單 • 報修資訊 • 維修記錄 異常觸發 Workflow 簽核工作流 • 簽核規則 • 審批記錄 Notification 通知系統 • Email / LINE / SMS • 提醒規則 Role Permission 角色權限 • RBAC 權限模型 • 資料存取控制 Report 報表系統 • 統計報表 • 數據分析 File Attachment 檔案管理 • 圖片、PDF • 證照文件 Activity Log 操作日誌 • 所有操作記錄 • 審計追蹤 Scheduler 排程引擎 • 自動化任務 • Cron Jobs 圖例: 實線 = 直接關聯 虛線 = 間接關聯

    1.2 DocType 詳細規格列表

    DocType 名稱 中文名稱 主要欄位 用途說明 權限等級
    Equipment 設備主檔 • equipment_code (設備編號)
    • equipment_name (設備名稱)
    • category (類別)
    • location (位置)
    • status (狀態)
    • purchase_date (採購日期)
    管理所有機械設備的基本資料,作為系統的核心主檔
    Inspection_Schedule 巡檢排程 • schedule_id (排程ID)
    • equipment (設備連結)
    • schedule_type (週期類型)
    • schedule_config (週期設定JSON)
    • advance_days (提前天數)
    • is_active (啟用狀態)
    定義設備的巡檢週期規則,支援日/週/月/季/年/自訂
    Inspection_Order 巡檢單 • order_no (單號)
    • schedule (排程連結)
    • scheduled_date (預定日期)
    • inspector (巡檢人員)
    • status (狀態)
    • completion_date (完成日期)
    由排程自動生成或手動建立的巡檢執行單據
    Inspection_Item 檢查項目 • item_code (項目代碼)
    • item_name (項目名稱)
    • check_type (檢查類型)
    • standard_value (標準值)
    • min_value / max_value (範圍)
    • unit (單位)
    定義檢查項目的範本,可複用於多個設備
    Inspection_Result 檢查記錄 • inspection_order (巡檢單連結)
    • inspection_item (檢查項目)
    • actual_value (實際值)
    • is_normal (是否正常)
    • remarks (備註)
    • photos (照片附件)
    記錄每個檢查項目的實際檢查結果
    Maintenance_Order 維修單 • maintenance_no (維修單號)
    • equipment (設備連結)
    • issue_description (問題描述)
    • priority (優先級)
    • assigned_to (負責人)
    • status (狀態)
    異常檢查結果自動觸發或手動建立維修請求
    Equipment_Category 設備類別 • category_name (類別名稱)
    • parent_category (上層類別)
    • description (說明)
    • default_inspection_items (預設檢查項目)
    設備分類管理,支援樹狀結構
    Equipment_Location 設備位置 • location_name (位置名稱)
    • building (建築物)
    • floor (樓層)
    • area (區域)
    • coordinates (座標)
    管理設備放置位置,支援樓層、區域劃分
    Inspection_Template 巡檢範本 • template_name (範本名稱)
    • equipment_category (適用類別)
    • inspection_items (檢查項目列表)
    • estimated_duration (預估時間)
    預設的檢查項目組合,快速套用於新設備
    Alert_Rule 警報規則 • rule_name (規則名稱)
    • condition (觸發條件)
    • notification_method (通知方式)
    • recipients (收件人)
    • message_template (訊息範本)
    定義自動化警報的觸發條件與通知規則
    二、前端操作界面設計(響應式 RWD)
    設計原則:採用 Mobile First 設計理念,優先考慮手機端操作體驗,再向上適配平板與桌面。使用 Frappe UI + Tailwind CSS 確保一致性與快速開發。

    2.1 響應式設計斷點策略

    手機版

    < 768px

    • • 單欄布局
    • • 大型觸控按鈕 (min 44px)
    • • 側邊抽屜選單
    • • 簡化表單欄位
    • • 相機直接拍照上傳

    平板版

    768px ~ 1024px

    • • 雙欄布局
    • • 側邊欄固定顯示
    • • 橫向最佳化表單
    • • 支援手寫簽名
    • • 分割視窗操作

    桌面版

    > 1024px

    • • 三欄布局
    • • 完整功能表顯示
    • • 批量操作功能
    • • 進階篩選器
    • • 快捷鍵支援

    2.2 核心操作畫面設計

    畫面 1:設備列表 (Equipment List)
    桌面版功能
    • ✓ 卡片/列表雙模式切換
    • ✓ 多條件進階篩選器(類別/位置/狀態)
    • ✓ 批量操作(匯出/列印QR Code/停用)
    • ✓ 即時搜尋(支援模糊搜尋)
    • ✓ 自訂欄位顯示/排序
    手機版優化
    • ✓ 僅卡片模式(大圖示)
    • ✓ 下拉刷新更新資料
    • ✓ 滑動顯示快速操作
    • ✓ 掃描 QR Code 快速查找
    • ✓ 語音搜尋支援
    UX 重點:設備卡片需顯示「下次巡檢日期倒數」與「狀態徽章」,讓使用者一目瞭然。
    畫面 2:巡檢單填寫 (Inspection Order Form)
    桌面版功能
    • ✓ 分頁式表單(基本資訊/檢查項目/附件)
    • ✓ 表格化檢查項目批量輸入
    • ✓ 拖曳上傳多張照片
    • ✓ 自動計算異常項目統計
    • ✓ 暫存草稿功能
    手機版優化
    • ✓ 單頁滾動式表單
    • ✓ 每個項目獨立卡片
    • ✓ 相機直接拍照(含地理位置)
    • ✓ 語音輸入備註
    • ✓ 離線模式(自動同步)
    注意:異常項目需立即標紅警示,並彈出「是否自動建立維修單」提示。
    畫面 3:管理儀表板 (Dashboard)
    桌面版配置
    • ✓ 4x3 網格式儀表板佈局
    • ✓ 拖曳調整小工具位置
    • ✓ 圖表互動鑽取功能
    • ✓ 即時數據更新(WebSocket)
    • ✓ 匯出 PDF/Excel 報表
    手機版配置
    • ✓ 垂直滾動式卡片
    • ✓ 核心 KPI 優先顯示
    • ✓ 點擊卡片展開詳細
    • ✓ 左右滑動切換時間區間
    • ✓ 分享圖片功能

    2.3 可重用 UI 組件庫

    組件名稱 功能說明 使用場景 響應式
    EquipmentCard 設備資訊卡片,含狀態徽章、QR Code、快速操作按鈕 設備列表、儀表板
    InspectionItemInput 檢查項目輸入組件,自動驗證數值範圍並標示異常 巡檢單填寫
    PhotoUploader 照片上傳組件,支援相機拍照、圖片壓縮、GPS 標記 巡檢單、維修單
    StatusTimeline 狀態時間軸,顯示單據流轉歷程與審批記錄 巡檢單詳情、維修單
    QRScanner QR Code 掃描器,快速定位設備並開啟操作選單 手機端快速存取 手機
    SignaturePad 手寫簽名板,支援觸控螢幕與滑鼠簽名 巡檢單確認、簽核
    ChartWidget 圖表小工具,支援折線/長條/圓餅/雷達圖,可互動鑽取 儀表板、報表
    NotificationBell 通知鈴鐺,顯示未讀通知數量與快速預覽 全域導航列
    三、自動化程式設計
    自動化目標:利用 ERPNext/Frappe 的 Scheduler、Background Jobs、Hooks 機制,實現巡檢單自動生成、逾期提醒、異常警報等功能,減少人工干預。

    3.1 排程任務(Scheduled Jobs)

    任務名稱 執行頻率 功能說明 實作方法
    自動生成每日巡檢單 每天 06:00 根據 Inspection_Schedule 生成當日應執行的巡檢單 hooks.py → scheduler_events → daily
    巡檢逾期檢查 每小時 掃描逾期未完成巡檢單,發送催辦通知 hooks.py → scheduler_events → hourly
    設備健康度評分 每天 23:00 統計設備異常次數,更新健康度分數 hooks.py → scheduler_events → daily
    每週巡檢報表 週一 08:00 自動產生上週巡檢摘要報告,郵件發送給主管 hooks.py → scheduler_events → weekly
    維修單自動關閉 每天 22:00 檢查已完工7天且無後續異常的維修單,自動關閉 hooks.py → scheduler_events → daily
    程式碼範例:hooks.py 設定
    # hooks.py
    scheduler_events = {
        "daily": [
            "inspection_system.tasks.generate_daily_inspection_orders",
            "inspection_system.tasks.calculate_equipment_health_score",
            "inspection_system.tasks.auto_close_old_maintenance_orders"
        ],
        "hourly": [
            "inspection_system.tasks.check_overdue_inspections"
        ],
        "weekly": [
            "inspection_system.tasks.send_weekly_inspection_report"
        ]
    }

    3.2 背景工作(Background Jobs)

    報表匯出
    • 觸發時機:使用者點擊「匯出 Excel」按鈕
    • 執行方式:enqueue() 非同步執行
    • 功能:
      • • 查詢大量巡檢資料
      • • 產生 Excel 檔案
      • • 完成後通知使用者下載
    批量 QR Code 生成
    • 觸發時機:批量新增設備後
    • 執行方式:enqueue() 非同步執行
    • 功能:
      • • 為每個設備生成 QR Code
      • • 產生列印用 PDF
      • • 儲存至設備附件
    照片壓縮與處理
    • 觸發時機:上傳巡檢照片後
    • 執行方式:enqueue() 非同步執行
    • 功能:
      • • 壓縮大型圖片(max 1920px)
      • • 產生縮圖(200x200)
      • • 提取 EXIF 資訊(GPS、時間)
    郵件批量發送
    • 觸發時機:週報產生完成
    • 執行方式:enqueue() 非同步執行
    • 功能:
      • • 依角色分組收件人
      • • 附加 PDF 報表
      • • 記錄發送狀態

    3.3 自動通知機制

    通知事件 觸發條件 接收對象 通知管道
    新巡檢單派工 系統自動生成巡檢單後 指派的巡檢人員 站內 Email
    巡檢異常警報 檢查項目超出正常範圍 設備負責人 + 部門主管 站內 Email LINE
    巡檢逾期提醒 預定完成時間已過 巡檢人員 + 其主管 站內 Email
    維修單建立 從異常項目自動建立維修單 維修人員 站內 Email
    簽核流程通知 巡檢單送出審核 下一審核者 站內 Email

    3.4 技術實作細節

    Scheduler 設定
    Frappe Scheduler 使用 cron-like 語法,支援 all、daily、hourly、weekly、monthly 等頻率。
    • • 在 hooks.py 定義 scheduler_events
    • • 任務函式放在 tasks.py
    • • 使用 frappe.enqueue() 處理長時間任務
    • • 可透過 bench execute 手動測試
    通知整合
    LINE Notify 需要申請 API Token,建議儲存在 Site Config 中避免硬編碼。
    • • 站內通知:frappe.publish_realtime()
    • • Email:frappe.sendmail()
    • • LINE Notify:HTTP POST 至 API
    • • 可在 Notification DocType 設定規則
    程式碼範例:自動生成巡檢單
    # inspection_system/tasks.py
    import frappe
    from frappe.utils import today, add_days
    
    def generate_daily_inspection_orders():
        """每日自動產生巡檢單"""
        schedules = frappe.get_all(
            "Inspection_Schedule",
            filters={
                "enabled": 1,
                "next_inspection_date": ["<=", today()]
            },
            fields=["name", "equipment", "frequency", "assigned_to"]
        )
    
        for schedule in schedules:
            # 建立巡檢單
            order = frappe.get_doc({
                "doctype": "Inspection_Order",
                "schedule": schedule.name,
                "equipment": schedule.equipment,
                "assigned_to": schedule.assigned_to,
                "scheduled_date": today(),
                "status": "Pending"
            })
            order.insert(ignore_permissions=True)
    
            # 更新下次巡檢日期
            next_date = calculate_next_date(schedule.frequency)
            frappe.db.set_value("Inspection_Schedule", schedule.name,
                               "next_inspection_date", next_date)
    
            # 發送通知
            send_notification(schedule.assigned_to, order.name)
    
        frappe.db.commit()
    四、權限控管設計(RBAC)
    安全原則:採用 ERPNext 內建的 Role-Based Access Control (RBAC) 機制,遵循最小權限原則,確保使用者只能存取與其職責相關的資料與功能。

    4.1 系統角色定義

    角色名稱 職責說明 主要功能權限 資料範圍
    系統管理員
    System Manager
    系統維護、設定管理 • 完整系統設定權限
    • 使用者與角色管理
    • DocType 設定修改
    全域
    設備管理員
    Equipment Manager
    設備主檔維護 • 新增/修改/刪除設備
    • 設定巡檢排程
    • 設備類別與位置管理
    全域
    巡檢主管
    Inspection Supervisor
    巡檢計畫擬定與督導 • 設定巡檢範本
    • 派工與調度
    • 查看所有巡檢單與報表
    全域
    巡檢人員
    Inspector
    執行巡檢作業 • 查看指派給自己的巡檢單
    • 填寫檢查結果
    • 上傳照片與備註
    個人
    維修人員
    Maintenance Engineer
    設備維修作業 • 查看維修單
    • 更新維修狀態
    • 記錄維修內容
    個人
    部門主管
    Department Head
    審核與決策 • 審核巡檢單
    • 查看部門報表
    • 核准維修申請
    部門
    唯讀使用者
    Read Only User
    查閱資料 • 查看設備資訊
    • 查看已完成巡檢單
    • 查看報表(無匯出權限)
    部門

    4.2 DocType 權限矩陣

    DocType 系統
    管理員
    設備
    管理員
    巡檢
    主管
    巡檢
    人員
    維修
    人員
    部門
    主管
    唯讀
    使用者
    Equipment CRUD CRUD R R R R R
    Inspection_Schedule CRUD CRUD CRUD R - R R
    Inspection_Order CRUD RU CRUD RU* R R R
    Inspection_Result CRUD R RU CRU* R R R
    Maintenance_Order CRUD RU R C RU* RU R
    Inspection_Template CRUD CRUD CRUD R - R R
    Alert_Rule CRUD RU RU - - R -
    圖例:C=Create 新增 | R=Read 讀取 | U=Update 修改 | D=Delete 刪除 | *=僅限自己建立的記錄 | -=無權限

    4.3 資料訪問控制(Row-Level Security)

    個人範圍限制

    適用角色:巡檢人員、維修人員

    • 規則:僅能存取 assigned_to 欄位為自己的記錄
    • 實作方式:
      frappe.permissions.add_user_permission(
          "Inspection_Order",
          user=user.name,
          is_default=1
      )
    • 範例:巡檢人員 A 只能看到指派給自己的巡檢單
    部門範圍限制

    適用角色:部門主管、唯讀使用者

    • 規則:僅能存取所屬部門的資料
    • 實作方式:
      frappe.permissions.add_user_permission(
          "Department",
          "生產部",
          user=user.name
      )
    • 範例:生產部主管只能查看生產部設備的巡檢資料

    4.4 進階權限控制

    欄位層級權限(Field-Level Permissions)
    DocType 欄位 限制條件
    Inspection_Order approved_by 僅部門主管可編輯
    Equipment purchase_cost 系統管理員與設備管理員可見
    Maintenance_Order actual_cost 僅部門主管與系統管理員可見
    狀態條件權限(Status-Based Permissions)
    • 巡檢單狀態限制:
      • Draft 草稿:巡檢人員可編輯
      • Submitted 已送審:巡檢人員只能讀取,部門主管可審核
      • Approved 已核准:僅系統管理員可撤銷
      • Rejected 退回:巡檢人員可重新編輯
    • 實作方式:在 DocType 的 validate() 方法中檢查狀態與角色
    時間限制權限(Time-Based Restrictions)
    • 巡檢單填寫期限:超過預定完成日期 3 天後,巡檢人員無法再編輯(需主管解鎖)
    • 歷史資料保護:超過 30 天的已核准巡檢單,僅系統管理員可修改
    • 實作方式:使用 before_save hook 檢查日期與權限
    安全建議:
    • • 定期檢視使用者權限,移除離職人員帳號
    • • 啟用雙因素驗證(2FA)保護管理員帳號
    • • 記錄所有關鍵操作的 Audit Log(ERPNext 內建)
    • • 敏感欄位(如成本)應加密儲存
    • • 使用 ERPNext 的 User Permission 而非硬編碼過濾條件
    五、驗收情境與測試計畫
    驗收目標:透過情境式測試確保系統滿足業務需求,涵蓋功能完整性、效能穩定性、安全性、易用性四大面向。

    5.1 核心業務情境測試

    情境 1:新設備建檔與巡檢排程設定
    測試步驟
    1. 設備管理員登入系統
    2. 新增設備「CNC-001」
    3. 設定設備類別、位置、負責人
    4. 為該設備建立「每日」巡檢排程
    5. 套用預設巡檢範本
    6. 儲存並生成 QR Code
    驗收標準
    • ✓ 設備資料正確儲存
    • ✓ QR Code 成功生成並可掃描
    • ✓ 巡檢排程正確建立
    • ✓ 明日自動生成第一張巡檢單
    • ✓ 負責人收到通知郵件
    情境 2:巡檢人員手機端執行巡檢(正常)
    測試步驟
    1. 巡檢人員手機登入系統
    2. 查看「待辦巡檢單」列表
    3. 開啟「CNC-001 每日巡檢」
    4. 填寫 5 個檢查項目(皆正常)
    5. 拍照上傳設備現況 3 張
    6. 備註填寫「運行正常」
    7. 簽名確認後送出
    驗收標準
    • ✓ 手機介面流暢、按鈕大小適中
    • ✓ 照片含 GPS 與時間戳記
    • ✓ 簽名筆跡清晰
    • ✓ 送出後狀態更新為「已完成」
    • ✓ 主管收到完成通知
    • ✓ 儀表板數據即時更新
    情境 3:巡檢發現異常,自動建立維修單
    測試步驟
    1. 巡檢人員填寫檢查項目
    2. 「溫度」欄位輸入 85°C(超過 80°C 警戒值)
    3. 系統彈出紅色警示
    4. 詢問「是否立即建立維修單?」
    5. 點擊確認,自動建立維修單
    6. 填寫維修原因與緊急程度
    7. 送出巡檢單
    驗收標準
    • ✓ 異常數值立即標紅顯示
    • ✓ 維修單自動建立並關聯巡檢單
    • ✓ 設備負責人收到 LINE 警報
    • ✓ 部門主管收到 Email 通知
    • ✓ 維修人員待辦清單出現任務
    • ✓ 設備健康度分數自動下降
    情境 4:部門主管審核與報表查詢
    測試步驟
    1. 部門主管登入系統
    2. 查看「待審核巡檢單」
    3. 開啟異常巡檢單詳情
    4. 檢視照片與檢查記錄
    5. 核准巡檢單並批示意見
    6. 查詢本週巡檢報表
    7. 匯出 Excel 分析資料
    驗收標準
    • ✓ 僅能看到自己部門的資料
    • ✓ 核准後狀態更新為「已核准」
    • ✓ 巡檢人員收到審核結果通知
    • ✓ 報表數據準確完整
    • ✓ Excel 匯出成功(背景執行)
    • ✓ 圖表可互動鑽取查看明細
    情境 5:自動化排程與通知測試
    測試步驟
    1. 設定測試時間為明日 06:00
    2. 確認有 10 筆啟用的巡檢排程
    3. 等待系統自動生成巡檢單
    4. 檢查生成的巡檢單數量
    5. 確認指派人員正確
    6. 驗證通知郵件發送
    驗收標準
    • ✓ 06:00 準時執行排程任務
    • ✓ 正確生成 10 張巡檢單
    • ✓ 每張單據欄位資料完整
    • ✓ 所有指派人員收到通知
    • ✓ 排程下次執行日期正確更新
    • ✓ 系統日誌記錄執行狀態

    5.2 效能與壓力測試

    測試項目 測試條件 驗收標準 優先級
    頁面載入速度 巡檢單列表(100 筆資料) < 2 秒完成載入
    照片上傳處理 5MB 照片 × 3 張 上傳 < 10 秒,壓縮完成 < 5 秒
    報表匯出 1,000 筆巡檢記錄匯出 Excel 背景執行,3 分鐘內完成
    並發使用者 50 人同時使用系統 回應時間 < 3 秒,無錯誤
    資料庫查詢 10,000 筆歷史巡檢單查詢 含分頁,< 1 秒返回結果
    離線模式同步 手機離線填寫 5 張巡檢單 恢復網路後 2 分鐘內自動同步

    5.3 安全性測試檢查清單

    身份驗證與授權
    • ☐ 密碼強度要求(至少 8 碼,含英數字)
    • ☐ 登入失敗 5 次後鎖定帳號
    • ☐ Session timeout 設定(30 分鐘無操作)
    • ☐ 管理員帳號啟用 2FA
    • ☐ 權限越權測試(巡檢人員無法刪除設備)
    • ☐ API Token 保護機制
    常見漏洞防護
    • ☐ SQL Injection 防護測試
    • ☐ XSS (跨站腳本) 防護測試
    • ☐ CSRF Token 驗證
    • ☐ 檔案上傳類型限制(僅允許圖片)
    • ☐ 敏感資料加密(密碼 bcrypt hash)
    • ☐ HTTPS 強制使用

    5.4 易用性測試(User Acceptance Testing)

    測試面向 評估指標 通過標準
    學習曲線 新使用者首次填寫巡檢單所需時間 < 10 分鐘(含教學)
    操作效率 熟練使用者完成一張巡檢單時間 < 3 分鐘
    錯誤率 10 位使用者測試,送出資料錯誤次數 < 5%
    滿意度 使用者問卷調查(1-5 分) 平均 ≥ 4.0 分
    手機體驗 按鈕大小、字體可讀性、流暢度 無抱怨回報
    最終驗收簽核流程:
    1. 開發團隊完成所有測試項目,產出測試報告
    2. 業務單位進行 UAT 測試(至少 3 位實際使用者)
    3. 資訊部門進行安全性與效能審查
    4. 主管核准後正式上線
    5. 上線後 1 個月觀察期,持續收集回饋
    六、部署與維護注意事項
    目標:確保系統穩定運行、資料安全、效能最佳化,並為未來擴展預留彈性空間。

    6.1 生產環境部署建議

    伺服器規格建議
    使用者規模 50 人同時在線
    CPU 4 Cores 以上
    RAM 8 GB 以上(推薦 16 GB)
    儲存空間 SSD 100 GB(資料庫)+ 500 GB(附件)
    網路頻寬 100 Mbps 以上
    作業系統 Ubuntu 22.04 LTS(推薦)
    容器化部署
    • 推薦方式:使用 Docker Compose 部署
    • 服務組成:
      • • ERPNext Container
      • • MariaDB Container
      • • Redis Container (Cache + Queue)
      • • Nginx Container (Reverse Proxy)
    • 優勢:
      • • 環境一致性
      • • 快速還原與備份
      • • 易於擴展(Kubernetes)

    6.2 資料備份與災難復原

    備份項目 頻率 保留期限 備份方式
    資料庫完整備份 每日 02:00 保留 30 天 bench backup(自動壓縮)
    附件檔案備份 每日 03:00 保留 30 天 rsync 至異地儲存
    系統快照 每週日 保留 4 週 雲端快照(AWS/Azure)
    重要單據匯出 每月 1 日 永久保存 CSV/PDF 存檔
    災難復原計畫:
    • • RTO (Recovery Time Objective):4 小時內恢復
    • • RPO (Recovery Point Objective):最多損失 24 小時資料
    • • 備份儲存在異地機房或雲端(避免單點故障)
    • • 每季度進行一次還原演練

    6.3 效能優化建議

    資料庫優化
    • 索引建立:
      • • Inspection_Order: (status, scheduled_date)
      • • Inspection_Result: (inspection_order, item_code)
      • • Equipment: (category, location, status)
    • 查詢優化:避免 SELECT *,只查詢需要的欄位
    • 分頁查詢:大量資料必須使用 LIMIT 與 OFFSET
    • 定期維護:每月執行 ANALYZE TABLE 更新統計資訊
    快取策略
    • Redis 快取:
      • • 設備列表(TTL: 10 分鐘)
      • • 巡檢範本(TTL: 1 小時)
      • • 使用者權限(TTL: 30 分鐘)
    • 瀏覽器快取:靜態資源(CSS/JS/圖片)設定 7 天 Cache-Control
    • CDN 加速:附件檔案(照片)使用 CDN 分發
    檔案優化
    • 照片壓縮:上傳照片自動壓縮至 1920x1080,品質 85%
    • 縮圖生成:列表頁使用 200x200 縮圖,加快載入
    • 延遲載入:圖片使用 lazy loading 技術
    • 舊檔案歸檔:超過 1 年的附件移至冷儲存

    6.4 系統監控與維護計畫

    監控指標
    • 系統健康:
      • • CPU / Memory 使用率(警戒值 80%)
      • • 磁碟空間(警戒值 90%)
      • • 資料庫連線數
    • 應用效能:
      • • API 回應時間(目標 < 500ms)
      • • 頁面載入時間
      • • 錯誤率(目標 < 0.1%)
    • 業務指標:
      • • 每日巡檢單完成率
      • • 逾期巡檢單數量
      • • 異常項目統計
    定期維護任務
    每日 檢查備份成功、檢視錯誤日誌
    每週 清理暫存檔案、更新系統套件
    每月 資料庫優化、檢視效能報告
    每季 安全性掃描、災難復原演練
    每年 系統升級評估、硬體檢查

    6.5 未來擴展方向

    AI 智能預測

    • • 設備故障預測模型
    • • 異常模式識別
    • • 維護週期最佳化

    IoT 整合

    • • 設備感測器即時監控
    • • 自動數據採集
    • • 溫度/振動警報

    原生 App

    • • iOS / Android 原生 App
    • • 離線優先架構
    • • 推播通知

    6.6 技術債與改進清單

    項目 說明 優先級 預估工時
    單元測試補齊 核心 DocType 測試覆蓋率達 80% 40 小時
    API 文件產生 使用 Swagger 產生 REST API 文件 16 小時
    程式碼重構 tasks.py 函式拆分,提高可測試性 24 小時
    國際化支援 加入多語系翻譯檔(英文/中文) 32 小時
    效能壓測 使用 Locust 進行負載測試 16 小時
    專案成功關鍵因素:
    1. 高層主管支持與資源投入
    2. 業務單位積極參與需求確認與測試
    3. 完整的教育訓練計畫(線上教學影片 + 實體課程)
    4. 逐步導入策略(先小範圍試點,再全面推廣)
    5. 建立問題回報與處理機制(設立專責窗口)
    6. 持續優化與迭代(每月收集回饋,每季更新功能)

    F3 巡檢單自動生成系統

    智能化排程引擎 × 零人工干預 × 多週期支援

    系統概述
    本系統旨在建立一個可靠、高效、易維護的自動化巡檢單生成引擎,支援多樣化的巡檢週期設定(每日/每週/每月/每季/每年/自訂),並確保系統在各種異常情況下的穩定運行。核心理念:流程自動化、管理透明化、決策數據化
    6+
    週期類型支援
    100%
    防重複保證
    24/7
    自動化運行
    <100ms
    單筆處理速度
    一、管理原則與設計理念

    冪等性保證

    相同輸入(排程ID + 日期)執行多次結果一致,絕不重複生成

    透過資料庫唯一約束 + 分散式鎖確保

    故障恢復機制

    系統故障後自動補償,確保不遺漏任何巡檢任務

    啟動時自動回溯過去 7 天檢查遺漏

    完整審計追蹤

    每次生成記錄批次ID、時間、結果,可完整追溯

    保留 180 天詳細日誌,超過自動歸檔

    多層防呆檢查

    8 項檢查確保生成前所有條件滿足,避免無效單據

    排程/設備/人員/範本/日期全面驗證

    彈性擴充設計

    模組化架構,新增週期類型無需改動核心邏輯

    JSON 設定格式,支援任意複雜規則

    高效能處理

    批次處理 + 索引優化,千筆排程秒級完成

    單筆處理時間 < 100ms(含資料庫寫入)
    二、資訊架構與系統流程

    2.1 整體架構示意圖

    巡檢單自動生成系統架構 排程引擎 (Scheduler) 每小時執行一次 / Celery Beat / APScheduler 巡檢單生成服務 (Generation Service) 週期計算引擎 • 日/週/月/季/年 • 自訂週期邏輯 防重複檢查 • 分散式鎖 • 唯一約束檢查 單據生成器 • 建立巡檢單 • 發送通知 資料庫層 (Database Layer) 設備主檔表 Equipment 設備基本資料 狀態管理 週期設定表 Inspection_Schedule 週期類型/設定 有效期間 巡檢單主表 Inspection_Order 單號/日期/狀態 執行資訊 分散式鎖 Distributed_Lock 防併發執行 鎖定機制 生成記錄表 Generation_Log 批次ID/時間 成功/失敗統計 生成明細表 Generation_Detail 每筆處理結果 跳過/失敗原因
    三層架構:排程層、邏輯層、資料層完全分離,便於維護與擴展
    資料流向:單向流動,避免循環依賴,確保系統穩定性
    資料持久化:所有操作記錄完整保存,支援審計與追溯
    三、資料結構設計

    3.1 核心資料表結構

    Equipment - 設備主檔表
    欄位名稱 資料型態 說明 必填
    equipment_id VARCHAR(50) 設備唯一ID(主鍵)
    equipment_code VARCHAR(50) 設備編號(唯一,業務用)
    equipment_name VARCHAR(200) 設備名稱
    status ENUM 設備狀態: active inactive maintenance scrapped
    created_at TIMESTAMP 建立時間(自動) -
    Inspection_Schedule - 巡檢週期設定表(核心)
    欄位名稱 資料型態 說明 重要性
    schedule_id VARCHAR(50) 排程ID(主鍵)
    equipment_id VARCHAR(50) 關聯設備ID(外鍵)
    schedule_type ENUM 週期類型: daily weekly monthly quarterly yearly custom
    schedule_config JSON 週期詳細設定(彈性欄位)
    依類型儲存不同結構的 JSON
    範例:{"times_per_day": 2, "time_slots": ["09:00", "15:00"]}
    advance_days INT 提前生成天數(0=當天生成,1=提前一天)
    valid_from / valid_to DATE 排程有效期間(valid_to=NULL 表示永久有效)
    is_active BOOLEAN 是否啟用(可暫停排程)
    Inspection_Order - 巡檢單主表
    欄位名稱 資料型態 說明
    order_id VARCHAR(50) 巡檢單ID(主鍵)
    order_no VARCHAR(50) 巡檢單號(業務單號,如 INS-20251103-001)
    schedule_id VARCHAR(50) 來源排程ID(可追溯)
    scheduled_date DATE 排定巡檢日期(與 schedule_id 組成唯一約束)
    status ENUM 狀態: pending in_progress completed cancelled overdue
    generation_batch_id VARCHAR(50) 生成批次ID(可查詢同批次生成的所有單據)
    is_auto_generated BOOLEAN 是否自動生成(區分手動/自動)
    關鍵索引設計:
    • inspection_order 表的 (schedule_id, scheduled_date) 組合唯一索引 - 防止重複生成
    • inspection_schedule 表的 (is_active, valid_from, valid_to) 組合索引 - 快速查詢有效排程
    • inspection_order 表的 (equipment_id, scheduled_date, status) 組合索引 - 加速查詢
    四、巡檢週期類型詳解(6 種類型 × 實際案例)
    類型 1️⃣:每日巡檢 (Daily)

    案例 A 每日一次巡檢

    {
      "schedule_type": "daily",
      "schedule_config": {
        "times_per_day": 1,
        "time_slots": ["09:00"]
      }
    }
    生成規則:每天 09:00 生成當天的巡檢單
    適用場景:生產設備日常點檢、安全設施檢查

    案例 B 每日多次巡檢(三班制)

    {
      "schedule_type": "daily",
      "schedule_config": {
        "times_per_day": 3,
        "time_slots": ["08:00", "16:00", "00:00"]
      }
    }
    生成規則:分別在 08:00, 16:00, 00:00 生成三張獨立巡檢單
    適用場景:24小時運轉設備、三班輪班巡檢
    每日生成時間軸示意
    08:00 早班巡檢 16:00 晚班巡檢 00:00 夜班巡檢
    類型 2️⃣:每週巡檢 (Weekly)

    案例 A 每週固定日期(週一、三、五)

    {
      "schedule_type": "weekly",
      "schedule_config": {
        "day_of_week": [1, 3, 5],
        "time": "09:00"
      }
    }
    生成規則:每週一、三、五的 09:00 生成
    週數對應:1=週一, 2=週二, ..., 7=週日

    案例 B 不同日期不同時間

    {
      "schedule_type": "weekly",
      "schedule_config": {
        "schedules": [
          {"day_of_week": 1, "time": "08:00"},
          {"day_of_week": 5, "time": "16:00"}
        ]
      }
    }
    生成規則:週一 08:00、週五 16:00 各生成一張
    適用場景:需要錯開作業時間的設備
    每週巡檢日曆示意(2025年11月)
    週日
    週一
    週二
    週三
    週四
    週五
    週六
    26
    27
    28
    29
    30
    31
    1
    2
    3
    巡檢
    4
    5
    巡檢
    6
    7
    巡檢
    8
    9
    10
    巡檢
    11
    12
    巡檢
    13
    14
    巡檢
    15
    16
    17
    巡檢
    18
    19
    巡檢
    20
    21
    巡檢
    22
    23
    24
    巡檢
    25
    26
    巡檢
    27
    28
    巡檢
    29
    30
    1
    2
    3
    4
    5
    6
    巡檢日(週一、三、五)
    一般日
    其他月份
    類型 3️⃣:每月巡檢 (Monthly)

    案例 A 每月固定日期(1號、15號)

    {
      "schedule_type": "monthly",
      "schedule_config": {
        "day_of_month": [1, 15],
        "time": "10:00"
      }
    }
    生成規則:每月 1 號、15 號的 10:00 生成
    適用場景:月初月中例行檢查、定期保養

    案例 B 每月最後一天

    {
      "schedule_type": "monthly",
      "schedule_config": {
        "day_of_month": [-1],
        "time": "16:00",
        "fallback_to_last_day": true
      }
    }
    生成規則:每月最後一天 16:00 生成
    特殊處理:-1 表示月底(28/29/30/31 自動判斷)
    每月巡檢日曆示意(2025年11月)
    週日
    週一
    週二
    週三
    週四
    週五
    週六
    26
    27
    28
    29
    30
    31
    1
    月初巡檢
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    月中巡檢
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    月底巡檢
    1
    2
    3
    4
    5
    6
    巡檢日(1號、15號)
    月底巡檢
    一般日
    其他月份
    週期類型快速對照表
    週期類型 適用場景 設定複雜度 常見頻率
    Daily 生產設備、安全設施 簡單 1-3次/天
    Weekly 空調、電梯、消防 中等 1-3次/週
    Monthly 鍋爐、發電機、水處理 中等 1-2次/月
    Quarterly 壓力容器、起重機 中等 1次/季
    Yearly 消防設備、法定檢查 簡單 1次/年
    Custom 特殊需求(每45天、僅工作日等) 複雜 彈性設定
    五、自動生成邏輯流程(完整步驟)

    5.1 主流程圖

    開始執行 步驟 1: 取得分散式鎖 防止重複執行 取得鎖? 跳過本次執行 (記錄日誌) 步驟 2: 建立批次記錄 生成 batch_id 步驟 3: 查詢排程 取得需處理的排程清單 迴圈:逐一處理每個排程 4.1 防重複檢查 已生成?跳過 4.2 驗證設備狀態 active?繼續 4.3 生成巡檢單 寫入資料庫 記錄處理結果 重複處理 步驟 5: 更新批次記錄 成功/失敗統計 步驟 6: 釋放鎖 結束

    5.2 觸發時機與條件

    時間觸發

    • 標準模式:每小時執行一次(建議在整點執行)
    • 高頻模式:每 10 分鐘執行(需求更即時的場景)
    • 低頻模式:每 4 小時執行(輕量級使用)

    手動觸發

    • API 呼叫:透過 REST API 手動觸發生成
    • 管理後台:系統管理員可從界面手動執行
    • 補償機制:系統啟動時自動檢查遺漏並補生成
    判斷條件詳解(8 項檢查)
    檢查項目 檢查邏輯 不通過時動作
    1 排程啟用狀態 is_active = TRUE 跳過 不處理此排程
    2 有效期間 valid_from <= 今天 <= valid_to 跳過 排程未生效或已過期
    3 設備存在 查詢 equipment 失敗 記錄錯誤日誌
    4 設備狀態 status = 'active' 跳過 設備非啟用中
    5 防重複 檢查 (schedule_id, date) 是否已存在 跳過 已生成過
    6 負責人有效 查詢 user 表,檢查 is_active 警告 仍生成但標註
    7 範本有效 查詢 template 警告 使用預設範本
    8 節假日檢查 查詢 holidays 表(如設定排除) 跳過 或延至下個工作日
    六、防呆與防重複機制(三層防護)

    三層防護架構

    第一層:資料庫唯一約束(DB Level) UNIQUE INDEX (schedule_id, scheduled_date) - 100% 防止重複 第二層:應用層檢查(Application Level) 生成前查詢是否存在 + 資料庫 FOR UPDATE 鎖 第三層:分散式鎖(Distributed Lock) Redis 鎖 / DB 鎖 - 防止多個程序同時執行
    方案 1:資料庫約束
    推薦使用 100% 可靠
    實作方式:
    ALTER TABLE inspection_order
    ADD UNIQUE INDEX uk_schedule_date (
      schedule_id,
      scheduled_date
    );
    優點:資料庫層級保證,絕對可靠
    缺點:重複時會拋出 SQL 錯誤
    方案 2:應用層檢查
    輔助方案 95% 可靠
    檢查邏輯:
    SELECT COUNT(*)
    FROM inspection_order
    WHERE schedule_id = ?
      AND scheduled_date = ?
      AND status != 'cancelled'
    優點:可提前返回,節省資源
    注意:併發環境下仍有極小機率重複
    方案 3:分散式鎖
    高併發環境 99% 可靠
    鎖定邏輯:
    lock_key = f"gen:{schedule_id}:{date}"
    with redis.lock(lock_key, timeout=30):
        # 二次檢查
        if not exists():
            create_order()
    優點:支援分散式環境
    需求:需要 Redis 或其他鎖服務
    推薦策略:方案 1(資料庫約束)+ 方案 2(應用層檢查)組合使用。方案 1 確保絕對不重複,方案 2 提早返回節省資源。高併發環境可再加上方案 3。
    七、設備異動處理(新增/刪除/修改)
    情境 1:新增設備
    步驟 1:建立設備

    在設備主檔表新增一筆記錄

    步驟 2:設定排程

    建立巡檢排程,設定週期類型與參數

    步驟 3:選擇性立即生成

    可選 如需立即執行首次巡檢,可手動觸發生成

    建議:設定 valid_from = 明天,讓系統自動於明天開始生成
    情境 2:刪除設備(報廢)
    步驟 1:軟刪除設備

    設定 status = 'scrapped' 而非實際刪除

    步驟 2:停用排程

    設定 is_active = FALSEvalid_to = 今天

    步驟 3:處理未來巡檢單

    將未執行的巡檢單設為 cancelled

    重要:保留歷史記錄,僅標記為已取消,便於審計追蹤
    情境 3:修改巡檢週期
    策略:版本控制法

    不直接修改,而是建立新版本排程

    步驟 1:結束舊排程

    設定 valid_to = 昨天

    步驟 2:建立新排程

    新增排程記錄,version += 1valid_from = 今天

    步驟 3:處理過渡期

    未來的巡檢單保留或取消(依需求)

    優點:完整保留變更歷史,可追溯每個版本的排程設定
    情境 4:更換負責人
    簡單直接修改

    直接更新 assigned_to 欄位即可

    同步未來巡檢單(可選)

    status = 'pending' 的未來巡檢單一併更新負責人

    發送通知

    通知新舊負責人:
    • 舊負責人:您已被移除
    • 新負責人:您被指派為負責人

    設備狀態轉換與對應動作
    狀態變更 排程處理 巡檢單處理 備註
    activemaintenance 暫停排程
    is_active = FALSE
    保留現有單據 維護結束後可恢復
    maintenanceactive 恢復排程
    is_active = TRUE
    自動生成恢復後的巡檢單 重新開始排程
    activescrapped 永久停用
    valid_to = 今天
    取消所有未來單據 不可逆,保留歷史
    activeinactive 停用排程 暫停生成 臨時停用,可恢復
    八、程式碼實作範例(Python)
    範例 1:主要生成函數(簡化版)
    def generate_inspection_orders_main():
        """
        主要生成流程
        """
    
        # 步驟 1: 取得分散式鎖
        if not acquire_distributed_lock("inspection_generation", timeout=300):
            log.info("另一個生成任務正在執行,跳過")
            return
    
        try:
            # 步驟 2: 建立批次記錄
            batch_id = generate_uuid()
            create_generation_log(
                batch_id=batch_id,
                execution_date=now().date(),
                status='running'
            )
    
            # 步驟 3: 查詢需要處理的排程
            target_datetime = now()
            schedules = get_active_schedules(target_datetime)
    
            # 步驟 4: 逐一處理
            results = {'success': 0, 'skipped': 0, 'failed': 0}
    
            for schedule in schedules:
                try:
                    result = process_single_schedule(
                        schedule, target_datetime, batch_id
                    )
                    results[result] += 1
                except Exception as e:
                    log.error(f"處理失敗: {e}")
                    results['failed'] += 1
    
            # 步驟 5: 更新批次記錄
            update_generation_log(
                batch_id=batch_id,
                status='success',
                generated_orders=results['success'],
                skipped_orders=results['skipped'],
                failed_orders=results['failed']
            )
    
        finally:
            # 步驟 6: 釋放鎖
            release_distributed_lock("inspection_generation")
    範例 2:週期判斷函數
    def should_generate_for_schedule(schedule, target_datetime):
        """
        判斷特定排程在目標時間是否需要生成巡檢單
        """
    
        schedule_type = schedule.schedule_type
        config = json.loads(schedule.schedule_config)
    
        current_date = target_datetime.date()
        current_time = target_datetime.time()
        current_weekday = target_datetime.weekday()  # 0=週一
        current_day = target_datetime.day
    
        # 根據不同類型判斷
        if schedule_type == 'daily':
            return check_daily_schedule(config, current_time)
    
        elif schedule_type == 'weekly':
            return check_weekly_schedule(config, current_weekday, current_time)
    
        elif schedule_type == 'monthly':
            return check_monthly_schedule(config, current_day, current_time)
    
        elif schedule_type == 'custom':
            return check_custom_schedule(config, current_date, current_time)
    
        return False
    
    
    def check_daily_schedule(config, current_time):
        """檢查每日排程"""
        time_slots = config.get('time_slots', [])
    
        for time_slot in time_slots:
            slot_time = parse_time(time_slot)
            # 容許 ±5 分鐘誤差
            time_diff = abs(
                (current_time.hour * 60 + current_time.minute) -
                (slot_time.hour * 60 + slot_time.minute)
            )
            if time_diff <= 5:
                return True
    
        return False
    
    
    def check_weekly_schedule(config, current_weekday, current_time):
        """檢查每週排程"""
        target_days = config.get('day_of_week', [])
        target_time = parse_time(config['time'])
    
        # 週一=1, 週日=7(資料庫格式)
        if (current_weekday + 1) in target_days:
            return is_time_match(current_time, target_time)
    
        return False
    範例 3:防重複檢查與生成
    def process_single_schedule(schedule, target_datetime, batch_id):
        """
        處理單一排程,生成巡檢單
        """
    
        target_date = target_datetime.date() + timedelta(days=schedule.advance_days)
    
        # 防重複檢查
        if is_already_generated(schedule.schedule_id, target_date):
            log_generation_detail(
                batch_id, schedule, 'skipped', 'Already generated'
            )
            return 'skipped'
    
        # 設備狀態檢查
        equipment = get_equipment(schedule.equipment_id)
        if equipment.status != 'active':
            log_generation_detail(
                batch_id, schedule, 'skipped', f'Equipment status: {equipment.status}'
            )
            return 'skipped'
    
        # 使用資料庫事務確保原子性
        try:
            with db.transaction():
                # 二次檢查(FOR UPDATE 鎖)
                existing = db.query_one("""
                    SELECT order_id FROM inspection_order
                    WHERE schedule_id = %s AND scheduled_date = %s
                    FOR UPDATE
                """, [schedule.schedule_id, target_date])
    
                if existing:
                    return 'skipped'
    
                # 生成巡檢單
                order_id = generate_uuid()
                order_no = generate_order_number(target_date)
    
                create_inspection_order(
                    order_id=order_id,
                    order_no=order_no,
                    equipment_id=schedule.equipment_id,
                    schedule_id=schedule.schedule_id,
                    scheduled_date=target_date,
                    assigned_to=schedule.assigned_to,
                    status='pending',
                    batch_id=batch_id
                )
    
                log.info(f"成功生成巡檢單 {order_no}")
                return 'success'
    
        except Exception as e:
            log.error(f"生成失敗: {e}")
            return 'failed'
    
    
    def is_already_generated(schedule_id, target_date):
        """
        檢查是否已生成
        """
        result = db.query_one("""
            SELECT COUNT(*) as count FROM inspection_order
            WHERE schedule_id = %s
              AND scheduled_date = %s
              AND status != 'cancelled'
        """, [schedule_id, target_date])
    
        return result['count'] > 0
    SQL 查詢範例
    查詢今天需要生成的排程:
    SELECT s.*
    FROM inspection_schedule s
    INNER JOIN equipment e ON s.equipment_id = e.equipment_id
    WHERE s.is_active = TRUE
      AND e.status = 'active'
      AND s.valid_from <= CURDATE()
      AND (s.valid_to IS NULL OR s.valid_to >= CURDATE())
    ORDER BY s.schedule_id;
    檢查是否已生成(防重複):
    SELECT COUNT(*) as count
    FROM inspection_order
    WHERE schedule_id = 'SCH-001'
      AND scheduled_date = '2025-11-03'
      AND status != 'cancelled';
    批次插入巡檢單(效能優化):
    INSERT INTO inspection_order (
        order_id, order_no, equipment_id, schedule_id,
        scheduled_date, assigned_to, status, batch_id
    ) VALUES
        ('ORD-001', 'INS-20251103-001', 'EQ-001', 'SCH-001', '2025-11-03', 'USER-001', 'pending', 'BATCH-123'),
        ('ORD-002', 'INS-20251103-002', 'EQ-002', 'SCH-002', '2025-11-03', 'USER-002', 'pending', 'BATCH-123'),
        ('ORD-003', 'INS-20251103-003', 'EQ-003', 'SCH-003', '2025-11-03', 'USER-003', 'pending', 'BATCH-123');
    九、系統監控與維護建議
    關鍵監控指標
    • KPI 1
      執行成功率
      目標:> 99%
    • KPI 2
      平均處理時間
      目標:< 100ms/筆
    • KPI 3
      最後執行時間
      告警:超過 2 小時
    • KPI 4
      每日生成量
      監控異常波動
    告警規則
    • 嚴重
      超過 2 小時未執行
      → Email + SMS 通知
    • 警告
      失敗率 > 10%
      → Email 通知
    • 資訊
      批次執行時間 > 5 分鐘
      → 記錄日誌
    定期維護
    • 每日
      檢查執行日誌
      確認無異常錯誤
    • 每週
      檢視效能指標
      分析處理時間趨勢
    • 每月
      歸檔舊日誌
      保留 180 天,超過歸檔
    • 每季
      索引重建優化
      確保查詢效能
    監控儀表板範例
    1,234
    本月生成總數
    +12% vs 上月
    99.8%
    成功率
    正常
    87ms
    平均處理時間
    優秀
    5 分鐘前
    最後執行
    運行中
    儀表板工具推薦:Grafana + Prometheus(即時監控)、ERPNext 內建報表(業務數據)、自訂 API 端點(系統狀態查詢)

    完整技術文件

    本頁面為精簡視覺化版本。完整技術文件包含:錯誤處理策略、效能優化方案、測試案例、部署檢查清單、API 接口設計等進階內容。

    文件版本:v1.0 | 最後更新:2025-11-03 | 開發團隊:HD 智動化

    開發歷程記錄

    系統版本演進與功能更新記錄

    版本更新歷程

    v1.0.0 (2024-Q1) - 基礎版本

    • • 設備基本資料管理功能
    • • 簡易巡檢排程與表單
    • • Web版本上線

    v1.5.0 (2024-Q2) - 行動版上線

    • • 手機APP開發完成(iOS + Android)
    • • QR Code掃描功能
    • • 離線填報模式
    • • 照片上傳與GPS定位

    v2.0.0 (2024-Q3) - 智能化升級

    • • AI異常預測功能
    • • 多層級簽核流程
    • • BI報表系統
    • • LINE/Email通知整合

    v2.5.0 (2024-Q4) - 企業級功能

    • • 多公司/多廠區支援
    • • ERP系統整合
    • • 進階權限控管
    • • 自訂報表設計器

    v3.0.0 (2025-規劃中) - IoT整合

    • • IoT感測器數據整合
    • • 預測性維護AI模型
    • • AR擴增實境巡檢輔助
    • • 語音助理操作

    專案資料

    專案相關文件與資料下載

    文件資料下載

    H1 專案簡報

    產品介紹簡報、客戶提案簡報、系統Demo簡報

    H2 專案文件

    需求規格書、系統設計文件、測試報告、使用手冊

    其他

    更多資訊與聯絡方式

    聯絡我們

    開發團隊

  • 公司名稱:HD 智動化
  • 官方網站:smarter.tw
  • 電子郵件:contact@smarter.tw
  • 聯絡電話:請透過官網查詢
  • 服務項目

  • 智慧巡檢系統客製化開發
  • 系統導入與教育訓練
  • 技術支援與維護服務
  • 數位轉型諮詢服務
  • 常見問題 FAQ

    Q1:系統支援哪些平台?

    系統支援Web網頁版、iOS及Android手機APP,也可在平板上使用,完全跨平台。

    Q2:資料保存在哪裡?安全嗎?

    所有資料加密保存於雲端伺服器,採用銀行級加密技術,並有完整備份機制,確保資料安全。

    Q3:系統可以離線使用嗎?

    手機APP支援離線模式,可在無網路環境下填寫巡檢表單,連線後自動同步資料。

    Q4:導入系統需要多久時間?

    視企業規模與需求而定,一般中小企業約2-4週即可完成導入與教育訓練。

    Q5:系統可以客製化嗎?

    可以!系統採模組化設計,可依企業需求進行客製化開發與功能調整。

    返回頂端