案例29-购物车提交订单

1 案例分析

1 订单分析1

2 订单分析2

3 订单的业务操作

2 代码实现

1 cart.jsp代码修改

<a href="${pageContext.request.contextPath }/product?method=submitOrder">
     <input type="button" width="100" value="提交订单" name="submit" border="0" style="background: url(‘./images/register.gif‘) no-repeat scroll 0 0 rgba(0, 0, 0, 0);
      height:35px;width:100px;color:white;"></a>

2 ProductServlet代码

//提交订单
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对象 传递给service层
    Order order = new Order();

    //1、private String oid;//该订单的订单号
    String oid = CommonsUtils.getUUID();
    order.setOid(oid);

    //2、private Date ordertime;//下单时间
    order.setOrdertime(new Date());

    //3、private double total;//该订单的总金额
    //获得session中的购物车
    Cart cart = (Cart) session.getAttribute("cart");
    double total = 0.0;
    if(cart!=null){
        total = cart.getTotal();
    }
    order.setTotal(total);

    //4、private int state;//订单支付状态 1代表已付款 0代表未付款
    order.setState(0);

    //5、private String address;//收货地址
    order.setAddress(null);

    //6、private String name;//收货人
    order.setName(null);

    //7、private String telephone;//收货人电话
    order.setTelephone(null);

    //8、private User user;//该订单属于哪个用户
    order.setUser(user);

    //9、该订单中有多少订单项List<OrderItem> orderItems = new ArrayList<OrderItem>();
    //获得购物车中的购物项的集合map
    Map<String, CartItem> cartItems = cart.getCartItems();
    for(Map.Entry<String, CartItem> entry : cartItems.entrySet()){
        //取出每一个购物项
        CartItem cartItem = entry.getValue();
        //创建新的订单项
        OrderItem orderItem = new OrderItem();
        //1)private String itemid;//订单项的id
        orderItem.setItemid(CommonsUtils.getUUID());
        //2)private int count;//订单项内商品的购买数量
        orderItem.setCount(cartItem.getBuyNum());
        //3)private double subtotal;//订单项小计
        orderItem.setSubtotal(cartItem.getSubtotal());
        //4)private Product product;//订单项内部的商品
        orderItem.setProduct(cartItem.getProduct());
        //5)private Order order;//该订单项属于哪个订单
        orderItem.setOrder(order);

        //将该订单项添加到订单的订单项集合中
        order.getOrderItems().add(orderItem);
    }

    //order对象封装完毕
    //传递数据到service层
    ProductService service = new ProductService();
    service.submitOrder(order);

    session.setAttribute("order", order);

    //页面跳转
    response.sendRedirect(request.getContextPath()+"/order_info.jsp");

}

3 ProductService代码

