算费上下文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后的处理过程相同