多人实时扫码点餐项目
前言
在去年11月份公司凉凉被动辞职后,我没有着急去找下一份工作,而是想花几个月时间学习来提升自己,计划中包括了Go、Kotlin、Jetpack等,并准备做一个扫码点餐项目巩固一下所学知识
功能设计
2022/01/10经过一段时间的学习后,大体确定了这个项目该实现什么功能
接口文档设计
确定好功能后,针对这些功能设计了一下接口和数据库
接口文档-商户端
接口文档-用户端
接口文档-超管端
架构设计
架构图
服务端根据提供的服务进行了划分,文件服务提供文件的存储和读取,推送服务维护所有Socket连接,其他API请求均由常规服务处理
一些技术点
- ETCD配置共享、服务注册发现(监控所有服务上下线,动态配置Nginx,保证每个节点都是有效的)、分布式锁(下单时校验指定菜品库存等场景使用)
- Kafka日志收集,后期可用ElasticSearch+Kibina做数据可视化和分析
- Redis临时存储购物车中的商品信息,下单或加餐前的数据使用Redis进行存储
- Nginx实现反向代理和负载均衡,特定匹配的将转发到指定服务器(比如推送绑定需要转到IM服务器,文件需要转到文件服务器)
开发进度
日期 | 完成内容 |
---|---|
1.10-1.12 | 定义接口文档、数据库设计、系统架构设计 |
1.13-1.18 | 日志收集模块完成、准备工作完成(Kafka集群、ETCD集群、MariaDB、Redis等配置及使用) |
1.19-1.20 | Nginx负载均衡 |
1.21-1.22 | 服务注册发现(基于ETCD)、实现Nginx动态负载均衡 |
1.23-1.28 | 修正部分接口,文件服务端完成 |
1.29-1.31 | 分布式锁的应用(基于ETCD),即时通讯服务端完成 |
2.1-2.3 | 接口开发完成(商户+用户共46,超管端因为写不好HTML被无限期推迟了,初步测试完成,集群部署及启动 |
2.4-2.12 | Android商户端开发完成(Kotlin+JetPack) |
2.13-2.15 | 小程序端完成 |
服务端启动
服务观察者
服务上线后需要注册到ETCD中去,服务观察者会观察指定路径下的变动来动态配置Nginx,保证提供的节点均可用
常规服务
除了”推送绑定”和文件操作,其他所有API请求都由该服务进行处理
推送服务
用户扫码后会和当前桌位进行关联,当进行点餐时,推送服务将通知当前桌位下的所有用户点餐的数据发生变化,客户端同步数据实现同时点餐功能
文件服务
Android商户端
仅实现功能,不考虑美观性
首页
主要功能
- 登录成功之后会进行”推送绑定”操作,即建立Socket连接
- 检查是否有尚未处理的订单,如果有会进行提醒
- 查看盈利统计
- 切换店铺
- 添加店铺
- 创建&删除桌位
- 新订单产生都会收到推送(同一账户不同店铺推送互不干扰),客户端会进行播报、发送通知等操作
- 保存点餐码
- 可退餐&结束订单
订单页
主要功能
- 接单&拒接,如果是加菜单,会将该订单合并到主订单中去
- 查看订单详情
菜品页
主要功能
- 创建分类
- 创建菜品
- 添加规格&规格选项
- 添加属性&属性选项
- 动态设置规格
- 动态设置属性
小程序用户端
购物车操作、下单、加餐等操作时,”绑定”到该餐桌的用户和店铺均能及时的收到推送
演示视频
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZangJY's Blog!