商场系统开发

开发任务-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
				mall-oms----对应项目mall-order--server.port== 10005

2、业务层

分析业务逻辑:首先处理登录涉及sso模块,登录到商城系统之后,查询商品点击添加到购物车、查询购物车、删除购物车中的商品、清空购物车
①添加到购物车

  • 判断用户是否登录,只有登录后才能将商品新增到购物车
  • 验证购物车信息的完整性(SpringValidation)
  • 业务逻辑层要判断新增的sku是否在当前用户的购物车表中已经存在
    • 如果不存在是新增sku流程
    • 如果已经存在,是修改数量的流程

执行思路:
①在商品详情页面、可以通过选中具体规格之后确定要购买的sku信息、再点击"添加到购物车"按钮、就应该将选中的sku的信息保存在购物车中、最后:完成控制层(实现前端接口)

对应项目是
mall-order–server.port10005
mall-sso–server.port
10002
nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
redis----存储分类信息
先启动Nacos/Seata
启动 passport(sso)/order
②查询购物车
根据用户id查询购物车中sku信息
返回值支持分页结果,按分页条件查询
开发控制层
需要启动的项目和插件参考①
重启order模块
③删除购物车中的商品
我们删除购物车的功能支持同时删除一个或多个购物车中的商品
基本思路就是将要删除的购物车商品的id数组传入到Mapper中进行删除
支持批量删除购物车中sku商品的方法(Long[] ids)
开发控制层
需要启动的项目和插件参考①
重启Order模块,测试删除功能
④清空当前登录用户购物车的功能
清空指定用户购物车中所有sku商品(Long userId)
需要启动的项目和插件参考①
重启order模块
⑤修改购物车的商品数量
修改购物车中商品数量的业务逻辑层方法
需要启动的项目和插件参考①
重启order模块

开发任务-5-新增订单和订单列表

需求设计实现购物最后一步付钱结算

在购物车里面点击对应商品进行结算付钱,生成订单
在这里插入图片描述在这里插入图片描述

具体实现步骤

1、准备数据库

				mall-pms---对应项目mall-product--server.port== 9010
				mall-oms----对应项目mall-order--server.port== 10005
				leafdb----对应项目mall-leaf--server.port=9090

2、业务层

分析业务逻辑:用户选中购物车中的商品后,点击添加订单、要收集订单信息(sku商品信息,价格信息,优惠和运费信息等)然后才能执行生成订单操作
1.首先将用户选中的sku库存减少相应的数量
2.用户购物车要删除对应的商品
3.对应oms_order表执行新增,也就是创建一个订单
4.在新增订单成功后,我们还要将订单中的每种商品和订单关系添加在oms_order_item表中
最后:完成控制层(实现前端接口)
除了之前一直使用的Nacos\Dubbo之外,创建订单的业务在减少库存时,是Dubbo调用的pms中的sku表,这就涉及了分布式事务seata,删除购物车,新增订单和新增订单项是order模块的功能

除了之前一直使用的Nacos\Dubbo之外,创建订单的业务在减少库存时,是Dubbo调用的pms中的sku表,这就涉及了分布式事务seata,删除购物车,新增订单和新增订单项是order模块的功能

执行思路:
1、用户id和skuId来指定要删除的购物车商品
2、编写新增订单功能

一个订单可能包含多件商品,如果每件商品都单独新增到数据库,会造成连库次数多,效率低
我们采用一次连库增加多条订单项的方式,提升连接\操作数据库的效率

Leaf—Leaf是美团公司开源的一个分布式序列号(id)生成系统

实际开发中常见的读写分离的数据库部署格式 专门进行数据更新(写)的有两个数据库节点 它们同时新增数据可能产生相同的自增列id
一旦生成相同的id,数据同步就会有问题 会产生id冲突,甚至引发异常 我们为了在这种多数据库节点的环境下能够产生唯一id

可以使用Leaf来生成 leaf要想设置起始值和缓存数 需要给leaf创建一个指定格式的数据库表 运行过程中会从数据库表获取信息
我们当前的信息保存在leafdb.leaf_alloc表中

对应项目是
mall-leaf–server.port=9090
mall-product–server.port=9010
mall-sso–server.port10002
mall-order–server.port
10005

nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)

查询订单数据
分析:在新增订单成功之后,用户会看到订单列表,可以按照一定时间范围内进行查询、默认是一个月、指定时间分页查询订单列表
测试同上

修改订单状态–订单id修改订单状态
0=未支付 (订单的默认状态)

1=已关闭 (超时未支付)

2=已取消

3=已支付

4=已签收

5=已拒收

6=退款处理中

7=已退款

开发任务-6-搜索商品

需求设计实现搜索商品

通过搜索查询想要的商品

具体实现步骤

1、准备数据库

				mall-pms---对应项目mall-product--server.port== 9010

2、业务层

分析业务逻辑:
电商网站一定会有按用户输入的关键字进行搜索的功能

这样的搜索都是搜索ES查询到的结果

执行思路:

最后:完成控制层(实现前端接口)

对应项目是
mall-search–server.port=10008
mall-sso–server.port==10002

nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
ES----搜索

开发任务-7-高并发秒杀商品

需求设计实现XXX

具体实现步骤

1、准备数据库

				mall-pms---对应项目mall-product--server.port== 9010

2、业务层

分析业务逻辑:

执行思路:

最后:完成控制层(实现前端接口)

对应项目是
mall-front–server.port=10004

nacos—注册信息、方便远程调用
seata—分布式事务(只要涉及数据库的操作都启动)
redis----存储分类信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值