JavaWeb11(查看订单详情&优化结算)

目录

一.效果预览

 二. 实现思路

2.1 查看订单详情

①页面跳转  传参   前端传参

②底层代码

2.2 优化结算(增加销量  减少库存)


一.效果预览

 二. 实现思路

2.1 查看订单详情

①页面跳转  传参   前端传参

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html>
<html lang="en">

<head>
   <title>查看订单详情</title>
    <!-- 支持手机端 -->
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <!-- 引入CSS -->
    <link rel="stylesheet" href="CSS/bootstrap.css" />
    <!-- 引入Bootstrap图标的样式 -->
    <link rel="stylesheet" href="font/bootstrap-icons.css" />
    <style>
        .navbar-collapse {
            /*1代表弹性扩大占用父容器剩余部分   0代表不占用*/
            flex-grow: 0;
        }

        .active {
              /*加粗*/
            font-weight: bold;
        }
        .text-right  button{
                width: 120px;/*宽度*/
                height: 30px;/*高度*/
                line-height: 10px;/*行高*/
                margin-top: 10px;/*上间距*/
        }
    </style>
</head>

<body>
	 

    <!-- 订单详情 -->
    <div class="container" style="margin-top: 40px">
    
    	<!--当订单为空时  -->
      <c:if test="${empty myorder}">
      	<jsp:forward page="orders.do?index=6"></jsp:forward>
      </c:if>
      
      <!--当购物车集合不为空时  -->
      <c:if test="${not empty myorder}">
    		 <!--  text-center居中 -->
        <table style="margin-top: 20px;" class="table table-hover  text-center ">
            <!-- class="bg-primary" 加颜色 -->
            <thead class="bg-primary" style="color: aliceblue;">
                <tr>
                    <th scope="col">订单项编号</th>
                    <th scope="col">订单编号</th>
                    <th scope="col">商品名称</th>
                    <th scope="col">商品价格</th>
                    <th scope="col">商品图片</th>
                    <th scope="col">购买数量</th>
                    <th scope="col">小计</th>
                </tr>
            </thead>
            <tbody>
            
            	<!--对象不能自己遍历 foreach 跟实体类一致 -->
              <!--绑对应订单项的值  -->
             <c:forEach items="${myorder.items}" var="oi">
             	 <tr style="height:80px;line-height: 50px">
                    <th scope="row">${oi.oiid}</th>
                    <td>${oi.oid}</td>
                    <td>${oi.goods.gname}</td>
                    <td>${oi.goods.gprice}元</td>
                    <td><img width="80px" src="${oi.goods.gpath}"></td>
                    <td>${oi.oinum}</td>
                    <td><span class="xx">${oi.oiprice}</span>元</td>
                </tr>
             </c:forEach> 
            </tbody>
            </table>

        <!-- 合计 -->
        <div class="text-right">
            <h2>合计:<span id="sums">229.3</span>元</h2>
           <a href="orders.do?index=6"> <button type="button" class="btn btn-success" >点击返回</button></a>
        </div>
      </c:if>
    
    </div>

    <!-- 引入jQuery的类库 -->
    <!-- 再引入Bootstrap的类库 -->
    <script src="js/jquery-3.6.4.js"></script>
    <script src="js/bootstrap.js"></script>
    
    <script type="text/javascript">
    	//加载DOM  jquery
		$(function(){
		 //统计价格
			var sum = 0.0;
			//遍历
			$(".xx").each(function(i,v){//下标  值
			//累计求和
			sum+=parseFloat(v.innerHTML);
			});
			//保留1位小数
			sum=sum.toFixed(2);
			//给span标签赋值
			$("#sums").html(sum);
		})
    
    	//即要拿id 就直接把id设置成gid
    	function myf(gid) {
			//拿文本框的数量
			var num=$("#"+gid).val();
			//跳转到servlet
			location.href="updateCart.do?gid="+gid+"&num="+num;
		}
		/* //如果仍然出现很多位小数 则采用以下方法保留1位小数
    	String s = String.format("%.1f",this.oiprice);
    	this.oiprice=Double.parseDouble(s); */
    	
		
    	
    </script>
</body>

</html>

②底层代码

package com.zking.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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.biz.IOrderBiz;
import com.zking.biz.IUserBiz;
import com.zking.biz.OrderBiz;
import com.zking.biz.UserBiz;
import com.zking.entity.Order;
import com.zking.entity.User;

/**
 * 查看订单详情控制器
 * @author PC
 *
 */
@WebServlet("/orderInfo.do")
public class OrderInfoServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置编码
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html; charset=UTF-8");
	
		//拿session和out
		HttpSession session = req.getSession();
		PrintWriter out = resp.getWriter();
		
		//接收oid
		String oid=req.getParameter("oid");
		
		//servlet调biz层
		IOrderBiz iob = new OrderBiz();
		//调用单个查询的方法
		Order order = iob.getOrder(oid);
		//存起来
		req.setAttribute("myorder",order);//键  值
		//跳转 转发到订单详情页面进行绑值
		req.getRequestDispatcher("orderinfo.jsp").forward(req, resp);
		
		
		//两种思路
		/**
		 * select * from tb_orderitem where oid=?;
		 * 1.根据订单编号查找到对应的订单项集合  存起来  去订单详情页面绑定值
		 * 
		 * select * from tb_order where oid=?; 单个查询   在order实体类写了一个items
		 * 2.根据订单编号查找到对应的订单  把订单存起来  去订单详情界面  即可以绑定该订单的值又可以绑定订单详情的值 √
		 * 
		 * 
		 */
	
	
	}
}

2.2 优化结算(增加销量  减少库存)

public int addOrder(Order order) {
		int n =0;
		int oid = getID("tb_order", "oid");///!!!赋值  订单编号
		OrderItemDao odao = new OrderItemDao();
		try {
			con=DBHelper.getCon();
			String sql="insert into tb_order(oid,osumprice,uuid,oaddress) values(?,?,?,?)";
		    ps=con.prepareStatement(sql);
		    //给占位符赋值
		    ps.setInt(1, oid);
		    ps.setDouble(2, order.getOsumprice());
		    ps.setInt(3, order.getUser().getUuid());
		    ps.setString(4, order.getOaddress());
		    n=ps.executeUpdate();
		    if(n>0) {//说明订单下单成功
		    	//那么就把该订单所对应的订单项全部加入到数据库中
		    	//拿到该订单所对应的订单项集合
		    	List<OrderItem> items = order.getItems();
		    	//循环遍历
		    	for (OrderItem oi : items) {
					//接下来我需要将所有的oi都要进tb_orderitem表
		    		oi.setOid(oid);//关键
		    		odao.addOrderItem(oi);
		    		//把对应商品的销量+购买数量 库存-购买数量
		    		new GoodsDao().updateXL(oi.getGoods().getGid(),oi.getOinum());
				}
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		
		return n;
	}
/**
	 * 改变销量
	 * @param gid 商品编号
	 * @param num 购买数量
	 * @return 影响行数
	 */
	public int updateXL(int gid,int num) {
		int n = 0;
		try {
			con=DBHelper.getCon();
			String sql="update tb_goods set gxl=gxl+? where gid=?";
			ps=con.prepareStatement(sql);
			ps.setInt(1, num);
			ps.setInt(2, gid);
			n=ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return n;
		
	}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶大头*^_^*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值