基于微信小程序和外卖柜的外卖平台
2022-06-10吴文涵谢雨卿谈欣王赛博徐楷雯
吴文涵,谢雨卿,谈欣,王赛博,徐楷雯
(东南大学成贤学院 电子与计算机工程学院,江苏南京,210088)
0 引言
随着时代的发展,满大街的外卖小哥穿梭在城市街道,越来越多的人通过外卖平台点单,去享受几公里以外的美食,外卖在餐饮业的市场份额逐年增加。但随着外卖单量的增加,一系列的问题也相继的出现。尤其是近几年的疫情,外卖虽然有效避免外出,减少了公共场所人流量的同时为大众提供服务,但是由于无法送货上门,将外卖置于室外,造成外卖丢失、错拿外卖、因环境影响造成的外卖变质、放凉等问题;高校方面,由于将近90%的大学禁止外卖小哥进校园,给大学生生活造成不便,所以我们急需在外卖和校园内部之间进行一个对接。
由此,小程序+外卖自提取柜项目也应运而生,用户选择寄存柜功能,外卖员只需在程序内接单,通过存件码将外卖存入柜中即可。这样不仅有效避免外卖丢失的问题,同时寄存柜还具备消毒,保温等功能,保证外卖口感与质量。APP内还附带校内跑腿功能,经过身份验证的跑腿小哥,只需在app平台上接单,即可收到取件码等信息,将外卖送至校内对应位置。
1 系统总体设计
如图1所示,智能外卖柜系统分为软件和硬件两个大模块。其中硬件模块为具有照明、消毒、保温及锁控功能的实体寄存柜;软件模块又以对象的不同分为微信小程序端以及web网站端。小程序端的使用对象包含了直接用手机操作的用户、跑腿以及外卖员;而web端则是使用电脑进行异常情况处理以及后台监督的管理员。不同对象模块对应不同功能,从而完成从用户下单到外卖员接受订单将外卖通过存件码放入柜中、跑腿通过取件码将外卖送至用户要求的校内配送地址等一系列流程。
图1 整体设计框架图
2 微信小程序设计
通过对外卖寄存柜软硬件结合的研究,初步模拟外卖柜现有功能的情况下,实现软件性能及功能优化,推出一款适用于学生群体的微信外卖提取平台。系统硬件实现自动寄存外卖,并上传数据、系统数据库实现用户、外卖柜订单、跑腿订单的录入、存储、查找、删除。系统软件实现用户与外卖柜在微信小程序这一平台上进行信息交互。同时还附加校园内部跑腿服务包含外卖跑腿,及快递跑腿两大板块。
2.1 主要功能
(1)跑腿服务,实现跑腿+外卖/快递的一款校园跑腿小程序,支持设置学校,学生认证成为跑腿员,支持定位功能,通过系统判断距离远近,设置价格。用户可在这服务板块发布订单,支付,取消订单,查看历史订单,反馈;跑腿小哥可在这板块接收订单信息,选择订单,获取报酬,查看历史订单,接收反馈。
图2 系统整体结构图
图3 身份选择界面
图4 用户登录界面
图5 用户注册界面
(2)外卖自提取服务,用户可在这版块选择箱子功能,填写提交寄存柜订单,接收取件码及寄件码,查看外卖信息,一键取餐,超时及废弃处理。外卖员可在这版块放餐,联系用户获知外卖存取状态,反馈;管理员可管理取件信息,查看箱子状态,接受用户反馈,处理日常问题
2.2 操作流程
(1)注册登录:用户、外卖员、跑腿员填写相应信息经系统审核过后,即可注册、登录。注册、登录界面以用户为例。
(2)外卖存柜:用户首先在程序内选择需要提供寄存柜的服务,以及寄存柜的功能,下单后生成寄存柜存件码、取件码等寄存柜信息。同时,外卖员将收到消息接单,获得对应的存件码,在小程序的功能框中输入存件码,对应柜门即可弹开,放入寄存柜。用户下单寄存柜时开始计时,若柜子迟迟未使用,或外卖迟迟未出则超过一定时间,则开始额外按时计费。用户功能界面见图6。
图6 用户功能界面图
(3)取外卖:下单寄存柜服务后,系统会生成取件码,用户在小程序功能框中输入取件码,柜门即可打开,可以自取也可以由跑腿员代取。
(4)跑腿服务:在用户界面的“跑腿代拿”功能里,选择需要跑腿代拿的订单(或者自行填写提交跑腿订单,说明需要代拿物品的位置,取件码、要送达的位置、详细信息及注意事项等)见图7,若为外卖柜订单生成的跑腿订单系统自动从数据库中提取用户的派送地址、联系电话、该外卖所在寄存柜的信息,生成跑腿订单,跑腿小哥可在订单商城中查看用户的订单详情,见图8。接单后系统会显示取件码给跑腿小哥去代拿物品,并配送到跑腿订单中填写的位置。
图7 跑腿订单提交页面
图8 订单详情页面
(5)异常情况:管理员可在PC端查找寄存柜对应相关信息,寄存柜等若出故障系统也将提示。同时若出现严重超时未取的情况,管理员将根据系统提示进行处理。
2.3 Mysql数据库的功能
硬件与软件的交互,存柜取餐、送餐等一系列行为都需要数据库的支撑。
图9 数据库表设计1
图10 数据库表设计2
(1)记录顾客,管理员,外卖员,跑腿员的个人信息,建立顾客表、管理员表、外卖员表、跑腿员表。实现注册时个人信息表添入该类别信息。登录时,用户名与密码能和各个类别表中信息有照应。
(2)在用户下单柜子后会产生订单表,记录此订单对应的柜子编号,所下单的客户编号,及下单时间。同时系统生成取件码及存件码,同时记录在订单表中。
在用户下单跑腿时,会存在一个初期的跑腿订单表,在有跑腿员选择接单后该跑腿订单表正式成立。其中记录用户编号,跑腿编号,运件类别及大小,及其对应的结算方式计量出的价格。
(3)系统可依据小程序端输入的存件码,开柜门,检测到关门后更新物流信息表。可依据小程序端输入的取件码,开柜门,检测到柜门关闭后更新物流信息表。
(4)寄存柜表。记录柜子的编号及状态,使用还是未使用。同时记录柜子的功能是否开启。
2.4 相关技术原理
(1)SpringBoot后端架构构建
后端主要是用Java语言开发的基于Java语言的Maven构建的SpringBoot,开发工具idea,服务器为阿里云轻量应用服务器。由于项目中涉及数据库,则通过依spring-jdbc,把 spring-boot-starter-jdbc 加为应用的依赖。来触发数据访问相关的自动配置行为。考虑到Mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。则系统同时应用了redis。实现两者的取长补短。
Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很简单,就是帮我们自动配置。Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。[3]如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Spring Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功,让我们快速构建企业及应用程序。
(2)程序与后端的通信
完成了小程序的后端开发后,需要小程序端发起网络请求。主要调用的API即wx.request,完成简易的微信小程序端与Java后端编写好的对应接口进行通信。由于Spring Boot能够快速开发、便捷部署等特性,项目用它来构建RESTful API。由于存在多终端的情况(移动端,web前端,小程序等),所以我们会抽象出RESTful API并共用一些底层业务代码。
由于接口众多,并且细节复杂项目使用Swagger来自动生成相应的接口文档。Swagger可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明。另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API。
(3)Postman接口测试
项目中由于存在众多接口且不同端的工作进度不一样故使用Postman来进行接口测试。做接口测试的好处:节约时间,缩短项目成本;提高工作效率;提高系统的健壮性。
Postman是一个可扩展的API开发和测试协同平台工具,可以快速集成到CI/CD管道中。旨在简化测试和开发中的API工作流。
Postman 工具有 Chrome 扩展和独立客户端,推荐安装独立客户端。
Postman 有 个 workspace 的概念,workspace 分 personal 和 team 类型。Personal workspace 只能自己查看的 API,Team workspace 可添加成员和设置成员权限,成员之间可共同管理 API。
(4)微信web开发者工具
项目前端主要使用的工具为微信开发者工具。它可以使开发者更方便、更安全地开发和调试基于微信的网页。其中包含有机型选择、预览界面、远程调试、上传代码、ES语法转换、域名信息、控制台、资源文件等基础功能。
机型选择:小程序以IPhone6的屏幕尺寸为设计标准。
预览界面:写好视图布局后点击编译,视图界面刷新显示。
远程调试:手机端和PC端开发工具联调(非常实用)。
上传代码:上传到腾讯服务器,提交审核必经步骤。可以填写版本号和备注信息代码体积,微信限制 2M 以内。
ES语法转换:开发中一般不校验合法域名信息。
域名信息:小程序后台要做配置服务器域名,有request 域名,socket 域名以及uploadFile和downloadFile域名。
控制台:打印输出信息,方便调试。
资源文件:对应项目的文件目录,一般可以在这里进行断点调试。
本地数据存储:显示的是本地存储的数据,对应的相关API是wx.setStorageSync(key,data)。
视图调试:标组件以子父层级结构呈现,方便调试。
3 硬件设计
该系统主要由处理器模块、通信模块、温度控制模块、消毒模块、电磁锁模块、照明模块等组成。总体模块结构如图11所示。
图11 模块结构图
3.1 处理器模块
控制器维持与云服务器onenet的通信连接;云服务器向电磁锁控制器发出通电命令时,电磁锁控制器收到命令通入电流,打开外卖柜门;云服务器向照明控制器发出命令,控制照明灯的开关;云服务器向紫外线控制器发出命令,控制紫外线灯开关;云服务器向加热片控制器发出命令,控制加热片的开关;电磁锁控制通知按键被触发时,控制器发送提醒信息至取餐人的通讯设备上。
3.2 通信模块
通过dtu的485接口与功能板连接,同时dtu用4G接口通过TCP/IP协议与云服务器连接,实现服务器与外卖柜之间的数据传输。
图12 硬件电路板图
3.3 温度控制模块
采用加热片,通过对于接口的通电控制外卖柜的保温效果。当通电时,温度先会缓慢上升,之后持续增高,当增高到一定温度时,会通过停止输送电压的方式控制其停止加热,从而保持温度控制在合理区间,当温度降低时,则重新输送电压,使之继续加热并重复之前过程。
3.4 紫外线模块
采用紫外线灯,通过紫外线的消毒杀菌作用,保持外卖柜内部的干净和卫生。紫外线灯能够杀死外卖柜内一些细菌等微生物。它能够在短时间杀死细菌灯管离被消毒的物体越近,则细菌杀死更多更快速。只要有足够的通电时间,在紫外线辐射的范围,可保证细菌死亡率为百分之一百。
3.5 电磁锁模块
采用电磁锁方式,控制外卖柜的开关,当电磁锁通电时,锁控开关将启动,通过电磁原理,当电流通过硅钢片时,电磁锁会产生强大的吸力紧紧的吸住吸附铁板达到锁门的效果。控制电磁锁电源后即断电,电磁锁失去吸力即可开门。通过处理器模块发送相应指令,控制电磁锁的电流是否输送,从而控制外卖柜门的开启。当电磁锁开启时,将会关闭加热、紫外线消毒功能,同时开启照明功能。
3.6 照明模块
采用5V照明灯,控制外卖柜内的照明。当柜门开启时,云服务器向照明控制器发出开启指令,使照明灯开启,经过一段恰当的时间后,照明控制器将自动发出关闭指令,使照明灯关闭。
4 软件Web端
4.1 宝塔面板
使用宝塔面板服务,实现对Linux服务器的可视化简易操作。在其上添加站点,修改站点的配置文件。配置站点环境是LNNMP(Linux+Nginx+Mysql+PHP),同时在其上实现域名解析绑定,至此可以通过浏览器访问已备案的域名实现网站的访问。在宝塔面板中一键部署JavaWeb网站,并上传网站的对应包,实现网站访问[1]。
在宝塔面板中安装使用phpMyAdmin来可视化管理Mysql数据库,实现与网站的联通。
4.2 Web网页的功能
网页端即为管理员端。里面分为外卖柜、订单、用户、跑腿员、异常情况、意见反馈6个模块。
(1)包含了顾客,管理员,外卖员,跑腿员、外卖柜的信息,并且每个模块都可以增删改查。
(2)在用户下单柜子后会产生订单表,订单编号由用户编号和下单时间构成,管理员可以根据订单编号和用户编号对每笔订单进行查找,完成每笔订单的跑腿员可以拿到相应的工资,直接在软件里可结算[4]。
(3)管理员端可以显示用户、跑腿员、管理员对此软件的反馈意见,也能看到外卖柜等是否出现异常情况。
5 结束语
外卖将是会持续发展的一个产业,但问题必然会随着发展产生。由外卖衍生出的一系列服务,不仅仅完善了送外卖这一过程,更是便利了广大百姓。微信小程序联合外卖寄存柜的应用不仅适用于近年疫情期间的严格防控的要求,同时也让送餐的最后一步更加灵活、人性化。