系統總覽
全面智慧化巡檢,保養、維修、認證安全有保障
數位化管理
支援跨平台檢後表單建置與認證,機器人自動回覆與異常告警
符合法規
協助企業建置完整設備檢核與安全合法化的流程紀錄
提升效率
降低人力成本,提升維護管理效率,即時掌握設備狀態
1. 數位化設備管理
- • 支援跨平台檢後表單
- • 機器建置資訊管理
- • 相關證照證明存檔
2. 定期任務排程
- • 系統自動發送任務提醒
- • 支援按週期(年/季/月/周)提醒
- • 可排任務執行順序
3. 設備歷程管理
- • 建立完整歷程紀錄資料庫
- • 點選設備即呈現歷程記錄
- • 維護、認證、報修記錄
4. 線上提示與管理
- • 員工在單據提示頁查看待處理事項
- • 真正式提現化表單管理
5. 即時警報與簽核
- • 多管道即時警報通知
- • 機器人自動回覆
6. 自動產出合規報告
- • 歷史資料查詢一鍵生成
- • 數位化資源整理與教材管理
系統特色
智慧化設備管理的關鍵優勢
需求改變,系統就要重來?
智慧「機械/設備」巡檢管理系統相較於傳統開發,協助使用者面對「機械檢核」、「設備維護」與「安全認證」這些重複又繁雜的工作,只需要快速在系統上調整欄位與表單。
老舊單據查核與檔案太多找不到?
檔案、證照通通保存在雲端,避免紙本證照遺失、過期失效。所有機械設備履歷完整記錄,一鍵查詢資料與產出合規報告,大幅節省人力成本。
主管佈告欄、報修防呆、維護及預防保養
真正數位化保險,保設備也保證安全!標準式、計畫性及預防性保養全方位管理,提醒機制及多管道通知確保不遺漏任何一項維護工作。
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 機械/設備管理
建立完整的設備資料庫與生命週期管理
| 功能項目 | 說明 | 支援程度 |
|---|---|---|
| 設備資料建立 | 單筆新增或批次匯入Excel | 完整支援 |
| 多層級分類 | 支援5層以上階層式分類 | 完整支援 |
| 文件上傳 | 支援PDF、圖片、Word等多種格式 | 完整支援 |
| QR Code掃描 | 手機APP掃描QR Code即時查看設備資訊 | 完整支援 |
| 證照到期提醒 | 證照到期前自動提醒更新 | 進階功能 |
| 設備履歷查詢 | 查詢設備完整維護保養歷史記錄 | 完整支援 |
C2 機械/設備巡檢管理
定期巡檢排程與智能提醒系統
| 巡檢類型 | 週期設定 | 適用場景 |
|---|---|---|
| 日常巡檢 | 每日/每週 | 生產設備、安全設施 |
| 定期保養 | 每月/每季 | 空調、電梯、鍋爐 |
| 法定檢查 | 每半年/每年 | 壓力容器、起重機 |
| 季節性維護 | 依季節 | 冷氣、暖氣系統 |
C3 巡檢單管理
數位化巡檢表單與記錄管理
手機填報
現場掃描QR Code直接填寫巡檢表單,支援離線模式
照片上傳
拍照記錄設備狀況,自動加上時間與GPS定位
電子簽名
巡檢人員電子簽名確認,具法律效力
步驟1:發現異常
巡檢人員現場發現異常,立即在系統中標記異常項目
步驟2:分類通報
系統依異常等級自動通知相關人員(緊急/一般/輕微)
步驟3:派工處理
維護人員接收任務,現場處理並回報處理結果
步驟4:驗收確認
主管或巡檢人員驗收確認,完成異常處理流程
C4 簽核管理
彈性多層級簽核流程設定
類型1順序簽核
依序經過各級主管審核,適用於一般維護作業
類型2會簽流程
多部門同時會簽,適用於跨部門協調事項
類型3緊急簽核
緊急狀況快速簽核,事後補簽流程
類型4條件簽核
依金額或重要性自動選擇簽核層級
C5 權限管理
彈性角色權限與資料安全控管
| 角色 | 權限範圍 | 典型職務 |
|---|---|---|
| 系統管理員 | 完整系統設定與資料管理權限 | IT人員 |
| 部門主管 | 本部門資料查看與簽核權限 | 課長、經理 |
| 巡檢人員 | 巡檢表單填報與設備查詢權限 | 現場巡檢員 |
| 維護人員 | 維修派工與設備保養權限 | 維修技師 |
| 稽核人員 | 所有資料唯讀查詢權限 | 內稽、品保 |
帳號安全
密碼強度檢核、定期更換密碼、異常登入警示
資料加密
傳輸加密、資料庫加密、敏感資訊遮罩保護
操作記錄
完整log記錄、異常操作告警、稽核軌跡追蹤
C6 數據管理
智能數據分析與決策支援
Excel匯出
支援大量資料匯出,方便二次分析
PDF報表
自動產生PDF格式正式報表
圖表視覺化
多種圖表類型,數據一目了然
系統操作說明
詳細的操作指引,快速上手系統功能
作業流程(SOP)
標準作業程序,確保系統正確運作
E1 客戶測試流程
系統上線前測試驗證流程
E2 基礎設置流程
系統初始化設定標準程序
E3 技術維護流程
日常維護與故障排除程序
系統規格(開發版)
技術架構與開發規格文件
後端技術
Python + ERPNext + Frappe Framework
前端技術
Vue.js + JavaScript + Tailwind CSS
資料庫
MariaDB / PostgreSQL
1.1 核心 DocType 架構圖
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 (訊息範本) |
定義自動化警報的觸發條件與通知規則 | 高 |
2.1 響應式設計斷點策略
手機版
< 768px
- • 單欄布局
- • 大型觸控按鈕 (min 44px)
- • 側邊抽屜選單
- • 簡化表單欄位
- • 相機直接拍照上傳
平板版
768px ~ 1024px
- • 雙欄布局
- • 側邊欄固定顯示
- • 橫向最佳化表單
- • 支援手寫簽名
- • 分割視窗操作
桌面版
> 1024px
- • 三欄布局
- • 完整功能表顯示
- • 批量操作功能
- • 進階篩選器
- • 快捷鍵支援
2.2 核心操作畫面設計
桌面版功能
- ✓ 卡片/列表雙模式切換
- ✓ 多條件進階篩選器(類別/位置/狀態)
- ✓ 批量操作(匯出/列印QR Code/停用)
- ✓ 即時搜尋(支援模糊搜尋)
- ✓ 自訂欄位顯示/排序
手機版優化
- ✓ 僅卡片模式(大圖示)
- ✓ 下拉刷新更新資料
- ✓ 滑動顯示快速操作
- ✓ 掃描 QR Code 快速查找
- ✓ 語音搜尋支援
桌面版功能
- ✓ 分頁式表單(基本資訊/檢查項目/附件)
- ✓ 表格化檢查項目批量輸入
- ✓ 拖曳上傳多張照片
- ✓ 自動計算異常項目統計
- ✓ 暫存草稿功能
手機版優化
- ✓ 單頁滾動式表單
- ✓ 每個項目獨立卡片
- ✓ 相機直接拍照(含地理位置)
- ✓ 語音輸入備註
- ✓ 離線模式(自動同步)
桌面版配置
- ✓ 4x3 網格式儀表板佈局
- ✓ 拖曳調整小工具位置
- ✓ 圖表互動鑽取功能
- ✓ 即時數據更新(WebSocket)
- ✓ 匯出 PDF/Excel 報表
手機版配置
- ✓ 垂直滾動式卡片
- ✓ 核心 KPI 優先顯示
- ✓ 點擊卡片展開詳細
- ✓ 左右滑動切換時間區間
- ✓ 分享圖片功能
2.3 可重用 UI 組件庫
| 組件名稱 | 功能說明 | 使用場景 | 響應式 |
|---|---|---|---|
| EquipmentCard | 設備資訊卡片,含狀態徽章、QR Code、快速操作按鈕 | 設備列表、儀表板 | ✓ |
| InspectionItemInput | 檢查項目輸入組件,自動驗證數值範圍並標示異常 | 巡檢單填寫 | ✓ |
| PhotoUploader | 照片上傳組件,支援相機拍照、圖片壓縮、GPS 標記 | 巡檢單、維修單 | ✓ |
| StatusTimeline | 狀態時間軸,顯示單據流轉歷程與審批記錄 | 巡檢單詳情、維修單 | ✓ |
| QRScanner | QR Code 掃描器,快速定位設備並開啟操作選單 | 手機端快速存取 | 手機 |
| SignaturePad | 手寫簽名板,支援觸控螢幕與滑鼠簽名 | 巡檢單確認、簽核 | ✓ |
| ChartWidget | 圖表小工具,支援折線/長條/圓餅/雷達圖,可互動鑽取 | 儀表板、報表 | ✓ |
| NotificationBell | 通知鈴鐺,顯示未讀通知數量與快速預覽 | 全域導航列 | ✓ |
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
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 檔案
- • 完成後通知使用者下載
- 觸發時機:批量新增設備後
- 執行方式:enqueue() 非同步執行
- 功能:
- • 為每個設備生成 QR Code
- • 產生列印用 PDF
- • 儲存至設備附件
- 觸發時機:上傳巡檢照片後
- 執行方式:enqueue() 非同步執行
- 功能:
- • 壓縮大型圖片(max 1920px)
- • 產生縮圖(200x200)
- • 提取 EXIF 資訊(GPS、時間)
- 觸發時機:週報產生完成
- 執行方式:enqueue() 非同步執行
- 功能:
- • 依角色分組收件人
- • 附加 PDF 報表
- • 記錄發送狀態
3.3 自動通知機制
| 通知事件 | 觸發條件 | 接收對象 | 通知管道 |
|---|---|---|---|
| 新巡檢單派工 | 系統自動生成巡檢單後 | 指派的巡檢人員 | 站內 Email |
| 巡檢異常警報 | 檢查項目超出正常範圍 | 設備負責人 + 部門主管 | 站內 Email LINE |
| 巡檢逾期提醒 | 預定完成時間已過 | 巡檢人員 + 其主管 | 站內 Email |
| 維修單建立 | 從異常項目自動建立維修單 | 維修人員 | 站內 Email |
| 簽核流程通知 | 巡檢單送出審核 | 下一審核者 | 站內 Email |
3.4 技術實作細節
Scheduler 設定
- • 在
hooks.py定義 scheduler_events - • 任務函式放在
tasks.py - • 使用
frappe.enqueue()處理長時間任務 - • 可透過
bench execute手動測試
通知整合
- • 站內通知:
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()
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 | - |
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 進階權限控制
| DocType | 欄位 | 限制條件 |
|---|---|---|
| Inspection_Order | approved_by | 僅部門主管可編輯 |
| Equipment | purchase_cost | 系統管理員與設備管理員可見 |
| Maintenance_Order | actual_cost | 僅部門主管與系統管理員可見 |
-
巡檢單狀態限制:
- •
Draft草稿:巡檢人員可編輯 - •
Submitted已送審:巡檢人員只能讀取,部門主管可審核 - •
Approved已核准:僅系統管理員可撤銷 - •
Rejected退回:巡檢人員可重新編輯
- •
-
實作方式:在 DocType 的
validate()方法中檢查狀態與角色
- 巡檢單填寫期限:超過預定完成日期 3 天後,巡檢人員無法再編輯(需主管解鎖)
- 歷史資料保護:超過 30 天的已核准巡檢單,僅系統管理員可修改
- 實作方式:使用
before_savehook 檢查日期與權限
- • 定期檢視使用者權限,移除離職人員帳號
- • 啟用雙因素驗證(2FA)保護管理員帳號
- • 記錄所有關鍵操作的 Audit Log(ERPNext 內建)
- • 敏感欄位(如成本)應加密儲存
- • 使用 ERPNext 的 User Permission 而非硬編碼過濾條件
5.1 核心業務情境測試
測試步驟
- 設備管理員登入系統
- 新增設備「CNC-001」
- 設定設備類別、位置、負責人
- 為該設備建立「每日」巡檢排程
- 套用預設巡檢範本
- 儲存並生成 QR Code
驗收標準
- ✓ 設備資料正確儲存
- ✓ QR Code 成功生成並可掃描
- ✓ 巡檢排程正確建立
- ✓ 明日自動生成第一張巡檢單
- ✓ 負責人收到通知郵件
測試步驟
- 巡檢人員手機登入系統
- 查看「待辦巡檢單」列表
- 開啟「CNC-001 每日巡檢」
- 填寫 5 個檢查項目(皆正常)
- 拍照上傳設備現況 3 張
- 備註填寫「運行正常」
- 簽名確認後送出
驗收標準
- ✓ 手機介面流暢、按鈕大小適中
- ✓ 照片含 GPS 與時間戳記
- ✓ 簽名筆跡清晰
- ✓ 送出後狀態更新為「已完成」
- ✓ 主管收到完成通知
- ✓ 儀表板數據即時更新
測試步驟
- 巡檢人員填寫檢查項目
- 「溫度」欄位輸入 85°C(超過 80°C 警戒值)
- 系統彈出紅色警示
- 詢問「是否立即建立維修單?」
- 點擊確認,自動建立維修單
- 填寫維修原因與緊急程度
- 送出巡檢單
驗收標準
- ✓ 異常數值立即標紅顯示
- ✓ 維修單自動建立並關聯巡檢單
- ✓ 設備負責人收到 LINE 警報
- ✓ 部門主管收到 Email 通知
- ✓ 維修人員待辦清單出現任務
- ✓ 設備健康度分數自動下降
測試步驟
- 部門主管登入系統
- 查看「待審核巡檢單」
- 開啟異常巡檢單詳情
- 檢視照片與檢查記錄
- 核准巡檢單並批示意見
- 查詢本週巡檢報表
- 匯出 Excel 分析資料
驗收標準
- ✓ 僅能看到自己部門的資料
- ✓ 核准後狀態更新為「已核准」
- ✓ 巡檢人員收到審核結果通知
- ✓ 報表數據準確完整
- ✓ Excel 匯出成功(背景執行)
- ✓ 圖表可互動鑽取查看明細
測試步驟
- 設定測試時間為明日 06:00
- 確認有 10 筆啟用的巡檢排程
- 等待系統自動生成巡檢單
- 檢查生成的巡檢單數量
- 確認指派人員正確
- 驗證通知郵件發送
驗收標準
- ✓ 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 分 |
| 手機體驗 | 按鈕大小、字體可讀性、流暢度 | 無抱怨回報 |
- 開發團隊完成所有測試項目,產出測試報告
- 業務單位進行 UAT 測試(至少 3 位實際使用者)
- 資訊部門進行安全性與效能審查
- 主管核准後正式上線
- 上線後 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 小時 |
- 高層主管支持與資源投入
- 業務單位積極參與需求確認與測試
- 完整的教育訓練計畫(線上教學影片 + 實體課程)
- 逐步導入策略(先小範圍試點,再全面推廣)
- 建立問題回報與處理機制(設立專責窗口)
- 持續優化與迭代(每月收集回饋,每季更新功能)
F3 巡檢單自動生成系統
智能化排程引擎 × 零人工干預 × 多週期支援
冪等性保證
相同輸入(排程ID + 日期)執行多次結果一致,絕不重複生成
故障恢復機制
系統故障後自動補償,確保不遺漏任何巡檢任務
完整審計追蹤
每次生成記錄批次ID、時間、結果,可完整追溯
多層防呆檢查
8 項檢查確保生成前所有條件滿足,避免無效單據
彈性擴充設計
模組化架構,新增週期類型無需改動核心邏輯
高效能處理
批次處理 + 索引優化,千筆排程秒級完成
2.1 整體架構示意圖
3.1 核心資料表結構
| 欄位名稱 | 資料型態 | 說明 | 必填 |
|---|---|---|---|
| equipment_id | VARCHAR(50) | 設備唯一ID(主鍵) | |
| equipment_code | VARCHAR(50) | 設備編號(唯一,業務用) | |
| equipment_name | VARCHAR(200) | 設備名稱 | |
| status | ENUM | 設備狀態: active inactive maintenance scrapped | |
| created_at | TIMESTAMP | 建立時間(自動) | - |
| 欄位名稱 | 資料型態 | 說明 | 重要性 |
|---|---|---|---|
| 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 | 是否啟用(可暫停排程) |
| 欄位名稱 | 資料型態 | 說明 |
|---|---|---|
| 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)組合索引 - 加速查詢
案例 A 每日一次巡檢
{
"schedule_type": "daily",
"schedule_config": {
"times_per_day": 1,
"time_slots": ["09:00"]
}
}
適用場景:生產設備日常點檢、安全設施檢查
案例 B 每日多次巡檢(三班制)
{
"schedule_type": "daily",
"schedule_config": {
"times_per_day": 3,
"time_slots": ["08:00", "16:00", "00:00"]
}
}
適用場景:24小時運轉設備、三班輪班巡檢
每日生成時間軸示意
案例 A 每週固定日期(週一、三、五)
{
"schedule_type": "weekly",
"schedule_config": {
"day_of_week": [1, 3, 5],
"time": "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"}
]
}
}
適用場景:需要錯開作業時間的設備
每週巡檢日曆示意(2025年11月)
案例 A 每月固定日期(1號、15號)
{
"schedule_type": "monthly",
"schedule_config": {
"day_of_month": [1, 15],
"time": "10:00"
}
}
適用場景:月初月中例行檢查、定期保養
案例 B 每月最後一天
{
"schedule_type": "monthly",
"schedule_config": {
"day_of_month": [-1],
"time": "16:00",
"fallback_to_last_day": true
}
}
特殊處理:-1 表示月底(28/29/30/31 自動判斷)
每月巡檢日曆示意(2025年11月)
| 週期類型 | 適用場景 | 設定複雜度 | 常見頻率 |
|---|---|---|---|
| Daily | 生產設備、安全設施 | 簡單 | 1-3次/天 |
| Weekly | 空調、電梯、消防 | 中等 | 1-3次/週 |
| Monthly | 鍋爐、發電機、水處理 | 中等 | 1-2次/月 |
| Quarterly | 壓力容器、起重機 | 中等 | 1次/季 |
| Yearly | 消防設備、法定檢查 | 簡單 | 1次/年 |
| Custom | 特殊需求(每45天、僅工作日等) | 複雜 | 彈性設定 |
5.1 主流程圖
5.2 觸發時機與條件
時間觸發
- 標準模式:每小時執行一次(建議在整點執行)
- 高頻模式:每 10 分鐘執行(需求更即時的場景)
- 低頻模式:每 4 小時執行(輕量級使用)
手動觸發
- API 呼叫:透過 REST API 手動觸發生成
- 管理後台:系統管理員可從界面手動執行
- 補償機制:系統啟動時自動檢查遺漏並補生成
| 檢查項目 | 檢查邏輯 | 不通過時動作 |
|---|---|---|
| 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 表(如設定排除) |
跳過 或延至下個工作日 |
三層防護架構
實作方式:
ALTER TABLE inspection_order
ADD UNIQUE INDEX uk_schedule_date (
schedule_id,
scheduled_date
);
檢查邏輯:
SELECT COUNT(*)
FROM inspection_order
WHERE schedule_id = ?
AND scheduled_date = ?
AND status != 'cancelled'
鎖定邏輯:
lock_key = f"gen:{schedule_id}:{date}"
with redis.lock(lock_key, timeout=30):
# 二次檢查
if not exists():
create_order()
步驟 1:建立設備
在設備主檔表新增一筆記錄
步驟 2:設定排程
建立巡檢排程,設定週期類型與參數
步驟 3:選擇性立即生成
可選 如需立即執行首次巡檢,可手動觸發生成
valid_from = 明天,讓系統自動於明天開始生成
步驟 1:軟刪除設備
設定 status = 'scrapped' 而非實際刪除
步驟 2:停用排程
設定 is_active = FALSE、valid_to = 今天
步驟 3:處理未來巡檢單
將未執行的巡檢單設為 cancelled
策略:版本控制法
不直接修改,而是建立新版本排程
步驟 1:結束舊排程
設定 valid_to = 昨天
步驟 2:建立新排程
新增排程記錄,version += 1,valid_from = 今天
步驟 3:處理過渡期
未來的巡檢單保留或取消(依需求)
直接更新 assigned_to 欄位即可
將 status = 'pending' 的未來巡檢單一併更新負責人
通知新舊負責人:
• 舊負責人:您已被移除
• 新負責人:您被指派為負責人
| 狀態變更 | 排程處理 | 巡檢單處理 | 備註 |
|---|---|---|---|
| active → maintenance | 暫停排程is_active = FALSE |
保留現有單據 | 維護結束後可恢復 |
| maintenance → active | 恢復排程is_active = TRUE |
自動生成恢復後的巡檢單 | 重新開始排程 |
| active → scrapped | 永久停用valid_to = 今天 |
取消所有未來單據 | 不可逆,保留歷史 |
| active → inactive | 停用排程 | 暫停生成 | 臨時停用,可恢復 |
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")
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
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
查詢今天需要生成的排程:
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 天,超過歸檔 -
每季
索引重建優化
確保查詢效能
完整技術文件
本頁面為精簡視覺化版本。完整技術文件包含:錯誤處理策略、效能優化方案、測試案例、部署檢查清單、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 專案文件
需求規格書、系統設計文件、測試報告、使用手冊
其他
更多資訊與聯絡方式
開發團隊
服務項目
Q1:系統支援哪些平台?
系統支援Web網頁版、iOS及Android手機APP,也可在平板上使用,完全跨平台。
Q2:資料保存在哪裡?安全嗎?
所有資料加密保存於雲端伺服器,採用銀行級加密技術,並有完整備份機制,確保資料安全。
Q3:系統可以離線使用嗎?
手機APP支援離線模式,可在無網路環境下填寫巡檢表單,連線後自動同步資料。
Q4:導入系統需要多久時間?
視企業規模與需求而定,一般中小企業約2-4週即可完成導入與教育訓練。
Q5:系統可以客製化嗎?
可以!系統採模組化設計,可依企業需求進行客製化開發與功能調整。