案例31-我的订单

1 案例效果

2 案例分析

1 我的订单的分析

2 MapListHandler分析

3 代码实现

1 header.jsp代码修改

2 ProductServlet代码

// 10 获取登录用户所有订单信息 myOrders
public void myOrders(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    HttpSession session = request.getSession();

    ProductService service = new ProductService();

    // 首先应该判断用户是否登录了
    User user = (User) session.getAttribute("user");
       //如果没有登录则跳转到登录页面
    if(user==null){
        //重定向到登录页面
        response.sendRedirect(request.getContextPath()+"/login.jsp");
        //不在执行继续执行之后的代码
        return;
    }

    // 根据登录用户的uid获取该用户的订单列表(单表查询orders表)
    //集合中的每一个Order对象的数据是不完整的。 缺少List<OrderItem> orderItems
    // private User user;//该订单属于哪个用户
    List<Order> orderList = null;
    try {
        orderList = service.findOrder(user);
    } catch (SQLException e) {

        e.printStackTrace();
    }

    //循环遍历所有的订单,为每一个订单填充订单项集合信息。
    if(orderList!=null){
        for (Order order : orderList) {
            //根据order的oid进行查询
            //获得每一个订单的oid
            String oid = order.getOid();
            //查询该订单的所有订单项 ---mapList封装的是多个订单项和该订单项中的商品的信息。
            List<Map<String, Object>> mapList = service.findAllItemsByOid(oid);
            //将mapList转换成List<OrderItem> orderItems
            for(Map<String, Object> map:mapList){
                try {
                    //1  从map中取出count subtotal 封装到OrderItem中
                    //item.setCount(Integer.parseInt(map.get("count").toString()));
                    OrderItem item = new OrderItem();
                    BeanUtils.populate(item, map);

                    // 2 从map中取出pimage pname shop_price 封装到product中
                    Product product = new Product();
                    BeanUtils.populate(product, map);

                    // 3 将product 封装到OrderItem中
                    item.setProduct(product);

                    // 4  将OrderItem封装到List<OrderItem> orderItems中
                    order.getOrderItems().add(item);

                } catch (IllegalAccessException | InvocationTargetException e) {

                    e.printStackTrace();
                }

            }

        }
    }

    //到这里orderList封装完整了
    request.setAttribute("orderList", orderList);

    //转发
    request.getRequestDispatcher("/order_list.jsp").forward(request, response);
}

3 ProductService代码

//获取登录用户的订单集合
public List<Order> findOrder(User user) throws SQLException {
    ProductDao dao = new ProductDao();
    return dao.findOrder(user);
}

//查询指定的订单的所有订单项
public List<Map<String, Object>> findAllItemsByOid(String oid) {
    ProductDao dao = new ProductDao();
    List<Map<String, Object>> mapList =null;
    try {
        mapList = dao.findAllItemsByOid(oid);
    } catch (SQLException e) {

        e.printStackTrace();
    }
    return mapList;
}

4 ProductDao代码

//获取登录用户的所有订单列表
public List<Order> findOrder(User user) throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "select * from orders where uid=?";
    List<Order> orderList = qr.query(sql, new BeanListHandler<Order>(Order.class), user.getUid());
    return orderList;
}

// 查询指定的订单的所有订单项
public List<Map<String, Object>> findAllItemsByOid(String oid) throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql = "select i.count,i.subtotal,p.pname,p.pimage,p.shop_price"
            + " from orderitem i,product p "
            + "where i.pid=p.pid and oid=?";
    List<Map<String, Object>> mapList = qr.query(sql, new MapListHandler(), oid);
    return mapList;
}

5 order_list.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>

<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>会员登录</title>
<link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
<script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
<script src="js/bootstrap.min.js" type="text/javascript"></script>
<!-- 引入自定义css文件 style.css -->
<link rel="stylesheet" href="css/style.css" type="text/css" />

<style>
body {
    margin-top: 20px;
    margin: 0 auto;
}

.carousel-inner .item img {
    width: 100%;
    height: 300px;
}
</style>
</head>

<body>

    <!-- 引入header.jsp -->
    <jsp:include page="/header.jsp"></jsp:include>

    <div class="container">
        <div class="row">
            <div style="margin: 0 auto; margin-top: 10px; width: 950px;">
                <strong>我的订单</strong>
                <table class="table table-bordered">
                   <c:forEach items="${requestScope.orderList }" var="order">
                        <tbody>
                            <tr class="success">
                                <th colspan="5">订单编号:${order.oid} &nbsp;&nbsp;&nbsp;&nbsp;${order.state==0?"未付款":"已付款" }</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%"><input type="hidden" name="id"
                                        value="22"> <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>
                    </c:forEach>
                </table>
            </div>
        </div>
        <div style="text-align: center;">
            <ul class="pagination">
                <li class="disabled"><a href="#" aria-label="Previous"><span
                        aria-hidden="true">&laquo;</span></a></li>
                <li class="active"><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
                <li><a href="#">4</a></li>
                <li><a href="#">5</a></li>
                <li><a href="#">6</a></li>
                <li><a href="#">7</a></li>
                <li><a href="#">8</a></li>
                <li><a href="#">9</a></li>
                <li><a href="#" aria-label="Next"> <span aria-hidden="true">&raquo;</span>
                </a></li>
            </ul>
        </div>
    </div>

    <!-- 引入footer.jsp -->
    <jsp:include page="/footer.jsp"></jsp:include>

