一、总体思路分析
二、创建订单
1)servlet
public class OrderServlet extends BeanServlet {
private OrderService orderService = new OrderServiceipml();
protected void creatOrder(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(111);
// 先获取Cart购物车对象
Cart cart = (Cart) req.getSession().getAttribute("cart");
// 获取Userid
User loginUser = (User) req.getSession().getAttribute("user");
//判断用户是否登入
if (loginUser == null) {
//如果没登入就跳转到登入页面
req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
//如果没有登入就不再执行下面的代码了
return;
}
Integer userId = loginUser.getId();
// 调用orderService.createOrder(Cart,Userid);生成订单
String orderId = orderService.createOrder(cart, userId);
req.setAttribute("orderId", orderId);
// 请求转发到/pages/cart/checkout.jsp
// req.getRequestDispatcher("/pages/cart/checkout.jsp").forward(req, resp);
//把用户ID保存到
req.getSession().setAttribute("orderId",orderId);
resp.sendRedirect(req.getContextPath()+"/pages/cart/checkout.jsp");
}
2)Service
/**
* 生成订单
*
* @param cart
* @param userId
* @return java.lang.String
* @author weisn
* @date 10:24
*/
@Override
public String createOrder(Cart cart, Integer userId) {
// 订单号===唯一性 System.currentTimeMillis()---获取时间戳
String orderId = System.currentTimeMillis() + "" + userId;
// 创建一个订单对象
Order order = new Order(orderId, new Date(), cart.getTotalPrice(), 0, userId);
// 保存订单
orderDao.saveOrder(order);
// 遍历购物车中每一个商品项转换成为订单项保存到数据库
for (Map.Entry<Integer, CartItem> entry : cart.getItems().entrySet()) {
// 获取每一个购物车中的商品项
CartItem cartItem = entry.getValue();
// 转换为每一个订单项
OrderItem orderItem = new OrderItem(null, cartItem.getName(), cartItem.getCount(), cartItem.getPrince(),
cartItem.getTotalPrice(), orderId);
// 保存订单项到数据库
orderItemDao.saveOrderItem(orderItem);
// 更新库存和销量
//通过商品id去查找商品的详情
Book book = bookDao.queryBookByid(cartItem.getId());
//设置销售量
book.setSales(book.getSales() + cartItem.getCount());
//设置库存
book.setStock(book.getStock() - cartItem.getCount());
bookDao.updateBook(book);
}
//去结账的时候一般要清空购物车
cart.clear();
return orderId;
}
3)OrderDao
/**
* @Description: OrderDao实现类 // 类说明
* @ClassName: OrderDaoimpl // 类名
* @Author: 曾伟鸿 // 创建者
* @Date: 2022/1/15 22:15 // 时间
* @Version: 1.0 // 版本
*/
public class OrderDaoimpl extends BaseDao implements OrderDao {
@Override
public int saveOrder(Order order) {
String sql = "insert into t_order(`order_id`,`create_time`,`price`,`status`,`user_id`) values(?,?,?,?,?)";
return update(sql, order.getOrderId(), order.getCreateTime(), order.getPrice(), order.getStatus(),
order.getUserId());
}
}
4)OrderItemDao
/**
* @Description: 实现类 // 类说明
* @ClassName: OrderItemDaoimpl // 类名
* @Author: 曾伟鸿 // 创建者
* @Date: 2022/1/15 22:16 // 时间
* @Version: 1.0 // 版本
*/
public class OrderItemDaoimpl extends BaseDao implements OrderItemDao {
@Override
public int saveOrderItem(OrderItem orderItem) {
String sql = "insert into t_order_item(`name`,`count`,`price`,`total_price`,`order_id`) values(?,?,?,?,?)";
return update(sql, orderItem.getName(), orderItem.getCount(), orderItem.getPrice(), orderItem.getTotalPrice()
, orderItem.getOrderId());
}
}