所有項目

2024.10 - 2025.02 / 獨立開發

RFID 固定資產管理系統

面向中學的固定資產管理平台,支持資產建檔、RFID 標籤打印、手持盤點與審計追溯。

ReactDjangoPostgreSQLTauriAndroid JNI
RFID 固定資產管理系統 預覽

業務範圍與資產識別

系統覆蓋採購建檔、資產管理、維修、盤點、報廢、耗材與報表等流程。每項固定資產同時保存業務數據、唯一 RFID EPC 及可掃描的 QR code,讓後台建檔、標籤打印與現場盤點使用同一個資產識別碼。

固定資產列表,包含篩選條件、資產編號、部門、存放地點及採購單關聯

行級數據權限與部門樹

系統將「可做什麼」與「可操作哪些數據」分開處理。使用 Django 的 group / permission 管理各模塊的 CRUD 權限;數據查詢及寫入則依用戶被授權的部門集合過濾,形成行級數據權限(row-level security)。部門以樹狀結構表示,授權上層節點時會展開其下屬部門,讓管理人員可按組織範圍管理資產,而非只依角色獲取全校數據。

資產、採購單、盤點任務等主業務數據均帶有部門與校部歸屬。建立盤點任務時,後端會驗證所選資產是否位於用戶可見的部門範圍,並檢查資產與目標部門的校部一致性;這些限制同時應用在 API,而不是只依賴前端隱藏按鈕。

單筆固定資產詳情,包含 RFID EPC、部門、保管人及採購關聯

自動化審計鏈路

審計不由各個業務 service 手動插入日誌,以免新功能或異常流程遺漏記錄。數據庫層使用 PostgreSQL pgaudit 保存數據庫操作;業務模型則以 django-pghistory 生成 PostgreSQL trigger,在 INSERTUPDATEDELETE 時自動寫入事件數據,並在事件的 context 中附帶操作者、員工編號與 IP 地址。

兩者分別處理數據庫操作與業務數據版本;另外在 HTTP response 加入 username,讓反向代理的 access log 也可關聯到實際賬號。這樣可從 HTTP 請求、數據庫審計到單筆資產的變更歷史交叉追查,同時將記錄責任從容易漏寫的業務代碼中抽離。

以任務保存盤點結果

盤點不是在掃描後直接改寫資產主表,而是先建立有部門範圍及起止日期的盤點任務,再將目標資產寫入任務明細。掃描槍返回 EPC 後,前端將對應明細批量更新為正常、遺失或損壞,並記錄盤點時間;任務本身再由待盤點進入進行中或完成。這使每次盤點都有獨立的資產範圍與結果:即使資產後續轉移,既有任務的成員及盤點結果仍可回顧。

盤點單詳情,顯示任務範圍及資產盤點狀態

RFID + QR code 標籤打印

資產標籤同時包含 RFID 與 QR code:RFID 適合以掃描槍在現場快速、非接觸式盤點;QR code 則可由一般手機掃描,作為沒有 RFID 掃描槍時的低門檻入口。Web 前端不直接處理打印機驅動,而是調用將廠商驅動封裝成 HTTP API 的本地打印服務;流程會枚舉及連接設備、檢查打印機狀態、加載標籤模板,填入資產編號、名稱、EPC 與 QR code 後逐張打印並寫入 RFID。

批量打印四個資產標籤的預覽界面

Android 手持盤點 App

為配合 Android 手持 RFID 掃描槍,將 React 界面以 Tauri 打包成移動 App,並把廠商提供的 AAR 與 JNI native library 封裝為 Tauri mobile plugin。前端只需調用 TypeScript API;Kotlin plugin 則負責連接掃描槍、開始/停止連續盤點及把掃描槍 callback 轉為前端 event,使盤點界面可實時接收 EPC、RSSI 等數據。Android SDK、ABI library 打包與 callback-to-event 的實現細節整理於《在 Tauri Android App 中封裝 RFID SDK》。

待補:Android RFID 掃描槍盤點界面截圖