javaWeb_MVC购物车

实现生成订单(以及订单详情)

(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>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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);
 
	}
 
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值