网 上 书 城
发布日期:2018-12-10 作者:atguigu 4952人浏览
第六阶段:结账、添加事务、使用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管理端订单管理