</body>

</html>

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

时间: 2024-10-18 00:51:29

案例31-我的订单的相关文章

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

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

案例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

网上书店订单功能的实现

[.NET领域驱动设计实战系列]专题六:DDD实践案例:网上书店订单功能的实现 一.引言 上一专题已经为网上书店实现了购物车的功能了,在这一专题中,将继续对网上书店案例进行完善,本专题将对网上书店订单功能的实现进行介绍,现在废话不多说了,让我们来一起看看订单功能是如何实现的吧. 二.订单功能的实现思路 在网上购过物的朋友,对于订单功能的流程自然不陌生,这里我还是先来梳理下下订单的一个流程: 用户点击我的购物车,可以勾选对应的商品进行结算 在结算页面可以提交订单来创建一个订单 创建订单成功之后就是

订单处理减库存的设计

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

“树懒”用超表也能快如闪电|微商案例

超级表格 典型案例  使用场景:订单收集,仓库发货 典型用户:微商-现代东方贸易 协作假设跟不上.微商必定变"树懒" 随着消费群体日益庞大.国人需求日新月异. 微商開始基于微信"连接一切"的能力,实现商品的社交分享.熟人推荐以及自媒体展示发展地如火如荼. 靠互联网走在前端的微商团队,必须在协作方面依旧率先才干步步为营. 否则,很多困难都会让它变"慢". 1 採集信息效率低 [现代东方贸易]的客服团队共同拥有3个人. 在使用超级表格之前,每一个客服

PHP(Mysql/Redis)消息队列的介绍及应用场景案例--转载

郑重提示:本博客转载自好友博客,个人觉得写的很牛逼所以未经同意强行转载,原博客连接 http://www.cnblogs.com/wt645631686/p/8243438.html 欢迎访问 在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我们就要引用消息队列来实现这类的需求,这时候就需要一个中间的系统进行分流和解压.消息队列就是一个中间件,需要

熬了多少个夜晚,大家期待的《网络工程师思科华为华三实战案例红宝书》即网工必备技术命令大全版本1完书

熬了多少个夜晚,最近也没空更新博客.军哥编写的大家期待的<网络工程师思科华为华三实战案例红宝书>即网工必备技术命令大全版本1完书,一本融合了思科华为华三的实战型辅导书(辅助乾颐堂QCNA课程的).不多说上图 目录关于作者 2本书读者和笔者心语 3本书内容和结构 4第1部分 网络实施基础 15案例0 模拟器的部署和连接管理 16学习利器模拟器简书 160.1 华为模拟器Ensp部署 160.2 思科模拟器EVE部署 310.3 部署SecureCrt管理网络设备 400.3.1 部署终端管理软件

MySQL数据库(7)_用户操作与权限管理、视图、存储过程、触发器、基本函数

用户操作与权限管理 MySQL用户操作 创建用户 方法一: CREATE USER语句创建 CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码"; 方法二: INSERT语句创建 INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject) VALUES('用户名','IP地址',password('密码'),'',

数据结构学习之一绪论和基本概念

结束了常用设计模式的学习,有空的话我会把剩下的几个模式发布上来,下一步计划就是关于数据结构方面和源码的学习,每天给自己安排了计划,希望自己能如期执行 这一篇文章全部是关于我对数据结构理论的整理和个人见解,参考的是资料是<数据结构(Java语言描述)>,清华大学出版社 的教科书,我不是科班毕业,这本书是我今年端午节在南师大附近淘到的,感觉还不错 言归正传,上正式内容 package com.hola.data.structure; /** * * @author Dougest 2017年7月3

mysql轻快入门

生活中的常识: 记账. 账:就是数据/信息, 记账-->就是储存数据/信息 无论记在哪儿: 记录的都是信息, 变化的只是信息的载体. 随着现代社会数据的急剧增多,我们用更高效的记录信息的方式. 一台服务器下有多个库,一个库下有1到多张表, 表有多行多列的数据. 作为开发程序员, 和表的操作相对多. 数据库服务器是不是mysql呢? 答: 对于数据库存储数据来说,国际上有sql标准. 如:列类型,sql语法等是有ISO标准的. 很多软件开发商,遵守sql标准,来开发一套软件,用来储存和管理数据.