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. 淘宝购物车(提交订单)测试用例

    功能测试: 1.测试订单输入的类型 2.测试金额数量:可创建等价类划分 3.测试库存数量变更 4.测试订单是否生成 5.测试提交订单按键是否正常响应 6.点击下单后是否会显示订单信息进行再次核对 7. ...

  2. 淘宝刷新购物车 5秒左右提交订单

    import os from selenium import webdriver import datetime import time#需要下载deckodreiver firefox = os.p ...

  3. Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)

    订单详情功能(提交订单支付界面) 原理分析 步骤实现: 1.准备工作:order_list.jsp当中修改链接 提交当前订单编号 <a href="${pageContext.requ ...

  4. jQuery 属性操作——案例:购物车案例模块

    案例:购物车案例模块-全选 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset= ...

  5. 订单系统——提交订单

    1.  提交订单 1.1. 功能分析 1.在订单确认页面点击"提交订单"按钮生成订单. 2.请求的url:/order/create 3.参数:提交的是表单的数据.保存的数据:订单 ...

  6. 谷粒商城项目篇13_分布式高级篇_订单业务模块(提交订单幂等性、分布式事务、延时MQ实现定时任务)

    目录 一.订单业务模块 订单流程 购物车跳转订单确认页 登录拦截器 封装vo Feign远程调用丢失请求头信息 Feign远程异步调用丢失上下文信息 提交订单接口幂等性 令牌token机制 各种锁机制 ...

  7. JAVA项目实战开发电商项目案例(十)订单与支付模块

    文章目录 1项目架构 2项目采用技术 3订单与支付模块功能演示 4如何开发支付宝的支付模块以及订单模块 4.1首先需要编写前端页面以及JS文件 4.2其次需要编写JAVA后台接口 4.3支付模块分析 ...

  8. 美多商城之订单(提交订单2)

    2.4 使用乐观锁并发下单 重要提示: 在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常. 2.4.1. 并发下单问题演示和解 ...

  9. 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)转...

    对于Microsoft .net PetShop程序中的购物车和订单处理模块,文中主要分析两种技术的应用: 1. Profile技术在PetShop程序中用于三处: 1) 购物车ShoppingCar ...

最新文章

  1. 中国光大集团去年营收1617亿元 同比增长19%
  2. 中国移动选择博科NFV软件设备来支持“互联网+”使命
  3. C#怎么通过一个按钮Button,实现点击这个按钮可以打开一个文件或者文件夹?
  4. [蓝桥杯][算法提高VIP]扫雷-枚举
  5. python渐变色代码_如何在Python中创建颜色渐变?
  6. Orcale用户管理
  7. Java多线程编程:变量共享分析(Thread)
  8. C语言编程基础 打印图形
  9. pythondd_python学习笔记(五)之字典2-阿里云开发者社区
  10. java ssm框架做增删改查,使用SSM框架组合实现增删改查的功能
  11. Fixjs——事件回调的this
  12. 面试python说会为什么_Python面试必须要看的15个问题
  13. 正则表达式:模式修饰符(自用)
  14. 阿里笔试算法题2021
  15. Qt+OpenCV配置教程(图解亲测)
  16. 小白操作Win10扩充C盘(把D盘内存分给C盘)亲测多次有效
  17. snmp协议与snmp++
  18. 71、Es(es和mysql的概念对比)
  19. 长白山项目开发小组,day1
  20. 【离散数学】集合与关系

热门文章

  1. 深入研究微服务架构——第一部分
  2. SQL 使用总结六(改善数据库性能)
  3. oracle是否启用dataguard,启动和关闭data guard的步骤
  4. android 输出流对象,Android-IO流之对象操作流ObjectInputStream/ObjectOutputStream
  5. php 浮点数 模运算,同余与模运算
  6. anaconda没有vscode_Ubuntu18.04安装Anaconda3和VSCode指南
  7. android edittext的监听,android editText 监听事件
  8. springboot中mongodb自定义类型转换器
  9. python mysql数据库的高级应用_Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy...
  10. do sb suggest to_suggest sb to do还是doing