本文共 6693 字,大约阅读时间需要 22 分钟。
drop table if exists t_order;create table t_order( order_id varchar(50) primary key, create_time datetime, price decimal(11,2), count int, status int, user_id int, foreign key(user_id) references t_user(id));
drop table if exists t_order_itemcreate 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`));
订单:
public class Order { private String orderId;//订单编号 private Date createTime;//创建订单时间 private BigDecimal price;//订单价格 // 0未发货,1已发货,2表示已签收 private Integer status = 0;//订单状态 private Integer userId;//该订单是哪个用户的,用户的ID private Integer count;//订单里商品数量
订单项:
public class OrderItem { private Integer id; private String name; private Integer count; private BigDecimal price; private BigDecimal totalPrice; private String orderId;
OrderDao 接口 :
/** * 保存订单 * @param order 保存订单的数据 */int saveOrder(Order order);
OrderDao 实现 :
public class OrderDaoImpl extends BaseDao implements OrderDao { @Overridepublic int saveOrder(Order order) { String sql = "insert into t_order(order_id,create_time,price,count,status,user_id) values (?,?,?,?,?,?)"; return upDate(sql,order.getOrderId(),order.getCreateTime(),order.getPrice(),order.getCount(),order.getStatus(),order.getUserId());}OrderDaoTest:public class OrderDaoTest { private OrderDao orderDao = new OrderDaoImpl(); @Test public void saveOrder() { orderDao.saveOrder(new Order("123456",new Date(),new BigDecimal(100),0,1)); }
OrderItemDao 接口 :
public interface OrderItemDao { /** * 保存订单项(订单明细 * @param orderItem * @return */ 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()); }
OrderItemDaoTest:
public class OrderItemDaoTest { OrderItemDao orderItemDao = new OrderItemDaoImpl(); @Test public void saveOrderItem() { orderItemDao.saveOrderItem(new OrderItem(null,"安徒生童话",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); orderItemDao.saveOrderItem(new OrderItem(null,"java从入门到精通",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); orderItemDao.saveOrderItem(new OrderItem(null,"javaScript从入门到精通",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); orderItemDao.saveOrderItem(new OrderItem(null,"Netty入门",1,new BigDecimal(29.9),new BigDecimal(29.9),"123456")); }
OrderService 接口:
public interface OrderService { /** * 生成订单 * @param cart 由哪个购物车生成 * @param userId 由哪个用户生成 * @return */ String creatOrder(Cart cart,Integer userId);}
OrderService 实现类 :
public class OrderServiceImpl implements OrderService { private OrderDao orderDao = new OrderDaoImpl(); private OrderItemDao orderItemDao = new OrderItemDaoImpl(); private BookDao bookDao = new BookDaoImpl(); @Override public String creatOrder(Cart cart, Integer userId) { // 订单号===唯一性 String orderId = System.currentTimeMillis() + "" + userId; // 创建一个订单对象 Order order = new Order(orderId,new Date(),cart.getTotalPrice(),0,userId,cart.getTotalCount()); // 保存订单 orderDao.saveOrder(order); // 遍历购物车中每一个商品项转换成为订单项保存到数据库 for (Map.Entryentry : 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; }}
测试 :
public class OrderServiceTest { private OrderService orderService = new OrderServiceImpl(); @Test public void creatOrder() { Cart cart = new Cart(); cart.addItem(new CartItem(1, "java从入门到精通", 1, new BigDecimal(1000),new BigDecimal(1000))); cart.addItem(new CartItem(1, "java从入门到精通", 1, new BigDecimal(1000),new BigDecimal(1000))); cart.addItem(new CartItem(2, "数据结构与算法", 1, new BigDecimal(100),new BigDecimal(100))); String orderId = orderService.creatOrder(cart, 1); System.out.println("该订单编号是:" + orderId); }
ClientOrderServlet 程序:
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.creatOrder(cart, userId); req.getSession().setAttribute("orderId",orderId); resp.sendRedirect(req.getContextPath() + "/pages/cart/checkout.jsp"); }}
web配置:
ClientOrderServlet loey.web.ClientOrderServlet ClientOrderServlet /client/orderServlet
修改 pages/cart/cart.jsp 页面,结账的请求地址:
去结账//给去结账绑定单击事件$("#payOrder").click(function () { if(${empty sessionScope.user}){ alert("你还未登录,请先登录~"); this.href = "http://localhost:8080/MyBookStore/pages/user/login.jsp"; }else{ this.href = "http://localhost:8080/MyBookStore/client/orderServlet?action=createOrder"; }});
修改 pages/cart/checkout.jsp 页面,输出订单号:
你的订单已结算,订单号为${sessionScope.orderId}
转载地址:http://fquki.baihongyu.com/