商品订单从购物车页面提交

1.分析

商品订单从购物车页面提交

2.OrderItem.java

private String itemid ;   //订单项的id
    private int count ;       //该订单项有多少件商品
    private double subtotal ; //该订单项的总计金额
    private Product product ; //该订单项中封装的商品
    private Order orders ;    //该订单项属于哪个订单(即哪个用户)

3.Order.java

private String oid ;       //order订单项的id属性
    private Date datetime ;    //订单产生的日期
    private double total ;     //订单项的总计金额
    private int state ;        //定义标志位  1代表已经付款  0代表未付款
    private String address ;  //收货人的地址
    private String name ;     //收货人姓名
    private String telephone ; //收货人电话号码
    private User user ;       //订单用户的信息
    

    List<OrderItem> orderItems = new ArrayList<OrderItem>();  //该订单中有多少个订单项

4.servlet页面代码

//提交订单
    public void submitOrder(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        HttpSession session = request.getSession();
        //首先判断用户是否登录,如果没有登录则跳转到登录页面进行登录
        User user = (User) session.getAttribute("user");
        if(user==null) {
            //跳转到登录页面进行登录
            response.sendRedirect(request.getContextPath()+"/login.jsp");
            return ;
        }
        /**
         * 提交订单主要是讲全部的订单信息封装成order对象
         *
         */
        Order orders = new Order();
//        1 private String oid ;       //order订单项的id属性
        orders.setOid(CommonsUtils.getUUID());
        
//        2 private Date datetime ;    //订单产生的日期
        orders.setDatetime(new Date());
        
//        3 private double total ;     //订单项的总计金额
        //获得购物车中的total
        Cart cart = (Cart) session.getAttribute("cart");
        double total = cart.getTotal();
        orders.setTotal(total);
        //System.out.println(total);
//        4 private int state ;        //定义标志位  1代表已经付款  0代表未付款
        orders.setState(0);
        
//        5 private String address ;  //收货人的地址
        orders.setAddress(null);
        
//        6 private String name ;     //收货人姓名
        orders.setName(null);
        
//        7 private String telephone ; //收货人电话号码
        orders.setTelephone(null);
        
//        8 private User user ;       //订单用户的信息
        orders.setUser(user);
        
        //9 List<OrderItem> orderItems = new ArrayList<>();  //该订单中有多少个订单项
        //从购物车中找出购物项
        Map<String, CartItem> cartItem = cart.getCartItem();
        for (Map.Entry<String, CartItem> entrys : cartItem.entrySet()) {
            //获得购物车中的内容
            CartItem value = entrys.getValue();
            //根据购物车封装订单项
            OrderItem orderItem = new OrderItem();
//            private String itemid ;   //订单项的id
            orderItem.setItemid(CommonsUtils.getUUID());
            
//            private int count ;       //该订单项有多少件商品
            orderItem.setCount(value.getBuyNum());
            
//            private double subtotal ; //该订单项的总计金额
            orderItem.setSubtotal(value.getSubTotal());
            
//            private Product product ; //该订单项中封装的商品
            orderItem.setProduct(value.getProduct());
            
//            private Order orders ;    //该订单项属于哪个订单(即哪个用户)
            orderItem.setOrders(orders);
            
            orders.getOrderItems().add(orderItem);
        }
        
        ProductService service = new ProductService();
        service.submitOrder(orders);
        
        session.setAttribute("orders", orders);
        response.sendRedirect(request.getContextPath()+"/order_info.jsp");

    }

5.service页面代码

//提交商品订单    将商品信息保存到数据库中
    public void submitOrder(Order orders) {
        ProductDao dao = new ProductDao();
        try {
            //开启事物
            DataSourceUtils.startTransaction();
            
            //向order表中存储数据
            dao.addOrder(orders);
            
            //向orderItem表中存储数据
            dao.addOrderItem(orders);
            
        } catch (SQLException e) {
            try {
                DataSourceUtils.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            try {
                DataSourceUtils.commitAndRelease();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

6.dao页面代码实现

//向order表中存储数据
    public void addOrder(Order orders) throws SQLException {
        QueryRunner qr = new QueryRunner();
        String sql = "insert into orders values (?,?,?,?,?,?,?,?)";
        Connection conn = DataSourceUtils.getConnection();
        qr.update(conn, sql, orders.getOid(),orders.getDatetime(),orders.getTotal(),orders.getState(),
                orders.getAddress(),orders.getName(),orders.getTelephone(),orders.getUser().getUid());
        
    }

    //向orderItem表中存储数据
    public void addOrderItem(Order orders) throws SQLException {
        QueryRunner qr = new QueryRunner();
        String sql = "insert into orderitem values (?,?,?,?,?)";
        Connection conn = DataSourceUtils.getConnection();
        List<OrderItem> orderItems = orders.getOrderItems();
        for (OrderItem orderItem : orderItems) {
            qr.update(conn, sql,orderItem.getItemid(),orderItem.getCount(),orderItem.getSubtotal(),
                    orderItem.getProduct().getPid(),orderItem.getOrders().getOid() );
        }

    }

7.jsp页面  略...