网 上 书 城

第六阶段:结账、添加事务、使用Ajax

1. 结账

  • 结账就是把我们购物车中的东西转换成订单,我们之前将购物车中的东西都放在了Session对象中,但是订单中的东西我们就需要保存在数据库中了,所以我们就需要创建类和表。

1.1订单

1.2查看详情

1.3和购物车类似我们需要创建订单类和订单项类

1.3.1订单类Order

  • private String id; // 订单号
  • private Date orderTime; // 生成订单的时间
  • private int totalCount; // 商品总数量
  • private double totalAmount; // 商品总金额
  • private int state; // 订单状态 0:未发货 1:已发货 2:交易完成
  • private int userId; // 订单所属的用户
  • 对于订单号的要求:
    • 不能重复,唯一
    • 尽量少体现出订单信息
  • 订单和用户的关系
    • 多对一的关系:一个用户可以有多个订单,一个订单只能属于一个用户

1.3.2订单项类OrderItem

  • private Integer id; // 订单项id
  • private int count; // 买了多少本图书
  • private double amount; // 买了count本图书花费的钱数
  • private String title; // 所买图书的书名
  • private String author; // 图书的作者
  • private double price; // 图书的价格
  • private String imgPath; // 图书封面
  • private String orderId; // 订单项所属的订单
  • 订单项和订单的关系
    • 多对一的关系:一个订单可以包含多个订单项,一个订单项属于一个订单

1.4操作订单的接口OrderDao

  • public void saveOrder(Order order); // 向数据库中添加订单
  • public List<Order> getOrders(); //获取所有订单
  • public List<Order> getOrdersByUserId(int userId); //根据用户id查询用户的所有订单
  • public void updateOrderState(String orderId, int state); //根据订单号更新订单状态

1.5操作订单项的接口OrderItemDao

  • public void saveOrderItem(OrderItem orderItem); //向数据库中添加订单项
  • public List<OrderItem> getOrderItemsByOrderId(String orderId); //根据订单号查询所有订单项

1.6处理订单相关业务的接口OrderService

  • public String createOrder(Cart cart, User user); // 生成订单,返回订单号
  • 注意这个方法里面的业务逻辑比较多
    • 根据当前时间和用户Id拼接订单号
    • 创建订单对象将购物车中的信息封装到订单对象中并将订单保存到数据库中
    • 创建订单项对象将购物车中购物项的信息封装到订单项中其中不要忘记更新图书的销量和库存然后将订单项保存到数据库中
    • 最后还需要清空购物车
  • public List<Order> getOrders(); //获取所有的订单
  • public List<Order> getOrdersByUserId(int userId); //根据用户ID获取该用户的订单
  • public List<OrderItem> getOrderItemsByOrderId(String orderId); //根据订单号获取所有订单项
  • public void sendOrTakeOrder(String orderId,int state); //管理员发货或者用户确认收货
  • 不管是发货还是收货本质就是更新订单的状态

1.7客户端订单管理

  • 结账、我的订单、订单详情、确认收货
    • 以上操作都需要判断用户是否登录

1.8管理端订单管理

  • 订单管理、发货