一、购物车

        启动类引入goods.feign接口路径、屏蔽数据库

        数据:用MongoDB存储(弱一致性保证高性能;内存映射,低延迟;天然支持 JSON 文档,一次读写)

        功能:

        1.添加:void add(); //添加;   List<Cart> list(); //显示购物车列表信息

        

        2.将购物车中勾选的信息查询出来,传到订单页面,并传入CartFeign接口:

                List<Cart> list(List<String> ids){}

        3.下单后,删除购物车中结算的商品,并传入CartFeign接口:

                void delete(List<String> ids){ MongoTemplate.remove()}

二、收件地址

        创建mall-user-api,创建Address.java和表address映射。再用MP的QueryWrapper去构造查询数据库中的收件人地址。

三、下单

        映射:mall-order-api:创建Order.java(订单)和OrderSku.java(订单明细),分别与表order_info和order_sku映射

       功能:

        1.(商品goods)库存递减:

SkuController:接收购物车(List<Cart> carts)中商品的的id和num。封装到SkuFeign中。

SkuMapper:为了防止超卖,用数据库update操作(行级锁)    

@Update("update sku set num = num - #{num} where id = #{id} and num >= #{num}")
int dcount(@Param("id") String id, @Param("num") Integer num);

 SkuService(Impl):for(Cart cart : carts){}循环扣减(可扩展性强(报错、定位......))

        2.下单

        启动类需扫描order.mapper包和feign接口包路径

        // 1.查询购物车数据(cartFeign.list(order.getCartIds())再换成carts)

        // 2.递减库存(skuFeign.dcount())

        // 3.添加订单明细:for循环将Cart数据转换成OrderSku,并set缺失的属性

        // 4.添加订单(在订单明细的for循环中计算出总数量和总金额),并set缺失的属性

        // 5.删除购物车中的数据(cartFeign.delete())

更多推荐