苍穹外卖学习心得与总结【对比瑞吉】【如何获得铁粉】

news2024/11/16 9:38:54

对于苍穹外卖项目,从学习课程加复习已经13天了。
对于一名已经学习过SSM+Linux+Redis+数据库的Java练习生来说,这个项目相对于之前学习的《瑞吉外卖》新增了很多功能和技术,是很值得练手和提升的课程,下面给出自己的一些见解。😍 🥰 😘😍 🥰 😘😍 🥰 😘

希望大家看到最后,一起进步,一起攀登!🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀

文章目录

    • 一、对于苍穹外卖
        • 1、技术选型
        • 2、功能模块
    • 二、对于瑞吉外卖
      • 1、技术选型
      • 2、实现功能
        • 1、管理端
        • 2、用户端
    • 三、对比两个项目
      • 1、功能方面
        • 管理端
          • 整个页面:
          • 侧边栏
          • 订单管理模块:
          • 其他四个模块:
        • 用户端
          • 主体页面
          • 个人中心
          • 地址管理
          • 其他
      • 2、技术方面
        • 相同的是,
        • 不同的是,
    • 四、写在最后【希望看完】

一、对于苍穹外卖

对于苍穹外卖,前端代码部分都是导入的,没有进行编写开发。都是对于接口的分析以及服务端代码的开发
苍穹外卖作为瑞吉的增强版,在他原有的基础上新增了SpringTask任务定时(对于待接单和待支付的功能做定时处理),JWT替换Session来实现登录验证,阿里云OSS(实现对象存储,即菜品和套餐图片存储【需要另外学具体的知识】),POI(实现Excel报表的下载),HttpClient(实现微信支付时的信息发送),WebSocket(实现来单提醒和用户催单),
PageHelper(做分页处理)

1、技术选型

在这里插入图片描述
1). 用户层:H5、Vue.js、ElementUI、apache echarts(展示图表)等技术,构建移动端应用时,使用到微信小程序。

2). 网关层:通过Nginx来实现反向代理和负载均衡。

3). 应用层:SpringBoot
SpringMVC、Spring Task、HttpClient、Spring Cache、JWT、阿里云OSS、Swagger、POI、WebSocket

4). 数据层

MySQL: 采用MySQL进行存储。Redis: 使用它做缓存。

Mybatis: 本项目持久层将会使用Mybatis开发。pagehelper: 分页插件。

spring data redis: 简化java代码操作Redis的API。

5). 工具

git、maven、junit、postman

2、功能模块

在这里插入图片描述

二、对于瑞吉外卖

瑞吉外卖通过SSM的开发模式,后端SpringBoot+前端Vue为主体框架进行项目的开发。实现了管理端和用户端的基本功能。同时课程中会加入Git、Linux、Redis、Nginx的学习,以及项目部署到虚拟机的相关知识。
对于新手小白来说,瑞吉外卖是很不错的帮助去了解项目开发的基本流程,包括需求分析、数据库设计、代码开发、测试、上线运维等等。

1、技术选型

从 用户层、网关层、应用层、数据层 这几个方面进行介绍,而对于我们服务端开发工程师来说,在项目开发过程中,我们主要关注应用层及数据层技术的应用。

1、用户层:H5、Vue.js、ElementUI等技术,构建移动端应用时,用到微信小程序。

2、网关层:以通过Nginx来实现反向代理和负载均衡。

3、应用层:SpringBoo、Spring、SpringMVC、SpringSession、lombok、Swagger

4、数据层:MySQL、MybatisPlus、Redis

5、工具: git、maven、junit

2、实现功能

1、管理端

餐饮企业内部员工使用。 主要功能有:

模块描述
登录/退出内部员工必须登录后,才可以访问系统管理后台
员工管理管理员可以在系统后台对员工信息进行管理,包含查询、新增、编辑、禁用等功能
分类管理主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护, 包含查询、新增、修改、删除等功能
菜品管理主要维护各个分类下的菜品信息,包含查询、新增、修改、删除、启售、停售等功能
套餐管理主要维护当前餐厅中的套餐信息,包含查询、新增、修改、删除、启售、停售等功能
订单明细主要维护用户在移动端下的订单信息,包含查询、取消、派送、完成,以及订单报表下载等功能

2、用户端

