实现生成订单(以及订单详情)
(1)第一步,在购物车中点击结算时,跳转到SubmitBuyServlet中。然后在SubmitBuyServlet中根据用户编号获取购物车里的所有信息,并计算用户购物车的总数量和总价格,最后再用Map集合保存数据。
package com.zking.mvc.servlet;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.mvc.biz.ICartBiz;
import com.zking.mvc.biz.impl.CartBizImpl;
import com.zking.mvc.entity.Cart;
import com.zking.mvc.entity.Users;
/**
* Servlet implementation class SubmitBuyServlet
*/
@WebServlet("/SubmitBuyServlet")
public class SubmitBuyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
Users users = (Users) session.getAttribute("users");
ICartBiz icb = new CartBizImpl();
List<Cart> cartsList = icb.getCartByUserid(users.getUserid());
Integer num = 0;
Float price = 0f;
for (Cart cart : cartsList) {
num += cart.getCcount();
price += cart.getCtotal();
}
Map<String, Object> maps = new HashMap<String, Object>();
maps.put("cartsList", cartsList);
maps.put("num", num);
maps.put("price", price);
session.setAttribute("maps", maps);
response.sendRedirect("comfirmOrder.jsp");
}
}
(2)第二步,将SubmitBuyServlet中的数据在结算界面显示。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>糯米团子的结算页</h3>
<hr>
<p>
收货人地址:<input type="text" id="oaddress">
</p>
<p>
<c:forEach items="${maps.cartsList }" var="cart">
<span> <b> ${cart.goods.gname } </b> <img
src="${cart.goods.gpath }">
</span>
</c:forEach>
</p>
<hr>
<p>
<span><b>商品总数量:${maps.num }</b></span>
<span><b>商品总价格:${maps.price }</b></span>
</p>
<p>
<button onclick="submitOrder()">提交订单</button>
</p>
<script type="text/javascript">
function submitOrder() {
let oaddress = document.getElementById("oaddress");
if(!oaddress.value){
alert("请输入地址再提交");
return;
}
location.href = "submitOrder.do"
}
</script>
</body>
</html>
(3)第三步,在结算界面点击提交订单的时候进入SubmitOrderServlet界面,在SubmitOrderServlet界面中获取结算界面的所有信息,并将所有信息添加在订单表中,并在生成订单表的同时生成订单详情表,并删除购物车中的数据。
/**
* 方法功能:获取指定表的最大ID
* @param colID
* @param tableName
* @return
*/
public int getMaxID(String colID,String tableName) {
String sql = "select nvl(max("+colID+"),0) from "+tableName;
ResultSet rs = null;
try {
rs = this.executeQuery(sql);
if(rs.next()) {
return rs.getInt(1)+1;
}
} catch (Exception e) {
// TODO: handle exception
}
return 0;
}
② 为实现在生成订单表的同时生成订单详情表并删除购物车中的数据,所以在OrderBizImpl中调用生成订单方法时同时调用生成订单详情和删除购物车的方法。
public Integer addOrder(Order order) {
Integer addOrder = iod.addOrder(order);
if(addOrder>0) {
List<Cart> listCarts = order.getListCarts();
for (Cart cart : listCarts) {
Orderitem orderitems = new Orderitem();
orderitems.setOrder(order);
orderitems.setGoods(cart.getGoods());
orderitems.setOnum(cart.getCcount());
orderitems.setOprice(cart.getCtotal());
new OrderitemBizImpl().addOrderitem(orderitems);
}
new CartBizImpl().delCartByUserid(order.getUsers().getUserid());
return addOrder;
}
return 0;
}
③ SubmitOrderServlet界面,调用生成订单的方法实现生成订单(包含生成订单详情和删除购物车)
package com.zking.mvc.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.mvc.biz.ICartBiz;
import com.zking.mvc.biz.IOrderBiz;
import com.zking.mvc.biz.impl.CartBizImpl;
import com.zking.mvc.biz.impl.OrderBizImpl;
import com.zking.mvc.entity.Cart;
import com.zking.mvc.entity.Order;
import com.zking.mvc.entity.Users;
import com.zking.mvc.utils.BaseDao;
/**
* Servlet implementation class SubmitOrderServlet
*/
@WebServlet("/SubmitOrderServlet")
public class SubmitOrderServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Users users = (Users)session.getAttribute("users");
Integer num = 0;
Float price = 0f;
ICartBiz icb = new CartBizImpl();
List<Cart> cartsList = icb.getCartByUserid(users.getUserid());
for (Cart cart : cartsList) {
num+=cart.getCcount();
price+=cart.getCtotal();
}
String oaddress = request.getParameter("oaddress");
Integer ostate = 0;
Order order = new Order();
order.setOrderid(new BaseDao().getMaxID("orderid", "mvc_order"));
order.setUsers(users);
order.setOnum(num);
order.setOsumprice(price);
order.setOaddress(oaddress);
order.setOstate(ostate);
order.setListCarts(cartsList);
IOrderBiz iob = new OrderBizImpl();
iob.addOrder(order);
}
}