//提交订单 将订单的数据和订单项的数据存储到数据库中
public void submitOrder(Order order) {

    ProductDao dao = new ProductDao();

    try {
        //1、开启事务
        DataSourceUtils.startTransaction();
        //2、调用dao存储order表数据的方法
        dao.addOrders(order);
        //3、调用dao存储orderitem表数据的方法
        dao.addOrderItem(order);

    } catch (SQLException e) {
        try {
            DataSourceUtils.rollback();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
        e.printStackTrace();
    } finally {
        try {
            DataSourceUtils.commitAndRelease();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

4 ProductDao代码

//向orders表插入数据
public void addOrders(Order order) throws SQLException {
    QueryRunner runner = new QueryRunner();
    String sql = "insert into orders values(?,?,?,?,?,?,?,?)";
    Connection conn = DataSourceUtils.getConnection();
    runner.update(conn,sql, order.getOid(),order.getOrdertime(),order.getTotal(),order.getState(),
            order.getAddress(),order.getName(),order.getTelephone(),order.getUser().getUid());
}

//向orderitem表插入数据
public void addOrderItem(Order order) throws SQLException {
    QueryRunner runner = new QueryRunner();
    String sql = "insert into orderitem values(?,?,?,?,?)";
    Connection conn = DataSourceUtils.getConnection();
    List<OrderItem> orderItems = order.getOrderItems();
    for(OrderItem item : orderItems){
        runner.update(conn,sql,item.getItemid(),item.getCount(),item.getSubtotal(),item.getProduct().getPid(),item.getOrder().getOid());
    }
}

5 order_info.jsp修改代码

<table class="table table-bordered">
    <tbody>
        <tr class="warning">
            <th colspan="5">订单编号:${order.oid }</th>
        </tr>
        <tr class="warning">
            <th>图片</th>
            <th>商品</th>
            <th>价格</th>
            <th>数量</th>
            <th>小计</th>
        </tr>

        <c:forEach items="${order.orderItems }" var="orderItem">

            <tr class="active">
                <td width="60" width="40%">
                    <img src="${pageContext.request.contextPath }/${orderItem.product.pimage}" width="70" height="60">
                </td>
                <td width="30%"><a target="_blank">${orderItem.product.pname}</a></td>
                <td width="20%">¥${orderItem.product.shop_price}</td>
                <td width="10%">${orderItem.count}</td>
                <td width="15%"><span class="subtotal">¥${orderItem.subtotal }</span></td>
            </tr>
        </c:forEach>
    </tbody>
</table>

原文地址:https://www.cnblogs.com/jepson6669/p/8448025.html

时间: 2024-10-11 17:51:50

案例29-购物车提交订单的相关文章

提交订单

<%@ Page Title="" Language="C#" MasterPageFile="~/CheckOut.master" AutoEventWireup="true" CodeFile="CheckOut.aspx.cs" Inherits="CheckOut" %> <asp:Content ID="Content1" ContentP

ENode框架Conference案例分析系列之 - 订单处理减库存的设计

前言 前面的文章,我介绍了Conference案例的业务.上下文划分.领域模型.架构,以及代码整体流程.接下来想针对案例中一些重要的场景,分别做进一步的分析.本文想先介绍一下Conference案例的核心业务场景 - 订单处理减库存的设计. 下单以及订单处理流程描述 下单过程 预订者浏览某个已发布的会议: 进入会议的详情页面,该页面显示了所有可预订的座位分类信息: 预订者选择好要预订的座位分类,录入每个分类的预定数量: 预订者点击提交按钮,提交下单请求到Server端: Server端订单处理过

QQ_990814268 摘抄Django项目购物车、订单(三)

购物车 提示 使用redis数据库存储购物车数据 购物车需要完成增.删.改.查的逻辑 查询的结果,需要由服务器响应界面给客户端展示出来 增删改的操作,是客户端发数据给服务器,两者之间的交互是局部刷新的效果,需要用ajax交互 添加购物车的请求方法:post 服务器和客户端传输数据格式:json 服务器接收的数据 用户id:user_id 商品id:sku_id 商品数量:count 定义添加购物车视图 # 项目的urls url(r'^cart/', include('cart.urls', n

跨域解决方案与提交订单

跨域解决方案与提交订单 课程目标  目标 1:掌握跨域请求 CORS 解决方案目标 2:完成结算页收货人地址选择功能目标 3:完成结算页支付方式选择目标 4:完成结算页商品清单功能目标 5:完成保存订单功能 1.商品详细页跨域请求  1.1 需求分析  从商品详细页点击“加入购物车”按钮,将当前商品加入购物车,并跳转到购物车页面. 1.2 JS 跨域请求  这里说的 js 跨域是指通过 js 在不同的域之间进行数据传输或通信,比如用 ajax 向一个不同的域请求数据,或者通过 js 获取页面中不

Session小案例-----简单购物车的使用

Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示同样用的都是servlet. 功能实现如下: 1,显示网站的所有商品 2,用户点击购买后,能够记住用户选择的商品 3,实现了多个会话共享一个session 4, 实现了浏览器禁用cookie后数据共享问题的处理 首页: package cn.itcast.shopping; import java.io.IOException; import java.io.PrintWriter; import java.io

mvc购物车项目--提交订单并创建订单

SubmitOrderServlet.java public class SubmitOrderServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setC

web day25 web day24 小项目练习图书商城, 购物车模块,订单模块,支付(易宝支付)

购物车模块 购物车存储: 保存在session中(本次使用的) 保存在cookie中 保存在数据库中 购物车相关类 购物车结构 CartItem:包含图书和数量,小计 Cart:包含一个Map<String,CartItem>和部分购物车操作方法 修改登录方法,在用户登录成功后,马上在session中添加一辆车 页面负责遍历存在session域中的购物车属性 添加购物车条目 清空购物车条目 指定删除购物车条目 图 我的购物车 top.jsp中存在一个链接:我的购物车 我的购物车直接访问/jsp

风险案例-29期- 项目管理投入不够, 缺乏项目统筹全局观,使项目成本、进度、质量存在很大风险

典型案例: A公司承接了某小型项目,公司任命刚刚通过公司内部项目经理考核认证的王工为该项目的项目经理.目前项目已进行到了详细设计阶段,在项目实施过程中发现, 项目经理对于技术调研的精力投入较多,导致管理工作不充分,且预计的设计评审工作无法有效实施.从目前情况来看项目经理仅发挥了Leader的作用,无法 站在项目全局高度进行统筹管理,使项目成本.进度.质量存在很大的风险. 风险的概述: 项目管理投入不够, 缺乏项目统筹全局观,使项目成本.进度.质量存在很大风险. 推荐处置措施如下: 预防建议: 1

案例38-后台全部订单的查询

1 left.jsp代码修改 d.add('0105','01','订单管理'); d.add('010501','0105','订单管理','${pageContext.request.contextPath}/admin?method=findAllOrders','','mainFrame'); 2 AdminServlet代码findAllOrders // 5 获得所有订单 findAllOrders public void findAllOrders(HttpServletReque