畅购商城-添加订单实现(一)

观前提示:

  • 详细资料观看黑马程序员的畅购商城。
  • 该博客尝试用解题思路说明代码实现。
  • 笔者当前水平有限,因此该博客质量不高。

 已知:

  • Idworke:一个分布式的ID生成工具.
    • 可以理解为帮助生成数据库表的id。
    • 假设已经引入在common公共模块。
  • 订单数据库表和订单数据库明细表
    • 已建立订单实体类Order。
    • 已建立订单明细实体类OrderIte。
    • 订单实体类与订单明细实体类的关系可以理解为前者是购物车,后者是购物车的详情商品。
  • 已经实现购物车模块
    • 购物车实体类是使用了订单明细实体类OrderIte,但是只保存在redis缓存。
    • redis缓存可以从RedisTemplate类的对象获取。
  • 从Controller层接受Order对象。
  • DAO层已经创建OrderMapper和OrderItemMapper。
  • 已经依赖Spring Boot等框架。

要求:

  • 在订单模块调用Idworker
  • 在Service层完成:
    • 给Order对象的订单主键id赋值。
    • 给Order对象的订单创建时间createTime属性赋值。
    • 给Order对象的最近更新时间updateTime属性赋值。
    • 给Order对象的商品总数量num属性赋值。
    • 给Order对象的商品总金额money属性赋值。
    • 赋值后的Order对象和OrderItem对象封装给DAO层的OrderMapper和OrderItemMapper。

解决:

  • Idworker在本模块的调用
//方法创建在OrderApplication.java

/****
*  创建IDworker
*  workerld是机号
*  datacenterld是序列    
*/
@Bean
public IdWorker idWorker() {
    return new IdWorker (workerld:0, datacenterld:0);

  •  给Order对象的订单主键id赋值。
@Autowired
private IdWorker idWorker;

@Override
public void add (Order order){

    //生成主键id:调用idWork,转换成String,赋给Order对象;
    order.setId (String. valueOf (idWorker.nextId())); 
}
  • 给Order对象的订单创建时间createTime属性赋值。
  • 给Order对象的最近更新时间updateTime属性赋值。
@Override
public void add (Order order){

    // 创建时间
    order.setCreateTime (new Date()); 
    //修改时间:前端传递过来的Order对象中获取
    order.setUpdateTime (order.getCreateTime()); 

}
  • 给Order对象的商品总数量num属性赋值。
  • 给Order对象的商品总金额money属性赋值。
@Autowired
private RedisTemplate redisTemplate;

@Override
public void add (Order order){

    //从Token令牌中获取当前用户名username,并赋值给Order对象的username属性
    String username = TokenDecode.getUserInfo().get("username");|
    order.setUsername(username);
    
    //根据Order对象的username属性获取redis缓存中购物车实体类,并赋值给OrderItem订单实体类
    List<OrderItem> orderItem = redisTemplate.boundHash0ps("Cart_"   +order.getUsername()).values();

    int totalNum = 0; //总数量
    int totalMoney =0; //总金额

    for (OrderItem orderItem : orderItems) { //循环购物车里每一个商品
        totalNum += orderItem.getNum();    //从购物车里获取每一个商品的数量
        totalMoney += orderItem.getMoney();  //从购物车里获取每一个商品的金额
    }

    //循环出来的就是订单实体类需要的总数量和总金额
    order.setTotalNum(totalNum);
    order.setPayMoney(totalMoney);

}
  •  赋值后的Order对象和OrderItem对象封装给DAO层的OrderMapper和OrderItemMapper。
@Autowired
private OrderMapper orderMapper;

@Autowired
private OrderItemMapper orderItemMapper;

@Override
public void add (Order order){

    //订单明细的ID
    orderItem.setId(String.valueOf(idWorker.nextId());
    //订单明细所属的订单,从订单主键id获取,因此我们需要把订单主键id先在写在上面
    orderItem.setOrderId(order.getId());

    //先添加订单信息,再循环添加订单明细
    orderMapper.insertSelective(order);

    for (OrderItem orderItem : orderItems) {
      orderItemMapper.insertSelective(orderItem);
    }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值