移动端应用主要提供给消费者使用。主要功能有:

模块描述
登录/退出在移动端, 用户也需要登录后使用APP进行点餐
点餐-菜单在点餐界面需要展示出菜品分类/套餐分类, 并根据当前选择的分类加载其中的菜品信息, 供用户查询选择
点餐-购物车用户选中的菜品就会加入用户的购物车, 主要包含 查询购物车、加入购物车、删除购物车、清空购物车等功能
订单支付用户选完菜品/套餐后, 可以对购物车菜品进行结算支付, 这时就需要进行订单的支付
个人信息在个人中心页面中会展示当前用户的基本信息, 用户可以管理收货地址, 也可以查询历史订单数据

三、对比两个项目

1、功能方面

管理端

整个页面:

页面主题两个项目没有什么区别,但是页面头部苍穹外卖更加完善

在这里插入图片描述

增加了店铺营业状态和修改密码的功能,而瑞吉外卖只有退出登录
在这里插入图片描述

还有就是苍穹外卖通过HttpClient和WebSocket技术,增加了来单提醒和用户催单的功能开发,在管理端进行显示

在这里插入图片描述

侧边栏

苍穹外卖新增了:控制台、数据统计两个模块
控制台:展示今日数据、订单管理、菜品总览、套餐总览、订单信息【做全局的信息查看】
数据统计模块:营业额统计、用户统计、订单统计、销量统计的ApacheECharts可视化图表信息

对应的在服务端的java代码中增加数据统计相关代码的开发

在这里插入图片描述
在这里插入图片描述

订单管理模块:

苍穹外卖增加了更加具体的订单展示:全部订单、待接单、待派送、派送中、已完成、已取消 等按钮;并且相较于瑞吉外卖,订单详情页更加详细美观。

在这里插入图片描述
订单详情页:【上苍穹,下瑞吉】
在这里插入图片描述
在这里插入图片描述

其他四个模块:

两个项目没有太大的区别

用户端

主体页面

用户端主体页面并没有什么区别,但是,苍穹外卖是在微信开发者工具中进行的开发,相较于瑞吉,可以显示店铺营业状态,前端页面真正的部署到了小程序开发中
并且,苍穹外卖中添加了对于微信小程序开发的流程介绍,很详细。

苍穹外卖的菜品和套餐照片是存储在阿里的OSS云存储里面,而瑞吉是本地存储

在这里插入图片描述

个人中心

进入个人中心可直接查看最新订单,没有瑞吉外卖的退出登录按钮,直接是右上角的小程序退出按钮。同时显示订单状态

在这里插入图片描述

点击订单,可查看订单详情:可取消订单、催单、再来一单等

在这里插入图片描述

历史订单

在这里插入图片描述

对于瑞吉外卖:不能点击查看,只能看到文字信息

在这里插入图片描述

历史订单

在这里插入图片描述

地址管理

大部分没有区别,只是在前端技术上,苍穹加上了地区的选择
在这里插入图片描述

其他

订单结算页面更加具体

在这里插入图片描述

实现了微信支付功能,添加了内网穿透知识
但因为个人申请的小程序无法实现,所以这部分我并没有实现

在这里插入图片描述

2、技术方面

在一、二的介绍中已经说的相对清楚了。

相同的是,

两个项目都是用的SpringBoot+Vue主体框架,加入ElementUI进行优化。
都使用的MySQL数据存储数据,Redis进行缓存;都有对Nginx、Git的介绍使用;都使用了Swagger

不同的是,

用户端登录:验证苍穹外卖使用的是JWT【管理端也是】,配合微信小程序登录,瑞吉外卖使用Session和验证码登录。

数据层:苍穹外卖使用的MyBatis,配合PageHepler;而瑞吉外卖使用的是MyBatisPlus。【苍穹外卖可以练习sql和动态sql以及一些注解,瑞吉外卖对于mp的使用说的也非常清楚】

应用层:Spring Task、HttpClient、阿里云OSS、POI、WebSocket这些都是我每天学习过的新技术,进行学习很Nice

项目部署:瑞吉外卖最后会有对于java的SpringBoot项目的部署教授,而苍穹外卖并没有。同时,瑞吉外卖中也有对于Linux的知识讲解,可以对Linux进行了解和学习以及复习!

四、写在最后【希望看完】

