栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

观前提示:

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


@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 = 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);
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830210.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号