• 网上图书商城项目学习笔记-018生成订单


    一、流程分析

    1.订单模块介绍

    2.生成订单流程

    二、代码

    1.view层

    (1)showitem.jsp

     1 <form id="form1" action="<c:url value='/OrderServlet'/>" method="post">
     2     <input type="hidden" name="cartItemIds" value="${cartItemIds }"/>
     3     <input type="hidden" name="method" value="createOrder"/>
     4 <table width="95%" align="center" cellpadding="0" cellspacing="0">
     5     <tr bgcolor="#efeae5">
     6         <td width="400px" colspan="5"><span style="font-weight: 900;">生成订单</span></td>
     7     </tr>
     8     <tr align="center">
     9         <td width="10%">&nbsp;</td>
    10         <td width="50%">图书名称</td>
    11         <td>单价</td>
    12         <td>数量</td>
    13         <td>小计</td>
    14     </tr>
    15 
    16 
    17 <c:forEach items="${items }" var="item">
    18     <tr align="center">
    19         <td align="right">
    20             <a class="linkImage" href="<c:url value='/jsps/book/desc.jsp'/>"><img border="0" width="54" align="top" src="<c:url value='${item.book.image_b }'/>"/></a>
    21         </td>
    22         <td align="left">
    23             <a href="<c:url value='/jsps/book/desc.jsp'/>"><span>${item.book.bname }</span></a>
    24         </td>
    25         <td>&yen;${item.book.currPrice }</td>
    26         <td>${item.quantity }</td>
    27         <td>
    28             <span class="price_n">&yen;<span class="subtotal">${item.subtotal }</span></span>
    29         </td>
    30     </tr>
    31 </c:forEach>
    32     
    33     <tr>
    34         <td colspan="6" align="right">
    35             <span>总计:</span><span class="price_t">&yen;<span id="total">${total }</span></span>
    36         </td>
    37     </tr>
    38     <tr>
    39         <td colspan="5" bgcolor="#efeae5"><span style="font-weight: 900">收货地址</span></td>
    40     </tr>
    41     <tr>
    42         <td colspan="6">
    43             <input id="addr" type="text" name="address" value="北京市 昌平区 西三旗 金燕龙办公楼1层 传智播客 张三爷"/>
    44         </td>
    45     </tr>
    46     <tr>
    47         <td style="border-top- 4px;" colspan="5" align="right">
    48             <a id="linkSubmit" href="javascript:$('#form1').submit();">提交订单</a>
    49         </td>
    50     </tr>
    51 </table>
    52 </form>

    (2)ordersucc.js

     1 <div class="div2">
     2     <img src="<c:url value='/images/duihao.jpg'/>" class="img"/>
     3     <dl>
     4         <dt>订单编号</dt>
     5         <dd>${order.oid }</dd>
     6         <dt>合计金额</dt>
     7         <dd><span class="price_t">&yen;${order.total }</span></dd>
     8         <dt>收货地址</dt>
     9         <dd>${order.address }</dd>
    10     </dl>
    11     <span>ITCAST书城感谢您的支持,祝您购物愉快!</span>
    12     <a href="<c:url value='/jsps/order/pay.jsp'/>" id="linkPay">支付</a>
    13 </div>

     

    2.servlet层

    (1)OrderServlet.java 

     1     /**
     2      * 生成订单
     3      * @param req
     4      * @param resp
     5      * @return
     6      * @throws ServletException
     7      * @throws IOException
     8      */
     9     public String createOrder(HttpServletRequest req, HttpServletResponse resp)
    10             throws ServletException, IOException {
    11         // 1. 获取所有购物车条目的id,查询之
    12         String ids = req.getParameter("cartItemIds");
    13         List<CartItem> cartItems = itemService.loadCartItems(ids);
    14         if(cartItems.size() == 0) {
    15             req.setAttribute("code", "error");
    16             req.setAttribute("msg", "您没有选择要购买的图书,不能下单!");
    17             return "f:/jsps/msg.jsp";
    18         }
    19         
    20         // 2. 创建Order
    21         Order order = new Order();
    22         order.setOid(CommonUtils.uuid());
    23         order.setOrderTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    24         order.setStatus(1);
    25         order.setAddress(req.getParameter("address"));
    26         User user = (User) req.getSession().getAttribute("sessionUser");
    27         order.setUser(user);
    28         
    29         //设置total
    30         BigDecimal total = new BigDecimal("0");
    31         for(CartItem item : cartItems) {
    32             total = total.add(item.getSubtotal());
    33         }
    34         order.setTotal(total);
    35         
    36         //设置订单对应的orderItems
    37         List<OrderItem> orderItems = toOrderItemList(cartItems, order);
    38         order.setOrderItems(orderItems);
    39         
    40         service.createOrder(order);
    41         itemService.batchDelete(ids);    // 删除购物车条目
    42         
    43         req.setAttribute("order", order);
    44         return "/jsps/order/ordersucc.jsp";
    45     }
    46 
    47     private List<OrderItem> toOrderItemList(List<CartItem> cartItems, Order order) {
    48         if(cartItems == null || cartItems.size() == 0) return null;
    49         List<OrderItem> orderItems = new ArrayList<OrderItem>();
    50         OrderItem orderItem = null;
    51         for(CartItem cartItem : cartItems){
    52             orderItem = toOrderItem(cartItem);
    53             orderItem.setOrder(order);
    54             orderItems.add(orderItem);
    55         }
    56         return orderItems;
    57     }
    58 
    59     private OrderItem toOrderItem(CartItem cartItem) {
    60         OrderItem orderItem = new OrderItem();
    61         orderItem.setOrderItemId(CommonUtils.uuid());
    62         orderItem.setQuantity(cartItem.getQuantity());
    63         orderItem.setSubtotal(cartItem.getSubtotal());
    64         orderItem.setBook(cartItem.getBook());
    65         return orderItem;
    66     }

    3.service层

    (1)OrderService.java 

     1     /**
     2      * 生成订单
     3      * @param order
     4      */
     5     public void createOrder(Order order) {
     6         try {
     7             JdbcUtils.beginTransaction();
     8             dao.add(order);
     9             JdbcUtils.commitTransaction();
    10         } catch (SQLException e) {
    11             try {
    12                 JdbcUtils.rollbackTransaction();
    13             } catch (SQLException e1) {
    14                 e1.printStackTrace();
    15             }
    16             e.printStackTrace();
    17         }
    18     }

    4.dao层

    (1)OrderDao.java

     1     /**
     2      * 生成订单
     3      * @param order
     4      * @throws SQLException
     5      */
     6     public void add(Order order) throws SQLException {
     7         /*
     8          * 1. 插入订单
     9          */
    10         String sql = "insert into t_order values (?,?,?,?,?,?)";
    11         Object [] params = {order.getOid(), order.getOrderTime(), order.getTotal(), order.getStatus(), order.getAddress(), order.getUser().getUid()};
    12         qr.update(sql, params);
    13         
    14         /*
    15          * 2. 循环遍历订单的所有条目,让每个条目生成一个Object[]
    16          * 多个条目就对应Object[][]
    17          * 执行批处理,完成插入订单条目
    18          */
    19         sql = "insert into t_orderItem values (?,?,?,?,?,?,?,?)";
    20         List<OrderItem> items = order.getOrderItems();
    21         int len = items.size();
    22         Object [][] params2 = new Object[len][];
    23         OrderItem item = null;
    24         Book book = null;
    25         for(int i=0 ; i<len ; i++) {
    26             item = items.get(i);
    27             book = item.getBook();
    28             params2[i] = new Object[]{item.getOrderItemId(), item.getQuantity(), item.getSubtotal(),book.getBid(), 
    29                     book.getBname(), book.getCurrPrice(), book.getImage_b(), item.getOrder().getOid()};
    30         }
    31         qr.batch(sql, params2);
    32     }
  • 相关阅读:
    MaaS系统概述
    流处理认识
    事务补偿
    Hystrix原理与实战
    RPC概念和框架
    git remote: error: hook declined to update
    Unity CombineTexture
    Windows Powershell统计代码行数
    unity面试题二
    unity面试题一
  • 原文地址:https://www.cnblogs.com/shamgod/p/5171195.html
Copyright © 2020-2023  润新知