网上图书商城项目学习笔记-018生成订单
2016-01-30 16:04
169 查看
一、流程分析
1.订单模块介绍
2.生成订单流程
二、代码
1.view层
(1)showitem.jsp
(2)ordersucc.js
2.servlet层
(1)OrderServlet.java
3.service层
(1)OrderService.java
4.dao层
(1)OrderDao.java
1.订单模块介绍
2.生成订单流程
二、代码
1.view层
(1)showitem.jsp
<form id="form1" action="<c:url value='/OrderServlet'/>" method="post"> <input type="hidden" name="cartItemIds" value="${cartItemIds }"/> <input type="hidden" name="method" value="createOrder"/> <table width="95%" align="center" cellpadding="0" cellspacing="0"> <tr bgcolor="#efeae5"> <td width="400px" colspan="5"><span style="font-weight: 900;">生成订单</span></td> </tr> <tr align="center"> <td width="10%"> </td> <td width="50%">图书名称</td> <td>单价</td> <td>数量</td> <td>小计</td> </tr> <c:forEach items="${items }" var="item"> <tr align="center"> <td align="right"> <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> </td> <td align="left"> <a href="<c:url value='/jsps/book/desc.jsp'/>"><span>${item.book.bname }</span></a> </td> <td>¥${item.book.currPrice }</td> <td>${item.quantity }</td> <td> <span class="price_n">¥<span class="subtotal">${item.subtotal }</span></span> </td> </tr> </c:forEach> <tr> <td colspan="6" align="right"> <span>总计:</span><span class="price_t">¥<span id="total">${total }</span></span> </td> </tr> <tr> <td colspan="5" bgcolor="#efeae5"><span style="font-weight: 900">收货地址</span></td> </tr> <tr> <td colspan="6"> <input id="addr" type="text" name="address" value="北京市 昌平区 西三旗 金燕龙办公楼1层 传智播客 张三爷"/> </td> </tr> <tr> <td style="border-top-width: 4px;" colspan="5" align="right"> <a id="linkSubmit" href="javascript:$('#form1').submit();">提交订单</a> </td> </tr> </table> </form>
(2)ordersucc.js
<div class="div2"> <img src="<c:url value='/images/duihao.jpg'/>" class="img"/> <dl> <dt>订单编号</dt> <dd>${order.oid }</dd> <dt>合计金额</dt> <dd><span class="price_t">¥${order.total }</span></dd> <dt>收货地址</dt> <dd>${order.address }</dd> </dl> <span>ITCAST书城感谢您的支持,祝您购物愉快!</span> <a href="<c:url value='/jsps/order/pay.jsp'/>" id="linkPay">支付</a> </div>
2.servlet层
(1)OrderServlet.java
/** * 生成订单 * @param req * @param resp * @return * @throws ServletException * @throws IOException */ public String createOrder(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. 获取所有购物车条目的id,查询之 String ids = req.getParameter("cartItemIds"); List<CartItem> cartItems = itemService.loadCartItems(ids); if(cartItems.size() == 0) { req.setAttribute("code", "error"); req.setAttribute("msg", "您没有选择要购买的图书,不能下单!"); return "f:/jsps/msg.jsp"; } // 2. 创建Order Order order = new Order(); order.setOid(CommonUtils.uuid()); order.setOrderTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); order.setStatus(1); order.setAddress(req.getParameter("address")); User user = (User) req.getSession().getAttribute("sessionUser"); order.setUser(user); //设置total BigDecimal total = new BigDecimal("0"); for(CartItem item : cartItems) { total = total.add(item.getSubtotal()); } order.setTotal(total); //设置订单对应的orderItems List<OrderItem> orderItems = toOrderItemList(cartItems, order); order.setOrderItems(orderItems); service.createOrder(order); itemService.batchDelete(ids); // 删除购物车条目 req.setAttribute("order", order); return "/jsps/order/ordersucc.jsp"; } private List<OrderItem> toOrderItemList(List<CartItem> cartItems, Order order) { if(cartItems == null || cartItems.size() == 0) return null; List<OrderItem> orderItems = new ArrayList<OrderItem>(); OrderItem orderItem = null; for(CartItem cartItem : cartItems){ orderItem = toOrderItem(cartItem); orderItem.setOrder(order); orderItems.add(orderItem); } return orderItems; } private OrderItem toOrderItem(CartItem cartItem) { OrderItem orderItem = new OrderItem(); orderItem.setOrderItemId(CommonUtils.uuid()); orderItem.setQuantity(cartItem.getQuantity()); orderItem.setSubtotal(cartItem.getSubtotal()); orderItem.setBook(cartItem.getBook()); return orderItem; }
3.service层
(1)OrderService.java
/** * 生成订单 * @param order */ public void createOrder(Order order) { try { JdbcUtils.beginTransaction(); dao.add(order); JdbcUtils.commitTransaction(); } catch (SQLException e) { try { JdbcUtils.rollbackTransaction(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } }
4.dao层
(1)OrderDao.java
/** * 生成订单 * @param order * @throws SQLException */ public void add(Order order) throws SQLException { /* * 1. 插入订单 */ String sql = "insert into t_order values (?,?,?,?,?,?)"; Object [] params = {order.getOid(), order.getOrderTime(), order.getTotal(), order.getStatus(), order.getAddress(), order.getUser().getUid()}; qr.update(sql, params); /* * 2. 循环遍历订单的所有条目,让每个条目生成一个Object[] * 多个条目就对应Object[][] * 执行批处理,完成插入订单条目 */ sql = "insert into t_orderItem values (?,?,?,?,?,?,?,?)"; List<OrderItem> items = order.getOrderItems(); int len = items.size(); Object [][] params2 = new Object[len][]; OrderItem item = null; Book book = null; for(int i=0 ; i<len ; i++) { item = items.get(i); book = item.getBook(); params2[i] = new Object[]{item.getOrderItemId(), item.getQuantity(), item.getSubtotal(),book.getBid(), book.getBname(), book.getCurrPrice(), book.getImage_b(), item.getOrder().getOid()}; } qr.batch(sql, params2); }
相关文章推荐
- java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
- Wunder Fund Round 2016 (Div. 1 + Div. 2 combined)
- 使用栈判断回文
- ubuntu14.04.2安装jdk1.8.0_20
- 360浏览器兼容性问题
- Linux - 正则表达式
- CodeForces 618 D Hamiltonian Spanning Tree(树形DP)
- Linux启动管理
- 解题报告:POJ 1753 Flip Game 简单深搜dfs
- 自定义肩章badge
- 快速排序
- CentOS7编译安装mysql-5.6.28和编译参数
- C# split字符串 依据1个或多个空格
- 使用git和github进行协同开发流程
- 时间分割线:2016年1月的文章都是以前chinaunix的博客文章
- Java Swing界面编程(31)---菜单条:JMenu
- 这些年正Android - 大学
- PageRank算法
- 时间分割线:2016年1月的文章都是从以前chinaunix的博客文章
- JDK,JRE,JVM区别与联系