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

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

一.效果预览

二. 实现思路

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;
  }


相关文章
|
1月前
|
API 开发工具 数据安全/隐私保护
API接口的对接流程和注意事项(淘宝商品详情店铺)
随着互联网技术的发展和应用的普及,API接口已经成为不同系统、不同应用之间进行交互和数据交换的重要方式。API接口使得不同的系统能够互相调用对方的功能,提高了系统的灵活性和扩展性。但是,在进行API接口对接的过程中,需要注意一些流程和事项,以确保对接的顺利进行和系统的稳定运行。
|
8月前
|
SQL 前端开发
创建订单【项目 商城】
创建订单【项目 商城】
36 0
|
4月前
|
存储 JSON API
1688订单详情接口使用指南:含代码实现获取订单信息
随着电子商务的飞速发展,越来越多的企业开始通过1688平台进行采购和销售。为了更好地管理订单,提高客户满意度,许多企业选择使用1688订单详情接口来获取订单信息。本文将详细介绍如何使用1688订单详情接口,并提供示例代码,帮助企业快速实现订单信息的获取
|
6月前
JavaWeb10(实现结算&查看订单&订单详情)(一)
JavaWeb10(实现结算&查看订单&订单详情)
|
6月前
|
前端开发
JavaWeb10(实现结算&查看订单&订单详情)(二)
JavaWeb10(实现结算&查看订单&订单详情)
|
8月前
|
SQL 前端开发
显示商品详情【项目 商城】
显示商品详情【项目 商城】
68 0
|
9月前
|
XML JSON 缓存
Java实现订单ID获取淘宝买到的订单详情数据接口方法
Java实现订单ID获取淘宝买到的订单详情数据接口方法
202 0
|
9月前
|
前端开发 JavaScript
商城业务:商品详情
商城业务:商品详情
|
10月前
ERP,仓储系统官方订单详情接口trade.fullinfo.get( 获取单笔交易的详细信息 )
ERP,仓储系统官方订单详情接口trade.fullinfo.get( 获取单笔交易的详细信息 )
|
10月前
|
数据可视化 搜索推荐 API
如何通过拼多多订单API接口获取订单详情
拼多多订单接口获取到订单详情之后,你可以根据需求对订单信息进行处理和利用,例如: 将订单信息导入到 ERP 系统中实现自动化订单处理; 根据订单信息生成发货单、物流面单等相关文档; 对订单的商品信息进行分析,例如常购买的商品、下单时间、下单地点等,为业务决策提供参考; 根据买家信息进行个性化营销,为买家提供更好的购物体验; 对订单信息进行可视化展示,例如订单量趋势图、订单来源分析等,为业务和数据分析提供支持。 以上只是一些简单的示例,具体使用方式应根据实际业务需求和场景而定。需要注意的是,对于涉及用户隐私数据的处理,需要遵守相关的法律法规和隐私保护政策。