随着线下自助文娱业态的快速发展,无人值守的拼豆手工店正在成为商圈、社区的热门消费场景。用户无需店员接待,扫码即可解锁工位、领取材料包、自助完成拼豆创作,还可将未完成的作品寄存到共享柜中下次继续创作,整个流程完全自助化,大幅降低了门店运营成本。本文将从全栈开发视角,完整分享无人自助拼豆系统的架构设计、核心功能实现、联调避坑经验以及部署优化方案,所有技术实现均经过生产环境验证,可直接复用至同类无人共享业态系统开发。
一、系统整体架构与技术栈选型
无人自助拼豆系统属于典型的「云管端」一体化物联网系统,整体分为用户端、设备端、后端服务、管理后台四个核心模块,技术栈选型参考了成熟的无人共享类系统通用方案,兼顾开发效率、稳定性与可扩展性:
- 后端服务:采用Spring Boot + MyBatis Plus + MySQL 8.0作为核心技术栈,Spring Boot生态完善、开发效率高,MyBatis Plus可大幅简化单表CRUD开发,MySQL存储用户信息、订单、拼团活动、库存、设备状态等结构化数据,同时引入Redis作为缓存层存储拼团状态、设备临时指令、用户会话信息,提升接口响应速度。
- 用户端:采用UniApp(基于Vue 2语法)开发,可一键编译为小程序、H5、APP等多端产物,满足用户不同场景的使用需求,核心支持扫码开锁、拼团凑单、作品寄存、订单查询、门店导航等功能。
- 管理后台:采用Vue 2 + Element UI搭建,供运营人员使用,支持门店管理、设备管理、库存管理、拼团活动配置、订单查询、数据统计等功能。
- 设备端与IoT链路:工位、材料柜、寄存柜均搭载ESP32主控模块,通过MQTT协议与IoT网关通信,网关对接后端服务,实现设备状态上报、指令下发等能力。
架构设计上采用前后端分离、模块解耦的思路,核心业务模块(用户模块、订单模块、拼团模块、设备模块、库存模块)独立拆分,支持单独迭代升级,降低后续维护成本。
二、核心业务功能的技术实现
无人自助拼豆系统的核心业务逻辑围绕「自助使用、拼团凑单、智能库存」三个核心场景展开,以下是重点功能的实现思路与代码示例:
2.1 扫码解锁工位/材料柜流程
用户扫描工位/材料柜后的执行逻辑如下:
- 前端获取携带的设备ID、门店ID,携带用户OpenID调用后端校验接口;
- 后端校验用户是否有有效订单/拼团记录,若有权限则向IoT网关发送开锁指令,同时记录操作日志;
- 设备收到指令后执行开锁动作,完成后上报状态给后端,后端同步修改订单状态为「使用中」。
2.2 拼团凑单功能实现
为了降低用户消费门槛,系统支持2-3人拼团共享同一份拼豆材料包,拼团功能核心逻辑的代码示例如下:
@RestController@RequestMapping("/api/group")publicclassGroupActivityController{@AutowiredprivateGroupActivityServicegroupActivityService;@AutowiredprivateGroupUserServicegroupUserService;@AutowiredprivateRightsServicerightsService;@AutowiredprivateStockServicestockService;@AutowiredprivateMqProducermqProducer;@AutowiredprivateRedissonClientredissonClient;@PostMapping("/join")publicRjoinGroup(@RequestBodyJoinGroupReqreq){// 校验拼团是否存在且处于待成团状态、未过期LambdaQueryWrapper<GroupActivity>wrapper=Wrappers.lambdaQuery();wrapper.eq(GroupActivity::getId,req.getGroupId()).eq(GroupActivity::getStatus,GroupStatusEnum.WAITING.getCode()).gt(GroupActivity::getExpireTime,LocalDateTime.now());GroupActivityactivity=groupActivityService.getOne(wrapper);if(ObjectUtil.isNull(activity)){returnR.fail("拼团已结束或不存在");}// 校验用户是否重复参与同个拼团if(groupUserService.isUserJoined(req.getUserId(),req.getGroupId())){returnR.fail("您已参与该拼团,请勿重复提交");}// 预扣用户对应权益,避免拼团成功后用户无权限核销booleanauthResult=rightsService.deductPreAuth(req.getUserId(),activity.getNeedRights());if(!authResult){returnR.fail("权益不足,请先确认账户状态");}// 加分布式锁避免拼团超员RLocklock=redissonClient.getLock("group:join:"+req.getGroupId());try{lock.lock(3,TimeUnit.SECONDS);// 新增拼团参与记录groupUserService.save(newGroupUser(req.getUserId(),req.getGroupId()));// 校验是否达到成团人数longjoinCount=groupUserService.count(Wrappers.lambdaQuery(GroupUser.class).eq(GroupUser::getGroupId,req.getGroupId()));if(joinCount>=activity.getNeedCount()){// 成团逻辑:修改拼团状态、扣减材料库存、通知所有参与用户activity.setStatus(GroupStatusEnum.SUCCESS.getCode());groupActivityService.updateById(activity);stockService.deduct(activity.getMaterialId(),1);mqProducer.send(newGroupSuccessNoticeEvent(activity.getId()));}}finally{if(lock.isHeldByCurrentThread()){lock.unlock();}}returnR.success(joinCount>=activity.getNeedCount()?"拼团成功":"参与拼团成功,等待其他用户加入");}}2.3 作品寄存功能实现
该功能复用了无人共享柜的通用逻辑,用户使用完成后可选择将作品放入寄存柜,系统生成取件码,下次扫码输入取件码即可打开对应柜门,后端存储寄存记录与柜门绑定关系,支持超时提醒功能。
三、软硬件联调与业务场景避坑指南
无人自助系统因为涉及软硬件交互,开发过程中容易遇到纯互联网系统不会出现的问题,以下是我们在生产环境验证过的避坑经验:
- 设备指令可靠性问题:由于门店网络波动,后端下发的开锁/开灯指令存在丢包可能,我们在实现时增加了3次重试机制+ACK应答逻辑,后端发送指令后等待设备返回应答,若5秒内未收到应答则重试,重试3次失败后返回前端提示用户刷新重试,避免用户长时间等待。
- 库存一致性问题:材料柜的库存统计依赖柜门开合次数+重量传感器数据,若设备断网会导致库存上报延迟,我们采用「终一致性」方案,设备本地缓存所有操作记录,网络恢复后批量上报,后端每日凌晨执行一次库存对账任务,对比设备上报数据与系统库存数据,差量自动修正并生成告警通知运营人员核对。
- 离线可用兼容:若门店断网,用户无法扫码调用后端接口,我们在设备端增加了离线预约码校验能力,用户可提前在小程序生成离线预约,设备本地存储有效期内的预约凭证,断网时可直接校验解锁工位,网络恢复后自动同步使用记录。
- 拼团超卖问题:拼团功能如果不加锁,高并发场景下会出现实际参与人数超过设定上限的问题,我们采用Redisson分布式锁对拼团ID加锁,确保同一时间只有一个加入请求执行人数校验逻辑,完全避免超卖问题。
四、部署架构与可扩展性优化
系统部署采用容器化方案,所有服务均打包为Docker镜像,通过K8S或Docker Compose编排,核心优化点如下:
- 多环境隔离:开发、测试、生产环境完全隔离,配置文件通过配置中心统一管理,避免环境配置混淆导致的线上问题。
- 高可用部署:后端服务、IoT网关均做集群部署,避免单点故障,MySQL做一主两从架构,实现读写分离,Redis采用集群模式存储缓存数据,提升系统可用性。
- 监控告警体系:接入Prometheus+Grafana监控体系,监控核心指标包括设备在线率、接口响应时间、拼团成功率、库存余量等,异常指标触发告警通知相关人员及时处理。
- 可扩展性设计:核心业务模块均预留扩展接口,后续可快速对接其他自助业态需求,比如增加手工课程预约、拼豆作品比赛、周边产品售卖等功能,无需重构核心架构。
系统所有代码均配备完整的技术文档、部署文档,支持二次开发,不限制域名与IP部署,可根据不同门店的需求快速定制功能。
无人自助拼豆系统的核心架构与技术实现逻辑,可复用至绝大多数无人共享业态,包括共享球类设备、无人售卖柜、共享文娱设备等场景,只要替换对应的前端交互与业务规则,即可快速完成定制开发,大幅降低同类系统的开发成本。