书城项目_第七阶段_订单模块

1 、创建订单模块的数据库表

use book;
create table t_order(
	`order_id` varchar(50) primary key,
	`create_time` datetime,
	`price` decimal(11,2),
	`status` int,
	`user_id` int,
	foreign key(`user_id`) references t_user(`id`)
);
create table t_order_item(
	`id` int primary key auto_increment,
	`name` varchar(100),
	`count` int,
	`price` decimal(11,2),
	`total_price` decimal(11,2),
	`order_id` varchar(50),
	foreign key(`order_id`) references t_order(`order_id`)
);

2 、创建订单模块的数据模型

/**
* 订单
*/
public class Order {
	private String orderId;
	private Date createTime;
	private BigDecimal price;
	// 0 未发货, 1 已发货, 2 表示已签收
	private Integer status = 0;
	private Integer userId;
}
	
/**
* 订单项
*/
public class OrderItem {
	private Integer id;
	private String name;
	private Integer count;
	private BigDecimal price;
	private BigDecimal totalPrice;
	private String orderId;
}

3 、编写订单模块的 Dao 程序和测试

OrderDao 接口

public interface OrderDao {
	public int saveOrder(Order order);
}

OrderDao 实现

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());
	}
}

OrderItemDao 接口

public interface OrderItemDao {
	public int saveOrderItem(OrderItem orderItem);
}

OrderItemDao 实现

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());
	}
}

4 、编写订单模块的 Service 和测试

OrderService 接口

public interface OrderService {
	public String createOrder(Cart cart,Integer userId);
}

OrderService 实现类

public class OrderServiceImpl implements OrderService {
	private OrderDao orderDao = new OrderDaoImpl();
	private OrderItemDao orderItemDao = new OrderItemDaoImpl();
	@Override
	public String createOrder(Cart cart, Integer userId) {
		// 订单号 === 唯一性
		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.getPrice(),cartItem.getTotalPrice(),orderId);
			// 保存订单项到数据库
			orderItemDao.saveOrderItem(orderItem);
		}
		// 清空购物车
		cart.clear();
		return orderId;
	}
}

5 、编写订单模块的 web 层和页面联调

修改 OrderService 程序:

public class OrderServiceImpl implements OrderService {
	private OrderDao orderDao = new OrderDaoImpl();
	private OrderItemDao orderItemDao = new OrderItemDaoImpl();
	private BookDao bookDao = new BookDaoImpl();
	@Override
	public String createOrder(Cart cart, Integer userId) {
		// 订单号 === 唯一性
		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.getPrice(),cartItem.getTotalPrice(),orderId);
			// 保存订单项到数据库
			orderItemDao.saveOrderItem(orderItem);
			// 更新库存和销量
			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;
	}
}

OrderServlet 程序:

public class OrderServlet extends BaseServlet {
	private OrderService orderService = new OrderServiceImpl();
	/**
	* 生成订单
	*
	* @param req
	* @param resp
	* @throws ServletException
	* @throws IOException
	*/
	protected void createOrder(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 先获取 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);
		req.getSession().setAttribute("orderId",orderId);
		resp.sendRedirect(req.getContextPath()+"/pages/cart/checkout.jsp");
	}
}

修改 pages/cart/cart.jsp 页面,结账的请求地址:
在这里插入图片描述
修改 pages/cart/checkout.jsp 页面,输出订单号:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玳宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值