购物车算费上下文ChargeContext构建具体过程.md
2.86 KB
算费上下文ChargeContext构建具体过程
ChargeContext由ChargeContextFactory.build()构建,参数:Boolean selected、ChargeParam,
ChargeContext需要构建的信息:
用户信息:vip、当月订单数、有货币、红包
购物车中商品的详情:价格,是否货到付款,是否下架,outlet、促销信息等
具体实现过程:
根据ChargeParam中的List<ShoppingItem>是否为空类进行不同的构建过程.
如果为空则调用buildByShoppingCart通过购物车构建。
如果不为空,则是立即购物,通过buildByShoppingItems进行构建。
buildByShoppingCart构建过程如下:
1)通过ChargeParam中的uid和shoppingkey找到购物车对象ShoppingCart,为空则抛异常。
如果uid>0,通过uid到数据库表shoppingCart查询到物车对象ShoppingCart
如果uid<=0再通过shoppingkey,到数据库表shoppingCart查询到物车对象ShoppingCart。
2)根据ShoppingCart设置ChargeParam的属性(uid,shoppingkey,shoppingcarid)
因为uid或shoppingkey可能有一个为空,所以查询到购物车后统一更新这两个值
3)查询设置商品的详细信息List<ShoppingCartItems> shoppingCartGoodsList。
根据shoppingCartId到数据库表shopping_cart_items中
查询当前购物车中商品的信息List<ShoppingCartItems> goodsList。
从goodsList获取到skns、skus
根据skns到商品模块查询到商品的详细信息
然后将商品的各种信息(价格,是否货到付款,是否下架,outlet等保存到good的extmap中)
根据skns到促销模块查询商品的购买数量限制信息,并设置good的购买限制,
根据good的促销id查询促销信息(先到缓存,再到数据库中查询)
根据促销信息设置good的promotion_type和real_price、last_Price
promotion_type=Gift为赠品,real和last Price为0,
promotion_type=Needpaygift为加价购商品,real和last Price为add_cost,
4)根据ChargeParam和shoppingCartGoodsList调用doBuild()构建ChargeContext并返回
将shoppingCartGoodsList转换成List<ChargeGoods>(利用反射将map中的属性设置到ChargeGoods中)
并将List<ChargeGoods>保存到ChargeContext。
根据uid到用户模块和数据获取各种相关信息,并保持到UserInfo中。
调用users.getVipSimpleInfo服务,获取用户的vip信息。
到order表查询用户当月点单数。
调用users.getYohoCoin服务,获取用户的有货币信息,并转化成货币。
调用users.selectRedenvelopesCount服务,获取用户的红包,
将UserInfo保存到ChargeContext中。
buildByShoppingItems构建过程:
1)首先将ChargeParam中的List<ShoppingItem>转换为List<ShoppingCartItems>
2)下面的处理和buildByShoppingCart中通过购物车ShoppingCartid到数据库查到
List<ShoppingCartItems> goodsList后的处理过程相同