一.第一部分:收集信息,准备数据
1.先实例化OmsOrder对象
2.当前方法参数orderAddDTO有很多order需要的同名属性,直接赋值接口
3.orderAddDTO中属性比OmsOrder要少,缺少的属性要我们自己赋值或生成
4.可以编写一个专门的方法,来进行数据的收集,然后调用,到此为止,order的普通属性全部赋值完毕
(①给id赋值,订单业务不使用数据库自增列做id,而使用Leaf分布式序列生成系统
②生成订单号,直接使用UUID即可
③赋值UserId,以后秒杀业务调用这个方法时,userId属性是会被赋值的,
所以这里要判断一下userId是否已经有值,没有则从SpringSecurity上下文中获得当前登录用户id
④为订单状态赋值,订单状态如果为null ,将其设默认值0,表示未支付
⑤为了保证下单时间和数据创建时间和最后修改时间一致,我们给他们赋相同的值
⑥验算实际支付金额,实际支付金额=原价-优惠+运费
)
5.下面要将参数orderAddDTO中包含的订单项(orderItem集合)信息赋值
6.首先取出这个集合,也就是当前订单中包含的所有商品的集合
7.加判断buweinull或者不为空-抛异常:如果当前订单中没有商品,就无法继续生成订单了
8.我们最终的目标是将当前订单中包含的订单项新增到数据库;
当前集合泛型是OrderItemAddDTO,我们编写的新增到数据库的方法泛型是OmsOrderItem;
所以我们要编写代码将上集合转换为List<OmsOrderItem>集合
声明List<OmsOrderItem>集合
遍历OrderItemAddDTO集合:
先实例化一个OmsOrderItem对象,以备赋值使用
将同名属性赋值到orderItem对象中
将addDTO对象中没有的id和orderId属性赋值
将赋好值的对象添加到omsOrderItems集合中
第二部分:执行操作数据库的指令
1.减少库存
1)当前循环是订单中的一件商品,我们可以在此处对这个商品进行库存的减少
2)当前对象属性中是包含skuId和要购买的商品数量的,所以可以执行库存的修改
3)先获取skuId,修改库存是Dubbo调用的(调用商品库存模块操作数据库),然后根据返回结果进行判断,库存不足不能继续生成订单,抛出异常,终止事务进行回滚
2.删除勾选的购物车商品
实例化一个购物车实体,通过获取的商品id和用户id,执行删除的方法。