WPF 智能零售柜自助购系统架构与实践
引言
当前游泳馆、健身房、产业园区等线下场景中,无人零售与智能储物设备的市场需求持续攀升。终端用户追求点选即买、扫码即付的轻量化自助消费体验,而运营端则亟需实现商品、订单、设备、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.DeserializeObject<DeviceInfo>(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、支付网关、智能柜设备,构建完整的自助零售业务闭环,广泛适用于需要自助购物、智能储物一体化服务的线下场景。
