文章目录
昨天实现了订单模型的全部基本功能,这里首先简单介绍订单模型,然后以订单模型的查看所有订单功能为例介绍分页模型,然后以发货功能为例介绍ajax局部更新页面,同时回顾我在写代码时遇到并解决的几个bug。
1. 订单模型
订单基本功能
订单模型的基本功能包括:
- 生成订单(用户)
- 查看所有订单(管理员)
- 查看我的订单(用户)
- 查看订单详情(管理员,用户)
- 发货(管理员)
- 签收(用户)
实体类和数据库表建立
建立订单类 Order:除了订单号,还包括根据用户结账的购物车信息获取商品总价,根据登录信息获得用户id(外键),根据结账时间获取建立订单的时间,以及一个唯一的订单号。
建立订单项类 OrderItem:一个购物车包含多个商品项,对应地,一个订单类有多个订单项,订单项的属性(商品id,名称,单价,购买数量,总价格)都来自购物车里的商品项。一个订单的多个订单项使用相同的订单号(外键)。
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`)
);
DESC t_order;
订单servlet
订单的servlet代码,这里的每一个方法对应上面的一个功能。
package indi.huishi.web;
import com.google.gson.Gson;
import indi.huishi.pojo.*;
import indi.huishi.service.OrderService;
import indi.huishi.service.impl.OrderServiceImpl;
import indi.huishi.utils.JdbcUtils;
import indi.huishi.utils.WebUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class OrderServlet extends BaseServlet{
OrderService orderService = new OrderServiceImpl();
/**
* 去结账
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void createOrder(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("结账");
// cart和用户user都在session里
User user = (User) req.getSession().getAttribute("user");
// 如果User==null没有登录,转到登录页面
if(user==null){
req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
return;
}
// System.out.println("OrderServlet当前线程"+Thread.currentThread().getName());
Cart cart = (Cart) req.getSession().getAttribute("cart");
if(cart!=null){
// 使用事务
String orderId = null;
orderId = orderService.createOrder(cart, user.getId());
req.getSession().setAttribute("orderId",orderId);
resp.sendRedirect(req.getContextPath()+"/pages/cart/checkout.jsp");
}
}
/**
* 查询所有订单(未使用)
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void showAllOrders(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// System.out.println("查询所有订单");
// 获得日期 金额 详情(订单项) 发货状态
List<Order> orders = orderService.showAllOrders();
req.setAttribute("orders",orders);
// 请求转发
req.getRequestDispatcher("/pages/manager/order_manager.jsp").forward(req,resp);
}
/**
* 查询所有订单--分页
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void showAllOrdersByPage(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("查询所有订单分页");
// 获取当前页数和每页的条目数量
int pageNo = WebUtils.parseInt(req.getParameter("pageNo"), 1);
int pageSize = 4;
// 生成当前页的对象
Page<Order> page