双门两路锁四摄-售货机硬件形态的软件建模

📅 发布时间:2026/10/3 19:51:07
双门两路锁四摄-售货机硬件形态的软件建模
03-双门两路锁四摄-售货机硬件形态的软件建模作者黒漂技术佬系列URM Ultra 方案理念与架构篇前两篇我们聊了全景和需求翻译。这一篇要把镜头推到最近——盯着那台柜子看。新手写物联网系统最容易犯的错是把设备当成一个黑盒子 ID建个表就存个device_no和status别的啥也不记。等真设备到了现场运营问这台柜子几扇门、几个摄像头、走什么网、固件啥版本你傻眼了——表里没字段。URM Ultra 的Device实体就是把需求的硬件事实原封不动搬进数据库。今天我就拿这台双门两路锁四摄 4G的柜子讲清楚怎么把一块铁疙瘩变成一行软件记录。一、先建立共识什么是硬件形态的软件建模说人话现实里一台售货机有门、有锁、有摄像头、有网络模块、有固件。软件里它得有对应字段否则系统根本不知道自己管的是个啥。我管这叫**“把硬件事实变成软件字段”**。三个原则设备是什么→ 用编号 型号 状态描述设备能怎样→ 用门数 / 锁数 / 摄像头数描述能力设备联网吗→ 用网络类型 固件版本 最后心跳描述可达性。URM Ultra 的Device表dms_device就是这三条原则的产物。二、Device 实体逐字段拆解下面这段是项目源码里Device实体的关键字段已加讲解注释// 项目源码Device 实体售货机硬件建模EntityTable(namedms_device)publicclassDeviceextendsBaseEntity{Column(uniquetrue)privateStringdeviceNo;// 设备编号全局唯一如 DEV-0001privateStringname;// 设备别名运营好认privateStringmodel;// 机型如双门智能柜privateDeviceStatusstatus;// 在线状态ONLINE / OFFLINE / FAULTprivateintdoorCount;// 门数量 → 双门2privateintlockCount;// 电控锁路数 → 2路锁2privateintcameraCount;// 摄像头数量 → 4摄4privateStringnetwork;// 网络类型如4GprivateStringlocation;// 安装点位privateStringaddress;// 详细地址privateStringfirmwareVersion;// 固件版本如 1.0.0privateLocalDateTimelastHeartbeat;// 最后心跳时间}DeviceStatus是个枚举只有三种// 项目源码publicenumDeviceStatus{ONLINE,OFFLINE,FAULT}我逐个字段翻译回硬件语言让你感受建模的对应关系字段类型硬件含义演示数据deviceNoString(唯一)出厂序列号 / 资产编号DEV-0001modelString机型双门智能柜doorCountint柜门数2lockCountint电控锁路数2cameraCountint摄像头数4networkString通信网络4GfirmwareVersionString固件版本1.0.0status枚举在线/离线/故障默认OFFLINElastHeartbeat时间最后报到时间心跳时刷新三、为什么这些字段一个都不能少很多新手会问doorCount/lockCount后台用得上吗又不是要去远程开门。我给你逐条说它在真实业务里的用处doorCount/lockCount——能力边界柜子有几扇门、每扇门几路锁决定了后台能下发的开锁指令粒度。双门柜你可能要分别控制左门右门如果lockCount2但你代码写死开一把锁那就是 Bug。建模时把能力记下来控制逻辑才不会越界。cameraCount——识别依据纯视觉方案靠摄像头。4 摄意味着柜内 4 个角度都有画面视觉算法才能拼出完整拿货过程。cameraCount是后台判断是否识别硬件齐备的凭据。network——排障线索4G 柜子一旦交易失败第一反应可能是网络抖动。network字段让运营一眼看出这是 4G 设备信号可能不稳而不是瞎猜。firmwareVersion——灰度与回滚固件升级是硬件系统的常态。记版本号你才能知道DEV-0003 还是 1.0.0没升到 1.1.0那个识别优化对它不生效。这字段是运维的生命线。statuslastHeartbeat——可达性4G 设备会离线。光有status不够还得有lastHeartbeat如果statusONLINE但lastHeartbeat是三小时前那它其实是假在线。后台靠这两个字段判断设备是否真能接任务。一句话总结字段不是摆设每一个都对应一个真实运维动作。建模偷懒运维还债。四、心跳让铁疙瘩活过来设备不会自己填status。它靠心跳heartbeat告诉后台我还活着。URM Ultra 里售货机设备端调用POST /device-api/vending/{deviceNo}/heartbeat后台DeviceService.heartbeat的逻辑项目源码简化// 项目源码心跳置在线 刷新时间publicvoidheartbeat(StringdeviceNo){DevicedevicefindByDeviceNo(deviceNo);device.setStatus(DeviceStatus.ONLINE);// 收到心跳 → 在线device.setLastHeartbeat(LocalDateTime.now());deviceRepository.save(device);}默认设备是OFFLINE刚灌数据还没连一旦设备端开始心跳就翻成ONLINE。小程序里设备列表会按status染色在线蓝、离线灰、故障红。这就是把硬件可达性可视化的最小实现。五、货道硬件之上的销售单元光记柜子长啥样还不够。柜子里真正卖货的是货道slot——一格一格的格子每格放一种商品。URM Ultra 用DeviceProduct这张表dms_device_product把货道和商品绑定// 项目源码设备商品货道绑定EntityTable(namedms_device_product)publicclassDeviceProduct{privateLongdeviceId;// 属于哪台柜子privateLongproductId;// 绑哪个商品privateStringslotNo;// 货道号如 A01 / B02privateintcapacity;// 容量这格最多放几个privateintstock;// 当前库存privateBigDecimalprice;// 货道售价可覆盖商品原价privateintenabled;// 1启用 0停用}演示数据里一台双门柜的货道大概长这样货道号商品容量库存启用A01可乐1081A03橙汁1031B01纸巾1011B02巧克力1021注意slotNo和cameraCount的关系4 个摄像头要覆盖这些货道的画面识别时才能定位用户从 A03 拿了橙汁。货道是视觉识别结果的落点也是扣库存的落点——第 02 篇deductStock(deviceId, slotNo, qty)扣的就是这里的stock。六、低库存从硬件事实引出补货动机DeviceProduct.stock持续下降降到阈值以下就该补货了。后台DeviceService.listLowStock(threshold)干这事// 项目源码低库存过滤默认阈值 5publicListDeviceProductlistLowStock(intthreshold){returndeviceProductRepository.findAll().stream().filter(dp-dp.getStock()!nulldp.getStock()threshold).collect(Collectors.toList());}这里有个真实工程细节新手必看当前实现是把全表捞出来在内存里过滤不是WHERE stock ?。演示数据小无所谓真上生产几万台柜子时这行findAll会撑爆内存必须改成 SQL 条件查询。我在代码注释里也标了这点——Demo 和生产的差距往往就藏在这种能跑但不够好的地方。低库存列表正是第 04、05 篇无人车 机械臂补货的触发源。你看一台柜子的硬件建模一路牵出了整条补货链路。七、建设备的后台契约运营怎么把一台新柜子录进系统AdminDeviceController暴露了对设备的增删改查核心路径动作路径说明列表GET /admin-api/device/list全部柜子新增POST /admin-api/device/录入一台柜子含门数/锁数/摄数货道GET /admin-api/device/{id}/products看这台的货道绑货道POST /admin-api/device/{id}/products把商品塞进某货道改库存PUT /admin-api/device/{id}/products/{slotNo}/stock上货后回写库存低库存GET /admin-api/device/low-stock阈值默认 5这些接口把硬件建模从数据库一路通到了运营界面。你录入doorCount2、cameraCount4后台就真知道这是台双门四摄柜。八、一张图收尾硬件 → 字段 → 业务现实柜子双门/2锁/4摄/4G │ 建模 ▼ Device 实体deviceNo/doorCount/lockCount/cameraCount/network/... │ 衍生 ├── statuslastHeartbeat ──▶ 心跳在线判定 ├── DeviceProduct(slotNo/capacity/stock) ──▶ 货道销售 识别落点 └── stockthreshold ──▶ 低库存 ──▶ 触发无人车/机械臂补货把硬件事实变成软件字段听起来朴素却是物联网系统的地基。地基打歪上面跑的车、臂、订单全得塌。下一篇我们离开柜子去看把货运过来的那位——无人车以及它在三端里当的枢纽角色。