Day01
你将会得到的收获
补习git Git学习之路-CSDN博客
功能
技术栈
nginx 版本1.20.2
作用:提高访问速度 负载均衡 保证后端服务的安全
swagger
Swagger 与 Yapi
Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案
DTO、VO的区别
DTO:如果前端提交的实体类和对应的实体类比较较大差别 使用DTO来封装数据 后面在使用
BeanUtils.copyProperties() 将熟悉复制到对应的实体类中
VO:主要用于展示数据,例如在控制器层和视图层之间。它通常包含一些与显示相关的属性,如标题、描述等。
前端表格数据DTO 返回给前端的数据VO
开启数据库
net start mysql // 启动mysql服务
netstat -aon|findstr "3306"//查看哪个端口占用了3306
redis-server.exe redis.windows.conf//开启redis
Day02
1.新增员工
写接口四要点:明确请求路径、请求方式、请求参数、返回数据。
拦截器interceptor
JWT令牌实现用户身份认证
2.员工分页查询
-
请求参数类型为Query,不是json格式提交,在路径后直接拼接。/admin/employee/page?name=zhangsan
-
注意条件<if test="name != null and name != ''">
3.启用禁用员工账号
public Result startOrStop(@PathVariable Integer status,Long id)
路径参数要加 @PathVariable
4.编辑员工
Day03
1.公共字段自动填充
使用AOP切面编程,实现功能增强,来完成公共字段自动填充功能
实现方法:自定义注解 AutoFill
2.新增菜品
3.菜品分页查询
4.删除菜品
5.修改菜品
Day04
1.新增套餐
2.套餐分页查询
3.删除套餐
4.修改套餐
5.起售停售套餐
Day05
-
Redis入门
Redis学习-CSDN博客 Redis学习-CSDN博客 Redis学习-CSDN博客
温故而知新
-
Redis数据类型
-
Redis常用命令
-
在Java中操作Redis
-
店铺营业状态设置
Day06
-
HttpClient
是一款支持Http协议的工具包
oss依赖项中已经包含的httpclient
HttpClient作用:发送HTTP请求 接收响应数据
HttpClient应用场景:
当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时
-
微信小程序开发
-
微信登录
登录不上去重新换一个 小程序秘钥
用户的openid是微信重新生成的 跟自己的不一样
-
导入商品浏览功能代码
sql
@Select("select sd.name, sd.copies, d.image, d.description " +
"from setmeal_dish sd left join dish d on sd.dish_id = d.id " +
"where sd.setmeal_id = #{setmealId}")
小程序开发参考资料:小程序登录 / 小程序登录 (qq.com)
Day07
为什么要缓存:因为如果用户的访问量很大,数据库的压力就会很大
-
缓存菜品
-
缓存套餐
-
添加购物车
-
查看购物车
-
清空购物车
Spring Cache
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
SpringCache常用注解
注解 | 说明 |
---|---|
@EnableCaching | 开启缓存注解功能,通常加在启动类上 |
@Cacheable | 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中 |
@CachePut | 将方法的返回值放到缓存中 |
@CacheEvict | 将一条或多条数据从缓存中删除 |
Day08
-
导入地址簿功能代码
-
用户下单
-
订单支付
用户下单有bug userID获取不到(临时使用硬编码) 重新换一个小程序的秘钥就可以
订单支付缺少商户配置文件,没有完成
用下面这一篇文章的方法可以先跳过这个功能,不会影响整体功能
苍穹外卖跳过微信支付(全网最强,最详细,最容易理解)_跳过网页微信付费-CSDN博客
如果使用上面的方法跳过,就不需要下面的步骤
cpolar:一款内网穿透的工具 你自己的电脑在局域网里,微信后台访问不到,要有公网地址
微信小程序支付时序图
Day09
项目实战 (每个功能都要测试 你不是神仙)
用户端历史订单模块
-
查询历史订单
-
查询订单详情
-
取消订单
-
再来一单
商家端订单管理模块
-
订单搜索
SQL写错了注意为空是 ‘’ 两个引号
-
各个状态的订单数量统计
-
查询订单详情
-
接单
-
拒单
-
取消订单
-
派送订单
-
完成订单
-
校验收货地址是否超出配送范围
注意@Value不要导错
Day10
-
Spring Task
是一款任务调度框架,可以按照某个规定的时间自动执行某段代码
只要是需要定时处理的场景都可以使用Spring Task
-
订单状态定时处理
两种情况
-
下单后未支付,订单一直处于“待支付”状态
-
用户收货后管理端未点击完成按钮,订单一直处于“派送中”状态
cron表达式在线网址:在线Cron表达式生成器 (qqe2.com)
-
WebSocket
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。
HTTP协议和WebSocket协议对比:
-
HTTP是短连接
-
WebSocket是长连接
-
HTTP通信是单向的,基于请求响应模式
-
WebSocket支持双向通信
-
HTTP和WebSocket底层都是TCP连接
webscoket应用场景:
视频弹幕 网页聊天 体育分数实况更新 股票基金报价实时更新
-
来单提醒
public void paySuccess(String outTradeNo) {
// 当前登录用户id
Long userId = BaseContext.getCurrentId();
// 根据订单号查询当前用户的订单
Orders ordersDB = orderMapper.getByNumberAndUserId(outTradeNo, userId);
// 根据订单id更新订单的状态、支付方式、支付状态、结账时间
Orders orders = Orders.builder()
.id(ordersDB.getId())
.status(Orders.TO_BE_CONFIRMED)
.payStatus(Orders.PAID)
.checkoutTime(LocalDateTime.now())
.build();
orderMapper.update(orders);
//通过websocket向客户端浏览器推送消息 type orderId content
Map map = new HashMap();
map.put("type",1); // 1表示来单提醒 2表示客户催单
map.put("orderId",ordersDB.getId());
map.put("content","订单号:" + outTradeNo);
String json = JSON.toJSONString(map);
webSocketServer.sendToAllClient(json);
}
-
客户催单
@Override
public void reminder(Long id) {
Orders orders=orderMapper.getById(id);
if(orders==null){
throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND);
}
HashMap map = new HashMap();
map.put("type",2);
map.put("orderOd",id);
map.put("content","订单号"+orders.getNumber());
webSocketServer.sendToAllClient(JSON.toJSONString(map));
}
Day11
营业额统计
Apache ECharts:可实话图表
用户统计
订单统计
销量排名统计
整体效果如下:
Day12
工作台
Apache POI
是一个处理Miscrosoft Office各种文件格式的开源项目
一般情况下都是操作Excel 文件,即可写入也可读取
应用场景:
- 导出交易明细
- 导出excel报表
- 批量导入业务数据