商场系统开发

开发任务-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----存储分类信息

猜你喜欢

转载自blog.csdn.net/weixin_47852232/article/details/129992006