栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

javaweb图书商城设计之订单模块(5)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javaweb图书商城设计之订单模块(5)

这篇文章是针对javaweb图书商城中订单模块的研究,

1、创建相关类

domain:
Order
OrderItem
dao:OrderDao
service:OrderService
web.servlete:OrderServlet


public class OrderItem {
 private String iid;
 private int count;// 数量
 private double subtotal;// 小计
 private Order order;// 所属订单
 private Book book;// 所要购买的图书
}

public class Order {
 private String oid;
 private Date ordertime;// 下单时间
 private double total;// 合计
 private int state;// 订单状态有四种:1未付款 2已付款但未发货 3已发货但未确认收货 4已确认交易成功
 private User owner;// 订单所有者
 private String address;// 收货地址

 private List orderItemList;//当前订单下所有条目 
}


public class OrderDao {
 private QueryRunner qr = new TxQueryRunner();

 
 public void addOrder(Order order) {
  try {
   String sql = "insert into orders values(?,?,?,?,?,?)";
   
   Timestamp timestamp = new Timestamp(order.getOrdertime().getTime());
   Object[] params = {order.getOid(), timestamp, order.getTotal(),
     order.getState(), order.getOwner().getUid(),
     order.getAddress()};
   qr.update(sql, params);
  } catch(SQLException e) {
   throw new RuntimeException(e);
  }
 }

 
 public void addOrderItemList(List orderItemList) {
  
  try {
   String sql = "insert into orderitem values(?,?,?,?,?)";
   
   Object[][] params = new Object[orderItemList.size()][];
   // 循环遍历orderItemList,使用每个orderItem对象为params中每个一维数组赋值
   for(int i = 0; i < orderItemList.size(); i++) {
    OrderItem item = orderItemList.get(i);
    params[i] = new Object[]{item.getIid(), item.getCount(), 
      item.getSubtotal(), item.getOrder().getOid(),
      item.getBook().getBid()}; 
   }
   qr.batch(sql, params);//执行批处理
  } catch(SQLException e) {
   throw new RuntimeException(e);
  }
 }

 
 public List findByUid(String uid) {
  
  try {
   
   String sql = "select * from orders where uid=?";
   List orderList = qr.query(sql, new BeanListHandler(Order.class), uid);

   
   for(Order order : orderList) {
    loadOrderItems(order);//为order对象添加它的所有订单条目
   }

   
   return orderList;
  } catch(SQLException e) {
   throw new RuntimeException(e);
  }
 }

 
 private void loadOrderItems(Order order) throws SQLException {
  
  String sql = "select * from orderitem i, book b where i.bid=b.bid and oid=?";
  
  List> mapList = qr.query(sql, new MapListHandler(), order.getOid());
  
  
  List orderItemList = toOrderItemList(mapList);
  order.setOrderItemList(orderItemList);
 }

 
 private List toOrderItemList(List> mapList) {
  List orderItemList = new ArrayList();
  for(Map map : mapList) {
   OrderItem item = toOrderItem(map);
   orderItemList.add(item);
  }
  return orderItemList;
 }

 
 private OrderItem toOrderItem(Map map) {
  OrderItem orderItem = CommonUtils.toBean(map, OrderItem.class);
  Book book = CommonUtils.toBean(map, Book.class);
  orderItem.setBook(book);
  return orderItem;
 }

 
 public Order load(String oid) {
  try {
   
   String sql = "select * from orders where oid=?";
   Order order = qr.query(sql, new BeanHandler(Order.class), oid);

   
   loadOrderItems(order);


   
   return order;
  } catch(SQLException e) {
   throw new RuntimeException(e);
  }
 }

 
 public int getStateByOid(String oid) {
  try {
   String sql = "select state from orders where oid=?";
   return (Integer)qr.query(sql, new ScalarHandler(), oid);
  } catch(SQLException e) {
   throw new RuntimeException(e);
  }
 }

 
 public void updateState(String oid, int state) {
  try {
   String sql = "update orders set state=? where oid=?";
   qr.update(sql, state, oid);
  } catch(SQLException e) {
   throw new RuntimeException(e);
  }
 }
}

public class OrderService {
 private OrderDao orderDao = new OrderDao();

 
 public void zhiFu(String oid) {
  
  int state = orderDao.getStateByOid(oid);
  if(state == 1) {
   // 修改订单状态为2
   orderDao.updateState(oid, 2);
  }
 }

 
 public void add(Order order) {
  try {
   // 开启事务
   JdbcUtils.beginTransaction();

   orderDao.addOrder(order);//插入订单
   orderDao.addOrderItemList(order.getOrderItemList());//插入订单中的所有条目

   // 提交事务
   JdbcUtils.commitTransaction();
  } catch(Exception e) {
   // 回滚事务
   try {
    JdbcUtils.rollbackTransaction();
   } catch (SQLException e1) {
   }
   throw new RuntimeException(e);
  }
 }

 
 public List myOrders(String uid) {
  return orderDao.findByUid(uid);
 }

 
 public Order load(String oid) {
  return orderDao.load(oid);
 }

 
 public void confirm(String oid) throws OrderException {
  
  int state = orderDao.getStateByOid(oid);//获取订单状态
  if(state != 3) throw new OrderException("订单确认失败,您不是什么好东西!");

  
  orderDao.updateState(oid, 4);
 }
}

