购物车思维导图
2023-03-23 18:26:36 1 举报
AI智能生成
购物车思维导图
作者其他创作
大纲/内容
查询购物车信息
支付成功清空购物车
查询购物车数量
通过缓存数据需要重新获取商品及活动等信息isQueryAllSku = true
业务特殊说明
加入购物车逻辑最全,其他功能概要说明的可以查看加入购物车功能
脑图说明
customerId
distributorId
selfPickupId
是否重新查询全部商品 true-是 false-否
isQueryAllSku:false
获取参数
getUserOrderCart
方法名称
用户ID + 团长ID
参数
order_cart:用户ID + \":\" + 团长ID
redis_key
1 先从缓存中获取
查询参数
放入缓存并设置过期时间30天
如果DB存在
2 缓存不存从DB中获取
3 DB不存在直接返回空
4 异常直接从DB获取不会放入缓存
1 查询缓存信息
购物车数据为空不设置
如果存在无效数据,设置isQueryAllSku=true
2 判断购物车是否有无效数据
如果非缓存获取,并且DB有值,则需要重新获取商品其他信息
3 判断是否是缓存获取
itemIDs(stockIds)
调用商品搜索服务批量获取商品信息(ES)
服务:fs-search/goods/search
获取商品信息
调用库存服务获取商品上架SKU库存信息
服务:fs-b-yinglong/goodsSaleStock/getOnSaleSkuStock
查询库存信息
查询购物车商品列表的商品还能购买数量
每个分拣仓和用户每天一个缓存记录
order:sku:purnum:\" + today + \":sid:\" + storeId + \":cid:\" + customerId
redis_key:
到第二天0点过期
过期时间
key:skuId
value:购买限制
数据类型:Map类型
通过redis获取
查询限领数量
专享活动信息
活动价格信息(商品id:商品专享价)
购物车查询专享活动的商品
专享价格
限购数量
各个商品活动信息
服务:fs-activity/exclusive/detail4OrderCart
查询活动信息
类型:新人专享商品
通过redis获取活动商品购买数量
活动商品购买数量
order:act:sku:purnum:\" + 新人专享商品.value + \":cid:\" + customerId
订单支付超时时间 + 1小时
获取活动限购
下架或者商品没价格-会设置购物车商品未选中
设置商品信息
会设置购物车状态为无效
购物车商品为未选中
库存为0
设置购物车状态为有效
有库存
设置库存信息
限购剩余数量= 商品限购数 - 用户购买数
无限购则设置最大
设置购物车当日商品限购剩余数量
普通商品
设置商品售卖类型
活动信息为空
新人专享商品
活动ID、开始结束时间、活动价格、活动限购数量
设置活动信息
活动为不可用
如果非活动商品、并且不是新人的情况
活动不为空
设置转化活动-即新人活动信息
设置活动剩余数量
转化活动限购
1 下架 2 无效 3 未选中 不进行计算
循环计算总数量
设置购物车选中商品总数量
则按照活动价和售价最小计算
有活动价、购物车活动有效、新人商品
totalAmount = totalAmount + orderCart.getNum() * orderCart.getSellPriceReal()
非活动价格正常
循环计算总价格
设置购物车选中总价格
1 下架 2 无效 不进行计算
设置购物车总数量
根据上面获取的信息循环设置设置购物车信息
order_cart: + customerId + \":\" + distributorId
过期时间为30天
缓存失败,捕获异常 不做处理
设置缓存updateOrderCartCache
4 如果非缓存获取,则获取商品其他信息
5 如果缓存和DB都无数据直接返回NULL
业务逻辑
获取购物车信息
全部退款也不算新用户
订单状态为已付款、订单类型不为分享送和抽奖
查询条件
通过用户ID查询ES是否有订单信息
是否新用户判断
更新购物车缓存
topic-orderCart-serialize
topic名称
order.cart.queue.flag:true
购物车同步数据库开关
delete from order_cart where customer_id=#{customerId} and distributor_id=#{distributorId}
先delete数据
batchsave(List<OrderCart>)
在批量保存数据
同步流程
发布消息同步数据库
异步同步DB
如果为卡券商品则抛异常
如果不为空,则重新设置该购物车商品信息
通过ES获取当前商品信息
重新设置商品信息
重新设置库存信息
重新设置当日商品限购剩余数量
如果是新用户专享商品,重新设置活动信息
重新设置活动限购信息
方法名:refreshOrderCartInfo
刷新购物车当前商品信息
刷新购物车
活动不可用
设置当前购物车商品
如果非新人,或者非新人活动商品
活动商品校验
活动信息校验
是否下架
CHECK_STATUS_INVALID
是否购物车商品是否有效
当前数量是否大于库存数据量
价格是否有效
添加类型判断如果有活动,活动数量是否大于活动限购数量
判断是否大于每天用户限购数量
新增一个商品数量校验
商品信息校验
公共功能说明
分支主题
fc-customer
@ApiModelProperty(value = \"用户ID\
参数信息
addToCart
服务信息
fs-ordercart
1 是否新用户判断
2 获取购物车信息
提示超过购物车最大限制
如果商品信息 > 100(apollo配置)
3 获取购物车商品信息
skuId + \"_\" + storeId
唯一商品ID-itemID
4 从购物车缓存中获取当前添加的商品信息
@ApiModelProperty(value = \"用户ID\
方法名称:increaseOrDecreaseCartSku
1 获取一遍是否为新用户
2 获取一遍购物车缓存信息
3 通过缓存信息获取该商品信息
4 根据加减类型进行数量调整
5 刷新购物车当前商品信息
6 活动商品校验
则从购物车商品列表中移除
为0
则设置商品为新数据量
数据校验成功
重新计算总数和全选状态
不为0
7 变更数量是否大于0
直接调整购物车商品数量
1 如果缓存中存在商品信息,则调整库存并返回
新加入的商品默认是活动商品 这样才会去查活动信息
1 创建新的购物车商品
2 刷新购物车当前商品信息
提示虚拟、卡券商品无法加入购物车
如果是抛异常
3 验证虚拟商品、线上卡券、线下卡券
设置活动不可用
非首单、活动信息为空、活动结束时间小于当前时间
4 活动商品校验
5 新增一个商品数量校验
1 设置数量1
2 默认为选中
3 重新计算总数量及金额
4 更新购物车缓存
5 发布消息同步数据库
6 检验成功
2 如果缓存无当前商品信息
5 判断缓存是否存
1 调用购物车服务-加入购物车
优惠券信息按照商品分组
1 购物车商品优惠券列表
fs-activity
判断用户是否满足成长活动条件
获取成长活动信息
调用订单服务获取用户已购买的活动商品数量
剩余数量 = 活动数量 - 已购活动数量
获取活动剩余数量
判断购物车商品是否满足活动条件
包括可以活动数量
活动相关信息
设置购物车商品活动信息
如果满足并且剩余数量>0
循环处理购物车商品信息
剩余数量 = 活动数量 - 已购活动数量 - 购物车商品已用数量
返回最终活动剩余数量
成长活动信息调用活动服务获取
fs-promotion
优惠券信息调用优惠券服务获取
总金额-优惠券总金额-成长活动总金额
2 购物车选中合计
优惠券总金额+成长活动总金额
3 已经优惠的金额
有效商品信息
4 购物车商品信息
根据价格是否为空、商品上架状态、失效状态、库存数量
无效商品信息
5 购物车失效商品信息
2 设置购物车其他字段信息
加入购物车
distributorIdselfPickupIdcityId
queryUserCart
cartListHotKeyFlag:true
1 热配开关JdHotKeyStore
StrUtil.join(\"-\
2 key
1 查询本地缓存
直接返回缓存数据
存在
isQueryAllSku:true
1 调用购物车服务-查询购物车
JdHotKeyStore.smartSet(StrUtil.join(\"-\
3 设置本地缓存
不存在
2 本地缓存是否存在数据
查询购物车
increaseOrDecreaseCartSku
3 再次通过缓存信息获取该商品信息
1 调用购物车服务-增加/减少商品数量
增加/减少商品数量
deleteCartSku
1 查询购物车信息
2 获取待删除购物车商品信息
3 移除当前商品信息
4 重新计算总数总价
ORDER_CART_KEY + customerId + \":\" + distributorId
5 更新缓存
6 同步数据库
1 调用购物车服务-删除商品
删除商品
checkCartSku
1 查询是否新用户
2 查询购物车信息
3 获取勾选的商品信息
refreshOrderCartInfo
4 刷新购物车商品信息
是否可用
5 活动校验
价格、库存、限制数量等
6 添加商品校验
7 校验成功设置当前商品勾选状态
8 重新计算总数和全选状态
9 保存缓存
10 异步发消息同步db
1 调用购物车服务-勾选商品
优惠券总金额 + 成长活动总金额
勾选商品
checkAllCartSku
1 查询是否信息用户
refreshOrderCartInfoBatch
3 批量刷新购物车商品信息
4 活动校验
5 选中状态设置
6 重新计算总数和全选状态
7 保存缓存
8 异步发消息同步db
1 调用购物车服务-勾选全部商品
勾选全部商品
clearInvalidCart
失效的
下架
库存<=0
无销售价格
2 移除失效数据
3 重新计算总数和全选状态
4 保存缓存
5 异步发消息同步db
调用购物车服务-清空购物车失效商品
清空购物车失效商品
userTokendistributorIdselfPickupIdcityId
submitOrderValidate
2 获取选中的商品信息
重新查询相关数据并设置
volidateOrderCart
4 循环校验数据
5 重新计算总数和全选状态
6 保存缓存
7 异步发消息同步db
调用库存服务-确认订单前验证
确认订单前验证
getUserCartNumber
getOrderCartFromCache
非缓存获取
重新查询所有商品
2 重新获取商品信息
3 重新计算总数量及总价格
1 调用购物车服务-查询用户购物车商品数量
3 设置customId
查询用户购物车商品总数量
customerIddistributorIdisClearDB(是否清空DB)
clearUserCart
1 清空购物车缓存
2 根据参数判断是否清理DB
是
清理逻辑同上
批量循环清理购物车信息
根据用户ID通过DB查询所有当前购物车信息
否
是否传团长ID
清空用户购物车信息
topic-orderCart-clear
kafka消息监听
1 查询购物车缓存
则删除当前购物车商品
如果购物车商品数量 <= 支付成功数量
设置购物车差值
购物车商品数量 > 支付成功数量
2 根据支付成功的购买数量来情况购物车商品
3 重新计算总数和全选状态
支付成功清除购物车
购物车业务逻辑
0 条评论
回复 删除
下一页