亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

基于SpringBoot的網(wǎng)上問(wèn)卷調(diào)查系統(tǒng):從數(shù)據(jù)庫(kù)建模到統(tǒng)計(jì)報(bào)表實(shí)戰(zhàn)解析

基于SpringBoot的網(wǎng)上問(wèn)卷調(diào)查系統(tǒng):從數(shù)據(jù)庫(kù)建模到統(tǒng)計(jì)報(bào)表實(shí)戰(zhàn)解析 1. 項(xiàng)目概覽這個(gè)問(wèn)卷調(diào)查系統(tǒng)到底能做什么做技術(shù)這么多年我接觸過(guò)不少“看起來(lái)很基礎(chǔ)、做起來(lái)全是細(xì)節(jié)”的系統(tǒng)網(wǎng)上問(wèn)卷調(diào)查系統(tǒng)就是其中典型的一個(gè)。很多朋友一開始覺得它就是“問(wèn)卷CRUD 答題頁(yè)面”真上手之后才發(fā)現(xiàn)從題目類型設(shè)計(jì)、動(dòng)態(tài)表單渲染、答卷校驗(yàn)到統(tǒng)計(jì)報(bào)表每一環(huán)都能踩出不同的坑。這篇文章我想圍繞一個(gè)基于 SpringBoot 的網(wǎng)上問(wèn)卷調(diào)查系統(tǒng)展開把我從項(xiàng)目設(shè)計(jì)、數(shù)據(jù)庫(kù)建模、核心代碼實(shí)現(xiàn)到部署排查的完整鏈路都拆開講講順便把源碼里值得關(guān)注的部分挑出來(lái)逐段說(shuō)明。這套系統(tǒng)的定位非常明確面向中小規(guī)模調(diào)研場(chǎng)景比如企業(yè)內(nèi)部員工滿意度調(diào)查、學(xué)校課程評(píng)價(jià)、產(chǎn)品上線前的用戶反饋收集等。它需要支持管理員創(chuàng)建問(wèn)卷、維護(hù)題庫(kù)、發(fā)布問(wèn)卷、查看回收數(shù)據(jù)同時(shí)還要支持參與者打開鏈接答題、提交答卷、事后查看結(jié)果。從業(yè)務(wù)復(fù)雜度來(lái)看它不像電商系統(tǒng)那樣有復(fù)雜的交易鏈路也不像后臺(tái)管理系統(tǒng)那樣全是表格和權(quán)限配置它真正的難點(diǎn)在于“問(wèn)卷是一種高度動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu)”——每份問(wèn)卷的題目數(shù)量不同、題型不同、選項(xiàng)不同答卷數(shù)據(jù)又是一對(duì)多關(guān)聯(lián)的這就要求在設(shè)計(jì)階段就把數(shù)據(jù)的靈活性和統(tǒng)計(jì)的可用性同時(shí)考慮進(jìn)去。這個(gè)項(xiàng)目適合誰(shuí)來(lái)參考呢如果你正在學(xué)習(xí) SpringBoot 整合 MyBatis Plus想找一個(gè)能覆蓋“增刪改查 多表關(guān)聯(lián) 數(shù)據(jù)統(tǒng)計(jì) 前端渲染”的完整案例那它很合適。如果你要做畢業(yè)設(shè)計(jì)或者個(gè)人作品集那它同樣值得一看因?yàn)閱?wèn)卷系統(tǒng)的業(yè)務(wù)閉環(huán)非常完整既能體現(xiàn)數(shù)據(jù)庫(kù)設(shè)計(jì)能力也能體現(xiàn)接口設(shè)計(jì)能力和業(yè)務(wù)建模能力。我這里會(huì)按實(shí)際的開發(fā)順序來(lái)講不是那種只貼代碼不解釋的教程每一步盡量說(shuō)清楚“為什么這么做”。你哪怕之前沒見過(guò)問(wèn)卷系統(tǒng)的代碼照著我這個(gè)思路也能把整個(gè)項(xiàng)目的脈絡(luò)捋明白。2. 整體設(shè)計(jì)思路與技術(shù)選型背后的考量2.1 為什么用 SpringBoot而不是傳統(tǒng) SSM很多老項(xiàng)目還在用 SpringMVC MyBatis XML 那一套能在里面游刃有余的開發(fā)者確實(shí)基本功扎實(shí)但是新項(xiàng)目再用 SSM 純屬自己給自己上強(qiáng)度。SpringBoot 的價(jià)值不在于“功能多”而在于它把那些固定套路全部收斂成了約定內(nèi)嵌 Tomcat、自動(dòng)裝配數(shù)據(jù)源、Starter 一鍵引入依賴再加上application.yml統(tǒng)一管理配置開發(fā)階段只需要關(guān)注業(yè)務(wù)本身。我見過(guò)不少朋友糾結(jié)“SpringBoot 是不是太傻瓜化了學(xué)不到底層原理”這個(gè)擔(dān)心其實(shí)沒必要——SpringBoot 只是把框架的裝配過(guò)程自動(dòng)化了你用到的 Spring IOC、AOP、事務(wù)傳播機(jī)制、MyBatis 映射原理一樣不少只是省掉了那堆web.xml和spring-mvc.xml而已。還有一個(gè)容易被忽略的點(diǎn)是測(cè)試和部署成本。問(wèn)卷調(diào)查系統(tǒng)的迭代速度不慢經(jīng)常要加題型、加統(tǒng)計(jì)口徑SpringBoot 的spring-boot-devtools支持熱重啟配合spring-boot-maven-plugin打包出一個(gè)可執(zhí)行 Jar扔到服務(wù)器上java -jar就能跑。對(duì)于中小型團(tuán)隊(duì)來(lái)說(shuō)這種“低摩擦”的交付方式比傳統(tǒng) SSM 要順滑得多。另外后續(xù)如果要引入 Spring Security 做登錄鑒權(quán)、引入 Redis 做答題防刷SpringBoot 生態(tài)的整合成本也低得多。2.2 數(shù)據(jù)庫(kù)建模問(wèn)卷、題目、選項(xiàng)、答卷的關(guān)聯(lián)設(shè)計(jì)這一節(jié)是整個(gè)系統(tǒng)最核心的部分。我見過(guò)很多初學(xué)者把問(wèn)卷設(shè)計(jì)成一張大表題目和選項(xiàng)全塞在 JSON 字段里這么做原型階段確實(shí)爽但到了“統(tǒng)計(jì)某道題有多少人選了某個(gè)選項(xiàng)”的時(shí)候就傻眼了Java 代碼里要解析 JSON、要手寫聚合邏輯性能差還容易出 bug。所以在這套系統(tǒng)里我采用了一套經(jīng)典的“四層模型”問(wèn)卷表questionnaire記錄問(wèn)卷基礎(chǔ)信息包括標(biāo)題、描述、狀態(tài)草稿/發(fā)布/結(jié)束、開始時(shí)間、結(jié)束時(shí)間、是否匿名、每日答題次數(shù)限制。題目表question通過(guò)questionnaire_id關(guān)聯(lián)問(wèn)卷每個(gè)題目包含題型、題干、是否必填、排序號(hào)等字段。選項(xiàng)表option通過(guò)question_id關(guān)聯(lián)題目用于單選、多選、下拉等題型。填空和評(píng)分題沒有選項(xiàng)取決于題型標(biāo)記。答卷結(jié)果表answer主要記錄用戶對(duì)某道題目的作答內(nèi)容選項(xiàng)型題目存選項(xiàng)ID填空型題目存文本內(nèi)容。這里有一個(gè)關(guān)鍵點(diǎn)值得展開考試系統(tǒng)里的答題記錄通常用“一次提交一行主記錄 明細(xì)子表”的方式但問(wèn)卷系統(tǒng)我不建議套用同一套模型。因?yàn)閱?wèn)卷的題目是動(dòng)態(tài)的今天創(chuàng)建的問(wèn)卷可能只有 5 道題明天創(chuàng)建的問(wèn)卷可能就有 30 道題如果用固定字段去存每一題的答案表結(jié)構(gòu)就得頻繁變更。把這層邏輯放在明細(xì)表里讓每一行記錄都帶著question_id才能讓系統(tǒng)具備“任何問(wèn)卷都能存”的擴(kuò)展能力。代價(jià)是查詢時(shí)需要多一次 JOIN但以問(wèn)卷系統(tǒng)的數(shù)據(jù)量級(jí)來(lái)看這個(gè)代價(jià)可以忽略不計(jì)。2.3 業(yè)務(wù)模塊劃分不要把所有代碼堆在一個(gè) Controller 里我接手過(guò)一些所謂的“快速開發(fā)”項(xiàng)目三個(gè) Controller 搞定一切Service 層幾乎沒有業(yè)務(wù)SQL 全寫在 Mapper 注解里看起來(lái)代碼量很少但后續(xù)每加一個(gè)功能都要?jiǎng)永洗a。這套問(wèn)卷系統(tǒng)我把模塊拆成五個(gè)部分問(wèn)卷管理模塊負(fù)責(zé)問(wèn)卷的 CRUD、發(fā)布、結(jié)束、復(fù)制。題目管理模塊在問(wèn)卷下維護(hù)題目和選項(xiàng)支持拖拽排序源碼里用排序號(hào)實(shí)現(xiàn)前端可選。答題模塊面向參與者包括問(wèn)卷可見性校驗(yàn)、題目渲染數(shù)據(jù)獲取、答卷提交和校驗(yàn)。統(tǒng)計(jì)模塊按問(wèn)卷聚合回收數(shù)據(jù)計(jì)算選項(xiàng)占比、答題人數(shù)、平均分評(píng)分題型。用戶模塊這里做了精簡(jiǎn)采用基于 Session 的簡(jiǎn)單登錄管理員和普通參與者共用一張用戶表通過(guò)角色字段區(qū)分。這五個(gè)模塊拆完之后每個(gè) Mapper 都只對(duì)自己負(fù)責(zé)的數(shù)據(jù)表進(jìn)行操作Controller 層只做參數(shù)接收和結(jié)果封裝Service 層承載具體的業(yè)務(wù)流程。這樣的結(jié)構(gòu)不復(fù)雜又給后續(xù)擴(kuò)展留了余地。比如你要加一個(gè)“答卷導(dǎo)出 Excel”的功能只需要在統(tǒng)計(jì)模塊里加一個(gè)導(dǎo)出接口完全不用動(dòng)答題模塊的代碼。3. 核心功能詳解從題目類型設(shè)計(jì)到數(shù)據(jù)統(tǒng)計(jì)3.1 題目類型的抽象讓不同的題型共用一套渲染邏輯問(wèn)卷調(diào)查系統(tǒng)的“靈魂”在于題目類型。你可以把題型抽象成三類基礎(chǔ)能力選項(xiàng)型單選、多選、下拉它們本質(zhì)上都是“從預(yù)置選項(xiàng)集合中選一個(gè)或多個(gè)”區(qū)別只在于選擇數(shù)量和 UI 控件的不同。文本型單項(xiàng)填空、多項(xiàng)填空它們需要用戶輸入文本校驗(yàn)規(guī)則可能是長(zhǎng)度限制或正則匹配如郵箱格式。評(píng)分型評(píng)分題通常是 1~5 星和矩陣題前者的本質(zhì)是一組單選題后者的本質(zhì)是多行單選但在界面上要展示成表格。在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候我建議用question_type字段存數(shù)字枚舉而不是直接存“radio”、“checkbox”這類前端名詞。原因是后端關(guān)心的是“這個(gè)是單選還是多選決定我如何校驗(yàn)答案”前端關(guān)心的才是“我該渲染成單選按鈕還是復(fù)選框”。如果數(shù)據(jù)庫(kù)直接存前端名詞一旦前端 UI 層改名數(shù)據(jù)結(jié)構(gòu)就要跟著改耦合度太高。合理的做法是后端用穩(wěn)定枚舉值返回給前端時(shí)再做一次映射給出前端認(rèn)識(shí)的類型標(biāo)識(shí)。在實(shí)際開發(fā)中我定義了一個(gè) Light 枚舉類包含單選、多選、下拉、填空、評(píng)分、矩陣這幾種類型。每種題型至少有兩個(gè)核心方法一個(gè)是“如何校驗(yàn)提交答案”另一個(gè)是“如何格式化答案用于存儲(chǔ)”。比如單選題提交值必須是題目下某個(gè)選項(xiàng)的 ID 且不能重復(fù)多選題則是一個(gè)數(shù)組需要校驗(yàn)數(shù)組中的每個(gè)元素都是合法選項(xiàng) ID且不能有重復(fù)項(xiàng)。這些校驗(yàn)邏輯放在 Service 層統(tǒng)一處理不要分散在 Controller 里。3.2 答卷提交策略校驗(yàn)、入庫(kù)與防重復(fù)答卷提交是整個(gè)系統(tǒng)里最容易出錯(cuò)的地方。我先說(shuō)一個(gè)反例有人把答案數(shù)組直接序列化成 JSON 字符串存到一個(gè)叫answer_content的字段里然后在統(tǒng)計(jì)的時(shí)候解析這個(gè) JSON。這么做開發(fā)效率確實(shí)高但屬于“用代碼復(fù)雜度換取表結(jié)構(gòu)簡(jiǎn)單度”等數(shù)據(jù)量上來(lái)之后統(tǒng)計(jì)分析的效率會(huì)非常糟糕而且一旦某個(gè)答案的格式變了老數(shù)據(jù)的解析就可能出錯(cuò)。這套系統(tǒng)的答題模塊采用的是“明文結(jié)構(gòu)化存儲(chǔ)”策略。參與者提交時(shí)后端收到的是[{questionId: 1, optionIds: [2,3]}, {questionId: 2, content: 不錯(cuò)}]這樣的結(jié)構(gòu)體Service 層會(huì)做以下幾步根據(jù)questionnaire_id加載問(wèn)卷校驗(yàn)狀態(tài)是否為“發(fā)布中”校驗(yàn)當(dāng)前時(shí)間是否在開始時(shí)間和結(jié)束時(shí)間之間。加載問(wèn)卷下的全部題目構(gòu)建一個(gè)MapLong, Question便于后續(xù)按題校驗(yàn)。逐題校驗(yàn)提交的答案。比如必填題沒有提交值要報(bào)錯(cuò)判斷題干和題目 ID 是否匹配防止使用者篡改參數(shù)提交不存在的題目。通過(guò)校驗(yàn)后以“一次提交生成一條總答卷記錄 每題答案一條明細(xì)記錄”的方式批量插入??偞鹁碛涗浝锎鎲?wèn)卷 ID、參與者 ID、提交時(shí)間、IP 地址可選明細(xì)記錄里存題目 ID、題目類型、選項(xiàng) ID 集合逗號(hào)拼接或文本內(nèi)容。關(guān)于“是否匿名”這里有個(gè)設(shè)計(jì)細(xì)節(jié)如果問(wèn)卷開啟了匿名模式那么總答卷記錄里的user_id置空只保留一條由隨機(jī)字符串生成的標(biāo)識(shí)用于區(qū)分“同一份答卷中的多條明細(xì)記錄”。這樣既能做到匿名又能在統(tǒng)計(jì)時(shí)區(qū)分不同的答卷。防重復(fù)提交方面我在源碼里用了簡(jiǎn)單的“Session 問(wèn)卷 ID”標(biāo)記同一個(gè) Session 對(duì)同一份問(wèn)卷只能提交一次。如果要更嚴(yán)格一些可以改成基于 IP 和問(wèn)卷 ID 的 Redis 標(biāo)記但中小型項(xiàng)目用 Session 方案已經(jīng)足夠畢竟問(wèn)卷系統(tǒng)的并發(fā)量不太高。3.3 統(tǒng)計(jì)報(bào)表用 SQL 聚合而不是在 Java 中循環(huán)統(tǒng)計(jì)功能最能體現(xiàn)一個(gè)開發(fā)的 SQL 功底。以“單選題各選項(xiàng)占比”為例最直觀的思路是查出所有答卷明細(xì)然后在 Java 里循環(huán)計(jì)數(shù)。這個(gè)方案在數(shù)據(jù)量幾百條的時(shí)候沒問(wèn)題但如果問(wèn)卷參與人數(shù)上萬(wàn)就很容易引發(fā)性能問(wèn)題——你會(huì)在內(nèi)存里維護(hù)一個(gè)巨大的 List然后循環(huán)、分組、計(jì)數(shù)既浪費(fèi)內(nèi)存又拖慢響應(yīng)速度。正確的思路是讓數(shù)據(jù)庫(kù)去做聚合。比如統(tǒng)計(jì)“題目ID為 123 的單選題各選項(xiàng)被選擇的次數(shù)”可以用一條類似這樣的 SQLSELECT answer_detail.option_value, COUNT(*) AS cnt FROM answer_detail WHERE answer_detail.question_id 123 AND answer_detail.questionnaire_id 456 GROUP BY answer_detail.option_value這里option_value字段存儲(chǔ)的是逗號(hào)拼接的選項(xiàng) ID 字符串比如“2,5”。GROUP BY 之后就能得到每個(gè)選項(xiàng)組合的計(jì)數(shù)。對(duì)于單選題一個(gè)選項(xiàng) ID 不會(huì)出現(xiàn)兩次所以直接按它分組是沒問(wèn)題的但對(duì)于多選題一份答案里可能同時(shí)選了 2 和 5這時(shí)候想要“選項(xiàng) 2 被選了多少次”就需要額外的處理。我的做法是給選項(xiàng)表增加一個(gè)“編號(hào)”的概念在統(tǒng)計(jì)時(shí)將多選答案的字符串拆開后與選項(xiàng)表關(guān)聯(lián)再按選項(xiàng) ID 分組。具體可以放在一個(gè)自定義 Mapper 方法里寫一小段 SQL 來(lái)完成。如果要統(tǒng)計(jì)評(píng)分題的平均分就直接取對(duì)應(yīng)題目明細(xì)里的數(shù)值字段做 AVG 聚合。統(tǒng)計(jì)結(jié)果最終封裝成一個(gè)MapInteger, Long或ListOptionStat對(duì)象返回給前端前端用圖表庫(kù)渲染成餅圖或條形圖。我在本地調(diào)試的時(shí)候用 5000 份模擬答卷跑過(guò)一遍整條統(tǒng)計(jì)鏈路耗時(shí)在 200 毫秒以內(nèi)完全夠用。4. 配置、啟動(dòng)與部署從零跑通整個(gè)項(xiàng)目4.1 需要準(zhǔn)備的環(huán)境清單在動(dòng)手跑這個(gè)項(xiàng)目之前先檢查一下本機(jī)環(huán)境。我建議的版本組合如下軟件推薦版本說(shuō)明JDK1.8 或 11SpringBoot 2.7.x 對(duì)這兩個(gè)版本兼容性最好Maven3.6用于依賴下載和項(xiàng)目打包MySQL5.7 或 8.0注意驅(qū)動(dòng)和時(shí)區(qū)配置差異Navicat / DataGrip任意用于導(dǎo)入 SQL 腳本和查看數(shù)據(jù)前端開發(fā)者工具任意便于調(diào)試接口返回結(jié)構(gòu)這里要重點(diǎn)提醒一個(gè)容易踩的坑如果你用 MySQL 8.0pom.xml里的mysql-connector-java版本別太老否則會(huì)報(bào)Public Key Retrieval is not allowed的錯(cuò)誤。解決方式是升級(jí)驅(qū)動(dòng)版本或者在數(shù)據(jù)庫(kù)連接 URL 上加上allowPublicKeyRetrievaltrueuseSSLfalse。4.2 核心配置文件解讀application.yml是 SpringBoot 項(xiàng)目的樞紐。我拿這個(gè)項(xiàng)目里最關(guān)鍵的幾個(gè)配置來(lái)說(shuō)server: port: 8080 servlet: context-path: / spring: datasource: url: jdbc:mysql://localhost:3306/survey_system?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT8 mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: autoserverTimezoneAsia/Shanghai和time-zone: GMT8這兩個(gè)配置是一對(duì)的少一個(gè)都可能導(dǎo)致日期時(shí)間字段差 8 小時(shí)。這個(gè)問(wèn)題我在本地出現(xiàn)過(guò)看起來(lái)是數(shù)據(jù)寫入時(shí)間不對(duì)實(shí)際上是連接時(shí)區(qū)沒對(duì)齊。map-underscore-to-camel-case: true讓數(shù)據(jù)庫(kù)字段questionnaire_id自動(dòng)映射為 Java 屬性questionnaireId寫 Mapper XML 時(shí)就不用反復(fù)起別名。log-impl: StdOutImpl會(huì)在控制臺(tái)打印 SQL 日志開發(fā)階段建議開著方便排查問(wèn)題上線前記得改成org.apache.ibatis.logging.nologging.NoLoggingImpl或者刪掉避免日志刷屏。4.3 數(shù)據(jù)初始化一份 SQL 腳本能省多少事源碼里附帶的sql文件夾下有建庫(kù)建表腳本包括用戶表、問(wèn)卷表、題目表、選項(xiàng)表、答卷表、答卷明細(xì)表以及少量初始數(shù)據(jù)。我第一次拿到這個(gè)項(xiàng)目的時(shí)候是直接在 MySQL 里手動(dòng)建表的結(jié)果因?yàn)樽侄晤愋秃?MyBatis Plus 的映射對(duì)不上花了不少時(shí)間排查。后來(lái)我建議的做法是直接導(dǎo)入 SQL 腳本把表結(jié)構(gòu)和初始管理員賬號(hào)一次性建好。導(dǎo)入之后先確認(rèn)幾件事表前綴是否和 MyBatis Plus 的全局配置一致。如果表名有前綴如t_questionnaire需要在配置里指定table-prefix: t_或者讓實(shí)體類加TableName(t_questionnaire)注解。檢查初始密碼的加密方式。如果源碼里用的 MD5 加鹽確保你的登錄邏輯和數(shù)據(jù)庫(kù)里存的密文格式一致否則會(huì)出現(xiàn)“賬號(hào)密碼都對(duì)但登錄失敗”的詭異問(wèn)題。確認(rèn)問(wèn)卷狀態(tài)字段的默認(rèn)值。數(shù)據(jù)庫(kù)里建議給status字段加默認(rèn)值 0并加上注釋說(shuō)明 0 草稿、1 發(fā)布、2 結(jié)束。這樣開發(fā)期不容易誤操作。4.4 本地啟動(dòng)的完整步驟整個(gè)啟動(dòng)流程其實(shí)非常標(biāo)準(zhǔn)步驟如下用 Maven 執(zhí)行clean package或者直接在 IDEA 里Reload All Maven Projects確保所有依賴都下載完畢。本地 MySQL 中創(chuàng)建數(shù)據(jù)庫(kù)survey_system設(shè)置字符集為utf8mb4導(dǎo)入 SQL 腳本。修改application.yml中的數(shù)據(jù)庫(kù)賬號(hào)密碼為你本機(jī)的實(shí)際配置。啟動(dòng)SurveyApplication.java的主方法。瀏覽器訪問(wèn)http://localhost:8080用腳本里初始化的管理員賬號(hào)登錄后臺(tái)。在問(wèn)卷管理頁(yè)面創(chuàng)建一份問(wèn)卷添加幾道題單選、多選、填空然后點(diǎn)擊“發(fā)布”復(fù)制答題鏈接用無(wú)痕窗口打開答卷頁(yè)面完成一次完整答題。第 6 步非常重要我建議每位拿這套源碼去改的朋友都完整走一遍“創(chuàng)建問(wèn)卷→發(fā)布→答題→查看統(tǒng)計(jì)”的閉環(huán)而不是直接改代碼。只有先跑通主線流程你才知道哪塊是正常的、哪塊是你改壞的。我之前帶過(guò)一位實(shí)習(xí)生一上來(lái)就改數(shù)據(jù)庫(kù)字段結(jié)果問(wèn)卷發(fā)布后答題頁(yè)面怎么都渲染不出來(lái)最后發(fā)現(xiàn)是題目表的question_type字段值枚舉對(duì)不上。先跑通一遍就是給自己建立一個(gè)“正?;€”。5. 前端交互與渲染動(dòng)態(tài)問(wèn)卷表單是怎么做到的5.1 接口設(shè)計(jì)和數(shù)據(jù)協(xié)議約定很多朋友在學(xué)后端的時(shí)候會(huì)忽略接口設(shè)計(jì)但問(wèn)卷系統(tǒng)的接口設(shè)計(jì)直接決定了前端渲染的復(fù)雜度。在這套系統(tǒng)里問(wèn)卷答題頁(yè)面的核心接口就一個(gè)根據(jù)問(wèn)卷 ID 獲取完整的問(wèn)卷內(nèi)容。返回的 JSON 結(jié)構(gòu)大致如下{ code: 200, data: { questionnaireId: 19, title: 2024年度員工滿意度調(diào)查, description: 本問(wèn)卷共10題預(yù)計(jì)耗時(shí)2分鐘, status: 1, deadline: 2024-12-31 23:59:59, questions: [ { questionId: 101, questionType: 1, required: true, stem: 你所在部門是, options: [ {optionId: 1001, text: 技術(shù)部}, {optionId: 1002, text: 市場(chǎng)部} ] } ] } }這個(gè)結(jié)構(gòu)的特點(diǎn)是問(wèn)卷、題目、選項(xiàng)一次性全量返回前端拿到后直接遍歷渲染即可。對(duì)于題庫(kù)量最大的問(wèn)卷這種方式的響應(yīng)體積也就在幾十 KB 左右完全沒必要做成分頁(yè)加載。如果后續(xù)問(wèn)卷題目數(shù)量特別多比如超過(guò) 100 題再考慮分步加載或者按頁(yè)加載初期不必過(guò)度設(shè)計(jì)。5.2 動(dòng)態(tài)渲染的關(guān)鍵代碼思路前端在拿到數(shù)據(jù)結(jié)構(gòu)后需要根據(jù)questionType字段渲染不同的控件。核心是一個(gè)條件判斷映射單選題渲染成 radio 組多選題渲染成 checkbox 組下拉題渲染成 select填空題渲染成 input/textarea評(píng)分題渲染成一排星形按鈕矩陣題渲染成表格。以 Vue 為例大致的渲染邏輯是這樣的div v-forquestion in questions :keyquestion.questionId div classquestion-title {{ question.required ? * : }}{{ question.stem }} /div !-- 單選題 -- el-radio-group v-ifquestion.questionType 1 v-modelanswerMap[question.questionId] el-radio v-foropt in question.options :keyopt.optionId :labelopt.optionId{{ opt.text }}/el-radio /el-radio-group !-- 多選題 -- el-checkbox-group v-else-ifquestion.questionType 2 v-modelanswerMap[question.questionId] el-checkbox v-foropt in question.options :keyopt.optionId :labelopt.optionId{{ opt.text }}/el-checkbox /el-checkbox-group !-- 下拉題 -- el-select v-else-ifquestion.questionType 3 v-modelanswerMap[question.questionId] el-option v-foropt in question.options :keyopt.optionId :labelopt.text :valueopt.optionId/el-option /el-select !-- 填空題 -- el-input v-else-ifquestion.questionType 4 v-modelanswerMap[question.questionId] typetextarea placeholder請(qǐng)輸入你的答案/el-input /div提交時(shí)前端的answerMap已經(jīng)是一個(gè)“題目 ID → 答案”的映射比如{101: 1001, 102: [1003, 1005], 103: 挺好的}。把它轉(zhuǎn)成后端需要的列表格式后 POST 給提交接口即可。這個(gè)環(huán)節(jié)有一個(gè)容易被忽略的點(diǎn)填空題如果用戶什么都沒填但題目標(biāo)了必填后端一定要再次校驗(yàn)不能只依賴前端。因?yàn)榍岸诵r?yàn)被繞過(guò)實(shí)在太容易了這是安全性的基本功。5.3 后端 XSS 防護(hù)和參數(shù)合法性校驗(yàn)問(wèn)卷系統(tǒng)允許用戶輸入文本那就必然要考慮 XSS跨站腳本攻擊。如果有人在填空題里輸入一段scriptalert(xss)/script不處理的話這段內(nèi)容很可能在管理員查看答卷時(shí)被瀏覽器執(zhí)行。雖然答題入口是內(nèi)部的但這種教育成本很低的問(wèn)題沒必要賭。我的建議是分兩層處理后端入庫(kù)前對(duì)文本類字段做 HTML 標(biāo)簽過(guò)濾把和轉(zhuǎn)義為lt;和gt;。前端顯示時(shí)使用 Vue/React 默認(rèn)的文本插值而不是v-html來(lái)渲染用戶提交的內(nèi)容。這一步是最重要的只要不用v-html渲染用戶輸入XSS 的風(fēng)險(xiǎn)就會(huì)大幅降低。參數(shù)合法性校驗(yàn)方面除了前面提到的題目 ID 和選項(xiàng) ID 匹配之外還要注意文本型答案的長(zhǎng)度限制比如單題答案不能超過(guò) 500 字。評(píng)分題的范圍限制必須是 1 到 5 之間的整數(shù)。郵箱題如果有要校驗(yàn)郵箱格式。這些校驗(yàn)寫起來(lái)不復(fù)雜但要養(yǎng)成習(xí)慣。別覺得“內(nèi)部系統(tǒng)不用管安全”等到有人拿著你系統(tǒng)的鏈接刷問(wèn)卷、灌垃圾數(shù)據(jù)的時(shí)候再回頭補(bǔ)這些校驗(yàn)就晚了。6. 統(tǒng)計(jì)模塊實(shí)戰(zhàn)數(shù)據(jù)可視化與導(dǎo)出6.1 統(tǒng)計(jì)頁(yè)面的數(shù)據(jù)和圖表對(duì)接問(wèn)卷管理的后臺(tái)通常會(huì)有一個(gè)“查看統(tǒng)計(jì)”的入口。點(diǎn)擊之后頁(yè)面會(huì)展示這個(gè)問(wèn)卷的回收概況總答卷數(shù)、有效答卷數(shù)、各題作答率即有多少人答了這道題以及每個(gè)選項(xiàng)的選擇人數(shù)和占比。統(tǒng)計(jì)接口的設(shè)計(jì)思路是按問(wèn)卷聚合{ questionnaireId: 19, totalCount: 1280, questionStats: [ { questionId: 101, stem: 你所在部門是, type: 1, answerCount: 1275, optionStats: [ {optionId: 1001, text: 技術(shù)部, count: 520, rate: 40.8}, {optionId: 1002, text: 市場(chǎng)部, count: 755, rate: 59.2} ] } ] }前端拿到這個(gè)結(jié)構(gòu)后用 ECharts 畫餅圖或者條形圖非常直接。一個(gè)值得推薦的小技巧是不要在前端計(jì)算占比讓后端直接返回 rate 字段。這樣前端做展示更簡(jiǎn)單同時(shí)后端可以在取數(shù)時(shí)統(tǒng)一處理精度和格式化邏輯避免不同頁(yè)面算出來(lái)的比例對(duì)不上。6.2 統(tǒng)計(jì)性能優(yōu)化索引、緩存、異步導(dǎo)出問(wèn)卷系統(tǒng)在統(tǒng)計(jì)層面的數(shù)據(jù)量通常不會(huì)大到需要引入 Elasticsearch但有幾條優(yōu)化策略是很實(shí)用的第一給外鍵字段建索引。answer_detail表的questionnaire_id和question_id字段在多表 JOIN 時(shí)是高頻過(guò)濾條件建立普通索引就能大幅度加快 GROUP BY 和 WHERE 的查詢效率。我建議在初始化 SQL 腳本里就加上這層索引而不是等數(shù)據(jù)量大了再補(bǔ)。第二統(tǒng)計(jì)接口開啟 Spring Cache 緩存。同一份問(wèn)卷在短時(shí)間內(nèi)被多次查看統(tǒng)計(jì)結(jié)果其實(shí)是一樣的。用Cacheable注解把統(tǒng)計(jì)結(jié)果緩存 5 分鐘能顯著降低數(shù)據(jù)庫(kù)壓力。注意問(wèn)卷一旦有新答卷提交需要主動(dòng)調(diào)用CacheEvict清掉對(duì)應(yīng)問(wèn)卷的緩存否則統(tǒng)計(jì)結(jié)果會(huì)一直不變。第三Excel 導(dǎo)出采用異步生成。當(dāng)后臺(tái)需要導(dǎo)出全部答卷明細(xì)時(shí)同步導(dǎo)出可能會(huì)導(dǎo)致請(qǐng)求超時(shí)。更好的做法是提交導(dǎo)出任務(wù)后返回一個(gè)任務(wù) ID后臺(tái)線程生成 Excel 文件再通過(guò)前端輪詢或 WebSocket 通知下載完成。這一步在初期可以不做但如果你的系統(tǒng)面向的問(wèn)卷經(jīng)常有幾千人參與導(dǎo)出功能幾乎是必須的。6.3 一道題教會(huì)你多選題統(tǒng)計(jì)的拆分邏輯多選題的統(tǒng)計(jì)是新手最容易懵的地方。假設(shè)一道題有 5 個(gè)選項(xiàng)用戶選了“A、C”我們?cè)赼nswer_detail.option_value字段里存儲(chǔ)的是1,3。現(xiàn)在想統(tǒng)計(jì)“選項(xiàng) AID1被選了多少次”如果用GROUP BY option_value只能統(tǒng)計(jì)出“同時(shí)選 A 和 C 的人有多少”得不出“選 A 的人有多少”。拆分的方式有幾種。一種是在 Java 中循環(huán)讀取后再統(tǒng)計(jì)適合數(shù)據(jù)量小的場(chǎng)景另一種是直接在 SQL 層面用FIND_IN_SET或LIKE處理比如SELECT COUNT(*) FROM answer_detail WHERE question_id 102 AND FIND_IN_SET(1, option_value) 0如果統(tǒng)計(jì)所有選項(xiàng)的分布可以用一條 JOIN 把選項(xiàng)表和答題明細(xì)表按 FIND_IN_SET 關(guān)聯(lián)起來(lái)再分組計(jì)數(shù)。不過(guò)需要留意的是FIND_IN_SET寫法簡(jiǎn)單但當(dāng)數(shù)據(jù)量很大時(shí)無(wú)法走索引。所以在實(shí)際項(xiàng)目中我更推薦“冗余統(tǒng)計(jì)表”的策略每次答卷提交后異步更新一張question_option_stat統(tǒng)計(jì)表每個(gè)問(wèn)卷、每個(gè)題目、每個(gè)選項(xiàng)一行直接累加計(jì)數(shù)。這樣統(tǒng)計(jì)接口永遠(yuǎn)只查這張小表性能又快又穩(wěn)定代價(jià)僅僅是提交時(shí)多一點(diǎn)更新開銷。對(duì)于中小型問(wèn)卷系統(tǒng)這是性價(jià)比最高的方案。7. 常見問(wèn)題排查與避坑實(shí)錄7.1 問(wèn)題速查表這套系統(tǒng)在開發(fā)和部署過(guò)程中有幾類問(wèn)題出現(xiàn)的頻率特別高我整理了一個(gè)速查表方便你直接定位現(xiàn)象可能原因解決方案啟動(dòng)時(shí)報(bào)Unknown database還沒有創(chuàng)建數(shù)據(jù)庫(kù)或庫(kù)名拼寫錯(cuò)誤在 MySQL 中執(zhí)行CREATE DATABASE survey_system DEFAULT CHARACTER SET utf8mb4;登錄失敗賬號(hào)密碼正確但進(jìn)不去密碼加密方式和數(shù)據(jù)庫(kù)密文不一致檢查登錄 Service 中使用的加密算法MD5/SHA與初始數(shù)據(jù)的密文格式對(duì)齊問(wèn)卷發(fā)布后答題頁(yè) 404問(wèn)卷狀態(tài)字段未設(shè)置為“發(fā)布”或接口路徑錯(cuò)誤確認(rèn)status1并檢查后端 Controller 的RequestMapping路徑時(shí)間字段差 8 小時(shí)數(shù)據(jù)庫(kù)連接 URL 缺少時(shí)區(qū)配置在url中加入serverTimezoneAsia/Shanghai統(tǒng)計(jì)接口響應(yīng)很慢沒有對(duì)questionnaire_id建索引給answer_detail表的questionnaire_id字段添加普通索引提交答卷后提示參數(shù)錯(cuò)誤題型枚舉值和實(shí)際不符檢查前端渲染用的題型映射和后端枚舉定義保持一致多選答案統(tǒng)計(jì)不準(zhǔn)沒有處理多選拆分改用“統(tǒng)計(jì)表冗余”或FIND_IN_SET拆分邏輯7.2 踩過(guò)的坑從一個(gè)拼接 SQL 導(dǎo)致的 Bug 說(shuō)起有一次我在統(tǒng)計(jì)模塊里為了省事直接拼接了選項(xiàng) ID 的字符串去查詢數(shù)據(jù)庫(kù)結(jié)果某個(gè)選項(xiàng) ID 是兩位數(shù)時(shí)LIKE %1%把 ID 為 11、21 的選項(xiàng)也匹配進(jìn)去了統(tǒng)計(jì)結(jié)果直接翻倍。從那以后我給自己定了一條規(guī)矩能用參數(shù)化的寫法和FIND_IN_SET就不要用字符串 LIKE 匹配數(shù)字 ID。這條原則不只適用于問(wèn)卷系統(tǒng)任何涉及 ID 過(guò)濾的場(chǎng)景都一樣數(shù)據(jù)格式規(guī)范化永遠(yuǎn)比“寫起來(lái)快”更重要。還有個(gè)常見的坑是在“復(fù)制問(wèn)卷”功能上。很多系統(tǒng)支持一鍵復(fù)制已有問(wèn)卷實(shí)現(xiàn)時(shí)如果只是把問(wèn)卷表記錄復(fù)制一份而忘記同時(shí)復(fù)制題目和選項(xiàng)就會(huì)出現(xiàn)“問(wèn)卷存在但打開編輯時(shí)一片空白”的詭異問(wèn)題。正確做法是在事務(wù)里完成三步復(fù)制問(wèn)卷主記錄遍歷原問(wèn)卷下的所有題目為新問(wèn)卷創(chuàng)建新題目和新選項(xiàng)同時(shí)維護(hù)好新舊 ID 的映射關(guān)系。這個(gè)邏輯不難但容易漏。7.3 關(guān)于并發(fā)提交的思考問(wèn)卷系統(tǒng)有一個(gè)特殊場(chǎng)景同一個(gè)用戶、同一份問(wèn)卷在多個(gè)標(biāo)簽頁(yè)同時(shí)提交。如果系統(tǒng)不做任何限制就可能產(chǎn)生重復(fù)答卷。處理方案我在前面提過(guò) Session Redis 的標(biāo)記方式但更徹底的做法是在數(shù)據(jù)庫(kù)層面加一層唯一約束。比如在總答卷表里增加一個(gè)unique_key字段存儲(chǔ)user_id questionnaire_id 某次會(huì)話的隨機(jī)標(biāo)識(shí)在數(shù)據(jù)庫(kù)層面設(shè)置唯一索引。這樣即使前端重復(fù)提交、后端并發(fā)處理數(shù)據(jù)庫(kù)最終也只會(huì)保留一條有效記錄。這個(gè)方案比單純依賴后端邏輯要可靠得多因?yàn)樗亲詈笠坏牢锢矸谰€。8. 個(gè)人體會(huì)與幾點(diǎn)額外建議回到這個(gè) SpringBoot 網(wǎng)上問(wèn)卷調(diào)查系統(tǒng)本身我個(gè)人的體會(huì)是它的代碼量不算大但覆蓋的知識(shí)點(diǎn)非常全面。從 SpringBoot 自動(dòng)配置到 MyBatis Plus 的 ActiveRecord 模式從 REST 接口設(shè)計(jì)到前端動(dòng)態(tài)渲染從 SQL 聚合統(tǒng)計(jì)到部署排查每一個(gè)環(huán)節(jié)都能在真實(shí)項(xiàng)目中找到對(duì)應(yīng)場(chǎng)景。對(duì)正處于學(xué)習(xí)階段的朋友來(lái)說(shuō)把它“吃透”比急著上手微服務(wù)更有價(jià)值。最后分享一個(gè)小技巧做完這套問(wèn)卷系統(tǒng)后你可以自己給自己提需求比如“支持刪除問(wèn)卷前二次確認(rèn)”“支持統(tǒng)計(jì)結(jié)果導(dǎo)出 PNG”“支持答題進(jìn)度條”然后逐個(gè)實(shí)現(xiàn)。這些需求單獨(dú)看都不難但把它們一個(gè)個(gè)加進(jìn)去的過(guò)程就是對(duì)這套代碼最有效的鞏固方式。你在動(dòng)手的過(guò)程中會(huì)遇到“如何改表結(jié)構(gòu)而不影響老數(shù)據(jù)”“如何加接口而不破壞原有協(xié)議”這些真實(shí)問(wèn)題而這些經(jīng)驗(yàn)恰恰是只讀一遍代碼學(xué)不到的。希望這篇文章能幫你少走一些彎路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
小草精彩毛片| 国产精品久久久蜜臀| 91蜜桃婷婷狠狠久久综合9色| 婷婷五月天激情小说| 中文字幕78| 中文字幕后石码四区五区| 欧美极品性爱天天射| 日韩另类色图| 色综合中文字幕不卡| 欧洲亚洲人妻无码高清久久三区四区| 美国日韩黄色片| 玖玖综合色| 久久一二三四| 99热亚洲天堂| 国产亚洲精品一区二区三区| 97亚洲性爱| 欧美在线官网| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 国产午夜在线观看| 97天天爽| 人人爱人人乐人人操| 久久毛卡| 热热色青青草| 2019久久久久久久久福利| 国模精品娜娜一二三区| 天天澡天天爽日日av| 亚洲一区二区三区春色| 中文字幕性感少妇av| 人妻激情在线视频| 中文字幕乱在线伦视频中文字幕乱码在线| 无码人妻毛片丰满熟妇精品区| 天天操天天射天天日| 69视频福利导航| 久久久久久久九九九九九九| 欧美日韩亚洲五月天婷婷| 久久精品中文字幕观看| 精彩久久中文| 色色色综合网| 囯产精品久久久久久久久久梁医生 | 国产精品诱惑| 久插综合| 久久成人国产| 欧美黑人与女人91| 天天天天天天天天综合| 国产91乱伦| 九九九九一区| 97视频网站在线观看| 97超碰人人模人人拍人人| 区一二区日韩亚洲乱码av电影| 成人午夜高潮av猛片| 超碰在线974| 中文字幕一区二区三区字幕| 亚洲色图综合网| 立川理惠加勒比无码| 日韩三级av片| 91国产伊人大香蕉| 日本综合久久| 精品人妻视频入口| 一区二区不卡免费| 大香交伊人网| 大香网站| 免费试看60秒| www.人人摸在线视频| 国产免费一区二区三区最新不卡| 黑人美精品 A片| 人人干人人搞人人摸| 熟妇激情| 日本不卡码黄色| 岛国网址国产 | 91美女视频直播| 色狠狠综合噜一二三区| 老司机老司机午夜影院| 啊啊啊啊网站| 蜜桃天美传媒AV一区二区三区| 淫淫总合网| 99老司机精品视频在线观看| 91色图片| 色色国产| 人妻中文字幕日韩电影| 久久无码成人| 小视频国产| 大香蕉一人| 人妻爽爽啪视频| 久久久98网站免费视频| 乱伦图一区| 四虎在线观看视频| 超碰97人人乐| 久久综合久色欧美综合狠狠| 亚洲最大黄网| 日韩一级欧美一级在线观看| 亚洲国产一区二区日韩专区| 久久色网| 青娱乐91| 久操电影网| 夜夜嗷嗷一区二区| 2011国产精品| 久久精品国产Aⅴ| 精品久久久久成人码免| 热久久91婷婷| 色香阁在线| 国产懂色精品国产av| 黄色免费网| 国产精品96久久久久久| juliaann欧美丝袜办公室| 欧美与日韩97| 天天拍天| 亚洲综合夜色| 久久婷婷欧美| 久久久精| 欧美性五月| 1000午夜黄色| 综合97亚洲| 久久精品一区| 日本黄 R色 成 人网站| 久久一二三四五六七八九区区区 | 欧美姓爱综合网| 伊人性在线视频| 青草伊人久久| 久久精品国产亚洲av水密被窝| 大香交| 可乐操亚洲蜜911| 国产精品农村妇女| 亚洲AV成人无码一区二区三区在线观看| 亚洲精品久久久久久久蜜桃臀| 国产suv精品一区二区四区999| 日韩一区二区熟女| 亚洲高清无码在线桃色| 福利伊人玖玖国产| 久9视频| h无码动漫在线观看| 熟女乱伦A| 男人高清无码一区二区| 乱伦a片视频| 91欧洲国产成人久久精品网站| 亚洲久久久| JIZZJIZZ亚洲女人被躁| 亚洲性爱电影| 激情专区综合| 91久久精品国产| JULIA人妻风俗店中出电影| 91色噜噜狠狠| 久久久少妇诱惑精品视频| 欧美狠狠鲁| 亚洲男人的天堂网| 啊啊啊轻点在线观看| 高清无码91| 91国模| 婷婷伊人五月| 人人 操人人 操人人| 国产精品成人AV片免费看网站| 亚洲男人的天堂va亚洲男人社| 午夜免费福利视频一区| 久久久久国产亚洲一区欧美色图日韩| 日夜久久久九九九久| 青青草白白色| 欧美 色 亚洲| 啊啊啊啊啊啊在线| 五月天久久综合网| 婷婷91| 五月婷婷五月天| 天色综合网| 五月天加勒比啪| 夜夜欢天天干| 国产熟女免费观看久久| 国产亚洲一黄| 五十路熟女,国产欧美精品区一区二区三区| 国产丁香精品露脸视频| 国产熟女一区二区| 无套内射人妻在线播放| 五月天婷婷综合网| 久久夜夜夜| 亚洲人综合19| 国产麻豆福利av在线播放| 爽 好舒服 无码刺激久久| 狠狠中文字幕| 国产精品乱码久久久久久久| 极品国产内射| 无套内射性感少妇视频| 欧美综合骚| 国产蜜臀精品一区免费尤物| 色婷亚洲五月在线观看| 丰满的三级少妇欧美久久久| 色九九综合| 伊人少妇久久久| 婷婷久草| 亚洲无码国产精品久久| 九色 人妻 大香蕉| 97超碰色屌| 神马午夜久久久| 夜夜操老骚逼视频网站| 日本不卡二三区| 91精品久久久久久77777| 91网站在线播放| www.久久超碰| 中文字幕交换人妻| 久久极品伊人| 欧美日韩国产电影| 黄页av| 精品久久久久久久| 国产免费操逼| 校园春色之综合网| 亚洲综合另类色图| 大肥女高潮bbwbbwhd视频| 欧美性爱三区二区| 禁十八久久| 男人兔费天堂| 伦理弟一页| 亚洲高清视频在线免费观看| 久久久久9| 死我十八禁| 1024人妻熟女一区二区三区| 久久视网78| 在线综合 亚洲 欧美中文字幕| 国产精品久久久久久片| 青娱乐亚洲热| 日韩字幕一区| 97国产成人精品免费视频| 嗯嗯啊啊好疼| 日本成人A片网站| 97蜜桃综合| 久热精品在线| 国产成人+综合亚洲+天堂| 婷婷精品国产欧美精品亚洲人人爽| 后入美女国产| 91亚州| 口爆综合网| 亚洲天堂男人天堂网| 岛国网址国产| 激情一区二区| 九九九九精品一区| av天堂精品久久| 天天摸,夜夜摸| 啊啊啊啊啊啊啊啊视频| 内射中出日韩在线观看视频| 亚洲另类春色| 精品国产一区二区三区久久久蜜臀| 亚洲97| 成人热久久精品| 国产网站在线播放| 日韩一级二级三级| 欧美色www亚洲国产阿娇要播| 久久久久久久人妻| 一区AV| 色五月首页| 亚洲成aⅴ人片不卡无码| 天天天堂影视日韩亚洲91| 国产一区二区欧美日本| 精品一级毛片在线观看| 99综合自拍| 国产女人极品高潮毛片| 人人操,人人插| 亚洲s色图| 美女毛片999| 人人射人人操人人摸| 91亚洲综合在线| 九九九综合精品| 欧美丰满熟妇XXXX性ppX人交| 亚洲美女AV无码| 在线啊啊啊| 青青色综合| 99在线观看视频在线高清| 日韩AV电影网站| 午夜精品探花| 黄色av网站在线播放| 亚洲熟久久| 欧美色三级片91| 91精品久久久久久77777| 人人操人人摸人人看人人插| 老司机午夜精品视频| 国产精品久久泡妞网站| 亚洲美女精品九九视频| 人乳av| 欧美91丝袜| 精品一久久久| www.超碰| 亚洲欧美校园另类春色| 欧美日不卡| 99无码视频| 亚洲激情网一二三四区| 翘臀vidoes| 艳尻美人妻| 疯操AV| 99国产精品久久久久久久成人热 | 一区二区三区色综合| 福利一级版子| 床戏久久久av一区二区麻豆| 五十路熟女人妻一区二区三区四区五| 91综合熟女| 国产女人视频三四五区| 日本操逼无码| heyZO天然素人无码AⅤ专区| 神马久久久久久久| 国产一进一出视频网站| 亚洲色图大香| 美女骚尻视频| 亚洲日韩电影| 嫩草一区二区在线观看| 亚洲av综合色区无码一| 欧美色图天堂在线| 99青青草国产视频| 亚洲图片视频小说| 亚洲精品乱码线路中文字幕| 婷婷激情五月| 天天插天天舔舔天天干| 日韩视频小说在线观看| 亚洲天堂男人的天堂| 欧美熟妇精品黑人巨大91| 偷拍精品一区二区三区| 人人插人人搞人人操| 99re8超碰| 国产精品成人午夜福利| 无码最新| 欧美日日夜夜| 国产白丝av| 亚洲无码久久久久久久| 六月婷婷色综合| 东京热大香焦| 亚洲色人| 久久綜合很很很| 热99这里有精品综合久久| 激情视频网址| 热99re69精品8在线播放| av片在线观看免费播放| 久久精品无码熟妇一区二区三区视频导航 | 欧美大片天天看| 密臀在线一区尤物| 精品久久久久久亚洲| 91美女在线| 色丁香五月婷婷| 日韩精品一区,二区 九九...老司机| 亲子敌伦对白在线播放| 天天α片| 亚洲精品一区二区三区在线播放| 四虎免费看黄| 看黄片视频免费| 四虎影库国产精品免费| 日韩人妻一区二区| 欧美日韩大陆黑人少妇99| …亚洲黄色厕厕女女在线播…| 校园春色制服丝袜中文字亚洲| 九久精品| 日韩精品怡红院| 香蕉人人操tv| 色吧91| 欧美曰韩国产精品| 久热伊人| 精品国产av一区二区三区四区入口| 国产精品熟女乱伦| 可免费观看的av毛片中日美韩| 99热在线观看| 亚洲欧美色图小说| 四季av一区二区凹凸精品小说| 精品女人999| 亚洲**2021在线观看| 欧洲精品人妻| 亚洲精品色| 国产色产精品在线观看| 国产一线二线三线av| 中文字幕在线日亚洲9| 中文字幕乱码人妻二区三区| 1204金沙人妻懂旧版免费| 亚洲网站一区二区在线| 久久免费精品96| 91c色| 亚洲一区二区av| 久久超碰98| 91人人爽人人爽| 国产亲戚伦亲在线| 国产人伦a片信息免费片| 国产91影院| 97超碰超碰| 自拍亚洲综合| 天天干天天中出av| 97操碰| 欧美一级色| 福利视频一区二区微拍| 性爱边摸边日免费AV| 亚洲自拍天堂| 亚洲啪啪视频一区二区| 欧美日韩国产高清在线一二三区 | 96精品久久久| 日日躁夜夜躁狠狠躁超爽| 色五月婷婷五月天| 熟女人妻一区二区三区| 加勒比久久综合网高清| 久操电影| 人人么人人操| 亚洲色图欧美一区二区不卡| 密臀在线一区尤物| 亚州综合在线| 色婷婷电影网| 天天色播亚洲综合网站| 亚洲精品久久久久久久蜜桃臀| 日韩性爱毛片操骚逼| 亚洲一区二区三区AV无码| 亚洲人妻在线一区| 色色色综合网| 精品一区二区亚洲国产| 色97| 91无码人妻| 97资源亚洲| 日本操逼视频不卡直接放| 亚洲强奸乱伦影视网| 激情综合五月| 男人天堂久久精品不卡| 97这里有精品| 在线αⅴ| 婷婷丁香成人| 天堂av2019| 97午夜剧场日韩| 老色69| 99精品人人爽| 国产精品成人AV片免费看网站| 五码视频在线观看| 成人看片网站| 夜夜嗨老熟女AV一区二区三区| 成人在线视频一区| 午夜成人爽爽爽爽A片李冰冰| av天堂5| 伊人丝袜美腿高跟在线观看高清| 少妇久久久久久| 久久久熟妇熟女国产| 欧美综合 站| 日本十八禁免费看污网站| 久久夜夜夜夜| 亚洲免费人妻在| 97中文字幕一区| 九九热精品| 亚洲脚交| 免费看日本操逼视频| 久久综合97| 青青草吊丝| av在线观看不卡网站| 情侣操 逼视频99| 国产男女无套视频免费观看| 99热18这里只有精品| 亚洲欧洲另类| 大香蕉视频一二三区| 99re热| 91GD.COM| 国产精品白丝在线播放| 久久久久久人| 日本A级视频| 十八禁成人网站在线观看| 婷婷激情丁香| 男女激情中文字幕| 午夜AV人气不卡| 欧美亚州综合网图片| 久久色一区| ..日韩av毛片精品久久久| 男人把坤坤插入女人的下体| 亚洲操逼网| 秋霞操逼片| 精品人妻一区二区蜜桃视频 | 婷婷丁香人妻| 欧美亚洲AN| 五月天丁香网| 97综合久久| 国产精品视频在线播放| 大香交伊人网| 97在线免费看视频| 日本一久是| 97色色网| 国模不卡| 国产高清视频无码在线| 老熟女网站| 精人妻无码一区二区三区伊人直播| 日本高清一区二区在线| 秋霞一级鲁丝片A片| 成人小电影网站tex| 久草热制服丝袜在线观看| 色香色香欲天天天影视综合网| 2018天天干在线视频| 97欧美在线| 91成人亚洲色图| 四虎永久在线精品免费网址| av资源在线播放天堂| 国内精品a| 91视频综合网| 九九热国产| 俺也射| 老熟女91av| 国产午夜激片Av毛片不卡| 亚洲国产日韩精品久久久| 新精精品久久精品| 国产熟女精品区| 欧美亚男人的天堂| 久久久久久大| 欧美久久草熟女| 亚洲天堂7777| 亚欧Av| 国产精品自在线发布| 亚洲 日本 国产 综合| 成人av毛片在线观看| 精品久久青青草| 欧美一级黄片免费播放| 爽极品影院| 九九精品99| 国产无码精品高清| 上海一级黄片| 久久性爱精品一区| 日韩人妻一区二区| 东京热一区二区中文字幕| 九九九精品| 少妇久久久| 91丨人妻丨国产丨丝袜| 91老熟女91老女人| 97在线视频免费看| 丝袜熟女2P| 精品无码一区二区| 亚洲淫乱骚妇AV| 日产中文字幕2020| 91在线视频免费中出| 秋霞男人网| 嫩草影院永久在线制服丝袜| 91 综合 色| 九九九九九九免费视频| 91白虎| 啊啊啊啊啊啊在线观看| 91精品国产91久久福利| 在线中文字幕| 色欲日韩欧美在线一区| 天天看,天天做| 天天干少妇| av操操不卡| 亚洲宗合网| 91精品导航| 啊啊啊在线观看| 久久riav中文精品| 亚洲AV成人在线| 少妇毛片久久| 天天拍天| 综合久久9| 亚洲国产av中文字幕久久| 男男H黄动漫啪啪无遮挡网站| 人妻熟女午夜精品在线| 97色色色综合网站| 清纯唯美综合亚洲| 秋霞一级鲁丝片A片| 4虎在线视频| 日本韩国五十路六十路七十路老熟女作爱视频网站| 亚洲97| 黄色网址在线免费观看| 内射白嫩美女| 丰满少妇精品一区二区| 亚洲无码精品AV久久久| 日韩一级特黄av毛片| 婷婷久久网| 亚洲三级网址久久最新| 偷拍片久久| 国产精品福利视频| 国产精品无码AV网站| 国产久久久9999| 乱色老一区二区三区的观看方式| 中文乱码字字幕在线第5页| 激情五月天插| 久久人妻视频网| 青青草久久在线| 日本一区二区不卡| 日本中文字幕在线视频| wwe 天天干.com| 熟妇人妻一二三区免费| 乱伦图一区| 麻豆区99999| 亚洲干B| 中国一级特黄大片护士| 久jiu久神马影院| 99热在线只有精品| 免费簧片在线观看| 欧美72网页| 91肉丝| AAA久久| 国产精品乱码久久久久久| 久久精品一区二区三区四区五区| 91久久婷婷| 2019亚洲男人天堂| 日韩免费中文字幕视频| 97久久精品亚洲| 亚洲欧美天| 国产浮力影院第1页| 欧美999999| 四虎国产精品永久入口| 99超碰色| 欧在线一二区| 97WW精品| 欧美高清第一页| 欧美日韩高潮喷水91| 久草免费在线视频| 婷婷99狠狠| 综合网欧美在线| 日韩猛交| 亚洲欧美九九| 秋霞网无码| 精品久久99| 超碰78| 欧美成人亚洲精品| 国产精品福利资源在线尤物| 天堂精品小草| 免费一级性爱久久| 91爱做| 久久久亚洲欧美综合| 9 7超碰在线免费观看| 9久在线视频只有精品| 亚洲国产精品久久久久婷婷青年| 色激情综合网站| 天天综合网91入口| av天堂天堂av日韩| 国产丝袜高跟美女av免费观看| 色伊人91| 99少妇| 久99久视频精选| 肏逼视频日本| 性老妇一区二区三区| 日韩性爱免费视频在线网站| 一区超碰一区| 五月婷婷六月天| 日本淫乱女一区二区三区视频| 国产午夜福利视频在线| 无码国产Av| 人妻人久久精品中文字幕| 婷婷久久网| 中文AV制服乱伦| 亚洲熟久久| 伊人五月天| 欧美成97爱| 九九玖玖精品| 欧美日韩国产高清在线一二三区 | 久久XX| 婷婷国产精品一区二区| 亚洲国产精品久久久久婷婷青年| 人人么人人操| 男人的天堂日韩| 日韩人妻大香蕉| 欧美特大AA级黄片| 四季av一区二区凹凸精品小说 | 人妻夜夜爽天天爽三区麻豆AV网站| 久久这里都是精品| 激情小说成人日本无码一| 欧美色老汉| 亚州色站 日韩电影| 久久黄片国产一区二区| 久草综合网| 国产精品一二三免费网站| 被窝影院午夜看片无码| 亚洲综人| 午夜成人福利影视| 久久艹逼视频| 美女操逼A A| 国产精品伦理| 99蜜桃臀久久久欧美精品网站| 欧美日韩999| 高清国产成人无码| 久久一二三四五六七八九区| 嗯……啊…嗯嗯…啊…好舒服| 久久亚洲精品成人av| 玖玖爱在线视频免费观看| 欧洲性人爱视频| 欧美一二在线| 欧美夜夜狠| 欧美一区二区三区蜜桃| 岛国黄片网站| 亚洲高清欧美总合| 日韩精品一区,二区 九九...老司机| 亚洲AV无码天美传媒一区| 51久久夜色精品国产麻豆| 日日夜夜骑| 久偷拍欧美日韩三区| 丰满人妻一区二区三区免费,| 国产自产一区视频在线| 测评在线观看AV| 久操国产在线| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 麻豆精品.欧美精品.日韩精品.| 日本超碰色精品| www.狠狠干.coom| JULIA一区二区三区在线播放| 18禁中文字幕| 天天色天天干天天爱| 日本国产欧美一区三区二区 | 97色爱| 日韩欧美视频青青| www色婷婷| 自拍大香蕉乱插| 亚欧日韩成人| 欧美色视频在线| 亚洲欧洲综合av在线| 99热| 亚州精品人妻一二三区| 日韩欧美aⅴ综合网站发布| 操国产逼| 女沟厕偷窥piss小便| 久操视频在线观看| 亚洲黑人在线| 激情小说在线视频| 日本成a人v网站在线观看| 青青草福利视频| 色色青青久久| 大香蕉一人| 无码视频一区二区| 日韩资源网| 日韩中文字幕熟妇人妻| 日本十八禁免费看污网站| 天天射天天| 国产隔壁老王影院在线| 日韩亚洲中文有码视频| 免费啪啪一级视频| 天天色综亚洲91污| 5278欧美一区二区三区| 香蕉久久国产AV一区二区| 五月天激情小说| 大香蕉操久久| 色诱中文字幕| 亚洲乱色视频一区、二区在线| 人妻精品4K4K4K4K4| 国产60区。| 精品美女在线视频| 欧天美中出| 欧美人妻一区二区| 美欧色综合| 欧美成人性爱视频在线播放| 国内毛片热久久思思热| 国产精品女生av| 亚洲精品日韩国产欧美| 96精品在线| 操美女人妻| 99热99re6国产在线播放| 97中文综合| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 青青草福利视频| 看免费一级在线播放毛片| 成人三一级一片aaa| 久久97| 婷婷激情一区二区三区俺也去| 狠操91,com| 欧美97在线欧| 青椒国产97在线熟女| 可以看的av| 诱惑人妻欧美一区在线播放| 超碰在线在公开超碰在线在公开| 99久久99九九99九九九| 97日本超碰综合| 亚州综合图片| 欧美日韩传媒| 国模不卡| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 激情综合五月丁香| 国产一级久久久| 2017天天操| 亚洲欧美综合区自拍另类 | 蜜臀99久久精品| 国产一区二区三区高清视频| 囯产乱伦一区二区三女| 中文字幕在线观看AV| 国产传媒一区日韩| 蜜臀久久99精品久久久久久-DVD| 久久黄色性爱视频| 欧洲综合视频| 欧美亚洲宗合色性图| 久久专区| 久久激情视频| 精吧天堂| Sekablack无码一区| 丰满人妻一区二区三区| 99re6国产精品99re| 精品视频一区二区| 九九热AV| 少妇与黑人高潮在线| 天堂成人网| 爱av免费| 女人的天堂大香蕉网| 91欧美 | 国产三级在线现体验区| 333kkkk·亚洲com久久| 色欲人妻一区二区在线| 久久久久国产精品久久久| 久久老子无码午夜伦不卡| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 超碰午夜| 色色色综合| 妇女乱色二区| 欧美大香蕉专区网| 天天综合网AV91| 搡老女人911熟妇老熟女| 玖玖久久久| 国产激情在线| 国产一区二区三区,在线观看观看| 国产91 丝袜在线播放00-百度| 黄片不用下载在线观看| 人人操人人精品影片| 最近2019中文字幕国语免费版| 久热久| 一,爱啪啪,在线免费视频| 欧美91久久久久| 乱伦日本色图AⅤ| 欧美色图99| 婷婷精品| 日韩性爱长视频免费| 禁止观看美女黄| 性videos欧美熟妇hdx| 欧美人妻色| 国产精品嫩草影院免费| 欧美东京热精品A∨| ji熟女.com| 欧美精品久久| 国产视频一区二区免费| 密臀在线视频| 欧美制服网站美腿丝袜| 欧美 精品国产制服第一页| 动漫区日韩区欧美区| 又大又长又粗又爽又黄| 久久久免费高清中文视频| 超碰免费在线| 亚洲一区二区三区春色| 久久精品夜色国产亚洲AV| 黑人无码一区二区| 亚洲少妇综合| 国产视频一区二区在线观看| 久久久久久亚洲Av无码| 精品一国2| 五月激情啪啪| 国产家庭乱伦表演| 91亚洲丝袜| 狠狠狠狠狠干| 浓厚中出中文字幕在线| 啊啊啊啊,啊啊好多水| 亚洲精品丝袜-不卡成人免费……| 爱妃国产亚洲视频中文字幕| 久久久久国产精品人妻aⅴ天堂| 一区二区你上我| 影视综合无码少妇| 精品一区二区三区18| 校园春色综合色| 激情久久av一区av二区av| 中文字幕欧美丝袜07资源| 污污污8888| 超碰免费人人| 国产成人综合在线播放| juliaann欧美丝袜办公室| 国产青视频| 欧美日韩高潮喷水91| 日韩免费大片一级播放| 久草新在线| 综合情欲网| 麻豆天美传媒在线视频天堂| 久久丁香五月天| 欧美日韩另类在线播放| 一区二区三区四区理论片| 亚洲男人的天堂网| 宅男91视频在线播放| 日本岛国黄色网址| 粉嫩粉嫩一区性色AV片| 天美传媒精品一区二区| 2020中文字幕在线| 欧美九九爱| 大香蕉免费乱伦视频| 成人精品无码| 欧美熟妇色| 亚洲情色综合网| 99re69| 国产黄a三级三级三级av在线看| 特级毛片特黄久久免费看 | 老鸭窝亚洲毛片| 精品亚洲国产成人AV制服丝袜| 岛国在线免费视频| 男女一进一出视频久久| 变态综合色| 黄站在线免费观看| 色爽——AV| 天天干天天中出av| 大香蕉 222| 91人人爽人人爽| 蜜臀少妇一区二区| 色婷视频| 9999免费精彩视频| 综合久久欧美| 日本性爱少妇| 在线观看国产黄色| a v网站在线播放| 亚洲成人日韩小说| 国产对白刺激视频| 成人免费看吃奶视频网站| 亚洲在线网站| 人人看黄色视频| 人人么人人操| 日韩成人性日韩成人性爱视频在线免费观看 | 婷婷伊人一区| 亚洲精品一区二区三区新线路| 中文字幕精品一区二区精品| av大香蕉| 极品色社| 精品国产网站| 中美日韩毛片| 操人妻逼91| 一牛一区二区三区久久| 国精综合一二三区影视| 欧美成人色| 伊人视频| 综合亚洲网| 人妻丰满熟妇av无码区蜜桃| 欧美性综合| 成人天天爽| 台湾佬中文娱乐网久久久久久久久久com | 第四色色综合91| 欧美亚洲一区二区久久久婷精品大包诱| 一区二区三区四区五区高清无码永久视频 | 任你爽视频| 偷拍伦理视频| 操美女人妻| 欧美色图 人妻| 久久成人午夜狠狠| 成人九九| 国产品精品自在在线午夜免费| 襙一襙| 久久青青草原免费视频| 国产一级作爱毛片| 亚洲成av人片色午夜乱码| 麻豆精品.欧美精品.日韩精品.| 大香蕉中文在线| 思思热在线视频在线| 日本狂喷奶水在线播放212| 黄片aaaaa一区| 国产精品电影| 67194无码不卡| 乱子伦一区二区三区国产精品| 黑人综合色| 超碰免费人妻在线| 欧美日韩另类在线播放| 久久精品三级影视| 五月天激情小说| 日韩中文字幕熟妇人妻 | 久久本道| 激情小说亚洲图片| 99999久久精| 超碰在线欧美性爱激情| 大香蕉免费乱伦视频| 校园春色制服丝袜中文字亚洲| 欧美精品久久96人妻无码| 国产熟女高潮一区二区三区| 国产综合久久久麻桃个| 岛国福利在线精品播放| 日本黄 R色 成 人网站| 人妻在线中出视频| 国产日韩中文字幕欧美| 肉动漫无遮挡h在线观看| 国产乱码精品一区二区三区四川| 亚洲91少妇| 欧美激色| 中文字幕人妻资源在线| 极品极品色影院| 国产精品欧美激在线| 密臀在线一区尤物| 日韩 欧美 视频 在线 一区| 98一区二区精品| 国产精品久久久久久9999| 精品九九九| 女人爽到高潮潮喷18禁网站| 精品国产99| 97爱亚洲| 亚洲图片偷拍视频区| 久久精品老司| 欧美资源| 久久久夜夜嗨免费视频| 一牛一区二区三区久久| 久久超碰97| 亚洲欧美日韩夜夜| 精品小视频在线| 久久亚洲AV无码白度| 性色av婷婷久久一区二区点复制| 麻豆性爱视频在线播放| 亚洲综合九九| 色区久久| 国产精品大屁股999| 精品中文字幕第一页| 亚洲。日韩。欧美| 97干在线视频| 五月天色图| 天操天操夜操夜月操月年年操操| 国产传媒午夜理伦精品| 啊啊啊啊啊啊在线看| 人妻丝袜一区二区三区在线| 抽插无码高清一区| 精品视频久久区| 国产性久久久| 超碰97最新人妻| 国内毛片热久久思思热| 在线啊啊啊啊| 激情综合网激情综合| 日本欧美韩国日产片片在线看免| 狠狠入| 色99视频| 亚洲综合网91| 五月天婷婷色| 久久久久久久| 啊啊啊不要好疼视频| 久久久久久999| 99久热| 啪啪自拍九九综合| 亚洲无码色| 亚洲综合九九| 边做饭边操逼逼| 视频在线观看一二三区| 91综合色噜噜| 久久久久久久久九九久孕交| 欧美人人曰人人操人人射射| 最新中文字幕av| 精品久久久久av影院| 狠狠爱夜夜干| 激情丁香婷婷| 78久久| 激情图片亚洲色图| 午夜精品久久久久久久久久蜜桃| 国产高清不卡视频| 波多野结衣被操50分钟免费视频 | 久久久久成人蜜桃精品| 国产精品网址| 日韩99999色| 日本人妻中文字幕精品| 亚洲熟久久| 视频分类 国内精品| 国产suv一区二区三区6| 插入综合网| 国产精品99精品视频网站| 高清肉丝中文无码| 人人干人人搞人人摸| 麻豆av一区二区| 天天摸天天插天天日| 欧美自拍偷拍综合图片| 成人天天爽| 色综合色综合网| 97在线免费观看视频| 9久久久久久| 国产激情综合| 欧美夜色| 极品后入免费视频| 国产一区二区三区影片| 人人妻人人澡人人爽人人精品浪潮| 夜夜操天| 免费看黄视频亚洲网站| 五十路熟女,国产欧美精品区一区二区三区| 粉嫩绯色AV一区二区在线| 超碰人妻97| 亚洲和欧美裸体美女双飞视频| 人人操人人大香蕉| 成年人黄色| 五月开心久久AV官网| www99热| 亚洲av综合伊人久久| 亚洲青青草| 老女人爆菊| jk白丝没脱就开始啪啪| 粉嫩av一区二区三区天美传媒| 欧美黑人与女人91~| 秋霞一级视频在线观看免费| 超碰午夜| 国产精品动态一区二区三区四四| 蜜臀久久99精品久久久老,,| 又粗又长又爽在线观看| 午夜一区| 玖玖草久草99蜜月一区二区三区| 国产原创自拍| 亚洲高清国产理伦片| 9久精品| 97超碰国产亚洲精品| 欧美 亚洲 大香| 五月婷婷丁香| 欧美亚洲色图另类国产| 91久久久久久久久18| 伊人久久亚洲色欲综合网站 | 秋霞久久亚洲精品成人| 欧美色图20p| 超碰综合97在线| 日逼五月天| 69超碰综合| 韩国一级做A片免费的| 飘花国产午夜精品不卡| 亚洲一二三四区| 性色高清..……| 99久在线精品99re8a| 国产 日韩 欧美一区| 撸无码不卡免费视频| 久久久久久久久久久久欧美日| 9久久9综合| 青青草操逼逼视频| 97国产成人精品免费视频| 午夜.DJ高清在线观看免费7| 日韩人妻丝袜中文字幕| 天天影视综合色| 足交视频老司机| 欧美精品91| 国产欧美一区二区| 亚洲丝袜色| 色综合久久久久| ?亚洲伊人伊成久久人综合网| 欧美亚洲第一页| 亚洲精品免费中文字幕| TS人妖另类精品视频系列 | 天天干夜夜操一区二区| 亭亭在线资源| av 模特一区了| 国产成人精品午夜福利| 国产熟女精品区| 综合av影片| 天天拍天| 大屁股熟女一区二区三区| 色妇91| 91碰碰| nuu12国产麻豆精品| 91亚洲狠狠色| 伊人宅男大香蕉| 久久日韩肥臀| 国产999精品久久久| 中文字幕AV中出| 易易A毛视频| 中文字幕一二三| 国产在线视频午夜精华在| 国产精品点击进入在线影院高清| 神马九九| 日韩激情无码影院| 1人人看人人摸人人操| 操操操日本的逼| 亚洲制服欧美另类内射| 色色色色网站| 婷婷尹人大香蕉免费| 混色激情av| 神马午夜久久久| 加勒比东京热五月天天堂网| 九九九九九九免费视频| 四虎免费在线播放| 激情欧美97| 日本中文熟女视频| 一级日本牲交大片好爽在线看| 美女视频尤物网在线看| 亚洲图片欧洲图片aⅴ| 91精品久久综合熟女| 五月婷婷激情综合| 人妻在线臀日韩| 99色色| 麻豆久久一区二区三区| 东京热一区二区中文字幕| 欧美激情视频在线一区| 91久久精品中文字幕| 免费视频a级毛片免费视频| 熟女人妻av在线资源,黄色的资源| 97青青操视频| 亚洲九九爱| 无码78| 国产精品美女在线一区| 五月天色色网站| 青青草亚洲一区 | 东京热免费视频| 99999精品成人| 日韩国产九九精品一区二区三区毛片| 中文字幕黄色一起草| 大二网站亚洲| 欧美v亚洲v日韩v最新在线二区| 日韩另类色图| 亚欧美综合网。| 97视频免费播放| 再深点灬舒服灬太大了添视频| 日本三级大片|