学习不是一蹴而就的,是不断努力和提升的;对于编程,对于Java开发这条路,百炼才能成钢,路虽远,行则将至!
当然,这些项目对于部分人可能比较难,对部分人可能很简单,希望大家能够找到自己适合的方向去努力提升自己的能力。这里只是给出我个人的见解和看法,不一定正确,但很真实。
一起加油吧,各位码友!!!,如果可以欢迎留言分享激励自己的一段话或者名言😍 🥰 😘😍 🥰 😘😍 🥰 😘😍 🥰 😘😍 🥰 😘

应这个活动,如何收货铁粉?
我想,一个是分享的博文对大家有帮助有提升,一个是真诚细致;这样才能收货铁粉!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【点云处理教程】02从 Python 中的深度图像估计点云

一、说明 这是“点云处理”教程的第二篇文章。“点云处理”教程对初学者友好,我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。在本教程中,我们将学习如何在不使用 Open3D 库的情况下从深度图像计算点云。我们还将展示如何优化代码以获…

调整数组顺序使奇数位于偶数前面——剑指 Offer 21

文章目录 题目描述法一 两次遍历法二 双指针一次遍历法三 原地交换 题目描述 法一 两次遍历 class Solution{ public:vectro<int> exchange(vector<int>& nums){vector<int> res;for(auto & num : nums){if(num%21){res.push_back(num);}}for(auto &…

Java常用API:StringBuilder、StringBuffer、StringJoiner

StringBuilder的几个常用的API StringBuilder s new StringBuilder("111");//111 //1.拼接内容 s.append(12); s.append("11"); s.append(true);//2.支持链式编程 s.append(12).append("11").append(true);//输出是1211true //3.反转操作 s.reve…

c++[左值+右值](25)

左值 对左值取别名 左值举例 int main() {//左值&#xff1a;可以取地址int a 10;const int b 20;int* p &a; //a&#xff0c;b&#xff0c;p均是左值*p 100; //*p也是左值return 0; }左值引用举例 int main() {//以下 p、b、c、*p都是…

《向量数据库指南》:向量数据库Pinecone如何集成Elasticsearch

目录 上传嵌入模型 上传数据集 创建嵌入 将Elasticsearch索引移动到Pinecone 概要 是一个强大的开源搜索引擎和分析平台,广泛用作基于关键字的文本搜索的文档存储。 Pinecone是一个广泛用于生产应用程序的向量数据库,例如语义搜索、推荐系统和威胁检测,需要在数亿甚…

【多模态】20、OVR-CNN | 使用 caption 来实现开放词汇目标检测

文章目录 一、背景二、方法2.1 学习 视觉-语义 空间2.2 学习开放词汇目标检测 三、效果 论文&#xff1a;Open-Vocabulary Object Detection Using Captions 代码&#xff1a;https://github.com/alirezazareian/ovr-cnn 出处&#xff1a;CVPR2021 Oral 一、背景 目标检测数…

关于rtthread的I/O设备模型

分层 从官方给的架构可以看出&#xff0c;官方是将IO设备的使用分成了三层。 IO设备管理层&#xff1a;也就是正常用户接触的一层&#xff0c;用户直接调用该层接口实现IO设备的操作。例如代码中的device.c文件 设备驱动框架层&#xff1a;这一层可以称为中间层了&#xff0c…

Spring之BeanDefinition(三)

Spring之BeanDefinition&#xff08;三&#xff09; 文章目录 Spring之BeanDefinition&#xff08;三&#xff09;一、Spring的启动类三行代码研究二、Spring创建工厂类型和属性三、Spring中内置的BeanDefinition四、注册配置类五、BeanDefinition总结 一、Spring的启动类三行代…

Few Shot Classification小知识——数据集的加载

概述 Few-shot classification&#xff08;小样本分类&#xff09;是机器学习和人工智能的一个子领域&#xff0c;解决的问题是在训练数据非常有限的情况下&#xff0c;学习对新样本进行分类。在传统的监督学习中&#xff0c;模型需要在包含大量标记样本的数据集上进行训练&am…

Linux安装wget

1.第一步登录wget官网下载地址&#xff0c;下载最新的wget的rpm安装包到本地 官网地址&#xff1a;http://mirrors.163.com/centos/7/os/x86_64/Packages/ 2.将下载好的wget的rpm安装包通过Xftp工具上传到Linux服务器对应目录下。 3.cd命令进入到这个wget目录下&#xff0c;再…

【文献分享】动态环境下竟然能实现实时语义RGB-D SLAM??

论文题目&#xff1a;Towards Real-time Semantic RGB-D SLAM in Dynamic Environments 中文题目&#xff1a;动态环境下实时语义RGB-D SLAM研究 作者&#xff1a;Tete Ji, Chen Wang, and Lihua Xie 作者机构&#xff1a;新加坡南洋理工大学电气与电子工程学院 卡内基梅隆大…

用于WINDOWS的HACKRF ONE扫频分析仪

https://github.com/pavsa/hackrf-spectrum-analyzer GitHub - mutability/rtl-sdr: RTL-SDR *very* experimental branch - its probably broken! https://github.com/greatscottgadgets/hackrf hackrf_sweep 用于WINDOWS的HACKRF ONE扫频分析仪 几个星期前&#xff0c;Ha…

Java动态代理(全网最详细,没有之一)

首先你要明白为什么要创建代理&#xff1f;&#xff1f;&#xff1f; 例如&#xff1a;我们看下面这张图我们发现&#xff0c;有很多重复的代码&#xff0c;我们就可以创建代理&#xff0c;让代理帮我们干这些事情。 1.想要创建代理&#xff0c;我们就要为这个类写一个接口 pu…

无涯教程-jQuery - Menu组件函数

小部件菜单功能可与JqueryUI中的小部件一起使用。一个简单的菜单显示项目列表。 Menu - 语法 $( "#menu" ).menu(); Menu - 示例 以下是显示菜单用法的简单示例- <!doctype html> <html lang"en"><head><meta charset"utf-…

基于Linux操作系统中的MySQL数据库备份(三十三)

目录 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 1、程序错误 2、人为错误 3、运算失败 4、磁盘故障 5、灾难&#xff08;如火灾、地震&#xff09;和盗窃 四、备份类型 &#xff08;一&#xff09;物理与逻辑角度 1、物理备份 1.1、冷备份 1.2、热备…

人工智能-Dlib+Python实现人脸识别(人脸识别篇)

人脸识别流程 人脸检测,人脸数据提取:首先是检测到人脸保存人脸数据:可以保存到mysql数据库中mysql数据库连接mysql数据库安装mysql数据库操作设置人脸数据标签:(人脸名字),保存到数据库打开摄像头,检测到人脸,提取人脸数据:人脸数据与数据库中的数据对比,1、人脸检…

子组件未抛出事件 父组件如何通过$refs监听子组件中数据的变化

我们平时开发项目会使用一些比较成熟的组件库, 但是在极小的情况下,可能会出现我们需要监听某个属性的变化,使我们的页面根据这个属性发生一些改变,但是偏偏组件库没有把这个属性抛出来,当我们使用watch通过refs监听时,由于生命周期的原因还不能拿到,这时候我们可以这样做,以下…

03-高阶导数_导数判断单调性_导数与极值

高阶导数 前面学的是一阶导数&#xff0c;对导数再次求导就是高阶导数&#xff0c;二阶和二阶以上的导数统称为高阶导数。 导数与函数单调性的关系 极值定理 导数为我们寻找极值提供依据&#xff0c;对于可导函数而言&#xff0c;因为在极值位置必然有函数的导数等于 0。 …

深入篇【C++】手搓模拟实现list类(详细剖析底层实现原理)模拟实现正反向迭代器【容器适配器模式】

深入篇【C】手搓模拟实现list类(详细剖析底层实现原理&#xff09;&& 模拟实现正反向迭代器【容器适配器模式】 Ⅰ.迭代器实现1.一个模板参数2.两个模板参数3.三个模板参数 Ⅱ.反向迭代器实现1.容器适配器模式 Ⅲ.list模拟实现1.定义结点2.封装结点3.构造/拷贝4.迭代器…

【Python】Web学习笔记_flask(1)——模拟登录

安装flask pip3 install flask 第一部分内容&#xff1a; 1、主页面输出hello world 2、根据不同用户名参数输出用户信息 3、模拟登录 from flask import Flask,url_for,redirectappFlask(__name__)app.route(/) def index():return hello worldapp.route(/user/<uname…