WPF 智能零售柜自助购系统架构与实践 📅 2026/6/22 3:09:45 引言当前游泳馆、健身房、产业园区等线下场景中无人零售与智能储物设备的市场需求持续攀升。终端用户追求点选即买、扫码即付的轻量化自助消费体验而运营端则亟需实现商品、订单、设备、ERP后台的一体化统一管控。NLStar AISales是针对上述场景定制开发的WPF自助购客户端系统。设备搭载1920×1080触控显示屏核心承载商品展示、购物车管理、聚合支付等核心自助购能力同时深度对接后端ERP系统与智能柜AIBox服务构建全流程自助零售闭环。项目定位维度说明运行环境Windows触控一体机、智能零售柜专用设备技术栈.NET 8 WPF业务模式自助选品加入购物车 → 微信/支付宝扫码完成支付后端集成对接ERP商品模板、第三方支付网关、智能柜设备管理服务本解决方案由三个核心工程组成各模块职责边界清晰、能力互补1.NLStar.WPF.AISales主应用工程承载自助购物全流程UI展示与核心业务逻辑2.NLStar.WPF.Common公共能力工程封装HTTP通信、日志记录等通用基础能力3.MBSoft.Erp.WPF.AIBox同生态智能柜配套模块实现设备存取物、远程开柜等柜体控制能力。分层架构本项目采用MVVM设计模式三层架构的组合式架构设计各层级职责拆分明确、解耦度高便于迭代维护与功能扩展整体架构如下┌─────────────────────────────────────┐ │ View (XAML) │ HomePage / PayPage / AdvPage 等页面 ├─────────────────────────────────────┤ │ ViewModel │ HomePageViewModel / PayViewModel 等页面视图模型 ├─────────────────────────────────────┤ │ BLL (ViewBll) │ 商品初始化、订单处理、开柜控制、支付校验 ├─────────────────────────────────────┤ │ DAL (Proxy) │ 后端REST API统一封装 ├─────────────────────────────────────┤ │ 后端 API │ aidevice / aibox / eden / pay / erp └─────────────────────────────────────┘ViewModel层基于自研CommandBase实现ICommand命令接口结合Microsoft.Xaml.Behaviors.Wpf组件在XAML层直接绑定页面加载、按钮点击等交互事件彻底规避后台代码code-behind冗余臃肿问题实现视图与逻辑的彻底解耦。BLL层ViewBll为系统业务核心枢纽设备启动阶段完成设备配置、柜格通道指令、销售商品模板的初始化加载设备运行阶段全程处理订单创建、支付状态轮询、智能柜开柜触发等核心业务流程。DAL层Proxy按照业务领域对后端API进行模块化分组封装统一接口调用规范降低上层业务的接口调用成本具体分类如下1.aidevice设备基础信息查询与配置2.aibox用户身份识别、柜格资源分配、开柜指令下发3.eden销售模板加载、订单创建与管理4.pay支付链接生成、支付结果异步查询5.erp仓库信息、商品数据同步。设备启动与配置应用启动时Global静态类优先读取本地config目录下的Global.json配置文件获取设备SN编码与后端API基础地址再通过远程接口请求补全全量设备配置信息实现轻量化启动部署。核心初始化代码如下// Global.cs 静态构造函数 string file string.Format({0}config\Global.json, AppDomain.CurrentDomain.BaseDirectory); device JsonConvert.DeserializeObjectDeviceInfo(File.ReadAllText(file, Encoding.UTF8)); viewBll new ViewBll(); viewBll.InitDeviceInfo();本地核心配置文件脱敏示例如下仅保留设备唯一标识与核心服务地址极大简化批量部署流程{ SN: SNxxxxxxxxxxxxxxx, ApiUrl: https://api.example.com, Update: 0, UpdateUrl: https://update.example.com/salesaibox }InitDeviceInfo初始化方法按顺序完成全量配置加载具体流程包括1. 根据设备SN码远程拉取机构ID、区域ID、仓库编码等设备归属信息2. 加载区域对应柜格通道指令对照表绑定柜体编号与开柜执行指令3. 解析绑定仓库ID、销售模板ID确定设备对应的商品销售范围4. 调用ERP接口同步商品分类与商品全量数据缓存至全局集合Global.ProductList供前端页面渲染使用。系统采用本地最小配置远程动态补全的部署方案批量落地时仅需为每台设备配置唯一SN码与API服务地址大幅降低设备批量部署、运维管理成本。页面导航与自助终端体验优化系统主窗口MainWindow采用无边框全屏展示模式适配自助终端Kiosk使用场景通过内嵌Frame容器实现多页面无缝切换。全局UIController控制器基于事件驱动机制管理页面导航并搭配淡入淡出过渡动画提升终端操作观感。页面跳转调用方式如下UIController.Navigate(new HomePage());针对无人值守终端场景系统内置空闲超时自动复位机制MainViewModel通过DispatcherTimer定时器实时倒计时每秒更新空闲时长倒计时归零后自动返回广告首页。其中首页空闲超时阈值为90秒支付页面超时阈值为110秒用户任意操作可实时重置倒计时避免误复位影响购物流程。页面顶部封装通用TopTemplate导航栏集成返回、人工客服、空闲倒计时展示功能仅在非首页场景展示兼顾界面简洁性与操作实用性。商品展示与购物车能力系统首页HomePage采用左右分区布局左侧为商品分类导航栏通过iconfont矢量图标搭配分类名称实现直观导航右侧根据分类名称分组展示对应商品列表。所有商品数据均同步自ERP销售模板完整展示商品售价、原价、会员价以及规格、净含量、保质期、品牌等详情信息信息展示全面规范。购物车数据基于内存全局集合Global.ShoppingCartList存储通过Function.InitShoppingCartData方法实时统计购物车商品数量与总金额数据更新实时高效。用户添加商品时触发轻量级HintMsg弹窗提示操作反馈清晰。用户点击结算后弹出ShoppingCartWindow确认订单信息确认无误后跳转至支付页面完成购物流闭环。智能柜AIBox协同能力系统核心流程聚焦自助购物场景但BLL层已完整封装智能柜业务能力实现自助购、智能储物双场景复用适配一体化设备部署需求1. 多模态用户识别支持二维码、手机号、掌纹三种识别验证方式2. 双向储物业务覆盖物品存入、取出全流程场景3. 柜体智能管控自动完成柜格分配、历史柜格记录查询支持精准开柜4. 设备运维能力内置管理员登录权限支持单柜独立开启、全柜批量开启、柜格资源释放等运维操作。系统通过枚举类型标准化定义多模态识别与储物类型代码规范、扩展性强具体定义如下public enum InputModeType { qr 0, tel 1, plam 2 } public enum InOutType { In 0, Out 1 }依托模块化设计同一套设备端框架可适配纯自助购、纯储物、购储一体化三类场景仅需按需启用对应业务模块即可场景适配性极强。技术依赖主工程基于net8.0-windows框架开发核心依赖NuGet包及对应能力说明如下包名用途Microsoft.Xaml.Behaviors.Wpf实现XAML行为绑定、事件命令关联简化页面交互逻辑开发QRCoder生成支付二维码支撑扫码支付场景ZXing.Net拓展条码、二维码解析与生成能力完善扫码交互场景Newtonsoft.Json提供高效的JSON序列化、反序列化能力支撑配置文件与接口数据解析异常处理与日志机制系统在App.xaml.cs中全局注册UI线程与非UI线程异常捕获机制可拦截程序运行过程中所有未捕获异常。通过自研LogHelper工具类实现日志按日滚动存储日志文件统一归档至Logs目录命名格式为log_yyyyMMdd.log便于问题追溯与运维排查。同时系统针对终端用户屏蔽底层异常详情触发异常时展示友好的业务提示避免用户困惑。该机制完美适配设备7×24小时无人值守的运行特性大幅提升设备运行稳定性与可运维性。小结NLStar AISales是一款适配线下智能零售场景的.NET 8 WPF自助终端系统。项目采用标准化MVVM分层架构实现视图、业务、数据的多层解耦通过配置分离设计实现设备轻量化批量部署后端API按业务领域模块化封装接口调用规范清晰。同时系统针对自助终端场景深度优化实现全屏沉浸式展示、空闲超时自动复位、操作动画反馈、异常友好提示等特色能力。系统可无缝对接ERP、支付网关、智能柜设备构建完整的自助零售业务闭环广泛适用于需要自助购物、智能储物一体化服务的线下场景。