案例29-购物车提交订单
1 案例分析
1 订单分析1
2 订单分析2
3 订单的业务操作
2 代码实现
1 cart.jsp代码修改
<a href="${pageContext.request.contextPath }/product?method=submitOrder"><input type="button" width="100" value="提交订单" name="submit" border="0" style="background: url('./images/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0);height:35px;width:100px;color:white;"></a>
2 ProductServlet代码
// 8 提交订单 submitOrder public void submitOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession();//首先需要判断用户是否登录User user = (User) session.getAttribute("user");if(user==null){//如果用户没有登录的话,就重定向到登录页面response.sendRedirect(request.getContextPath()+"/login.jsp");//不在执行继续执行之后的代码return;}//目的:封装好一个Order对象 传递给service层Order order = new Order();// 1 private String oid; //该订单的编号String oid = CommonsUtils.getUUID();order.setOid(oid);// 2 private Date ordertime ; //下单时间order.setOrdertime(new Date());// 3 private double total; //该订单的总金额//首先应该获得session中的购物车Cart对象Cart cart = (Cart) session.getAttribute("cart");double total = 0.0;if(cart!=null){total = cart.getTotal();}order.setTotal(total);// 4 private int state ; //该订单的支付状态 1代表已付款 0代表未付款order.setState(0);// 5 private String address; //收获地址order.setAddress(null);// 6 private String name; //姓名order.setName(null);// 7 private String telephone; //电话order.setTelephone(null);// 8 private User user;//该订单属于哪个用户 order.setUser(user);// 9 该订单中有多少订单项//从购物车中获取所有的cartItemMap<String, CartItem> cartItems = cart.getCartItems();//遍历所有的购物车项,加入到订单项orderItem中for(Map.Entry<String, CartItem> entry:cartItems.entrySet()){//取出里面的每一个购物项CartItem cartItem = entry.getValue();// 创建新的订单项OrderItem orderItem = new OrderItem();// 1)private String itemid; //订单项 orderItem.setItemid(CommonsUtils.getUUID());// 2)private int count; //订单项内商品的购买数量 orderItem.setCount(cartItem.getBuyNum());// 3)private double subtotal; //订单项小计 orderItem.setSubtotal(cartItem.getSubtotal());// 4)private Product product; //订单项内的商品 orderItem.setProduct(cartItem.getProduct());// 5)private Order order; //该订单项属于哪个订单 orderItem.setOrder(order);//将该订单项添加到订单的订单项集合中 order.getOrderItems().add(orderItem);}//order对象封装完毕//传递数据到service层ProductService service = new ProductService();service.submitOrder(order);session.setAttribute("order", order);//页面跳转response.sendRedirect(request.getContextPath()+"/order_info.jsp");}
3 ProductService代码
//订单提交 将订单的数据和订单项的数据存储到数据库中 public void submitOrder(Order order) {ProductDao dao = new ProductDao();try {// 1 、开启事务 C3P0Utils.startTransaction();//2、调用dao存储order表数据的方法boolean isaddOrdersSuccess = false;int rowAddOrders = dao.addOrders(order);if(rowAddOrders>0){isaddOrdersSuccess = true;}//3、调用dao存储orderItem表数据的方法boolean isaddOrderItemSuccess = false;int rowAddOrderItem = dao.addOrderItems(order);if(rowAddOrderItem>0){isaddOrderItemSuccess = true;}//只要有一项操作不成功就回滚。if(!isaddOrdersSuccess&&isaddOrderItemSuccess){C3P0Utils.rollback();}} catch (SQLException e) {try {C3P0Utils.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {//无论是否成功都提交并且释放资源try {C3P0Utils.commitAndRelease();} catch (SQLException e) {e.printStackTrace();}} }
4 ProductDao代码
// 向orders表中插入数据 public int addOrders(Order order) throws SQLException {QueryRunner qr = new QueryRunner();String sql ="insert into orders values (?,?,?,?,?,?,?,?)";Connection conn = C3P0Utils.getConnection();int rowAddOrders = qr.update(conn,sql, order.getOid(),order.getOrdertime(),order.getTotal(),order.getState(),order.getAddress(),order.getName(),order.getTelephone(),order.getUser().getUid());return rowAddOrders; }// 向orderitem表插入数据 public int addOrderItems(Order order) throws SQLException {QueryRunner qr = new QueryRunner();String sql ="insert into orderItem values (?,?,?,?,?)";Connection conn = C3P0Utils.getConnection();List<OrderItem> orderItems = order.getOrderItems();int rowAddOrderItem = 0;for (OrderItem item : orderItems) {rowAddOrderItem += qr.update(conn, sql,item.getItemid(),item.getCount(),item.getSubtotal(),item.getProduct().getPid(),item.getOrder().getOid());}return rowAddOrderItem; }
5 order_info.jsp修改代码
<table class="table table-bordered"><tbody><tr class="warning"><th colspan="5">订单编号:${order.oid }</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%"><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> </table>
3 domain部分
1 orderItem
package www.test.domain;public class OrderItem {/*`itemid` varchar(32) NOT NULL,`count` int(11) DEFAULT NULL,`subtotal` double DEFAULT NULL,`pid` varchar(32) DEFAULT NULL,`oid` varchar(32) DEFAULT NULL*/private String itemid;//订单项的idprivate int count;//订单项内商品的购买数量private double subtotal;//订单项小计private Product product;//订单项内部的商品private Order order;//该订单项属于哪个订单public String getItemid() {return itemid;}public void setItemid(String itemid) {this.itemid = itemid;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public double getSubtotal() {return subtotal;}public void setSubtotal(double subtotal) {this.subtotal = subtotal;}public Product getProduct() {return product;}public void setProduct(Product product) {this.product = product;}public Order getOrder() {return order;}public void setOrder(Order order) {this.order = order;}}
2 order
package www.test.domain;import java.util.ArrayList; import java.util.Date; import java.util.List;public class Order {/*`oid` varchar(32) NOT NULL,`ordertime` datetime DEFAULT NULL,`total` double DEFAULT NULL,`state` int(11) DEFAULT NULL,`address` varchar(30) DEFAULT NULL,`name` varchar(20) DEFAULT NULL,`telephone` varchar(20) DEFAULT NULL,`uid` varchar(32) DEFAULT NULL*/private String oid;//该订单的订单号private Date ordertime;//下单时间private double total;//该订单的总金额private int state;//订单支付状态 1代表已付款 0代表未付款private String address;//收货地址private String name;//收货人private String telephone;//收货人电话private User user;//该订单属于哪个用户//该订单中有多少订单项List<OrderItem> orderItems = new ArrayList<OrderItem>();public String getOid() {return oid;}public void setOid(String oid) {this.oid = oid;}public Date getOrdertime() {return ordertime;}public void setOrdertime(Date ordertime) {this.ordertime = ordertime;}public double getTotal() {return total;}public void setTotal(double total) {this.total = total;}public int getState() {return state;}public void setState(int state) {this.state = state;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public List<OrderItem> getOrderItems() {return orderItems;}public void setOrderItems(List<OrderItem> orderItems) {this.orderItems = orderItems;}}
转载于:https://www.cnblogs.com/jepson6669/p/8448025.html
案例29-购物车提交订单相关推荐
- 淘宝购物车(提交订单)测试用例
功能测试: 1.测试订单输入的类型 2.测试金额数量:可创建等价类划分 3.测试库存数量变更 4.测试订单是否生成 5.测试提交订单按键是否正常响应 6.点击下单后是否会显示订单信息进行再次核对 7. ...
- 淘宝刷新购物车 5秒左右提交订单
import os from selenium import webdriver import datetime import time#需要下载deckodreiver firefox = os.p ...
- Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)
订单详情功能(提交订单支付界面) 原理分析 步骤实现: 1.准备工作:order_list.jsp当中修改链接 提交当前订单编号 <a href="${pageContext.requ ...
- jQuery 属性操作——案例:购物车案例模块
案例:购物车案例模块-全选 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset= ...
- 订单系统——提交订单
1. 提交订单 1.1. 功能分析 1.在订单确认页面点击"提交订单"按钮生成订单. 2.请求的url:/order/create 3.参数:提交的是表单的数据.保存的数据:订单 ...
- 谷粒商城项目篇13_分布式高级篇_订单业务模块(提交订单幂等性、分布式事务、延时MQ实现定时任务)
目录 一.订单业务模块 订单流程 购物车跳转订单确认页 登录拦截器 封装vo Feign远程调用丢失请求头信息 Feign远程异步调用丢失上下文信息 提交订单接口幂等性 令牌token机制 各种锁机制 ...
- JAVA项目实战开发电商项目案例(十)订单与支付模块
文章目录 1项目架构 2项目采用技术 3订单与支付模块功能演示 4如何开发支付宝的支付模块以及订单模块 4.1首先需要编写前端页面以及JS文件 4.2其次需要编写JAVA后台接口 4.3支付模块分析 ...
- 美多商城之订单(提交订单2)
2.4 使用乐观锁并发下单 重要提示: 在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常. 2.4.1. 并发下单问题演示和解 ...
- 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)转...
对于Microsoft .net PetShop程序中的购物车和订单处理模块,文中主要分析两种技术的应用: 1. Profile技术在PetShop程序中用于三处: 1) 购物车ShoppingCar ...
最新文章
- 中国光大集团去年营收1617亿元 同比增长19%
- 中国移动选择博科NFV软件设备来支持“互联网+”使命
- C#怎么通过一个按钮Button,实现点击这个按钮可以打开一个文件或者文件夹?
- [蓝桥杯][算法提高VIP]扫雷-枚举
- python渐变色代码_如何在Python中创建颜色渐变?
- Orcale用户管理
- Java多线程编程:变量共享分析(Thread)
- C语言编程基础 打印图形
- pythondd_python学习笔记(五)之字典2-阿里云开发者社区
- java ssm框架做增删改查,使用SSM框架组合实现增删改查的功能
- Fixjs——事件回调的this
- 面试python说会为什么_Python面试必须要看的15个问题
- 正则表达式:模式修饰符(自用)
- 阿里笔试算法题2021
- Qt+OpenCV配置教程(图解亲测)
- 小白操作Win10扩充C盘(把D盘内存分给C盘)亲测多次有效
- snmp协议与snmp++
- 71、Es(es和mysql的概念对比)
- 长白山项目开发小组,day1
- 【离散数学】集合与关系
热门文章
- 深入研究微服务架构——第一部分
- SQL 使用总结六(改善数据库性能)
- oracle是否启用dataguard,启动和关闭data guard的步骤
- android 输出流对象,Android-IO流之对象操作流ObjectInputStream/ObjectOutputStream
- php 浮点数 模运算,同余与模运算
- anaconda没有vscode_Ubuntu18.04安装Anaconda3和VSCode指南
- android edittext的监听,android editText 监听事件
- springboot中mongodb自定义类型转换器
- python mysql数据库的高级应用_Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy...
- do sb suggest to_suggest sb to do还是doing