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

发布时间:2026/10/3 19:50:47

双门两路锁四摄-售货机硬件形态的软件建模 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 ──▶ 低库存 ──▶ 触发无人车/机械臂补货把硬件事实变成软件字段听起来朴素却是物联网系统的地基。地基打歪上面跑的车、臂、订单全得塌。下一篇我们离开柜子去看把货运过来的那位——无人车以及它在三端里当的枢纽角色。
延伸阅读

更多相关文章

2026/10/3 20:35:49

蓝牙芯片驱动开发-第5章第11题-在蓝牙数据传输中如何利用DMA实现流控

蓝牙面试题解析:在蓝牙数据传输中,如何利用 DMA 实现流控? 难度:⭐⭐⭐⭐ 较难 | 场景:社招二面/三面、蓝牙驱动优化 | 高频:🔥🔥🔥🔥 标准答案 DMA 与流控结合通过 硬件流控(CTS/RTS)+ 软件缓冲状态 + DMA 暂停/恢复 实现蓝牙数据流的平滑传输: ① DMA 在蓝…

2026/10/3 20:35:49

ZeroTermux 内置命令手册深度解析:bzip2 压缩与解压实战指南

移动开发开发工具 【免费下载链接】ZeroTermux 项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTermux 点击查看 免费下载 本指南以 ZeroTermux 项目内置的命令参考文档 bzip2.md 为核心,系统讲解 .bz2 格式压缩包创建与管理的完整用法&#xf…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 15:02:19

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