public class OrderServlet extends baseServlet {
 private OrderService orderService = new OrderService();

 
 public String zhiFu(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  Properties props = new Properties();
  InputStream input = this.getClass().getClassLoader()
    .getResourceAsStream("merchantInfo.properties");
  props.load(input);
  
  String p0_Cmd = "Buy";
  String p1_MerId = props.getProperty("p1_MerId");
  String p2_Order = request.getParameter("oid");
  String p3_Amt = "0.01";
  String p4_Cur = "CNY";
  String p5_Pid = "";
  String p6_Pcat = "";
  String p7_Pdesc = "";
  String p8_Url = props.getProperty("p8_Url");
  String p9_SAF = "";
  String pa_MP = "";
  String pd_FrpId = request.getParameter("pd_FrpId");
  String pr_NeedResponse = "1";

  
  String keyValue = props.getProperty("keyValue");
  String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt,
    p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP,
    pd_FrpId, pr_NeedResponse, keyValue);

  
  StringBuilder url = new StringBuilder(props.getProperty("url"));
  url.append("?p0_Cmd=").append(p0_Cmd);
  url.append("&p1_MerId=").append(p1_MerId);
  url.append("&p2_Order=").append(p2_Order);
  url.append("&p3_Amt=").append(p3_Amt);
  url.append("&p4_Cur=").append(p4_Cur);
  url.append("&p5_Pid=").append(p5_Pid);
  url.append("&p6_Pcat=").append(p6_Pcat);
  url.append("&p7_Pdesc=").append(p7_Pdesc);
  url.append("&p8_Url=").append(p8_Url);
  url.append("&p9_SAF=").append(p9_SAF);
  url.append("&pa_MP=").append(pa_MP);
  url.append("&pd_FrpId=").append(pd_FrpId);
  url.append("&pr_NeedResponse=").append(pr_NeedResponse);
  url.append("&hmac=").append(hmac);

  System.out.println(url);

  
  response.sendRedirect(url.toString());

  return null;
 }

 
 public String back(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  String p1_MerId = request.getParameter("p1_MerId");
  String r0_Cmd = request.getParameter("r0_Cmd");
  String r1_Code = request.getParameter("r1_Code");
  String r2_TrxId = request.getParameter("r2_TrxId");
  String r3_Amt = request.getParameter("r3_Amt");
  String r4_Cur = request.getParameter("r4_Cur");
  String r5_Pid = request.getParameter("r5_Pid");
  String r6_Order = request.getParameter("r6_Order");
  String r7_Uid = request.getParameter("r7_Uid");
  String r8_MP = request.getParameter("r8_MP");
  String r9_BType = request.getParameter("r9_BType");

  String hmac = request.getParameter("hmac");

  
  Properties props = new Properties();
  InputStream input = this.getClass().getClassLoader()
    .getResourceAsStream("merchantInfo.properties");
  props.load(input);
  String keyValue = props.getProperty("keyValue");

  boolean bool = PaymentUtil.verifyCallback(hmac, p1_MerId, r0_Cmd,
    r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid,
    r8_MP, r9_BType, keyValue);

  if(!bool) {//如果校验失败
   request.setAttribute("msg", "您不是什么好东西!");
   return "f:/jsps/msg.jsp";
  }

  
  orderService.zhiFu(r6_Order);//有可能对数据库进行操作,也可能不操作!

  
  if(r9_BType.equals("2")) {
   response.getWriter().print("success");
  }

  
  request.setAttribute("msg", "支付成功!等待卖家发货!你慢慢等~");
  return "f:/jsps/msg.jsp";
 }

 
 public String confirm(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  
  String oid = request.getParameter("oid");
  try {
   orderService.confirm(oid);
   request.setAttribute("msg", "恭喜,交易成功!");
  } catch (OrderException e) {
   request.setAttribute("msg", e.getMessage());
  }
  return "f:/jsps/msg.jsp";
 }

 
 public String load(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  request.setAttribute("order",
    orderService.load(request.getParameter("oid")));
  return "f:/jsps/order/desc.jsp";
 }

 
 public String myOrders(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  
  User user = (User) request.getSession().getAttribute("session_user");
  List orderList = orderService.myOrders(user.getUid());
  request.setAttribute("orderList", orderList);
  return "f:/jsps/order/list.jsp";
 }

 
 public String add(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  // 从session中获取cart
  Cart cart = (Cart) request.getSession().getAttribute("cart");
  // 把cart转换成Order对象
  
  Order order = new Order();
  order.setOid(CommonUtils.uuid());// 设置编号
  order.setOrdertime(new Date());// 设置下单时间
  order.setState(1);// 设置订单状态为1,表示未付款
  User user = (User) request.getSession().getAttribute("session_user");
  order.setOwner(user);// 设置订单所有者
  order.setTotal(cart.getTotal());// 设置订单的合计,从cart中获取合计

  
  List orderItemList = new ArrayList();
  // 循环遍历Cart中的所有CartItem,使用每一个CartItem对象创建OrderItem对象,并添加到集合中
  for (CartItem cartItem : cart.getCartItems()) {
   OrderItem oi = new OrderItem();// 创建订单条目

   oi.setIid(CommonUtils.uuid());// 设置条目的id
   oi.setCount(cartItem.getCount());// 设置条目的数量
   oi.setBook(cartItem.getBook());// 设置条目的图书
   oi.setSubtotal(cartItem.getSubtotal());// 设置条目的小计
   oi.setOrder(order);// 设置所属订单

   orderItemList.add(oi);// 把订单条目添加到集合中
  }

  // 把所有的订单条目添加到订单中
  order.setOrderItemList(orderItemList);

  // 清空购物车
  cart.clear();

  // ////////////////////////////////////////////

  
  orderService.add(order);
  
  request.setAttribute("order", order);
  return "/jsps/order/desc.jsp";
 }
}

2、生成订单

3、我的订单(按用户查)

4、加载订单(按id查)

5、确认收货

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号