一、流程分析

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     }

转载于:https://www.cnblogs.com/shamgod/p/5171195.html

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

  1. 网上图书商城项目学习笔记-034订单管理

    一.流程分析 二.代码 1.view层 (1)list.jsp 1 <body> 2 <p class="pLink"> 3 <a href=&quo ...

  2. 网上图书商城项目学习笔记-035工具类之JdbcUtils及TxQueryRunner及C3P0配置

    事务就是保证多个操作在同一个connection,TxQueryRunner通过JdbcUtils获取连接,而JdbcUtils通过ThreadLocal<Connection>确保了不同 ...

  3. 网上图书商城项目学习笔记-008修改密码功能

    一.修改密码流程分析 二.代码 1.view层 1)pwd.jsp 1 <%@ page language="java" import="java.util.*&q ...

  4. 网上图书商城项目学习笔记-028编辑一级分类

    一.流程分析 二.代码 1.view层 (1)list.jsp 1 <c:forEach items="${parents }" var="parent" ...

  5. spring boot 前后端分离项目(商城项目)学习笔记

    spring boot 前后端分离项目(商城项目)学习笔记 目录 spring boot 前后端分离项目(商城项目)学习笔记 后端配置 springboot项目 pom.xml文件 maven 配置文 ...

  6. vue3小兔鲜商城项目学习笔记+资料分享01

    最近正在学习vue3小兔鲜,需要相关学习资料的可以点链接 https://docs.qq.com/doc/DUmhUVERtUHpLaG1a 下面试学习笔记 项目起步 项目预览地址 小兔鲜儿商城:ht ...

  7. vue3小兔鲜商城项目学习笔记+资料分享07

    建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 下面是学习笔记 填写订单模块 填写订单实现 本节目标: 实现填写订单跳转 填写订单页组件和路由 1)准备填写订单页 ...

  8. vue3小兔鲜商城项目学习笔记+资料分享06

    建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 最近正在学习vue3小兔鲜 下面是学习笔记 购物车模块 购物车功能分析 [外链图片转存失败,源站可能有防盗链机制, ...

  9. vue3小兔鲜商城项目学习笔记+资料分享08

    建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 最近正在学习vue3小兔鲜 下面是学习笔记 支付模块 路由和组件 任务目标: 完成支付页路由和组件 [外链图片转存 ...

  10. vue3小兔鲜商城项目学习笔记+资料分享09

    建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 最近正在学习vue3小兔鲜 下面是学习笔记 会员中心模块 个人中心 个人中心-路由配置 本节目标:个人中心二级路由 ...

最新文章

  1. iOS - Regex 正则表达式
  2. 160个Crackme030之一元一次方程
  3. C#刷剑指Offer | 在O(1)时间删除链表节点
  4. Android之AIDL使用详解
  5. java设计模式 单例_java设计模式--单例模式
  6. 如何让地面不起灰_地面不平能铺地板吗?木地板不平怎么修复
  7. AWT_Swing_图标按钮(Java)
  8. Python+selenium+eclipse执行web自动化(四)控件处理
  9. echarts初次使用,自定义china-map省份默认颜色
  10. 深度学习入门之猫vs狗(超简单)
  11. 会声会影如何使用覆叠滤镜
  12. cis系统服务器,基于客户端/服务器模式头影测量信息系统(CIS)影像测量模块的开发...
  13. pentaho8.1安装
  14. Java应用无响应、内存飙升、CPU飙升排查
  15. Markdown 数学公式
  16. ADS3 Inverted File Index
  17. SAP message TK 248 solved
  18. Flink大数据实时计算系列-案例初体验:HotPages
  19. 支持向量机(SVM)、支持向量回归(SVR)
  20. Linux中samba配置和windows映射Linux驱动盘

热门文章

  1. 2 PC 有它,你就够了!
  2. 无法使用内置管理员账户打开应用
  3. 用各种编程语言写七夕情书
  4. openvswitch vxlan 源码分析
  5. 职等你来 | UE/UX交互设计师(15k);时钟AE工程师;数字IC验证工程师(薪资开放)
  6. VA_LIST可变参数列表的使用方法与原理
  7. excel数据可视化
  8. 张飞实战电子硬件工程师90天学习资料及笔记汇总
  9. Unity(数据库SQLite)
  10. 六级考研单词之路-二十二