久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

SpringBoot+Vue自習(xí)室預(yù)約系統(tǒng)實(shí)戰(zhàn):從數(shù)據(jù)庫(kù)設(shè)計(jì)到并發(fā)防超賣(mài)

SpringBoot+Vue自習(xí)室預(yù)約系統(tǒng)實(shí)戰(zhàn):從數(shù)據(jù)庫(kù)設(shè)計(jì)到并發(fā)防超賣(mài) 做自習(xí)室預(yù)約系統(tǒng)這件事我前后折騰了大半個(gè)月踩了不少坑也積累了不少心得。這個(gè)基于SpringBoot Vue的MVC自習(xí)室管理和預(yù)約系統(tǒng)大概是很多計(jì)算機(jī)專(zhuān)業(yè)同學(xué)畢業(yè)設(shè)計(jì)或課程項(xiàng)目的熱門(mén)選題也是很多小型創(chuàng)業(yè)團(tuán)隊(duì)做共享空間管理時(shí)愿意參考的一套基礎(chǔ)架子。今天我把整套系統(tǒng)的設(shè)計(jì)思路、核心代碼、數(shù)據(jù)庫(kù)方案和部署細(xì)節(jié)完整梳理一遍特別是那些網(wǎng)上教程一般不會(huì)主動(dòng)告訴你的坑都一并寫(xiě)出來(lái)。這套系統(tǒng)能做什么簡(jiǎn)單說(shuō)就是三件事管理自習(xí)室和座位信息、讓用戶在線預(yù)約座位、提供后臺(tái)的數(shù)據(jù)統(tǒng)計(jì)和基礎(chǔ)管理能力。技術(shù)棧非常經(jīng)典后端SpringBoot MyBatis MySQL前端Vue Vue Router Axios整體遵循MVC分層思想。適合正在做課設(shè)、畢設(shè)的學(xué)生也適合想快速搭一套輕量級(jí)預(yù)約系統(tǒng)的開(kāi)發(fā)者。1. 為什么做這個(gè)系統(tǒng)需求拆解與技術(shù)選型1.1 自習(xí)室預(yù)約到底解決了什么問(wèn)題去圖書(shū)館或者付費(fèi)自習(xí)室搶座位的經(jīng)歷相信不少人都有過(guò)。傳統(tǒng)方式要么是線下排隊(duì)登記要么是微信群接龍?jiān)僭家稽c(diǎn)就是放一張紙自己簽名。這些問(wèn)題很典型座位狀態(tài)不透明去了才發(fā)現(xiàn)滿座管理員無(wú)法實(shí)時(shí)掌握使用率座位長(zhǎng)期被占但沒(méi)人來(lái)用戶和管理員之間信息斷層投訴和糾紛不少。所以我做的這套系統(tǒng)核心就是解決三個(gè)問(wèn)題座位資源可視化、預(yù)約流程線上化、管理數(shù)據(jù)可統(tǒng)計(jì)。用戶端看到的是一個(gè)座位圖哪些座位空閑、哪些被占一目了然預(yù)約操作點(diǎn)幾下就能完成取消、續(xù)約也能自助處理。管理員端則能看每日預(yù)約量、座位利用率、用戶活躍度這些關(guān)鍵指標(biāo)不用再靠Excel手工統(tǒng)計(jì)。系統(tǒng)角色劃分也很清晰普通用戶負(fù)責(zé)預(yù)約、取消、查看個(gè)人記錄管理員負(fù)責(zé)自習(xí)室和座位維護(hù)、預(yù)約審核或關(guān)閉、查看統(tǒng)計(jì)報(bào)表。這套R(shí)BAC基于角色的訪問(wèn)控制模型不復(fù)雜但足夠支撐起一個(gè)完整的業(yè)務(wù)閉環(huán)。1.2 SpringBoot Vue MyBatis MySQL這套組合的取舍我在一開(kāi)始也糾結(jié)過(guò)技術(shù)選型。Node.js Express做后端Python Django最終還是選了SpringBoot這套組合理由非常實(shí)際。SpringBoot是目前國(guó)內(nèi)企業(yè)級(jí)開(kāi)發(fā)占有率最高的框架之一。它最核心的價(jià)值就是簡(jiǎn)化配置內(nèi)嵌Tomcat一個(gè)jar包就能跑起來(lái)不需要額外部署WAR包。配合Maven或Gradle管理依賴幾行配置就能集成MyBatis、MySQL、Redis這些中間件。對(duì)于校內(nèi)項(xiàng)目或者中小團(tuán)隊(duì)來(lái)說(shuō)SpringBoot的學(xué)習(xí)資料最豐富遇到問(wèn)題的解決方案也最多這個(gè)優(yōu)勢(shì)在開(kāi)發(fā)中非常實(shí)際。Vue選擇的是Vue 2還是Vue 3我建議新項(xiàng)目直接上Vue 3 Composition API。2025年這個(gè)時(shí)間點(diǎn)Vue 2已經(jīng)停止維護(hù)了生態(tài)里新的UI庫(kù)也基本都適配Vue 3。Vue全家桶里真正開(kāi)發(fā)必須掌握的就三樣Vue Router負(fù)責(zé)頁(yè)面路由Pinia或Vuex負(fù)責(zé)狀態(tài)管理Axios負(fù)責(zé)和后端接口通信。MyBatis和MySQL的組合更是經(jīng)典中的經(jīng)典。MySQL是開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)里生態(tài)最成熟的安裝部署簡(jiǎn)單性能足夠中小規(guī)模應(yīng)用使用而且和SpringBoot整合非常順滑。MyBatis則讓你保持對(duì)SQL的完全控制權(quán)復(fù)雜查詢不會(huì)被ORM框架的限制卡住。有些人會(huì)問(wèn)為什么不用MyBatis-Plus我這里用原生的MyBatis是為了把XML映射和動(dòng)態(tài)SQL這些底層機(jī)制講清楚理解了這一層再上手MyBatis-Plus就是一天的事。2. 數(shù)據(jù)庫(kù)設(shè)計(jì)與核心表結(jié)構(gòu)2.1 核心數(shù)據(jù)表用戶、自習(xí)室、座位、預(yù)約單數(shù)據(jù)庫(kù)設(shè)計(jì)是這套系統(tǒng)的地基表結(jié)構(gòu)設(shè)計(jì)得好不好直接影響后續(xù)業(yè)務(wù)邏輯的復(fù)雜度。我設(shè)計(jì)的核心表一共有五張用戶表、自習(xí)室表、座位表、預(yù)約單表還有一張管理員表。下面把每張表的重點(diǎn)字段講清楚。用戶表比較常規(guī)重點(diǎn)字段有id、用戶名、密碼BCrypt加密存儲(chǔ)、手機(jī)號(hào)、角色標(biāo)識(shí)user/admin、狀態(tài)字段和創(chuàng)建時(shí)間。密碼一定不能明文存儲(chǔ)這個(gè)是最基本的安全底線。狀態(tài)字段用來(lái)表示賬號(hào)是否被凍結(jié)方便管理員做限制。自習(xí)室表相對(duì)簡(jiǎn)單一個(gè)自習(xí)室包含名稱、位置、開(kāi)放時(shí)間、座位總數(shù)、描述信息。這里有個(gè)小設(shè)計(jì)點(diǎn)座位總數(shù)不要冗余存儲(chǔ)而是通過(guò)統(tǒng)計(jì)座位表中某個(gè)自習(xí)室id的數(shù)量實(shí)時(shí)計(jì)算。如果你想優(yōu)化查詢性能可以在自習(xí)室表里加一個(gè)total_seats字段做冗余但要注意維護(hù)數(shù)據(jù)一致性。座位表是整套系統(tǒng)的核心字段包括id、自習(xí)室id、座位編號(hào)自習(xí)室內(nèi)唯一、座位類(lèi)型比如單人桌、雙人桌、靠窗座位、安靜區(qū)座位等還有座位狀態(tài)和座位坐標(biāo)等。為什么加坐標(biāo)字段因?yàn)榍岸艘秩咀粓D沒(méi)有坐標(biāo)你就無(wú)法準(zhǔn)確把座位畫(huà)在對(duì)應(yīng)位置上。預(yù)約單表字段最多也是最容易設(shè)計(jì)出錯(cuò)的一張表。核心字段有預(yù)約單號(hào)業(yè)務(wù)編號(hào)方便人工核驗(yàn)、用戶id、自習(xí)室id、座位id、預(yù)約日期、開(kāi)始時(shí)間、結(jié)束時(shí)間、狀態(tài)字段待使用/已使用/已取消/已過(guò)期等、創(chuàng)建時(shí)間。這里要特別強(qiáng)調(diào)一個(gè)設(shè)計(jì)經(jīng)驗(yàn)業(yè)務(wù)上需要向用戶展示的編號(hào)和數(shù)據(jù)庫(kù)主鍵id一定要分開(kāi)。數(shù)據(jù)庫(kù)主鍵autoincrement的id不要直接暴露給用戶因?yàn)闀?huì)泄露系統(tǒng)數(shù)據(jù)量也容易被人遍歷接口。2.2 座位狀態(tài)與預(yù)約狀態(tài)的流轉(zhuǎn)設(shè)計(jì)狀態(tài)設(shè)計(jì)是最容易做亂的環(huán)節(jié)。我前后改了三版才理清。核心思路是把座位狀態(tài)和預(yù)約狀態(tài)拆開(kāi)不能混在一起。座位只有三種狀態(tài)空閑、占用、禁用。占用表示這個(gè)座位在當(dāng)前時(shí)間段被預(yù)約了禁用是管理員手動(dòng)關(guān)閉某些座位比如空調(diào)壞了、燈管不亮臨時(shí)維修。這里有一個(gè)非常容易掉坑的地方座位本身沒(méi)有“時(shí)間”的概念。同一個(gè)座位早上可能是空閑的下午可能是占用的。所以我用的是預(yù)約記錄來(lái)反推座位狀態(tài)而不是在座位表上存一個(gè)update_status_time字段。座位表上的status字段更準(zhǔn)確說(shuō)是“運(yùn)營(yíng)狀態(tài)”可用或禁用。真正的實(shí)時(shí)占用狀態(tài)由一個(gè)視圖或查詢接口動(dòng)態(tài)計(jì)算當(dāng)前時(shí)間范圍內(nèi)是否存在未取消的預(yù)約記錄。預(yù)約狀態(tài)我設(shè)計(jì)了四個(gè)待使用、已完成、已取消、爽約。待使用是預(yù)約成功但還沒(méi)到時(shí)間已完成是使用時(shí)間結(jié)束后系統(tǒng)自動(dòng)更新或管理員手動(dòng)確認(rèn)已取消是用戶主動(dòng)取消爽約則定義了這樣一個(gè)規(guī)則預(yù)約時(shí)間開(kāi)始后30分鐘內(nèi)未簽到自動(dòng)標(biāo)記為爽約。這套狀態(tài)機(jī)看似簡(jiǎn)單但最終落庫(kù)的時(shí)候要注意狀態(tài)字段不要用數(shù)字盡量用字符串varchar存英文枚舉值比如BOOKED、FINISHED、CANCELLED、NO_SHOW。項(xiàng)目組里新人接手時(shí)看到字符串狀態(tài)一看就懂看到0和1還得猜含義。2.3 并發(fā)防超賣(mài)唯一約束與樂(lè)觀鎖并發(fā)問(wèn)題是在做預(yù)約系統(tǒng)時(shí)最需要提前思考的地方。多個(gè)用戶同時(shí)點(diǎn)擊同一個(gè)座位的預(yù)約按鈕如果處理不當(dāng)就可能出現(xiàn)“超賣(mài)”——一個(gè)座位同一時(shí)間被預(yù)約給多個(gè)人。我用了三層機(jī)制解決這個(gè)問(wèn)題。第一層是數(shù)據(jù)庫(kù)唯一約束。在預(yù)約單表上建一個(gè)聯(lián)合唯一索引字段組合是seat_id 預(yù)約日期開(kāi)始時(shí)間。這樣數(shù)據(jù)庫(kù)層面就保證了同一座位在同一時(shí)段只能有一條有效預(yù)約記錄。只要用戶取消預(yù)約原記錄變成取消狀態(tài)新預(yù)約才能再次插入。要注意唯一索引必須帶上狀態(tài)條件嗎MySQL不支持函數(shù)索引的寫(xiě)法比較復(fù)雜所以我的做法是取消的記錄不物理刪除但預(yù)約唯一索引只約束status為生效狀態(tài)的記錄。怎么實(shí)現(xiàn)這就要用到MyBatis動(dòng)態(tài)SQL插入前先執(zhí)行一個(gè)“活性檢查”查詢確認(rèn)該座位該時(shí)間段沒(méi)有狀態(tài)為待使用/已使用的記錄再執(zhí)行插入。數(shù)據(jù)庫(kù)唯一索引用來(lái)做最后一道兜底它能攔截掉極短時(shí)間內(nèi)出現(xiàn)的并發(fā)沖突。第二層是業(yè)務(wù)層面的互斥鎖。我選擇在Service層中使用synchronized關(guān)鍵字按座位維度加鎖——更嚴(yán)謹(jǐn)?shù)淖龇ㄊ鞘褂脭?shù)據(jù)庫(kù)的悲觀鎖SELECT ... FOR UPDATE鎖住座位表的行再執(zhí)行插入。但由于自習(xí)室預(yù)約場(chǎng)景并發(fā)量不會(huì)特別高synchronized鎖綁定座位id字符串的intern方法即可滿足需求。不過(guò)使用synchronized注意鎖的粒度要細(xì)不要鎖整個(gè)方法否則所有座位的預(yù)約都會(huì)互相阻塞性能瞬間崩掉。第三層是兜底的異常處理。即使前面兩層都過(guò)去了最后一步插入時(shí)如果唯一索引沖突拋了DuplicateKeyException也要捕獲這個(gè)異常并轉(zhuǎn)成友好的業(yè)務(wù)提示“該座位已被手速更快的小伙伴預(yù)約了”。用戶看到這個(gè)提示體驗(yàn)還算可以不會(huì)覺(jué)得自己點(diǎn)了個(gè)假按鈕。3. 后端MVC架構(gòu)落地與關(guān)鍵代碼解析3.1 項(xiàng)目分層Controller、Service、Mapper到底各管什么MVC三層架構(gòu)在SpringBoot項(xiàng)目里已經(jīng)演化成更細(xì)的分層Controller層、Service層、Mapper層再外加一個(gè)entity/model層放實(shí)體類(lèi)dto層放參數(shù)對(duì)象vo層放返回結(jié)果對(duì)象。很多人剛學(xué)的時(shí)候容易把Controller寫(xiě)成“萬(wàn)能類(lèi)”所有邏輯都塞里面這是典型的錯(cuò)誤姿勢(shì)。我的分包結(jié)構(gòu)是標(biāo)準(zhǔn)做法直接照著建就行com.studyroom ├── controller // 接口層接收請(qǐng)求、校驗(yàn)參數(shù)、返回結(jié)果 ├── service // 業(yè)務(wù)層處理核心邏輯、事務(wù)控制 │ └── impl ├── mapper // MyBatis的數(shù)據(jù)訪問(wèn)接口 ├── entity // 數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類(lèi) ├── dto // 接收前端參數(shù)的傳輸對(duì)象 ├── vo // 返回給前端的結(jié)果封裝 ├── config // 配置類(lèi)比如跨域配置、攔截器配置 ├── common // 通用類(lèi)統(tǒng)一返回結(jié)果、異常處理、常量 └── utils // 工具類(lèi)Controller層只做三件事接收參數(shù)、調(diào)用Service、返回統(tǒng)一結(jié)果對(duì)象。它不應(yīng)該出現(xiàn)任何具體的業(yè)務(wù)判斷邏輯。比如預(yù)約請(qǐng)求進(jìn)入Controller后它要做的就是把預(yù)約參數(shù)綁定成一個(gè)DTO類(lèi)傳給Service然后返回Result.success(data)。至于校驗(yàn)座位是否存在、時(shí)間是否合法、用戶是否重復(fù)預(yù)約這些全在Service里完成。Service層是業(yè)務(wù)邏輯的核心所有判斷、計(jì)算、狀態(tài)流轉(zhuǎn)都在這層完成。這里有件事需要注意涉及多表更新的操作比如取消預(yù)約需要同時(shí)修改預(yù)約狀態(tài)、更新座位運(yùn)營(yíng)狀態(tài)、可能要寫(xiě)一條操作日志必須在Service方法上標(biāo)注Transactional。否則就算第一句SQL執(zhí)行成功第二句報(bào)錯(cuò)數(shù)據(jù)庫(kù)留下臟數(shù)據(jù)排查起來(lái)極其痛苦。Mapper層就純粹是數(shù)據(jù)訪問(wèn)。接口方法的注解或XML里的SQL只負(fù)責(zé)和數(shù)據(jù)庫(kù)打交道不做運(yùn)算不做判斷把查詢結(jié)果原樣返回。我在項(xiàng)目里統(tǒng)一使用XML文件寫(xiě)SQL因?yàn)閯?dòng)態(tài)SQL標(biāo)簽如if、where、foreach在XML里可讀性更高復(fù)雜聯(lián)表查詢也好維護(hù)。簡(jiǎn)單的單表查詢用注解Select也可以但為了風(fēng)格統(tǒng)一我全部走了XML。3.2 MyBatis的XML映射與動(dòng)態(tài)SQLMyBatis的XML文件是這個(gè)項(xiàng)目里一眼看上去最繁瑣、但實(shí)際最靈活的部分。它最大的優(yōu)勢(shì)就是動(dòng)態(tài)SQL。比如管理員在后臺(tái)篩選預(yù)約記錄會(huì)有多個(gè)篩選條件按狀態(tài)查、按日期查、按自習(xí)室查、按用戶手機(jī)號(hào)查。這些條件組合起來(lái)可能幾十種情況如果全寫(xiě)死在Java代碼里那打補(bǔ)丁得累死。我的做法是這樣的用一個(gè)Map或一個(gè)DTO接收所有查詢參數(shù)然后在XML里用where標(biāo)簽if標(biāo)簽動(dòng)態(tài)拼接。這樣當(dāng)某個(gè)參數(shù)為空時(shí)對(duì)應(yīng)的SQL條件片段就不會(huì)拼進(jìn)去查詢語(yǔ)句會(huì)自適應(yīng)變化。下面是一個(gè)預(yù)約記錄分頁(yè)查詢的XML片段select idselectReservationPage resultTypecom.studyroom.vo.ReservationVO SELECT r.id, r.reservation_no, r.room_id, r.seat_id, r.user_id, u.username, u.phone, r.reserve_date, r.start_time, r.end_time, r.status, r.create_time FROM reservation r LEFT JOIN user u ON r.user_id u.id where if teststatus ! null and status ! AND r.status #{status} /if if testroomId ! null AND r.room_id #{roomId} /if if testreserveDate ! null AND r.reserve_date #{reserveDate} /if if testkeyword ! null and keyword ! AND (u.username LIKE CONCAT(%, #{keyword}, %) OR u.phone LIKE CONCAT(%, #{keyword}, %)) /if /where ORDER BY r.create_time DESC LIMIT #{offset}, #{pageSize} /select這里有個(gè)細(xì)節(jié)值得留意LIKE查詢的寫(xiě)法。我之前見(jiàn)過(guò)有人直接在Java代碼里拼好%...%再傳到SQL里這樣也work但存在注入風(fēng)險(xiǎn)。用CONCAT函數(shù)在SQL層拼接更安全。LIMIT后面的offset和pageSize用#{}參數(shù)占位MyBatis會(huì)自動(dòng)做預(yù)編譯防SQL注入。這一點(diǎn)是面試高頻考點(diǎn)也是實(shí)際開(kāi)發(fā)必須養(yǎng)成的好習(xí)慣。另外resultType和resultMap的選擇上我大部分聯(lián)表查詢用resultType直接映射到VO對(duì)象只要數(shù)據(jù)庫(kù)字段名和VO屬性名通過(guò)下劃線轉(zhuǎn)駝峰映射就能對(duì)上。需要在application.yml里開(kāi)啟map-underscore-to-camel-case: true這個(gè)配置。3.3 預(yù)約與取消預(yù)約的接口實(shí)現(xiàn)預(yù)約接口是整個(gè)系統(tǒng)最核心的接口它的實(shí)現(xiàn)邏輯我拆成了五個(gè)步驟參數(shù)校驗(yàn)、重復(fù)檢查、沖突檢查、座位狀態(tài)檢查、插入預(yù)約單。下面把關(guān)鍵代碼的思維流程講一遍。參數(shù)校驗(yàn)階段要檢查必傳字段用戶id、自習(xí)室id、座位id、預(yù)約日期、開(kāi)始時(shí)間和結(jié)束時(shí)間。開(kāi)始時(shí)間必須早于結(jié)束時(shí)間預(yù)約日期不能是過(guò)去日期。這些校驗(yàn)放在Service里能保證即使繞過(guò)前端校驗(yàn)也攔得住。重復(fù)檢查就是檢查同一個(gè)用戶同一個(gè)時(shí)間段內(nèi)是否已經(jīng)有預(yù)約。規(guī)則可以做成一個(gè)用戶同一時(shí)間段只能有一個(gè)有效預(yù)約避免“占著茅坑不拉屎”的惡意預(yù)約行為。沖突檢查則查座位在目標(biāo)時(shí)間段是否已有其他用戶的預(yù)約。座位狀態(tài)檢查要查座位的運(yùn)營(yíng)狀態(tài)是否可用。如果這個(gè)座位被管理員標(biāo)記為禁用那預(yù)約請(qǐng)求要直接拒絕。最后一步才是生成預(yù)約單狀態(tài)設(shè)為待使用同時(shí)返回給前端一個(gè)預(yù)約成功的提示和預(yù)約單號(hào)。取消預(yù)約的邏輯相對(duì)簡(jiǎn)單但要仔細(xì)考慮時(shí)間限制。我設(shè)定的規(guī)則是預(yù)約開(kāi)始時(shí)間前30分鐘允許取消已經(jīng)超過(guò)時(shí)間就只能走“超時(shí)未到”流程。這里有一個(gè)特殊處理取消操作要同步做兩件事改預(yù)約單狀態(tài)為已取消同時(shí)如果當(dāng)前沒(méi)有其他預(yù)約占用該座位座位狀態(tài)恢復(fù)為空閑。為了讓讀者更好理解我把核心的Service方法偽代碼寫(xiě)出來(lái)Override Transactional(rollbackFor Exception.class) public ReservationResponse reserve(ReserveRequest request) { // 1. 參數(shù)校驗(yàn) if (request.getStartTime().compareTo(request.getEndTime()) 0) { throw new BizException(開(kāi)始時(shí)間必須早于結(jié)束時(shí)間); } // 2. 檢查用戶是否已有沖突預(yù)約 int count reservationMapper.checkUserConflict( request.getUserId(), request.getReserveDate(), request.getStartTime(), request.getEndTime()); if (count 0) { throw new BizException(你已有同時(shí)段的預(yù)約記錄); } // 3. 檢查座位是否可用 Seat seat seatMapper.selectById(request.getSeatId()); if (seat null || SeatStatus.DISABLED.getCode().equals(seat.getStatus())) { throw new BizException(座位不可用); } // 4. 檢查座位同一時(shí)段沖突 int seatConflict reservationMapper.checkSeatConflict( request.getSeatId(), request.getReserveDate(), request.getStartTime(), request.getEndTime()); if (seatConflict 0) { throw new BizException(該座位當(dāng)前時(shí)段已被預(yù)約); } // 5. 生成預(yù)約單 Reservation reservation new Reservation(); reservation.setReservationNo(generateReservationNo()); // ... set other fields reservationMapper.insert(reservation); return ReservationResponse.from(reservation); }generateReservationNo我是這樣生成的每天日期字符串加六位隨機(jī)數(shù)比如20250601 823471。加上唯一索引防止極端情況下兩個(gè)單號(hào)撞車(chē)。這個(gè)單號(hào)的價(jià)值主要體現(xiàn)在線下場(chǎng)景自習(xí)室管理員看到單號(hào)就能快速在系統(tǒng)里查到對(duì)應(yīng)預(yù)約比用數(shù)據(jù)庫(kù)id好太多。4. Vue前端實(shí)現(xiàn)與交互細(xì)節(jié)4.1 項(xiàng)目初始化與路由設(shè)計(jì)前端用Vue腳手架創(chuàng)建項(xiàng)目后首先要裝依賴vue-router負(fù)責(zé)路由pinia負(fù)責(zé)狀態(tài)管理axios負(fù)責(zé)發(fā)HTTP請(qǐng)求element-plus或vant做UI組件庫(kù)。我這套PC端管理類(lèi)頁(yè)面比較多選的是Element Plus。路由設(shè)計(jì)我采用了動(dòng)態(tài)路由的思路登錄成功之后根據(jù)后端返回的角色信息動(dòng)態(tài)添加路由。普通用戶能訪問(wèn)的路由是首頁(yè)、自習(xí)室列表、座位預(yù)約、我的預(yù)約、個(gè)人中心管理員能額外訪問(wèn)座位管理、自習(xí)室管理、預(yù)約管理、數(shù)據(jù)統(tǒng)計(jì)。這樣避免把所有路由一次性注冊(cè)用戶手動(dòng)輸入U(xiǎn)RL訪問(wèn)不該進(jìn)的頁(yè)面直接被404或重定向。實(shí)現(xiàn)核心是在router.beforeEach的全局前置守衛(wèi)中加邏輯取到用戶的token再根據(jù)角色拼接需要?jiǎng)討B(tài)添加的路由。這個(gè)方案要注意一個(gè)問(wèn)題刷新頁(yè)面時(shí)路由會(huì)被重置必須在刷新前把路由信息存到pinia或localStorage里下次進(jìn)入時(shí)再重新addRoute。4.2 自習(xí)室列表與選座交互用戶進(jìn)入預(yù)約流程的核心路徑是選擇自習(xí)室 - 查看座位圖 - 點(diǎn)擊座位 - 確認(rèn)預(yù)約信息 - 提交成功。自習(xí)室列表頁(yè)比較簡(jiǎn)單就是一個(gè)卡片列表。每個(gè)卡片展示自習(xí)室名稱、位置、開(kāi)放時(shí)間、剩余座位數(shù)。剩余座位數(shù)不要單獨(dú)寫(xiě)死而是每次查詢時(shí)動(dòng)態(tài)計(jì)算。我這邊是用一個(gè)接口獲取所有自習(xí)室再返回每個(gè)自習(xí)室的可用座位數(shù)。座位圖是前端開(kāi)發(fā)中最需要花心思做的一塊。我設(shè)計(jì)了一個(gè)Canvas繪制的座位平面圖后端返回每個(gè)座位在自習(xí)室中的相對(duì)坐標(biāo)(x, y)前端根據(jù)坐標(biāo)繪制座位方塊不同狀態(tài)的座位用不同顏色區(qū)分綠色空閑可點(diǎn)擊、灰色已占用、黃色被選中。用戶點(diǎn)擊空閑座位后彈出側(cè)邊欄顯示預(yù)約時(shí)間選擇器選好時(shí)間段后提交。這個(gè)交互看似簡(jiǎn)單但雷區(qū)不少。最大的坑是點(diǎn)擊事件綁定。如果你用div渲染多個(gè)座位事件冒泡可能導(dǎo)致用戶點(diǎn)一個(gè)座位被判定成點(diǎn)擊另一個(gè)。解決辦法是為每個(gè)座位設(shè)置唯一的data-index屬性事件處理時(shí)用event.target.dataset.index來(lái)鎖定目標(biāo)而不是依賴事件對(duì)象的其它屬性。另外還要給選中的座位做高亮并且一定要處理用戶點(diǎn)擊A座位再點(diǎn)擊B座位的情況上一次選中的狀態(tài)要取消掉。具體到座位坐標(biāo)返回的接口設(shè)計(jì)我推薦一次返回該自習(xí)室當(dāng)天所有座位信息的列表包含id、座位編號(hào)、x坐標(biāo)、y坐標(biāo)、狀態(tài)。前端拿到數(shù)據(jù)后渲染即可。這里不要在選座時(shí)才逐個(gè)請(qǐng)求座位詳情會(huì)造成大量HTTP請(qǐng)求拖慢頁(yè)面響應(yīng)。4.3 狀態(tài)管理用戶信息與預(yù)約狀態(tài)Pinia是Vue 3官方推薦的狀態(tài)管理庫(kù)相當(dāng)于是Vuex的進(jìn)化版。它的代碼比Vuex簡(jiǎn)潔很多去掉了mutationsaction里直接改state。我把用戶登錄信息、token、預(yù)約篩選條件這些全局共享數(shù)據(jù)都放進(jìn)了Pinia。實(shí)際開(kāi)發(fā)中比較關(guān)鍵的是Token管理。用戶登錄成功后后端返回一個(gè)token我用的是JWT前端把token存到localStorage里同時(shí)設(shè)置axios的請(qǐng)求攔截器在每次請(qǐng)求前自動(dòng)把token放進(jìn)請(qǐng)求頭Authorization字段。響應(yīng)攔截器里做統(tǒng)一錯(cuò)誤處理后端返回401時(shí)自動(dòng)清除token并跳轉(zhuǎn)登錄頁(yè)返回業(yè)務(wù)錯(cuò)誤碼時(shí)直接彈出ElMessage提示用戶。預(yù)約狀態(tài)的響應(yīng)式更新也很重要。用戶成功取消一個(gè)預(yù)約后之前座位圖上對(duì)應(yīng)座位的狀態(tài)還顯示為灰色已占用但數(shù)據(jù)庫(kù)里已經(jīng)變成空閑了。這時(shí)候必須觸發(fā)數(shù)據(jù)刷新。我的做法是把當(dāng)前自習(xí)室的座位數(shù)據(jù)存到Pinia的管理模塊里取消預(yù)約成功后調(diào)用seatStore的fetchSeats方法重新拉取座位數(shù)據(jù)保證UI和數(shù)據(jù)庫(kù)狀態(tài)一致。千萬(wàn)別圖省事只在前端改一個(gè)座位狀態(tài)變量一旦刷新頁(yè)面就露餡而且并發(fā)情況下用戶看到的可能是過(guò)期數(shù)據(jù)。5. 部署運(yùn)行與常見(jiàn)問(wèn)題排查5.1 本地快速啟動(dòng)初始化SQL與配置文件整套系統(tǒng)跑起來(lái)的第一步是初始化數(shù)據(jù)庫(kù)。提前把建庫(kù)建表SQL腳本準(zhǔn)備好包括核心表數(shù)據(jù)和幾個(gè)測(cè)試用戶數(shù)據(jù)。MySQL 8.x版本要注意字符集數(shù)據(jù)庫(kù)和表都用utf8mb4而不是utf8因?yàn)閡tf8在MySQL里不是標(biāo)準(zhǔn)的四字節(jié)UTF-8emoji等特殊字符存不進(jìn)去會(huì)報(bào)錯(cuò)。這個(gè)問(wèn)題非常隱蔽排查很久才發(fā)現(xiàn)的。后端配置文件application.yml里我最常被問(wèn)到的幾個(gè)配置server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/study_room?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue username: root password: 123456 jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT8 mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.studyroom.entity configuration: map-underscore-to-camel-case: trueserverTimezoneAsia/Shanghai是很多新人忽略的地方。MySQL 8.x驅(qū)動(dòng)默認(rèn)時(shí)區(qū)是UTC如果不指定查出來(lái)的時(shí)間會(huì)比本地時(shí)間早8小時(shí)預(yù)約時(shí)間的顯示全部錯(cuò)亂。allowPublicKeyRetrievaltrue這個(gè)參數(shù)是在用caching_sha2_password認(rèn)證插件時(shí)需要的不加會(huì)報(bào)Public Key Retrieval is not allowed錯(cuò)誤。5.2 高頻報(bào)錯(cuò)與解決方案我把開(kāi)發(fā)和部署中遇到的幾個(gè)高頻問(wèn)題整理成表。這些問(wèn)題都是新手期最容易觸發(fā)、且真實(shí)項(xiàng)目里也極有可能再現(xiàn)的。問(wèn)題現(xiàn)象原因解決方案Failed to configure a DataSourceapplication.yml找不到配置或類(lèi)掃描路徑不對(duì)檢查注解SpringBootApplication所在包是否能掃描到配置類(lèi)Invalid bound statement (not found)mapper接口和XML文件未綁定檢查XML文件位置是否在mapper-locations配置路徑下方法名是否一致Cannot load driver class: com.mysql.cj.jdbc.DriverMySQL驅(qū)動(dòng)未引入在pom.xml中引入mysql-connector-java依賴版本需與本地MySQL對(duì)應(yīng)日期錯(cuò)亂少8小時(shí)時(shí)區(qū)配置未設(shè)置增加serverTimezoneAsia/Shanghai參數(shù)跨域請(qǐng)求被攔截前后端端口不一致在SpringBoot中配置CorsFilter或使用CrossOrigin注解前端請(qǐng)求404或500后端接口路徑或參數(shù)名不一致用瀏覽器開(kāi)發(fā)者工具的Network面板查看具體請(qǐng)求和響應(yīng)唯一索引沖突Duplicate entry同一座位同一時(shí)間段重復(fù)預(yù)約在Service中執(zhí)行沖突檢查并捕獲異常返回友好提示跨域問(wèn)題我要單獨(dú)說(shuō)。我開(kāi)發(fā)時(shí)前端跑在5173端口Vite默認(rèn)后端跑在8080端口兩者端口不同瀏覽器攔截跨域請(qǐng)求很正常。解決方式有兩種后端統(tǒng)一配置一個(gè)CorsFilter允許指定源和指定方法另一個(gè)是后端使用Spring Cloud Gateway等網(wǎng)關(guān)代理但單機(jī)開(kāi)發(fā)時(shí)一個(gè)CorsFilter就夠用了。生產(chǎn)環(huán)境建議使用Nginx做反向代理把前端靜態(tài)文件和后端接口放到同一個(gè)域名下從根源上規(guī)避跨域。5.3 性能與并發(fā)優(yōu)化心得自習(xí)室預(yù)約這類(lèi)系統(tǒng)的并發(fā)量不會(huì)特別夸張但是某些高峰時(shí)段例如圖書(shū)館的期末復(fù)習(xí)周還是會(huì)有一波瞬間高并發(fā)。我的優(yōu)化經(jīng)驗(yàn)分三檔。第一檔是前端限流。座位圖上的座位數(shù)量有限用戶需要先選擇時(shí)間段再提交避免所有人都同時(shí)在預(yù)約按鈕上狂點(diǎn)。提交按鈕設(shè)置60秒的防重復(fù)點(diǎn)擊限制用戶操作邏輯上先攔住一部分無(wú)效請(qǐng)求。第二檔是后端緩存。熱門(mén)自習(xí)室的座位狀態(tài)數(shù)據(jù)可以緩存到Redis減少數(shù)據(jù)庫(kù)的查詢壓力。但緩存會(huì)讓數(shù)據(jù)狀態(tài)有一定的延遲需要配合緩存過(guò)期時(shí)間或者消息通知主動(dòng)失效。自習(xí)室預(yù)約系統(tǒng)的數(shù)據(jù)一致性要求并不那么高因?yàn)橛脩舨樵冏粻顟B(tài)時(shí)看到有一兩秒的延遲完全可以接受但預(yù)約提交瞬間必須讀最新數(shù)據(jù)。第三檔才是數(shù)據(jù)庫(kù)性能優(yōu)化。給預(yù)約單表建立合適的聯(lián)合索引預(yù)約日期狀態(tài)自習(xí)室id座位表建立自習(xí)室id索引用戶表手機(jī)號(hào)建唯一索引。這幾種索引組合能覆蓋絕大部分業(yè)務(wù)查詢場(chǎng)景。不要盲目給所有字段加索引寫(xiě)多讀少的字段加索引反而拖慢插入速度。還有一個(gè)經(jīng)驗(yàn)是盡量把復(fù)雜SQL拆分。比如統(tǒng)計(jì)報(bào)表需求每日預(yù)約量、座位利用率、自習(xí)室排行。這類(lèi)統(tǒng)計(jì)查詢?cè)跀?shù)據(jù)量小的時(shí)候用一條SQL就能搞定但數(shù)據(jù)量一旦上來(lái)group by和子查詢會(huì)讓數(shù)據(jù)庫(kù)壓力劇增。我的做法是把統(tǒng)計(jì)任務(wù)拆成定時(shí)任務(wù)每天凌晨用Spring Boot的Scheduled注解生成當(dāng)天的統(tǒng)計(jì)匯總數(shù)據(jù)存到統(tǒng)計(jì)表前臺(tái)展示時(shí)只需查統(tǒng)計(jì)表查詢性能提升非常明顯。6. 從課設(shè)到真實(shí)項(xiàng)目的提升點(diǎn)從一個(gè)能跑起來(lái)的課設(shè)系統(tǒng)到一個(gè)稍微接近生產(chǎn)環(huán)境的應(yīng)用中間還差幾個(gè)關(guān)鍵動(dòng)作。整理項(xiàng)目時(shí)我用下面幾條標(biāo)準(zhǔn)來(lái)衡量系統(tǒng)成熟度也可以對(duì)照看看你的項(xiàng)目卡在哪一檔。第一是日志鏈路。開(kāi)發(fā)階段print()完事直接輸出到控制臺(tái)沒(méi)問(wèn)題但部署到服務(wù)器后就必須依賴日志定位問(wèn)題。我用的方案是Logback按天滾動(dòng)切割ERROR級(jí)別和INFO級(jí)別分開(kāi)輸出。預(yù)約成功、取消、失敗這些核心操作至少記錄一條INFO日志包含用戶id、座位id和操作結(jié)果方便日后做問(wèn)題排查。第二是參數(shù)校驗(yàn)的規(guī)范化。不要在前端做了一堆校驗(yàn)就認(rèn)為萬(wàn)事大吉。后端必須用JSR 303的Valid注解做參數(shù)校驗(yàn)在DTO字段上標(biāo)注NotNull、NotBlank、Length等注解寫(xiě)起來(lái)零成本但能攔截掉大量無(wú)效請(qǐng)求。第三是接口文檔。以前很多小團(tuán)隊(duì)不愛(ài)寫(xiě)接口文檔前后端聯(lián)調(diào)靠口頭溝通效率極低。后來(lái)普遍的方案是集成SpringDoc或Swagger啟動(dòng)項(xiàng)目后自動(dòng)生成接口文檔。另一個(gè)更好維護(hù)的方式是寫(xiě)Apifox或Postman的接口集合把每個(gè)接口的請(qǐng)求參數(shù)和返回結(jié)果固化下來(lái)新成員接手時(shí)直接看接口集合就能上手不用讀一遍源碼。第四是數(shù)據(jù)安全。密碼加密使用BCrypt登錄接口加簡(jiǎn)單的驗(yàn)證碼或圖片驗(yàn)證碼做防爆破。預(yù)約的接口要驗(yàn)證當(dāng)前登錄用戶和操作對(duì)象是否一致防止通過(guò)篡改請(qǐng)求參數(shù)操作他人的預(yù)約記錄。這個(gè)越權(quán)問(wèn)題在課設(shè)里常常被忽略但在真實(shí)項(xiàng)目中屬于高危漏洞。我用的是攔截器加ThreadLocal保存當(dāng)前登錄用戶信息Service層取用戶id時(shí)統(tǒng)一從這個(gè)ThreadLocal取前端傳來(lái)的任何user_id都不作為權(quán)限判斷依據(jù)。7. 實(shí)操中的個(gè)人體會(huì)整個(gè)項(xiàng)目做完回頭復(fù)盤(pán)我最大的感受是技術(shù)選型重要但比技術(shù)選型更重要的是對(duì)業(yè)務(wù)邊界和狀態(tài)變化的清晰認(rèn)知。這套系統(tǒng)的業(yè)務(wù)本質(zhì)并不復(fù)雜就是一個(gè)座位的占用時(shí)間片管理但圍繞這個(gè)本質(zhì)展開(kāi)的字段設(shè)計(jì)、狀態(tài)流轉(zhuǎn)、并發(fā)控制、交互體驗(yàn)每一環(huán)都會(huì)決定系統(tǒng)的穩(wěn)定性和易用性。對(duì)我個(gè)人來(lái)說(shuō)動(dòng)手做一個(gè)項(xiàng)目永遠(yuǎn)比看書(shū)看視頻學(xué)得快。遇到問(wèn)題靠搜索引擎、靠官方文檔、靠上下文調(diào)試慢慢解決踩過(guò)坑的記憶最牢固。也建議你把這個(gè)項(xiàng)目跑起來(lái)之后嘗試加一個(gè)功能或者換一種實(shí)現(xiàn)方式比如把座位預(yù)約改成計(jì)數(shù)預(yù)約、加一個(gè)基于Redis的排隊(duì)功能、把統(tǒng)計(jì)報(bào)表改成圖表可視化。不要照著我寫(xiě)的代碼抄一遍就完事改造的過(guò)程中你才會(huì)真正理解哪一步為什么這么設(shè)計(jì)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
狠狠色狠狠色狠狠五月| 欧美一区二区在线资源| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 天天天天干| 97综合在线| 天天影视色香色欲| 日韩av在线免费网站| 亚洲成人妻日韩在线| 精品黑人一区二区| 开心激情婷婷| 亚洲天天自拍| 操九九九九九九| 综合性视频99| 做爱A级亚欧| 超碰成人国产| 欧美乱欲| 欧美东京热精品A∨| 少妇一区二区三区在线观看| 三级色影综合网| 亚洲色图日韩精品| 九九九九一区| 午夜免费福利视频一区| 肉丝无码中文高清| 日韩成人在线性爱视频| 五月天AV资源| 精品人妻二区三区| 伊人久久婷婷| hd成人一区二区在线| 嫩草在线视频| 人人操,人人插| 伊人91| 综合97亚洲| 天美av在线观看| 日韩乱伦视频| 久久国产热视频97电影| 性爱综合一区二区| 欧美性爱综合,免费| 日韩干B| 亚州久久9| 久久精品天美| 夜夜高潮夜夜爽| 午夜免费视频1000| 人妻中文字幕日韩电影| 超碰99在线| 青草青草久热| 成人在线视频网| 国产高清在线观看欧美| 久久亚洲AV成人精品无码| 成年人三级黄色片视频| 成在线人在线观看视频| 性夜影院爽黄A爽免费动漫| 91丝袜美女视频| 人妻色情天天操| 国产久久男人天堂| 蜜桃午夜视频一区二区| 尤物AV免费网站| 久肏视频字幕| 性影在线视频| 色久桃花影院在线观看| 少妇一级婬片免费放一级a性色.| 超清福利精品视频在线| 日本欧美色| 高清在线偷拍自拍视频| 欧美视频一| 久久综合女优| 中文字幕AV乱伦| 亚洲熟妇无码一区二区三区| 蜜桃AV天堂| 九九九九精品一区| 久久久久久久久女黄| 久久久久女教师免费一区| 日本幼女18+| 青青草中文字幕| 毛片久久| 操逼国产免费| 污啪啪啪视频| 亚洲 欧美 日韩另类 麻豆| 亚洲 日韩 丝袜 熟女 变态| 丁香五月综合| 精品人妻一区二区三区在| 少妇久久久免费| 操人妻视频| 日韩美女高潮喷水视频| 久久av一级av少妇av高潮| 亚洲高清欧美总合| 国产精品久久天天干| 国产色呦呦| 亚洲影视综合网| 日韩久久艹| 碰人碰碰人人开房人肉| 丁香九月 婷婷| 婷婷99| 日韩亚洲美女一区久久| 国产精品3| 国产第11页| 91网站18+| 91在线视频国产网站| 蜜臀一区二区三区在线| 久久人人爽人人爽人人片Ⅴ| 欧美色一二三| 91香蕉国产尤物视频| 尤物视频一区| 日本三级日本三级三级人妇四虎| 九久久九九久视频| 日韩欧美成人午夜福利| 色999人与兽| 蜜桃臀一区二区aV| 尤物视频一区| 97在线观看免费视频l| 97色在线视频| 亚洲色图8| 日本506070| 一级特级aaaa毛片免费观看 | www.久久99| 啊啊好多水| 2017天天拍大香蕉| 睡产熟女乱伦| 99久在线精品99re8热视频在线| 无马一区二区| 看日韩操逼| 国产视频一区二区在线| 久96热在线观看视频| 综合自拍| 99色色网| 国产久久日韩网站导航| 国产精品96| 九色在线熟女国产黑人| 超碰97亚洲区| 久草视频分类在线| 98久久| 久久久亚洲Av| 青青伊人久久| 夜色AV无码手机在线影院| 亚洲中文字幕久久人妻| 美欧老女人97| 日韩成人大片一区二区| 天天影视综合色| 色五月天AV| 91黑丝少妇| 香伊人在线| 夂久色| 亚洲AV色图| 色五月婷婷久久| 亚洲素人综合| 婷婷综合久久| 国产无码成人无码| 综合日韩激情另类图片| 欧美色交| 日少妇亚洲版| 国产精品亚洲无码| 97久久精品不卡| 久久久人妻| 9/A片| 亚洲综合91| 中文字幕日本久久| 超碰97人人乐| 视频分类 国内精品| 欧美一二级| www.色99| 天天噜| 99精品久久| 国产精品农村妇女| 嗯……啊…嗯嗯…啊…好舒服| 久久免费99精品久久久久久| 亚洲人人夜夜澡人人爽| 激情婷婷| 看免费的黄片| 亚洲色图日韩丝袜制服一区二区五月在线 | 欧美有码亚洲中文字幕一区二区三区四区| 国产自制av蜜乳| 中文字幕超碰CAO| 网页导航五月天免费一二三区| 美女淫穴| 3571色综合一区二区二区| 免费成人自拍视频在线| 国产熟女自拍| 国产AV天美| 日韩av不卡在线观看| 国产自啪精品视频网站黑丝| 久热69九色熟妇97| 午夜影美女日鸡鸡天天视频国产| 日韩9区| 成人在线视频一区| 又黄又爽在线观看视频| 国产日韩精品人妻久久久久色欲网站| 97超级久久| 久久久久久久久久久999| 九九无码| 色五月综合网| 十八禁的黄污污免费网站| 欧美 亚洲| 欧美熟女丝袜| 欧美78| 中日韩欧美精品无码AⅤ一区二区| 9999亚洲精品| wwe 天天干.com| 国产农村一一级特黄毛片| 你懂的在线观看区国产| 97亚洲在线| 本道在线| AV色图| 啊好大好舒服| 97视频在| 91在线限制级| 天天操女人| 99热婷婷| 免费观看的av| 婷婷五月天成人| 日语五十路和六十路亚洲国产精品| 欧美图片校园春色| AV天堂因数| 加勒比色综合| 色九九久九九| 欧美综合自拍| 亚洲日本激情| 亚洲国产成人精品无码专区| 日韩少妇一区二区三区| 福利伊人玖玖国产| 蜜乳AV一区| 欧美日韩黄片精品在线| 极品销魂美女一区二区| 岛国免费黄色网址| 乱欲一区二区| 五月综合激情| 亚洲欧洲视频小说在线观看| 亚洲色9| 亚洲码和欧洲精品激情系列| 亚洲欧洲日产国产综合网| 少妇69中文| 日韩av熟女一区二区三区成人| 欧日韩不卡视.频| 亚洲丝袜色| 天天操夜夜操| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 日本超碰97日韩精品人妻| dy888午夜老子影视达达兔| 九九在线视频| 欧美日韩国产成人高清| 久久久精品日本一道| 欧美洲精品一级| 一本久道久久综合狠狠爱| 91高清欧美| 啊嗯好大视频在线观看| 日韩免费看在线黄色片| 蜜桃精品视频一区二区三区| 久9久9精品| 日韩黄色电影网站| 一级啊性爱在线视频| 色欲av国内精品久久久久久| 久草婷婷| 在线观看AV不卡| www成人啪啪18秘 免费| 国产日产精品久久快鸭的功能介绍| 熟女露脸激情自拍视频| 妇女视频网站| 亚洲综合骚逼| 国产精品免费1区2区视频| 男人的天堂成人的社区| 亚洲国产成人精品无码专区| 天堂岛av| 国产真乱mangent| 男人的天堂2000| 精品超碰国产| 99RE在线视频精品,这里只有精品| 亚洲射综合网| 色噜噜综合在线| 最近的最新的中文字幕视频| 亚洲国产ⅴ高清在线观看| 亚洲九九九| 9久久久久久| 日韩AV一区二区三区三州三州| 亚洲三级。日韩三级| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场| 中文字幕av色| 亚洲欧美精品一区天堂久久 | 吉川爱美亚洲二区在线| 久久精品国产精品| 色老汉色| 色色激情五月天| 午夜天堂啪啪| 五月婷在线| 天天日日日射| 国产精品久久久久久久久久久久久久久| 久超碰在| 国产精品一二三区福利| 91美女视频在线| 亚洲影视第一页| 99re在线视频| 污电影在线观看| 久久熟女嫩草成人片免费| 欧美亚洲se91| 精品人妻一区二区三区鲁大师| 九九九国产| 亚洲精品国产无码高清| 欧美爱国产综合、| 东京热毛片177b2viP| 成人性爱免费播放| 九色精品视频导航1| 草草草视频在线免费看| 啪啪视频亚洲第一| 中文字幕 一区二区 亚洲无码| 一区二三区四区视频大全套| 日本一区二区三区四区五区六区七区八区九区| 人人干人人操人人..com| 亚洲中文字幕97久久精品少妇| 蜜臀久久一区二区| 欧美后入式| 亚洲精品三区在线观看| 久久久久性熟视频| 密乳视频在线| 色色99| 午夜美女诱惑电源网| 人人操人人干网页| 亚洲限制级在线| 亚洲性爱成人| 欧美日韩黄色片一区二区三区四区人与兽做爱| 国产久9| 十八禁啪啪视频| 4tube欧美女厕所| 久操精品| 99只有精品| 久久久久亚洲熟妇熟女| 夜夜爽77777| 国产色图乱伦| 欧美第一页| 狠狠爱夜夜干| 伦伦成年午夜免费视频| 岛国福利在线精品播放| 97超视频在线观看| 无码不卡亚洲成?人片| 欧美精品人妻视频| 国产东北女人在线视频| 久久偷拍人| 日韩精品人妻一| 午夜精品人妻二区三区| 丁香激情网| 日韩欧美中文字亚洲慕| 黄在线| 女人高潮抽搐喷水视频网站| 91视频综合| 欧洲精品一级二级精品综合视频综合| 在线女人91| 91精品人妻五十路| 秋霞操逼片| 久久久人妻| 二级久久网| 无码人妻精品一区二区三区99不卡| 东方亚洲在线操逼天堂| 久久久久久午夜男人的天堂| 少妇无码av专区线| 五月丁香激情四射| 啊啊啊啊啊舒服| 亚欧无码线免费观看视频| 美女丝袜激情小说| 超碰97久久国| 99re6国产精品99re在线| 人妻少妇精品久久久久久久| 九九九国产精品| 91在线国产后入风骚翘臀美女素人| 麻豆国产原创AV色哟哟| 精品一区二区三区四区女| 日本97久久久精品| 中文AV制服乱伦| 日本精品一区二区三区四区的功能| 制服诱惑亚洲一区二区三区在线观看| 九九久久首页| 久99在线免费观看视频| 91在线免费精品视频| 四虎影视永久在线免费| 久久综合99| 漂亮人妻被强中文字幕hd| 色天堂在线观看| 9久9久| 97超碰超碰| 色在线综合| 色欲日韩欧美在线一区| 欧美成人9797| 国产精品久久久久999| 97se亚洲综合自| 熟女乱3伦999| 日日爽夜夜爽| 国产偷人妻精品一区二区在线| 75大香蕉| 少妇久久久久久久| 天天色播亚洲综合网站| 久久鲁夜| 无码精品久久久久久亚洲| 97任你吞精| 天美传媒av 在线| 内射中国少妇高清视频免费视频| 一本久久久精品| 多乙久久久久久| 草久久久| 成人av福利在线观看| 五月天婷婷影院| AV男人天堂网| 国产在线视视频有精品| 国产后入清纯| 亚洲强奸乱伦影视网| 亚洲熟女乱熟乱熟妇综合网二区| 日本道人妻久久久在线不卡色视频| 亚洲精品欧洲精品| 丝袜美腿制服人妻二区中文字幕| 人妻激情另类| 国产精品4p在线观看| 综合久| 亚洲男人天堂AV| 亚洲高潮少妇| 日本国产亚洲一区在线观看| 精品无码久久久| 欧美亚洲综合高清在线| 蜜桃臀 后入 一区 二区 三区 在线| 久久中文字幕在线观看| 亭亭丁香激情| 国产高清成人传媒影视| 欧美高清色| 78久久久| 色色无码| 久久无码电影| yaouchengrenav| 97视频在线免费播放| 精品一区二区亚洲国产| 欧美激情专区| 欧美日韩天堂| 欧美第五页| 熟妇一区二区三区| www.五月天| 天天日天天干天天操| 粉嫩AV一区夜夜嗨| 日韩人成网站在线播放| 97综合国产| 青操影院| 欧美美女在线高潮999| site:sinbotex.com| 嗯嗯啊啊的视频| 久久黄黄| 国产精品视频麻豆入口| 天天谢天天干| 欧美性爱一级操| 欧美欧美啪啪视频| 亚洲九区| 黄色片G G G| 中文字幕人妻色偷偷久久皮 | 亚洲天堂色图| 亚洲无码国产精品久久| 久久思思热| 射 色综合| 男人的天堂无码| 一区操逼| 岛国福利在线精品播放| 99久在线精品99re8| 人人操人人操人人人操| 99久在线精品99re8热视频在线| 992视频一区| 一本一道vs波多野结衣| 中文幕97| 国产操伦| 超碰av人人人| 91精品人妻一品二品三品| 亚欧无码在线| 波多野42部激情无码喷潮| a'v在线资源| 亚洲色图8| 天天澡天天爽日日AV| 国产精品自在线发布| 色妹子A V| 久久嫩草| 日韩欧美俄罗斯A片| 99天天超碰| 97精品免费视频网站| a片 xxxx受爽视频| 九九热最新| 久久久久国产精品人妻aⅴ天堂| 91麻豆天美传媒在线| 精品国产乱码久久久久久口爆网站 | www黄片免费看com| 中文字幕人乱码中文字的预防方法 | 玖玖爱伊人玖玖爱| 乳欲人妻办公室奶水| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美高清性猛交| 日本视频在线中文字幕| 午夜人妻精品综合在线| 欧美 亚洲 第一页| 天天摸天天插天天日| 亚洲男人天堂手机版| 大香蕉亚洲中文| 日本亚洲嫩草影院啪啪| 欧美亚州手机在线| 男人天堂网址| 国产精品高潮久久AV| 免费成人在线观看91| 97天天综合网| av黄图片在线观看| 襙一襙| 国产精品麻豆成人av| 激情综合色| 伊人嫩草| 欧州色图区| 亚洲色图综合| 99热大香蕉伊在线| 五月丁香综合啪啪| 无码直播久久久| ai欧美亚洲小说| 久久这里只精品99re66图| 熟妇人妻精品一区二区| 大香蕉在线86| 在线无码操| 四虎影视永久在线观看精品免费网站| 五月激情影院| 日韩三级在线观看网站| 超碰无码五月97| 五月丁香狠狠爱| 日韩啊V| 国产成人精品午夜福利| 亚洲色吧网| 黑人美精品 A片| 日韩综合第八区国产精品| 亚洲AV免费在线观看| 一级性爱啪啪视频| 激情欧美97| 1204av韩国| 亚洲成人在线播放| 午夜福利av电影在线| 97亚洲在线| 加勒比海成人视频网 | 亚洲国产一区二区三区在线| 成人免费不卡在线视频| 操操逼视频| 欧美啪啪啪91| 黄久在线| 久久久久密| 人妻系列无码专区中文有码| 可免费观看的av毛片中日美韩| 久操av在线| 超碰午夜在线| 人妻熟女午夜精品在线| 国产精品69人妻无码久久久| 精久久久| http://qxhbdz.com| 伦激情人妻另类人妻| 91痴汉| 性性欧美| 丰满翘臀美女影院视频| 第一高清av中文字幕| 乱论91| av网站免费线看| 人人操人人色网| 啊啊啊 在线| 新视频sss国产| 精品国产一区二区久久| 岛国视频免费在线观看| 亚洲熟女乱色一区二区三区 | 天天色,天天干,天天干| 亚洲巨爆乳一区二区三区四季网| 不卡日本一区二区| 欧美色图欧美| 97久操| 熟女91网| 婷婷8月天青娱乐| 天天在线91| 欧洲自拍第一页| 久久综合久色欧美综合狠狠| 91爱看| 国产熟女| 亚洲怡春院| 亚洲性猛| 欧美综合综合| 亚洲精品国产熟女久久久| 国内91熟女人妻丝袜天天精品视频在线 | 在线v中文字幕一区二区三区| 十八禁视频一区二区| 五月天我淫我色av| av在线播放国产一区| 国产高清午夜成人在线观看| 熟女乱3伦999| 一级人妻性爱视频| 久久久久久久伊人精品| 久久美女国产| 五月天社区| 一区二区三区精品黑丝白丝酒店对鸡| 乱人伦 国语对白:视频直接看| 色综合99| 看黑人AV不卡| 四虎视频在线观看| 日日日日做夜夜夜夜做无码97| 天天综合网亚洲综合网| 天天做天天爱| 秋霞一级鲁丝片A片| 8x福利精品第一福利视频导航| 操逼天美3区| 欧美一级A片在线看视频性色| 亚欧韩av| 一区二区 日韩 欧美 国产 传媒| 啊啊啊啊在线观看网址| 91九色丨国产丨爆乳| 蜜臀99999| 91欧美美女日韩国产婷婷| 蜜臀亚洲综合一二三四区| 亚洲欧美激情小说| 久久久久久久免费A片国产成a人亚洲精∨品无码| 尤物视频视频官网| 国产精品香蕉热久久新品| 中文字幕成人| 东京热一区二区三区四区五区六区| 60秒免费小视频| 欧美双插| 国产亚洲精品农村妇女| 久久黄黄| 东北操逼| 亚洲视频中文一区| 国产浮力影院第1页| 青草青青久久久久久国产| 国产精品色哟哟| 成人一二三区| 精品中文字幕一区二区| 久久精彩视频| daxiangjiao你懂的| 午夜啪| 久久男女激情视频网站| 中文幕97| 色图综合网| 欧美麻豆成人同性GⅤ在线| 嗯嗯嗯好爽| 夜夜狼人妻| 亚洲,欧美,综合网| 亚洲成人精品在线一区| 人妻少妇久久久| 欧美一二在线| 国产精品第一页国产大屁股视频免费区| 欧美日韩亚洲天堂| 亚洲第一成人影院色播| 佐山爱中文字幕| 啊啊啊操死我| 九久9精品| asc国产精品| 国产一区二区三区免费视频在性观看 | 蜜臀aV午夜一区二区三区| 亚洲天天更新| 午夜男女爽爽爽在线视频 | 国产9区| 狠狠干狠狠色| 少妇激情AV| 日韩成人精品视频自拍| 国内操逼视频二区| 99re热有精品视频国产| 免費人妻夜夜爽天天爽爽一区| 香港久久久| 欧美人妻一区| 91模特在线观看| 99精品久久久久久久婷婷| 亚洲精品不卡一二三区| 伦激情人妻另类人妻| 国产乱婷婷精品二区三区| 中文字幕乱码在线观看| 天堂九九九九九九九九九| 三四中文字幕| 1024久久高清视频| 亚洲国产精品成人久久蜜臀| 日韩美女久久一区二区三区| 精品久久久久久久| 91在线页| 激情小说亚洲| 中文字幕免费观看| 亚欧免费| 欧美96交| www.色婷婷.com| 欧美色图欧美| 精品91摸| 日韩亚洲精品一区二区| 91无码人妻| 新版天堂中文资源8在线| 啊啊啊轻点在线观看| 伊人婷婷五月天| 亚洲男人的天堂va亚洲男人社| 人妻激情另类| 乱性AV| 99re99视频在线免费观看| 伊人久久综合精品欧美| 91无码人妻精品一区二区三区蜜桃| 99热只有这里有精品| 国产精品久久久久久久久久久久久久吹 | 午夜九九| 欧美日韩精品青青| 亚av顶级裸体一区二区三区四区五区 | 91激情| 超碰九7免费| 无码人妻一区二区三区免费九色| 黄页网站成人免费| 9美女超碰在线免费观看| 超碰综合97在线| 青青草原av| 熟女久久久| 加勒比无码毛片| 97人人夜| 欧美激情 亚洲色图| 麻豆区久久久久亚| 国产伊人精品在线| 中国和日本人色哪个不下载能放| 久久久偷拍| 久久久免费高清中文视频| 狠狠入| 亚洲天在线| 大香蕉综合网| 日韩小电影| 日韩性爱长视频免费| 亚洲欧美伦综合| 亚洲国产精品成人久久蜜臀| 99999精品| 日韩欧美福利视频看看| 国产亚洲中文不卡二区| 日韩激情啪啪| 情色AV电影| 一区中文字幕二区日韩| 免费超碰97久久| 男人的天堂三级| 免费国产视频| 亚洲 欧美 制服 另类 自拍| 亚洲蜜乳av| 婷婷亚洲五月***久久| 92福利社视频| 亚洲综合五月天| 97欧美精品综合| 亚洲男人的天堂网| 91天堂| 欧美综合国产精品久久丁香| 日韩丝袜二区| 欧洲天天在线| 啊啊啊好大好湿| 激情视频图片| 综合久久久久久久久91| 夜嗨影院| 玖色AV| 人妻人人澡人人爽人人| 久热这里只有精品9| 亚洲性爱成人| 色播五月丁香| 亚洲中文字幕妇伦久久| 亚洲永久永久永久永久一级一级一级精品 | 国产中文大片资源中文字幕 | 天天综合~91| 高潮的A片激情扒开一区| 开心五月激情网| 欧美有码亚洲中文字幕一区二区三区四区| 久欲AV| 最新日本中文字幕| 在线国产探花| 伊人久久大香蕉线AV五月天| 91大香蕉伊人| 风流老熟女一区二区三区l| 天天操天天插| 丰满少妇精品一区二区| 91综合网在线| 日本午夜精品理论片A级APP发布| 丁香九月激情啪| 日韩成人午夜精品久久高潮| 美女91| 色噜噜人妻丝袜a∨先锋影| 亚洲国产综合久久久性感熟妇| 91AV国产精品| 色综合V| 亚欧精品久久久久久久久久久| 久久中文字幕女同性恋一区| 日本人妻最新在线中| 国产又色又爽又舒服的三级视频| 欧美日韩传媒| 国岛片视频| 丝袜综合| 99精品国产户外露出| 色五月婷婷在线| 久久精品成人| 蜜乳中文字幕a在线| 日韩有码免费视频| 国产精品噜噜噜日日日| 国产精品视频白浆免费| 亚州色阁| 亚洲一区二区三区中文字幕| 五月天久久婷婷亚洲| 91麻豆天美| 在线啊啊啊啊| 久久精品熟妇丰满人妻99| 99自拍视频| 校园春色 亚洲| 九九碰九九爱97超碰| 日日躁天天躁狠狠躁| 亚洲女毛多水多21P| 精品久久艹| 天天操天天射天天日| 爱爱久久| 免费精品中文字幕| 老色鬼成人精品视频下载大在线观看| 国产乱伦亚洲| 久久做97| 免费?级毛片无码?∨蜜芽试看| 欧美日韩国产男人| 亚洲激情在线观看一区| 97色色国产视频| 精品高清一区二区三区三州| 91精品婷婷国产综合久久竹菊| 免费看黄视频亚洲网站| 91欧美综合在线| 日本色色的视频| 欧美肥臀在线| 大香蕉色十月| 男人的天堂 在线一区| 亚洲瓯美色图| 日韩欧美亚欧在线视频| 91 丝袜在线| 国产福利在线视频网站| 国产久久男人天堂| 成人丁香五月| 日韩精品资源| 欧美精品1区2区3区| 成人草草视频| 婷婷综合久久| 国产午夜在线观看| 丝袜综合| 午夜精品久久久久久久99蜜桃一| 欧美日韩一二三| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲欧美情色| 黄色小说亚洲| 久久国内| 欧美激情专区| 欧美 牲| 中字乱伦AV| 日韩99999| 国产精品欧美激在线| 啪啪啪精品视频| 啊啊啊草死我| 狠狠搞 亚洲91| 亚洲精品日日夜夜52| 狠狠操狠狠操操| 久草在| 激情五月婷| 一个色导综合| 特污精品女优骚货黄色视频在线免费观看| 精品国产少妇高潮视频| 亚洲无无码αⅴ每日更新| 伊人久久大香线综合无码| 免费视频a级毛片免费视频| 青娱乐福利99| 超碰97资源网亚洲| 蜜奶av| 天天躁日日躁XXXXYY| 2023天天操夜夜操| 精品人妻视频一区二区在线播放| 亚洲免费精品一区| 日日操免费视频| 91日产桃蜜| 夜精品久无码| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 欧美日日操| 精品国产乱码久久久| 国产一区96在线| 成人性爱全视频观看| 日本性感人妻91| 毛片99-全集电影手机免费观看完整-B029AV| oumeisetu综合| 天天看天天在线精品| 火箭成精品视频884必出精品| 91国产美女丝袜足交精品视频 | 曰韩精品视频一区二区| 600国产精品视频| 亚洲欧美日韩国产丝袜自拍中文| 亚州成人A√| 桃花色涩综合影院| 亚洲成人一二三区| 开心五月婷婷激情| 中文字幕精品日韩中文字幕| 涩综合导航| 亚洲国产97| 理论久久婷婷网8| 国产91美女高潮| 欧美色五月| 最新中文字幕在线亚洲| 国产精品久久久久久久久久梁医生| 欧美亚州综合网图片| 偷拍片久久| baiduhicn.com。| 欧美亚洲国产自久久| 日本人体九九九九九九| 婷婷在线视频| 亚洲精品成人激情在线| 亚洲欧美日韩精品久| 男女激烈网站最新| 国内毛片国产欧美拍| 青青色在线观看| 91美女在线| 久操免费观看| 亚洲色天堂九9| 四虎AV影视国产精品亚洲精品| 97久久精品亚洲| 精品精品精品| 久99| 国产亚洲精品第一最新| 国产精品无码AV网站| 十八禁成人网站在线观看| 思思热er精品视频| 操逼无码一区| 人人爱人人操人人性| 老熟女乱伦一区| 影音先锋新男人| 成人七区| 中文字幕一区二区在线日韩精品| 亚洲AV无码AV吞精久久久久 | 伦理第一页| 男人天堂资源| 精品人妻一二三| 国产精品久久aV| 国产成人超碰在线| 成人av性爱电影在线观看| 日韩欧美大片免费高清啪啪| 一级日本牲交大片好爽在线看| 欧美激情激情xxxx欧美专区| 天天激清| 欧美色视频在线| 色久桃花影院在线观看| 色综合九九| 92福利社视频| 又黄又粗又硬又长又大| 亚州高清av| 久久中文字幕人妻熟av女蜜柚| 综合色欧美| 久久AV无码AV| 377p欧洲日本亚洲大胆| 超碰在线人妻| 小草精彩毛片| 玖玖资源中文字幕制服丝袜| 亚洲自拍欧美色综合| 丝袜美腿丝袜| 日韩熟女无码| 日韩乱伦影音先锋| AA丁香综合激情| 96AV久久久| 精品少妇一区二区三区| 人妻少妇久久中文字幕一区二区 麻豆 | 亚洲国产精品有声| 久久综合激情| JULIA人妻风俗店中出电影| 亚州再线| 精品九九淫乱男| 96麻豆精品一区二区三区| 嫩呦国产一区二区三区AV| 99精品成人免费看| 欧美色棕合| 美女主播色欲91抠b在线播放| 欧美同性恋 的搜索结果 - 91n| jazzjazz国产精品麻豆| 成人三一级一片aaa| 久久男人的天堂国产| 国产精品一区二区在钱播放| 国产人妻精品一区二区三区秋霞| 天天综合97| 日韩欧美aⅴ综合网站发布| 蜜臀久久一区二区| 少妇六月天| 97日韩欧美亚洲| 亚洲欧美国产中文视频| 日韩精品视频在线观看一卡二卡| 色女网日韩| 人人操人人射人人干| 情色大香蕉| 午夜福利精品| 午夜呻吟欧美| 欧美78P| 91操人| 嫩草 人人网精品| 日韩熟女精一区二区三区不卡| 亚洲av综合色区图片亚洲| ′ !γ}丶。。久久精品欧美一区二区三区| 偷拍综合亚洲| 最新国产精品| 99re9在线| 女上位精品在线| 乱伦一二三区| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 高精欧美色| 在线精品福利免费播放| AV高清一区| 久久国产成人精品国产成人亚洲| 免费一级精品啪啪视频| 天天综合网91入口| 免费操逼91| 99综合免费视频| 欧美91丝袜| 蜜乳av一区二区| 91人妻视频在线| 日本 欧美 国产一区| 亚洲吊色| 青娱乐老司机视频| 亚洲色图 欧美热图 清纯唯美 另类自拍| 麻豆天天躁天天揉揉AV| 国产情侣自拍在线播放| 亚洲熟妇丝袜在线观看| 精品69网| 久久精品国产亚洲AV无码电影| 中文字幕久久精视频久久大全| 91综合在线| 人人看人人摸人人色| 久久鲁夜| 97在线观看播放视频| 日韩无码AB| 黄片视频,下载| 91成人在线| 亚洲精品国产无码高清| 自拍盗摄一区| 中文字幕一区二区三区字幕| 97免费视频网| 亚洲码在线中文在线观看| 97久久精品亚洲中六字幕| 91综合网| 三级网站超变态精品| www.av在线视频| 男人久久精品| 亚洲成a人在线观看久| 欧美日日人人天天| 极品色www影院| julia国产在线| 婷婷中文字幕| 少妇熟女一区二区三区| 精品久久久av| 久久草草亚洲蜜桃臀| 91国产美女丝袜足交精品视频| 97资源视频| 美日韩在线不卡人妻| 每日更新AV| 亚洲视频精选| 亚洲色人妻综合| 亚洲欧美高清无码| 国产精品在线网站| 尤物一级在线免费观看| 91熟女网| 婷婷综合网站| 嗯嗯啊啊操我| 超碰天天操| 久久激情亚洲精品无码?V| 亚洲区 欧美区| 强上我不卡卡| 大黄片做爱的大的| 91天美免费| 久久精品亚洲东京热色播| A 在线网址| 欧美日韩亚洲少妇寂寞影院正在播放| 婷婷综合久久| 国产精品爆乳懂色蜜乳| 欧美亚洲激情一二三| 九九色综合| 国产在线综合福利网站| 91女人的网站| 一本大道不卡一二三区| 欧美高清16| 欧美日本天堂| 日本理论在线| 色哟哟 日韩精品| 大香蕉青青9| av九九| 可能人人看人人摸| 成人久久久| 噜噜噜久久亚洲精品色情| 国产51色综合久久免费| 久久久久久久久9| 射丝袜高跟鞋99| 久久精品美女一区| 久久久久久久伊人精品| 国产精品电| 你草精品在线视频| 天天干天天拍| 99老司机精品视频在线观看| 久久久久久久| 久久久久久久久久久久欧美日| 人妻少妇视频在线播放| 亚洲精美粉嫩嫩泬在线观看| 国产又黄又爽| 色综合 加勒比| 熟女一区二区三区| 日日夜夜天天| 色哟哟511老熟女| 久久无码一区二区二三区性色| 99久在线精品99re8蜜桃| 2019天天操天天爽天天拍| 天堂岛av| 欧美系列在线一区二区| 一起草三级AV电影在线观看| 国产丝袜啪啪| 超碰在线成人电影| 狠狠操一区二区| 狠狠狠狠狠| 欧美很很操视频| 欧美性爱无码一区二区三区| 成·人免费午夜在线观看| 97这里有精品| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久久五月天婷婷丁香中文字幕| 97超碰色情| 91成人精品| 亚洲综合色图欧美| 国产精品在线一区二区| 啊啊啊不要啊啊受不了了视频在线 | 国产精品小视频一区二区三区| 久噜噜| 67914在线精品观看| 日韩人妻资源在线看| 天天爽入口| 日本人妻最新在线中| 操香逼| 大香蕉78| 欧美性爱另类综合| 91无码西班牙视频在线| 乱色老一区二区三区的观看方式| 精品精品精品| 欧美天天拍| 久久三| 在线αⅴ| 国产精品不卡一区二区三区| 91丨九色丨国产打屁股| 国产欧美精选自拍一区| 欧美亚洲今日在线| 骚逼自拍99| 麻豆性爱视频在线播放| 国产免费久久久久| 自拍视频一区在线观看| www.色吧5.com| 一级AAA片一区二区三区| 伊人色综合欧美| 狠狠搞 亚洲91| 人妻中文在线| 九九无码视频| 亚洲精品影视老司机| 精品传媒在线一区| 97天天在线| 日本999精品| 啪啪91| 五月婷婷综合网| 91精品久久综合熟女| 日韩人妻中文视频| 男女猛烈无遮掩视频免费软件| 国产精品日日摸夜夜添骚逼| 四虎影视在线| 开心五月婷婷激情| 青娱乐日韩无码| aaaa黄片| 国产人妖视频一区在线观看| 狠狠久久手机视频精品| 久久精品高清无码一区| www.99热在线只有精品| 亚洲av热热色| 97色欧州| 欧美精品双插| 67194无码不卡| 欧美第38页| 久久9 9 9精品| 精品久久久无码| 东北女人av| 天天日日日射| 五月婷久久| 69超碰综合| 夜夜一区二区| 亚洲日韩肥臀视频在线观看| 思思99热|