开发任务-1-分类搜索
需求设计实现三级分类树
具体实现步骤
1、准备数据库
mall-pms---对应项目mall-product--server.port== 9010
2、业务层
分析业务逻辑:分类信息频繁使用且修改不频繁故考虑放到redis里面,所以在业务成不直接从数据库查询,先判断redis中是否有分类的信息,如果没有再从数据库查询,构建分类信息的父子结构,实现查询返回父子结构的分类信息,之后保存到redis里面顺便返回分类信息
执行思路:第一次去执行查询分类信息,redis为null,故而从数据库里面去查询,将结果保存在redis里面顺便返回
之后再次进行查询,判断redis里面有数据就直接进行返回,提升效率
最后:完成控制层(实现前端接口)
对应项目是
mall-front–server.port=10004
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
redis----存储分类信息
测试步骤:
在Nacos\Seata\redis启动的前提下
顺序启动Product\Front
进行测试接口文档
http://localhost:10004/doc.html
开发任务-2-商品列表
需求设计实现商品列表
用户会根据分类树中的分类的名称,查询它需要的商品类别
具体实现步骤
1、准备数据库
mall-pms---对应项目mall-product--server.port== 9010
2、业务层
分析业务逻辑:用户会根据分类树中的分类的名称,查询它需要的商品类别,点击商品分类名称时,实际上我们获得了它的分类id(categoryId),我们可以根据这个id到pms_spu表中查询商品信息,并进行分页显示。
属性值、特性相同的商品就可以称为一个SPU
查询全部商品信息,但是可能出现查询结果数据较多时—采用分页显示的方式呈现(PageHelper实现分页查询)
分页查询的优点
服务器:一次性查询所有信息,服务器压力大,分页查询服务器压力小
客户端:一次性显示所有信息,需要更多流量,加载时间也会边长,分页显示没有这个问题
用户体验上:一般最有价值的信息都是会在前几页展示,也方便用户记忆,多查询的数据使用率低
执行思路:根据分类id分页查询spu列表
最后:完成控制层(实现前端接口)–需要参数有–分类id,页码,每页条数
对应项目是
mall-front–server.port=10004
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
测试步骤:
在Nacos\Seata启动的前提下
顺序启动Product\Front
进行测试接口文档
http://localhost:10004/doc.html
开发任务-3-商品详情
需求设计实现商品详情
在商品列表中选中商品后,会显示这个商品的详情信息
具体实现步骤
1、准备数据库
mall-pms---对应项目mall-product--server.port== 9010
2、业务层
分析业务逻辑:上面完成了查询spu列表,那点击某一个spu会通过对应spuId查询spu信息
商品详情页我们需要显示的信息包括
根据spuId查询spu信息
根据spuId查询spuDetail详情
根据spuId查询当前Spu包含的所有属性
根据spuId查询对应的sku列表
SKU是物理上不可分割的最小存货单元
其中根据spuId查询当前Spu包含的所有属性功能涉及了一个比较复杂的连表查询
根据spuId查询参数选项的思路
1.根据spu_id去pms_spu表查询category_id
2.根据category_id去pms_category表查询分类对象
3.根据category_id去pms_category_attribute_template表查询attribute_template_id
4.根据attribute_template_id去pms_attribute_template表查询attribute_template数据行
5.根据attribute_template_id去pms_attribute表查询对应所有属性信息行
SELECT
pa.id , pa.template_id , pa.name,
pa.description , pa.type,
pa.value_list , pa.unit
FROM pms_spu ps
JOIN pms_category pc ON ps.category_id=pc.id
JOIN pms_category_attribute_template pcat ON
pc.id=pcat.category_id
JOIN pms_attribute_template pat ON
pcat.attribute_template_id=pat.id
JOIN pms_attribute pa ON pa.template_id=pat.id
WHERE ps.id=4
执行思路:根据spuId查询查询当前商品的所有属性/规格用的对象,以及spuId查询sku信息用的对象
最后:完成控制层对应2个方法(实现前端接口)
- 根据spuId查询spu信息 --需要的参数—spuId
- 根据spuId查询参数列表的 --需要的参数—spuId
- 根据spuId查询sku列表–需要的参数—spuId
- 根据spuId查询spuDetail–需要的参数—spuId
对应项目是
mall-front–server.port=10004
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
(这里其实不启动redis也不报错,因为暂时没有用到,但考虑到我们后续会把商品信息放到redis里面,所以启动也可以)
测试步骤
nacos\seata\redis保持启动
启动product 重起front
访问10004测试,测试上面四个控制器模块的方法
开发任务-4-购物车管理
需求设计实现购物车管理
登陆查看自己的购物车
这块涉及单点登陆知识
Spring Security框架用于实现登录,同时还可以将当前登录用户的权限信息保存
单点登录–涉及知识点sessionID,jwt、redis
如果判断一个用户是否具有指定角色\权限?
可以在控制器方法代码上添加@PreAuthorize(“[权限名称]”)
SpringSecurity在运行该方法之前进行检查,如果不具备这个权限返回403状态码
具体实现步骤
1、准备数据库
mall-pms---对应项目mall-product--server.port== 9010
2、业务层
分析业务逻辑:
执行思路:
最后:完成控制层(实现前端接口)
对应项目是
mall-front–server.port=10004
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
redis----存储分类信息
开发任务-5-新增订单和订单列表
需求设计实现XXX
具体实现步骤
1、准备数据库
mall-pms---对应项目mall-product--server.port== 9010
2、业务层
分析业务逻辑:
执行思路:
最后:完成控制层(实现前端接口)
对应项目是
mall-front–server.port=10004
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
redis----存储分类信息
开发任务-6-搜索商品
需求设计实现XXX
具体实现步骤
1、准备数据库
mall-pms---对应项目mall-product--server.port== 9010
2、业务层
分析业务逻辑:
执行思路:
最后:完成控制层(实现前端接口)
对应项目是
mall-front–server.port=10004
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
redis----存储分类信息
开发任务-7-高并发秒杀商品
需求设计实现XXX
具体实现步骤
1、准备数据库
mall-pms---对应项目mall-product--server.port== 9010
2、业务层
分析业务逻辑:
执行思路:
最后:完成控制层(实现前端接口)
对应项目是
mall-front–server.port=10004
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
redis----存储分类信息