一、系統架構設計
1. 技術棧:
- 前端框架:uniapp + Vue3 + TypeScript
- 狀態管理:Pinia(分層設計,模塊化Store)
- 硬件交互:Android原生插件(Java/Kotlin封裝)
- 通信協議:MQTT(實時數據)、HTTPS(業務接口)
- 本地存儲:SQLite + uniapp本地存儲API
- 安全方案:SM4加密 + Token鑒權 + 操作日志審計
2. 核心模塊劃分:
├── 生物認證模塊(指靜脈/刷卡)
├── RFID管理模塊(入庫/取貨/盤點)
├── 門禁控制模塊(電鎖/報警)
├── 庫存管理模塊(上下限/預警)
├── 數據同步模塊(離線/在線)
└── 審計日志模塊(操作追蹤)
二、硬件對接方案(安卓專屬)
1. 指靜脈識別
- 硬件選型:中控智慧ZAZH-M3(USB接口)
- 實現步驟:
- 開發原生插件:
// FingerVeinModule.java(安卓原生模塊) public class FingerVeinModule {@UniJSMethodpublic void enroll(UniJSCallback callback) {// 調用SDK采集指靜脈特征VeinSDK.startEnroll(new VeinCallback() {@Overridepublic void onSuccess(byte[] feature) {callback.invoke(0, Base64.encode(feature));}});} }
- 前端調用:
// useVein.js(Vue3 Hook) const vein = uni.requireNativePlugin('FingerVein-Module'); export const useVein = () => {const enroll = async (userId) => {const { code, data } = await vein.enroll();if (code === 0) {await storeVeinFeature(userId, encrypt(data)); // SM4加密存儲}};return { enroll }; };
- 開發原生插件:
2. RFID讀寫器集成
- 硬件選型:Impinj E710 + 圓極化天線
- 優化策略:
- 防碰撞模式:啟用密集閱讀器模式(DRM),設置區域屏蔽
- 數據過濾:EPC白名單過濾 + 信號強度閾值(RSSI > -60dBm)
- 性能調優:
// RFIDService.js(讀寫器管理) class RFIDService {constructor() {this.reader = uni.requireNativePlugin('UHF-RFID-Reader');this.reader.init({ power: 30, mode: 'FAST' });}startScan() {this.reader.on('tagFound', (epc) => {if (this.isValidEPC(epc)) {store.commit('UPDATE_INVENTORY', epc);}});} }
3. 門鎖控制
- 硬件協議:GPIO控制 + 電流檢測
- 安全策略:
- 開門超時自動閉鎖(30秒)
- 震動傳感器觸發報警(通過Android Sensor API)
// DoorLock.js const lock = uni.requireNativePlugin('CabinetLock'); export const unlockCabinet = () => {lock.unlock(() => {setTimeout(() => lock.lock(), 30000); // 30秒后自動鎖定}); };
三、核心功能實現細節
1. 取貨流程(RFID自動識別)
2. 離線模式實現
- 數據存儲:
// 離線操作隊列管理 const saveOfflineLog = (log) => {const logs = uni.getStorageSync('offline_logs') || [];logs.push({ ...log, timestamp: Date.now(), synced: false });uni.setStorageSync('offline_logs', logs); };// 網絡恢復后同步 const syncOfflineData = async () => {const logs = uni.getStorageSync('offline_logs').filter(log => !log.synced);await api.batchUpload(logs);uni.setStorageSync('offline_logs', logs.map(log => ({ ...log, synced: true }))); };
3. 預警模塊實時推送
- MQTT主題設計:
// 訂閱主題示例 mqttClient.subscribe('warning/stock'); // 庫存預警 mqttClient.subscribe('warning/expire'); // 效期預警// 處理預警消息 mqttClient.on('message', (topic, payload) => {const data = JSON.parse(payload);if (topic === 'warning/stock') {store.commit('ADD_STOCK_WARNING', data);uni.showToast({ title: `庫存預警:${data.materialName}`, icon: 'none' });} });
四、性能優化專項
1. 列表渲染(萬級數據)
- 虛擬滾動方案:
<template><virtual-list :data="inventory" :item-size="80" :height="600"><template v-slot:default="{ item }"><inventory-item :data="item" /></template></virtual-list> </template>
2. RFID數據流處理
- WebWorker分離計算:
// rfid.worker.js self.onmessage = (e) => {const epcList = processEPC(e.data.rawData); // 防碰撞計算self.postMessage(epcList); };// 主線程調用 const worker = new Worker('/workers/rfid.worker.js'); worker.postMessage({ rawData: rfidBuffer });
3. 圖片資源加載
- 懶加載 + CDN分級:
<image :src="thumbnailUrl" lazy-load @load="loadHighResImage" @error="handleImageError" />
五、測試與部署
1. 硬件測試方案
- RFID壓力測試:
adb shell am broadcast -a "com.test.RFID_STRESS_TEST" --epc-count 200
- 指靜脈識別率測試:
- 采集100組指紋數據,測試FRR(拒真率)< 0.5%
2. 部署流程
- APK簽名:使用Jenkins + Android Keystore自動化構建
- OTA更新:內置熱更新模塊(差量更新)
- 設備預裝:通過ADB批量刷機(禁用非必要系統服務)
六、風險與應對
風險點 | 應對策略 |
---|---|
RFID讀取漏標 | 增加冗余掃描周期 + 貨柜紅外光電傳感器輔助檢測 |
指靜脈識別速度慢 | 特征提取算法優化(PCA降維) + 邊緣計算(設備端特征比對) |
離線數據丟失 | SQLite WAL模式 + 每日本地備份到SD卡 |
電鎖機械故障 | 硬件看門狗監測 + 網絡報警推送 |
七、開發里程碑
- Week 1-2:硬件SDK對接(指靜脈/RFID/門鎖)
- Week 3-4:核心流程開發(取貨/入庫/預警)
- Week 5:離線模式 + 數據同步
- Week 6:性能優化 + 安全審計
- Week 7:真機測試 + 醫院試點部署
該方案深度結合醫療場景需求,通過硬件抽象層封裝、業務邏輯分層解耦、安卓專屬性能調優,可確保系統在安卓端的穩定運行。開發重點應聚焦RFID實時性與生物識別準確率,同時預留硬件接口標準化能力,為后續擴展其他設備(如溫濕度傳感器)奠定基礎。