一、系统架构设计
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 { @UniJSMethod public void enroll(UniJSCallback callback) { // 调用SDK采集指静脉特征 VeinSDK.startEnroll(new VeinCallback() { @Override public 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实时性与生物识别准确率,同时预留硬件接口标准化能力,为后续扩展其他设备(如温湿度传感器)奠定基础。