网上图书商城项目学习笔记-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-width: 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     }
时间: 2024-07-31 15:52:11

网上图书商城项目学习笔记-018生成订单的相关文章

网上图书商城项目学习笔记-003系统功能模块分析

1. itcastgoods文件夹介绍2. 项目导入演示 * 导入数据库 * 导入项目,发布,运行3. 项目原型导入演示 * 导入项目原型,发布,运行4. 小工具介绍5. jQuery介绍 6. 项目前台功能介绍 * User模块 > 注册 > 激活 > 登录 > 修改密码 > 退出 * Category模块 > 显示所有分类 * Book模块 > 按分类查询(分页) > 按图名查询(模糊)(分页) > 按作者查询(分页) > 按出版社查询(分页

网上图书商城项目学习笔记-017结算,跳转结算页面

一.流程分析 二.代码 1.view层 (1)list.jsp <tr> <td colspan="7" align="right"> <a href="javascript:jiesuan();" id="jiesuan" class="jiesuan"></a> </td> </tr> </table> <form

网上图书商城项目学习笔记-031图书管理模块介绍及添加图书

一.流程分析 1.图书管理模块介绍 2. 3. 4.添加图书第一步 5.添加图书第二步 二.代码 1.view层 (1)body.jsp 1 <body> 2 <h1 align="center">图书管理</h1> 3 <p align="center"> 4 <a href="<c:url value='/admin/AdminBookServlet?method=addPre'/>&q

网上图书商城项目学习笔记-012BOOK模块查询2

一.分析 > 按图名查询(模糊)(分页)> 按作者查询(分页)> 按出版社查询(分页)> 按id查询> 多条件组合查询(分页) 二.代码 1.view层 (1)gj.jsp等 1 <form action="<c:url value='/BookServlet'/>" method="get"> 2 <input type="hidden" name="method"

网上图书商城项目学习笔记-010显示所有分类

一.流程分析 二.代码 1.view层 1)main.jsp 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 4 5 <!DOCTYPE HTML

网上图书商城项目学习笔记-030删除二级分类

一.流程分析 二.代码 1.view层 和一相同 2.servlet层 (1)AdminCategoryServlet.java 1 /** 2 * 删除二级分类 3 * @param req 4 * @param resp 5 * @return 6 * @throws ServletException 7 * @throws IOException 8 */ 9 public String deleteChild(HttpServletRequest req, HttpServletResp

网上图书商城项目学习笔记-004注册页面前后台的验证

一.功能分析 二.代码实现 1.前端验证 1 $(function() { 2 /* 3 * 1. 得到所有的错误信息,循环遍历之.调用一个方法来确定是否显示错误信息! 4 */ 5 $(".labelError").each(function() { 6 showError($(this));//遍历每个元素,使用每个元素来调用showError方法 7 }); 8 9 /* 10 * 2. 切换注册按钮的图片 11 */ 12 $("#submitBtn").h

网上图书商城项目学习笔记-009退出功能

一.退出功能流程分析 二.代码 1.view层 1)top.jsp 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3 4 5 <!DOCTYPE HT

网上图书商城项目学习笔记-013 添加购物车及我的购物车

一.流程分析 1.购物车模块 2.我的购物车分析 3.添加条目到购物车 二.代码 1.view层 (1)top.jsp 1 <a href="<c:url value='/CartItemServlet?method=myCart'/>" target="body">我的购物车</a> (2)desc.jsp 1 <form id="form1" action="<c:url value=