<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【項目實踐】SMBMS(Javaweb版)(六)訂單模塊

      訂單管理

      前期準備

      1. 創(chuàng)建供應商 、bill 的servlet
      2. 注冊 bill 的servlet
      3. 創(chuàng)建相關的Dao,Service,javaBean等
      4. 導入相關的jsp

      新增訂單

      billDao

      1. billDao
          boolean addBill(Connection connection, Bill bill) throws SQLException;
      
      
      1. billDaoImpl
          /**
           * @param connection 數(shù)據(jù)庫連接對象
           * @param bill       訂單對象
           * @return 添加結果
           */
          @Override
          public boolean addBill(Connection connection, Bill bill) throws SQLException {
      
              boolean addFlag = false;
              int addRows;
      
              PreparedStatement preparedStatement;
              String sql = "insert into smbms_bill values (null,?,?,?,?,?,?,?,?,?,?,?,?)";
      
              preparedStatement = connection.prepareStatement(sql);
      
              Object[] params = {
                      bill.getBillCode(),
                      bill.getProductName(),
                      bill.getProductDesc(),
                      bill.getProductUnit(),
                      bill.getProductCount(),
                      bill.getTotalPrice(),
                      bill.getIsPayment(),
                      bill.getCreatedBy(),
                      bill.getCreationDate(),
                      bill.getModifyBy(),
                      bill.getModifyDate(),
                      bill.getProviderId()
              };
      
              addRows = BaseDao.executeUpdate(connection, sql, preparedStatement, params);
      
              if (addRows > 0) {
                  addFlag = true;
              }
      
              BaseDao.closeResource(connection, preparedStatement, null);
      
              return addFlag;
          }
      s
      

      billService

      1. billService
          boolean addBill(Bill bill) throws SQLException;
      
      
      1. billServiceImpl
          /**
           * 添加賬單到數(shù)據(jù)庫
           * <p>
           * 此方法負責將一個賬單對象添加到數(shù)據(jù)庫中它首先獲取一個數(shù)據(jù)庫連接,
           * 然后嘗試使用賬單DAO的addBill方法將賬單添加到數(shù)據(jù)庫中
           * 如果在添加過程中遇到SQLException,將拋出RuntimeException
           * 最后,無論添加是否成功,都會關閉數(shù)據(jù)庫資源
           *
           * @param bill 要添加到數(shù)據(jù)庫的賬單對象,包含賬單的所有必要信息
           * @return boolean 表示賬單是否成功添加到數(shù)據(jù)庫中當前方法中此參數(shù)未被使用
           */
          @Override
          public boolean addBill(Bill bill) throws SQLException {
      
              Connection conn = null;
              boolean addFlag = false;
      
              try {
                  // 獲取數(shù)據(jù)庫連接
                  conn = BaseDao.connection();
                  conn.setAutoCommit(false);
                  // 調用賬單DAO的添加方法,執(zhí)行賬單添加操作
                  addFlag = billDao.addBill(conn, bill);
                  conn.commit();
              } catch (Exception e) {
                  e.printStackTrace();
                  conn.rollback();
              } finally {
                  // 關閉數(shù)據(jù)庫資源,確保連接被釋放回連接池
                  BaseDao.closeResource(conn, null, null);
              }
      
              return addFlag;
          }
      

      billServlet

      1. billServlet
          /**
           * 獲取賬單列表
           * <p>
           * 此方法負責處理賬單查詢請求,根據(jù)不同的查詢條件(如產(chǎn)品名稱、供應商ID、是否已支付),
           * 從數(shù)據(jù)庫中獲取相應的賬單信息,并進行分頁處理,最后將結果展示在頁面上
           *
           * @param req  用于獲取請求參數(shù)和設置請求屬性
           * @param resp 用于實現(xiàn)請求轉發(fā)或重定向
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException      如果輸入輸出操作失敗
           */
          private void getBill(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
              // 默認值初始化
              String productName = "";
              int isPayment = 0;
              int providerId = 0;
      
              // 獲取request參數(shù)
              String queryProductName = req.getParameter("queryProductName");
              String queryProviderId = req.getParameter("queryProviderId");
              String queryIsPayment = req.getParameter("queryIsPayment");
              String pageIndex = req.getParameter("pageIndex");
      
              // 默認分頁設置
              int currentPageNo = 1;
              int pageSize = 5;
      
              // TODO: 處理查詢條件,確保空值安全,isPayment、providerId --> int
              queryProductName = queryProductName == null ? "" : queryProductName;
              queryProviderId = queryProviderId == null ? "" : queryProviderId;
              queryIsPayment = queryIsPayment == null ? "" : queryIsPayment;
              currentPageNo = pageIndex == null ? currentPageNo : Integer.parseInt(pageIndex);
      
              // 創(chuàng)建BillService實例
              BillService billService = new BillServiceImpl();
      
              // 獲取賬單總數(shù)
              int totalCount = billService.getBillCount(queryProductName, queryProviderId,
                      queryIsPayment);
      
              // 創(chuàng)建PageSupport實例用于分頁處理
              PageSupport pageSupport = new PageSupport();
      
              // 設置分頁參數(shù)
              pageSupport.setTotalCount(totalCount);
              pageSupport.setPageIndex(currentPageNo);
              pageSupport.setPageSize(pageSize);
      
              // 計算總頁數(shù)
              int totalPageCount = pageSupport.getTotalPageCount();
      
              // 校驗當前頁碼
              if (currentPageNo < 1) {
                  currentPageNo = 1;
              } else if (currentPageNo > totalPageCount) {
                  currentPageNo = totalPageCount;
              }
      
              // 獲取賬單列表
              List<Bill> billList = billService.getBillList(queryProductName, queryProviderId,
                      queryIsPayment);
      
              // 處理完的數(shù)據(jù)存到request中,用于頁面展示
              req.setAttribute("billList", billList);
              req.setAttribute("queryProductName", queryProductName);
              req.setAttribute("queryProviderId", queryProviderId);
              req.setAttribute("queryIsPayment", queryIsPayment);
      
              req.setAttribute("totalPageCount", totalPageCount);
              req.setAttribute("totalCount", totalCount);
              req.setAttribute("currentPageNo", currentPageNo);
      
              // 跳轉到list頁面
              req.getRequestDispatcher("/billlist.jsp").forward(req, resp);
      
          }
      
      1. web.xml
          <servlet>
              <servlet-name>BillServlet</servlet-name>
              <servlet-class>com.dashangms.servlet.bill.BillServlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>BillServlet</servlet-name>
              <url-pattern>/jsp/bill.do</url-pattern>
          </servlet-mapping>
          <servlet-mapping>
              <servlet-name>BillServlet</servlet-name>
              <url-pattern>/bill</url-pattern>
          </servlet-mapping>
      

      jsp

      <a href="${pageContext.request.contextPath}/jsp/billadd.jsp">添加訂單</a>
      

      取消訂單

      billDao

      1. billDao
      int deleteBill(Connection connection, int delId) throws SQLException;
      
      1. billDaoImpl
      /**
       * 根據(jù)給定的數(shù)據(jù)庫連接和ID刪除賬單記錄
       *
       * @param connection 數(shù)據(jù)庫連接對象,用于執(zhí)行SQL語句
       * @param delId      要刪除的賬單的ID
       * @return 返回刪除的行數(shù),表示刪除成功的記錄數(shù)
       * @throws SQLException 如果執(zhí)行SQL語句時發(fā)生錯誤
       */
      @Override
      public int deleteBill(Connection connection, int delId) throws SQLException {
      
          // 初始化刪除的行數(shù)為0
          int deletedRows = 0;
          // 初始化PreparedStatement對象為null,用于執(zhí)行SQL語句
          PreparedStatement preparedStatement = null;
      
          // 檢查數(shù)據(jù)庫連接是否不為null
          if (connection != null) {
              // 定義SQL語句,用于刪除指定ID的賬單記錄
              String sql = "delete from smbms_bill where id=?";
              // 準備SQL語句
              preparedStatement = connection.prepareStatement(sql);
      
              // 創(chuàng)建一個包含要刪除賬單ID的參數(shù)數(shù)組
              Object[] param = {delId};
      
              // 執(zhí)行更新操作并獲取刪除的行數(shù)
              deletedRows = BaseDao.executeUpdate(connection, sql, preparedStatement, param);
          }
          // 關閉數(shù)據(jù)庫資源
          BaseDao.closeResource(connection, preparedStatement, null);
      
          // 返回刪除的行數(shù)
          return deletedRows;
      }
      

      billService

      1. billService
          boolean deleteBill(String delId) throws SQLException;
      
      1. billServiceImpl
          /**
           * 根據(jù)ID刪除賬單
           *
           * @param delId 要刪除的賬單的ID
           * @return 如果刪除成功,返回true;否則返回false
           * @throws SQLException 如果與數(shù)據(jù)庫交互時發(fā)生錯誤,拋出此異常
           */
          @Override
          public boolean deleteBill(String delId) throws SQLException {
      
              // 初始化刪除標志為false
              boolean deleteFlag = false;
      
              int delIdTmp = Integer.parseInt(delId != null ? delId : "0");
      
              // 定義數(shù)據(jù)庫連接對象
              Connection conn = null;
              try {
                  // 獲取數(shù)據(jù)庫連接
                  conn = BaseDao.connection();
                  // 設置手動管理事務
                  conn.setAutoCommit(false);
      
                  // 調用Dao層方法,執(zhí)行刪除操作
                  int deleteRows = billDao.deleteBill(conn, delIdTmp);
      
                  // 檢查刪除的行數(shù),如果大于0,表示刪除成功
                  if (deleteRows > 0) {
                      deleteFlag = true;
                  }
                  // 提交事務
                  conn.commit();
      
              } catch (SQLException e) {
                  // 打印異常信息
                  e.printStackTrace();
                  // 回滾事務
                  conn.rollback();
      
              } finally {
                  // 關閉數(shù)據(jù)庫資源
                  BaseDao.closeResource(conn, null, null);
              }
      
              // 返回刪除標志
              return deleteFlag;
          }
      

      billServlet

      1. billServlet
          /**
           * 刪除賬單操作
           *
           * 此方法用于處理從 HttpServletRequest 請求中獲取的刪除賬單指令
           * 它調用 BillService 接口的實現(xiàn)來執(zhí)行實際的刪除操作,并根據(jù)刪除結果
           * 設置 session 屬性以提供反饋信息,然后重定向到賬單查詢頁面
           *
           * @param req 用于獲取刪除指令的 HTTP 請求對象
           * @param resp 用于重定向到查詢頁面的 HTTP 響應對象
           * @throws ServletException 如果 Servlet 操作失敗
           * @throws IOException 如果輸入/輸出操作失敗
           * @throws SQLException 如果與數(shù)據(jù)庫的交互操作失敗
           */
          private void delBill(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, SQLException {
              // 實例化 BillService 的實現(xiàn)類
              BillService billService = new BillServiceImpl();
      
              // 根據(jù)刪除結果設置 session 屬性和重定向消息
              if (billService.deleteBill(req.getParameter("delId"))) {
                  req.getSession().setAttribute("message", "刪除成功!");
              } else {
                  req.getSession().setAttribute("message", "刪除失敗!");
              }
              // 重定向到賬單查詢頁面
              resp.sendRedirect(req.getContextPath() + "/provider?method=query");
              // TODO: 前端使用ajax傳遞數(shù)據(jù),需要轉換為json格式
          }
      
      1. web.xml

      jsp

      <span><a class="deleteBill" href="javascript:;" billid=${bill.id} billcc=${bill.billCode}><img src="${pageContext.request.contextPath}/images/schu.png" alt="刪除" title="刪除"/></a></span>
      

      更改訂單信息

      billDao

      1. billDao
      int updateBill(Connection connection, Bill bill) throws SQLException;
      
      1. billDaoImpl
          /**
           * 更新賬單信息
           *
           * @param connection 數(shù)據(jù)庫連接對象,用于執(zhí)行SQL語句
           * @param bill 賬單對象,包含需要更新的賬單信息
           * @return 返回受影響的行數(shù),用于判斷更新操作是否成功
           * @throws SQLException 如果執(zhí)行SQL語句時發(fā)生錯誤,拋出此異常
           */
          @Override
          public int updateBill(Connection connection, Bill bill) throws SQLException {
              int updateRows = 0;
      
              PreparedStatement preparedStatement = null;
      
              // 定義更新賬單信息的SQL語句
              String sql = "update smbms_bill set " +
                      "billCode=?," +
                      "productName=?, " +
                      "productDesc=?," +
                      "productUnit=?," +
                      "productCount=?," +
                      "totalPrice=?," +
                      "isPayment=?," +
                      "modifyBy=?," +
                      "modifyDate=?," +
                      "providerId=?" +
                      "where id=?";
      
              // 準備SQL語句參數(shù),按照順序從bill對象中獲取屬性值
              Object[] params = {
                      bill.getBillCode(),
                      bill.getProductName(),
                      bill.getProductDesc(),
                      bill.getProductUnit(),
                      bill.getProductCount(),
                      bill.getTotalPrice(),
                      bill.getIsPayment(),
                      bill.getModifyBy(),
                      bill.getModifyDate(),
                      bill.getProviderId(),
                      bill.getId()
              };
      
              // 執(zhí)行更新操作并獲取受影響的行數(shù)
              updateRows = BaseDao.executeUpdate(connection, sql, preparedStatement, params);
      
              // 關閉數(shù)據(jù)庫連接
              BaseDao.closeConnection(connection);
      
              // 返回受影響的行數(shù)
              return updateRows;
          }
      

      billService

      1. billService
      boolean updateBill(Bill bill) throws SQLException;
      
      1. billServiceImpl
          /**
           * 更新賬單信息
           *
           * @param bill 要更新的賬單對象,包含賬單的詳細信息
           * @return 返回一個布爾值,表示賬單信息是否更新成功
           * @throws SQLException 如果數(shù)據(jù)庫操作失敗,拋出SQLException
           */
          @Override
          public boolean updateBill(Bill bill) throws SQLException {
              // 初始化更新標志為false,用于表示賬單信息是否更新成功
              boolean updateFlag = false;
              // 初始化更新行數(shù)為0,用于記錄數(shù)據(jù)庫中受影響的行數(shù)
              int updateRows = 0;
              // 聲明數(shù)據(jù)庫連接對象
              Connection conn = null;
      
              // 獲取數(shù)據(jù)庫連接updateBill
              try {
                  // 獲取數(shù)據(jù)庫連接
                  conn = BaseDao.connection();
                  // 設置連接為手動管理事務
                  conn.setAutoCommit(false);
                  // 調用BillDao的updateBill方法更新賬單信息
                  updateRows = billDao.updateBill(conn, bill);
                  // 提交事務
                  conn.commit();
                  // 如果更新行數(shù)大于0,表示賬單信息更新成功
                  if (updateRows > 0) {
                      updateFlag = true;
                  }
              } catch (Exception e) {
                  // 打印異常信息
                  e.printStackTrace();
                  // 回滾事務
                  conn.rollback();
              } finally {
                  // 關閉數(shù)據(jù)庫資源
                  BaseDao.closeResource(conn, null, null);
              }
      
              // 返回更新標志
              return updateFlag;
          }
      

      billServlet

      1. billServlet
          /**
           * 更新賬單信息
           * 
           * @param req 用于獲取請求參數(shù)和會話信息
           * @param resp 用于重定向頁面
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException 如果輸入/輸出操作失敗
           * @throws SQLException 如果數(shù)據(jù)庫操作失敗
           */
          private void updateBill(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, SQLException {
              // 實例化BillService接口和Bill類
              BillService billService = new BillServiceImpl();
              Bill bill = new Bill();
          
              // 從請求參數(shù)中設置賬單屬性
              bill.setBillCode(req.getParameter("billCode"));
              bill.setProductName(req.getParameter("productName"));
              bill.setProductDesc(req.getParameter("productDesc"));
              bill.setProductUnit(new BigDecimal(req.getParameter("productUnit")));
              bill.setProductCount(new BigDecimal(req.getParameter("productCount")));
              bill.setTotalPrice(req.getParameter("totalPrice"));
              bill.setIsPayment(Integer.parseInt(req.getParameter("isPayment")));
              bill.setProviderId(Integer.parseInt(req.getParameter("providerId")));
              bill.setId(Integer.parseInt(req.getParameter("id")));
              bill.setModifyBy(Integer.parseInt(req.getParameter("userId")));
              bill.setModifyDate(new Date());
          
              // 根據(jù)賬單服務的更新結果決定重定向的頁面和會話消息
              if (billService.updateBill(bill)) {
                  req.getSession().setAttribute("message", "修改成功!");
                  resp.sendRedirect(req.getContextPath() + "/provider?method=query");
              } else {
                  req.getSession().setAttribute("message", "修改失敗!");
                  resp.sendRedirect(req.getContextPath() + "/provider?method=modify");
              }
          }
      
      1. web.xml

      jsp

      查詢訂單信息

      billDao

      1. billDao
          List<Bill> queryBillBy(Connection connection, String queryProductName, String queryProviderId, String queryIsPayment ) throws SQLException;
      
      
      1. billDaoImpl
          /**
           * 查詢訂單詳情
           * 根據(jù)請求過來的信息查詢內(nèi)容,返回結果,內(nèi)容為空的時候顯示所有訂單
           *
           * @param connection       數(shù)據(jù)庫連接對象
           * @param queryProductName 商品名稱
           * @param queryProviderId  商品id
           * @param queryIsPayment   是否付款
           * @return 訂單列表
           */
          @Override
          public List<Bill> queryBillBy(Connection connection, String queryProductName,
                                        String queryProviderId, String queryIsPayment) throws SQLException {
              ResultSet resultSet = null;
              List<Bill> billList = new ArrayList<>();
              List<Object> params = new ArrayList<>();
      
              PreparedStatement preparedStatement;
              String sql = "select * from smbms_bill ";
      
              if (queryProductName != null || queryProviderId != null || queryIsPayment != null) {
                  sql += "where 1=1 ";
                  if (queryProductName != null && !queryProductName.isEmpty()) {
                      sql += "and productName like ? ";
                      params.add("%" + queryProductName + "%");
                  }
                  if (queryProviderId != null && !queryProviderId.isEmpty()) {
                      sql += "and providerId = ? ";
                      params.add(queryProviderId);
                  }
                  if (queryIsPayment != null && !queryIsPayment.isEmpty()) {
                      sql += "and isPayment = ? ";
                      params.add(queryIsPayment);
                  }
              }
      
              preparedStatement = connection.prepareStatement(sql);
              resultSet = BaseDao.executeQuery(connection, sql, preparedStatement, params.toArray(),
                      resultSet);
      
              while (resultSet.next()) {
                  billList.add(getBillList(resultSet));
              }
      
              BaseDao.closeResource(connection, preparedStatement, resultSet);
      
              return billList;
          }
      

      billService

      1. billService
          /**
           * 獲取所有訂單列表
           *
           * @param queryProductName 商品名稱
           * @param queryProviderId  供應商
           * @param queryIsPayment   是否付款
           * @return 訂單列表
           */
          List<Bill> getBillList(String queryProductName,
                                 String queryProviderId, String queryIsPayment);
      
      1. billServiceImpl
          /**
           * 獲取所有訂單列表
           *
           * @param queryProductName 商品名稱
           * @param queryProviderId  供應商
           * @param queryIsPayment   是否付款
           * @return 訂單列表
           */
          @Override
          public List<Bill> getBillList(String queryProductName, String queryProviderId,
                                        String queryIsPayment) {
      
              List<Bill> billList;
              Connection con = BaseDao.connection();
      
              try {
                  billList = billDao.queryBillBy(con, queryProductName, queryProviderId, queryIsPayment);
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              } finally {
                  BaseDao.closeResource(con, null, null);
              }
      
              return billList;
          }
      
      

      billServlet

      1. billServlet
          /**
           * 獲取賬單列表
           * <p>
           * 此方法負責處理賬單查詢請求,根據(jù)不同的查詢條件(如產(chǎn)品名稱、供應商ID、是否已支付),
           * 從數(shù)據(jù)庫中獲取相應的賬單信息,并進行分頁處理,最后將結果展示在頁面上
           *
           * @param req  用于獲取請求參數(shù)和設置請求屬性
           * @param resp 用于實現(xiàn)請求轉發(fā)或重定向
           * @throws ServletException 如果Servlet操作失敗
           * @throws IOException      如果輸入輸出操作失敗
           */
          private void getBill(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
              // 默認值初始化
              String productName = "";
              int isPayment = 0;
              int providerId = 0;
      
              // 獲取request參數(shù)
              String queryProductName = req.getParameter("queryProductName");
              String queryProviderId = req.getParameter("queryProviderId");
              String queryIsPayment = req.getParameter("queryIsPayment");
              String pageIndex = req.getParameter("pageIndex");
      
              // 默認分頁設置
              int currentPageNo = 1;
              int pageSize = 5;
      
              // TODO: 處理查詢條件,確保空值安全,isPayment、providerId --> int
              queryProductName = queryProductName == null ? "" : queryProductName;
              queryProviderId = queryProviderId == null ? "" : queryProviderId;
              queryIsPayment = queryIsPayment == null ? "" : queryIsPayment;
              currentPageNo = pageIndex == null ? currentPageNo : Integer.parseInt(pageIndex);
      
              // 創(chuàng)建BillService實例
              BillService billService = new BillServiceImpl();
      
              // 獲取賬單總數(shù)
              int totalCount = billService.getBillCount(queryProductName, queryProviderId,
                      queryIsPayment);
      
              // 創(chuàng)建PageSupport實例用于分頁處理
              PageSupport pageSupport = new PageSupport();
      
              // 設置分頁參數(shù)
              pageSupport.setTotalCount(totalCount);
              pageSupport.setPageIndex(currentPageNo);
              pageSupport.setPageSize(pageSize);
      
              // 計算總頁數(shù)
              int totalPageCount = pageSupport.getTotalPageCount();
      
              // 校驗當前頁碼
              if (currentPageNo < 1) {
                  currentPageNo = 1;
              } else if (currentPageNo > totalPageCount) {
                  currentPageNo = totalPageCount;
              }
      
              // 獲取賬單列表
              List<Bill> billList = billService.getBillList(queryProductName, queryProviderId,
                      queryIsPayment);
      
              // 處理完的數(shù)據(jù)存到request中,用于頁面展示
              req.setAttribute("billList", billList);
              req.setAttribute("queryProductName", queryProductName);
              req.setAttribute("queryProviderId", queryProviderId);
              req.setAttribute("queryIsPayment", queryIsPayment);
      
              req.setAttribute("totalPageCount", totalPageCount);
              req.setAttribute("totalCount", totalCount);
              req.setAttribute("currentPageNo", currentPageNo);
      
              // 跳轉到list頁面
              req.getRequestDispatcher("/billlist.jsp").forward(req, resp);
      
          }
      
      1. web.xml

      jsp

      posted @ 2025-06-18 08:58  柯基大大  閱讀(5)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 中文日产幕无线码一区中文| 国产片AV国语在线观看手机版| 中文字幕日韩精品有码| 狠狠色噜噜狠狠狠狠蜜桃 | 久热这里只有精品12| 亚洲中文无码av永久不收费| 亚洲国产欧美在线人成AAAA| 欧美日韩中文字幕视频不卡一二区| 377P欧洲日本亚洲大胆| 精品黑人一区二区三区| 亚洲码欧洲码一二三四五| 日韩永久永久永久黄色大片| 亚洲av影院一区二区三区| 国产一区二区午夜福利久久| 国产精品亚洲av三区色| 国产精品VA尤物在线观看| 被灌满精子的波多野结衣| 国产色悠悠综合在线观看| 伊人久久大香线蕉综合观| 亚洲成在人线AⅤ中文字幕| 日韩黄色av一区二区三区| 久久国产精品不只是精品| 欧美精品日韩精品一卡| 亚洲色大成网站WWW久久| 18国产午夜福利一二区| 91久久偷偷做嫩草影院免费看| 无遮无挡爽爽免费视频| 综合色一色综合久久网| 久久综合亚洲鲁鲁九月天| 深夜精品免费在线观看| av天堂久久精品影音先锋| 中文字幕亚洲一区二区三区| 精品国产成人国产在线观看| 人成午夜免费视频无码| 99中文字幕精品国产| 国产欧美另类精品久久久| 亚洲综合伊人久久大杳蕉| 国产初高中生粉嫩无套第一次| 亚洲人妻精品一区二区| 久热色视频精品在线观看| 高清国产一区二区无遮挡|