前言

在去年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连接
  • 检查是否有尚未处理的订单,如果有会进行提醒
  • 查看盈利统计
  • 切换店铺
  • 添加店铺
  • 创建&删除桌位
  • 新订单产生都会收到推送(同一账户不同店铺推送互不干扰),客户端会进行播报、发送通知等操作
  • 保存点餐码
  • 可退餐&结束订单

订单页

订单

主要功能

  • 接单&拒接,如果是加菜单,会将该订单合并到主订单中去
  • 查看订单详情

菜品页

菜品

主要功能

  • 创建分类
  • 创建菜品
  • 添加规格&规格选项
  • 添加属性&属性选项
  • 动态设置规格
  • 动态设置属性

小程序用户端

扫码点餐

购物车操作、下单、加餐等操作时,”绑定”到该餐桌的用户和店铺均能及时的收到推送

演示视频