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

ARTICLE DETAIL

資訊詳情

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

Spring Boot高校講座預(yù)約系統(tǒng)開發(fā)實(shí)戰(zhàn):并發(fā)控制、數(shù)據(jù)庫與狀態(tài)流轉(zhuǎn)

Spring Boot高校講座預(yù)約系統(tǒng)開發(fā)實(shí)戰(zhàn):并發(fā)控制、數(shù)據(jù)庫與狀態(tài)流轉(zhuǎn) 1. 項(xiàng)目核心思路與需求拆解1.1 高校講座預(yù)約的真實(shí)痛點(diǎn)先講個身邊的場景。某高校每學(xué)期都會安排幾十場講座涵蓋學(xué)術(shù)前沿、就業(yè)指導(dǎo)、心理健康、通識素養(yǎng)等方向。以前是怎么管的學(xué)生會發(fā)通知大家到現(xiàn)場排隊(duì)簽到熱門講座經(jīng)常出現(xiàn)兩種情況一是報(bào)告廳擠爆了過道里都站滿人消防通道都被堵住二是某些冷門講座來了不到三分之一臺上專家講得尷尬臺下學(xué)生玩手機(jī)。后來有人嘗試用在線文檔接龍報(bào)名但信息混亂、容易串改、無法統(tǒng)計(jì)到場率管理員光是核對名單就要花小半天。這個系統(tǒng)的核心價值就是把“講座預(yù)約”這件事從人工排隊(duì)和Excel表里解放出來形成一個學(xué)生在線預(yù)約、后臺統(tǒng)一管理、簽到數(shù)據(jù)自動統(tǒng)計(jì)的閉環(huán)。它不是一個花里胡哨的Demo而是真正能部署到校醫(yī)院、圖書館報(bào)告廳、教學(xué)樓多媒體教室這類場景里用的管理系統(tǒng)。目標(biāo)用戶很明確學(xué)生、教師講座主講人、院系管理員、系統(tǒng)超級管理員四類角色。面向的學(xué)生可能幾千人甚至上萬人所以并發(fā)預(yù)約不能被一個簡單的開關(guān)按鈕帶崩。從技術(shù)上我選了Spring Boot作為后端框架配合MyBatis Plus操作數(shù)據(jù)庫前端用Vue或者Thymeleaf模板引擎做頁面。數(shù)據(jù)庫用MySQL部署在服務(wù)器上用Maven打包成jar直接跑。整套技術(shù)棧不新但勝在穩(wěn)定、資料多、團(tuán)隊(duì)協(xié)作時上手快學(xué)生開發(fā)者照著官方文檔也能七天落地。1.2 角色劃分與核心業(yè)務(wù)流程這個系統(tǒng)不是孤立的預(yù)約工具它要覆蓋講座從發(fā)布到結(jié)束的完整生命周期。我們梳理下來核心角色分成四類學(xué)生用戶瀏覽講座列表、查看詳情、在線預(yù)約、取消預(yù)約、講座簽到、查看自己的預(yù)約記錄和學(xué)分/學(xué)時累計(jì)。講座主講人教師提交講座申請?zhí)顚懼黝}、內(nèi)容簡介、時間、地點(diǎn)、容量等信息查看自己講座的預(yù)約情況和到場率。院系管理員審核主講人提交的講座申請排定講座計(jì)劃查看本院系的預(yù)約數(shù)據(jù)統(tǒng)計(jì)導(dǎo)出參與名單。系統(tǒng)超級管理員維護(hù)基礎(chǔ)數(shù)據(jù)教室、時間段、管理用戶和角色權(quán)限、處理異常數(shù)據(jù)、查看全局統(tǒng)計(jì)報(bào)表。核心流程其實(shí)只有一條主線主講人提交講座申請管理員審核通過后講座狀態(tài)變?yōu)椤翱深A(yù)約”學(xué)生在預(yù)約開放時間內(nèi)搶名額講座開始前或現(xiàn)場進(jìn)行簽到講座結(jié)束后管理員確認(rèn)講座完成并統(tǒng)計(jì)實(shí)際到場人數(shù)。整個流程里有一個容易被忽略的細(xì)節(jié)預(yù)約不是無限開放的必須區(qū)分“預(yù)約開始時間”和“預(yù)約截止時間”否則學(xué)生會提前好幾天把名額占滿后面想聽的人進(jìn)不來。這個需求我在第一版設(shè)計(jì)時漏掉了結(jié)果被某院系老師反饋“學(xué)生下午四點(diǎn)半的講座凌晨十二點(diǎn)就把票搶光了”后來才補(bǔ)上預(yù)約窗口的字段。1.3 功能邊界與優(yōu)先級取舍很多人做管理系統(tǒng)容易犯一個毛病啥功能都想加結(jié)果代碼一團(tuán)亂麻。我理功能清單的時候把需求分成“必須有”和“可以有”兩檔。必須有登錄認(rèn)證、角色權(quán)限控制、講座CRUD、預(yù)約/取消、簽到、預(yù)約記錄查詢、用戶管理、基礎(chǔ)數(shù)據(jù)統(tǒng)計(jì)??梢杂械珒?yōu)先級低消息通知站內(nèi)信、郵件、二維碼電子票、黑名單機(jī)制、講座評價、打印簽到表、數(shù)據(jù)導(dǎo)出Excel。實(shí)際開發(fā)中我建議把二維碼電子票和Excel導(dǎo)出放到第二階段。不是說不重要而是第一版先把預(yù)約主流程跑通讓學(xué)生能約、管理員能統(tǒng)計(jì)這就是上線的最小可用閉環(huán)。我們第一版上線時連二維碼都沒做簽到用的是管理員手機(jī)端搜索學(xué)號手工確認(rèn)雖然原始了一點(diǎn)但核心數(shù)據(jù)鏈路已經(jīng)走通了。后來第二版加了二維碼簽到入場速度從每人20秒降到了3秒體驗(yàn)差異非常明顯。2. 技術(shù)選型與架構(gòu)設(shè)計(jì)解析2.1 為什么是Spring Boot而非其他方案我遇到過不少同學(xué)問為什么不用PHP或者Node.js甚至有人建議用Python的Flask。我的回答是Spring Boot在這個場景下不是“最好”的但它是“最不容易出錯”的。首先高校里的系統(tǒng)往往要運(yùn)行很多年維護(hù)的人可能是下一屆的學(xué)生、另一個部門的老師甚至外包團(tuán)隊(duì)。Spring Boot加Java的技術(shù)棧是市場保有量最大的接手的人大概率見過這類代碼不至于完全看不懂。其次Spring Boot的生態(tài)太完整了做權(quán)限有Spring Security做接口文檔有Knife4j做數(shù)據(jù)庫操作有MyBatis Plus出問題百度一搜全是解決方案。最后高校系統(tǒng)通常部署在校內(nèi)服務(wù)器環(huán)境多半是老舊的CentOS或者Windows ServerJava的跨平臺能力在這種環(huán)境下非常省心一個JDK加一個Jar包就完事了。對比一下其他方案的短板技術(shù)方案優(yōu)勢在本項(xiàng)目中的短板PHP部署簡單、上手快長期維護(hù)的代碼規(guī)范性往往不如Spring體系復(fù)雜業(yè)務(wù)邏輯容易寫成面條代碼Node.js高并發(fā)IO能力強(qiáng)高校運(yùn)維團(tuán)隊(duì)對Node生態(tài)相對陌生部署和排障成本高Flask輕量靈活缺乏完整的權(quán)限、事務(wù)、ORM生態(tài)做管理系統(tǒng)需要自己拼裝太多零件2.2 整體技術(shù)棧構(gòu)成這個項(xiàng)目的技術(shù)棧我可以直接列出來都是很主流的組合JDK 8我用的是JDK 8穩(wěn)定且兼容性好新項(xiàng)目也可以直接上JDK 17Spring Boot 2.7.x3.x也OK但要注意部分第三方starter的兼容性MyBatis Plus 3.5.x單表CRUD幾乎不需要寫SQL節(jié)省大量時間MySQL 5.7或8.08.0的窗口函數(shù)做統(tǒng)計(jì)非常方便Redis用于緩存講座列表和分布式鎖如果數(shù)據(jù)量不大也可以先不引入Vue 2 Element UI前端管理端學(xué)生端我用的是Thymeleaf加Bootstrap因?yàn)閷W(xué)生端的頁面比較輕不需要太大的前端工程Maven依賴管理和打包這套組合的核心思路是后端業(yè)務(wù)邏輯用Spring Boot的依賴注入和事務(wù)管理來組織數(shù)據(jù)庫操作交給MyBatis Plus減少樣板代碼緩存和鎖用Redis解決熱點(diǎn)數(shù)據(jù)的并發(fā)問題。比如講座詳情頁會被頻繁刷新第一次查完放進(jìn)Redis后面直接命中緩存數(shù)據(jù)庫的壓力會大大降低。2.3 工程結(jié)構(gòu)與分層設(shè)計(jì)工程結(jié)構(gòu)上我采用了經(jīng)典的四層架構(gòu)沒有過度設(shè)計(jì)。如果你拉過太多開源項(xiàng)目會發(fā)現(xiàn)很多人喜歡建一堆模塊結(jié)果一個幾百兆的小項(xiàng)目拆成七八個Maven子模塊看起來高大上實(shí)際維護(hù)起來想哭。我建議用單模塊加包名分層的方案簡單直接的代碼樹com.example.lecture ├── controller // 接口入口只做參數(shù)接收和結(jié)果封裝 ├── service // 業(yè)務(wù)邏輯層事務(wù)邊界都在這一層 │ └── impl ├── mapper // MyBatis Plus的Mapper接口 ├── entity // 數(shù)據(jù)庫實(shí)體類 ├── dto // 前端交互的數(shù)據(jù)傳輸對象 ├── vo // 視圖對象聚合多表查詢結(jié)果 ├── config // 配置類Redis、攔截器、跨域等 ├── common // 通用工具類、統(tǒng)一返回結(jié)果、異常處理 └── enums // 狀態(tài)枚舉分層設(shè)計(jì)最重要的一個原則Controller只做參數(shù)校驗(yàn)和調(diào)用Service不要在里面寫業(yè)務(wù)邏輯。我見過太多人把查詢數(shù)據(jù)庫的代碼寫在Controller里導(dǎo)致后面想復(fù)用邏輯的時候只能復(fù)制粘貼。Service層的每個方法代表一個完整的業(yè)務(wù)動作方法上標(biāo)注事務(wù)注解。DTO和VO分開的好處是數(shù)據(jù)庫字段變化不會直接暴露給前端接口。舉個例子講座實(shí)體類里有“備注”字段但前端展示時不需要這個字段VO里不包含就可以了返回給用戶的JSON就干干凈凈。3. 數(shù)據(jù)庫設(shè)計(jì)與核心表結(jié)構(gòu)3.1 概念模型與ER分析數(shù)據(jù)庫設(shè)計(jì)是整個項(xiàng)目的基石表結(jié)構(gòu)沒設(shè)計(jì)好后面寫業(yè)務(wù)代碼就是在爛地基上蓋樓。我畫ER圖時先列出核心實(shí)體用戶、講座、預(yù)約記錄、教室/場地、學(xué)院。關(guān)系也很清晰一個用戶學(xué)生可以預(yù)約多個講座一個講座可以被多個用戶預(yù)約這是典型的多對多關(guān)系通過中間表“預(yù)約記錄表”來解除多對多關(guān)聯(lián)。講座與教室是多對一教室與學(xué)院是一對多。這里有一個建模時容易犯的錯誤把預(yù)約人數(shù)當(dāng)成字段直接存在講座表里比如reserved_count而不是通過預(yù)約記錄表實(shí)時count。如果并發(fā)量不大直接count也能用但每次查詢都要全表聯(lián)合統(tǒng)計(jì)數(shù)據(jù)庫會很吃力。我的做法是在講座表里維護(hù)一個冗余字段reserved_count預(yù)約成功時加1取消預(yù)約時減1。這種用空間換時間的做法在中小型系統(tǒng)里非常實(shí)用配合事務(wù)控制數(shù)據(jù)一致性是可以保證的。3.2 核心表結(jié)構(gòu)詳解直接上核心建表SQL這幾個表就是系統(tǒng)的骨架CREATE TABLE sys_user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵ID, username varchar(50) NOT NULL COMMENT 登錄賬號學(xué)號或工號, password varchar(100) NOT NULL COMMENT 加密后的密碼, real_name varchar(50) NOT NULL COMMENT 真實(shí)姓名, role tinyint(4) NOT NULL DEFAULT 1 COMMENT 角色1學(xué)生 2教師 3院系管理員 4系統(tǒng)管理員, college_id bigint(20) DEFAULT NULL COMMENT 所屬學(xué)院ID, phone varchar(20) DEFAULT NULL COMMENT 手機(jī)號, email varchar(100) DEFAULT NULL COMMENT 郵箱, status tinyint(4) NOT NULL DEFAULT 1 COMMENT 狀態(tài)1正常 0禁用, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 創(chuàng)建時間, PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用戶表;CREATE TABLE lecture ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵ID, title varchar(200) NOT NULL COMMENT 講座標(biāo)題, speaker varchar(50) NOT NULL COMMENT 主講人姓名, speaker_intro varchar(500) DEFAULT NULL COMMENT 主講人簡介, content text COMMENT 講座內(nèi)容簡介, location varchar(100) NOT NULL COMMENT 講座地點(diǎn), start_time datetime NOT NULL COMMENT 開始時間, end_time datetime NOT NULL COMMENT 結(jié)束時間, reserve_start_time datetime NOT NULL COMMENT 預(yù)約開始時間, reserve_end_time datetime NOT NULL COMMENT 預(yù)約截止時間, capacity int(11) NOT NULL DEFAULT 0 COMMENT 最大可預(yù)約人數(shù), reserved_count int(11) NOT NULL DEFAULT 0 COMMENT 已預(yù)約人數(shù), status tinyint(4) NOT NULL DEFAULT 0 COMMENT 狀態(tài)0待審核 1已審核/可預(yù)約 2已截止 3已完成 4已取消, creator_id bigint(20) NOT NULL COMMENT 創(chuàng)建人主講人ID, audit_remark varchar(200) DEFAULT NULL COMMENT 審核備注, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 創(chuàng)建時間, update_time datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 更新時間, PRIMARY KEY (id), KEY idx_start_time (start_time), KEY idx_status (status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT講座表;CREATE TABLE reservation ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵ID, lecture_id bigint(20) NOT NULL COMMENT 講座ID, user_id bigint(20) NOT NULL COMMENT 用戶ID, reserve_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 預(yù)約時間, status tinyint(4) NOT NULL DEFAULT 0 COMMENT 狀態(tài)0已預(yù)約 1已簽到 2已取消 3爽約, check_time datetime DEFAULT NULL COMMENT 簽到時間, source tinyint(4) DEFAULT 0 COMMENT 來源0網(wǎng)頁 1移動端, PRIMARY KEY (id), UNIQUE KEY uk_lecture_user (lecture_id, user_id), KEY idx_user_id (user_id), KEY idx_status (status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT預(yù)約記錄表;這三張表是核心其他表比如學(xué)院表、教室表、操作日志表就按常規(guī)設(shè)計(jì)。需要注意的有幾點(diǎn)第一預(yù)約記錄表里的聯(lián)合唯一索引uk_lecture_user它的作用是防止同一個人對同一場講座重復(fù)預(yù)約這是數(shù)據(jù)庫層面的最后一道防線即使業(yè)務(wù)邏輯有bug這條索引也能攔住臟數(shù)據(jù)。第二所有表的主鍵都用bigint自增不用雪花算法也不用UUID因?yàn)椴l(fā)量沒那么大自增主鍵在InnoDB里性能和存儲上都更好。第三狀態(tài)字段用tinyint而不是varchar省空間、查詢快配合項(xiàng)目里的枚舉類做對應(yīng)映射可讀性也不差。3.3 狀態(tài)字段設(shè)計(jì)的重要性狀態(tài)字段在整個系統(tǒng)里扮演的角色比我最初設(shè)想的更重要。講座表里的status字段我特意設(shè)計(jì)了從0到4五個狀態(tài)值分別對應(yīng)待審核、已審核可預(yù)約、已截止、已完成、已取消。每個狀態(tài)的流轉(zhuǎn)方向是有約束的比如“已完成”的講座不能再變回“可預(yù)約”“已取消”的講座不允許再被預(yù)約。這就像現(xiàn)實(shí)中的流程一樣講座一旦結(jié)束數(shù)據(jù)就是歷史數(shù)據(jù)不能隨便改。預(yù)約記錄表的status字段也有講究0已預(yù)約、1已簽到、2已取消、3爽約。區(qū)分“已取消”和“爽約”特別重要因?yàn)楹芏喔咝阎v座考勤納入第二課堂學(xué)分或綜合素質(zhì)評價。如果學(xué)生預(yù)約了但沒去系統(tǒng)應(yīng)該記錄為“爽約”而不是簡簡單單刪除記錄。后來做統(tǒng)計(jì)報(bào)表時這個設(shè)計(jì)的價值就體現(xiàn)出來了輔導(dǎo)員可以直接看到每個學(xué)生的爽約次數(shù)不再需要人工翻聊天記錄。4. 核心功能實(shí)現(xiàn)與關(guān)鍵代碼解析4.1 預(yù)約流程控制與庫存扣減預(yù)約是整個系統(tǒng)最核心的接口也是并發(fā)壓力最大的地方。想象一下一場熱門講座放出來200個名額學(xué)生們在同一時間點(diǎn)瘋狂點(diǎn)擊預(yù)約按鈕如果代碼寫得不對超出了預(yù)約數(shù)量上限超賣問題就來了。我見過很多新手寫的預(yù)約邏輯是這樣的先查講座的reserved_count判斷是否小于capacity如果小于就加1然后插入預(yù)約記錄。這代碼表面上邏輯沒問題但在高并發(fā)下會出大問題。兩個請求同時查到reserved_count199都判斷小于200于是都執(zhí)行了加1操作結(jié)果reserved_count變成了201超出了容量限制。為什么會這樣因?yàn)椴樵兒透轮g不是一個原子操作中間有間隙。正確的做法是利用數(shù)據(jù)庫的行鎖或樂觀鎖機(jī)制。我推薦的做法是直接在SQL層面做原子扣減Transactional(rollbackFor Exception.class) public ReserveResult reserveLecture(ReserveRequest request) { // 1. 校驗(yàn)講座存在且狀態(tài)為可預(yù)約 Lecture lecture lectureMapper.selectById(request.getLectureId()); if (lecture null || lecture.getStatus() ! LectureStatus.REVIEWED.getCode()) { return ReserveResult.fail(講座不存在或不在預(yù)約時間內(nèi)); } // 2. 核心原子扣減庫存條件里帶上 reserved_count capacity int updateRows lectureMapper.reduceStock(request.getLectureId()); if (updateRows 0) { return ReserveResult.fail(手速慢了名額已被搶完); } // 3. 再插入預(yù)約記錄 Reservation reservation new Reservation(); reservation.setLectureId(request.getLectureId()); reservation.setUserId(request.getUserId()); reservation.setStatus(ReserveStatus.RESERVED.getCode()); reservationMapper.insert(reservation); return ReserveResult.success(); }對應(yīng)的Mapper SQLupdate idreduceStock UPDATE lecture SET reserved_count reserved_count 1 WHERE id #{lectureId} AND status 1 AND reserved_count lt; capacity /update這個update語句利用了MySQL的行鎖機(jī)制當(dāng)多個事務(wù)同時更新同一行數(shù)據(jù)時它們會排隊(duì)執(zhí)行后執(zhí)行的事務(wù)會基于前一個事務(wù)更新后的值重新判斷條件。如果reserved_count已經(jīng)等于capacity了條件reserved_count capacity就不成立了影響行數(shù)為0說明名額搶完了。這種方式既保證了不超賣又不需要手動加鎖性能和安全性兼顧。4.2 沖突檢測同一時間段多講座另一個容易被忽略的需求是同一個學(xué)生能不能同時預(yù)約兩個時間重疊的講座從情理上講學(xué)生是不能分身同時出現(xiàn)在兩個會場的所以系統(tǒng)應(yīng)該阻止這種沖突。實(shí)現(xiàn)思路也簡單在插入預(yù)約記錄之前先查一下該用戶已預(yù)約且狀態(tài)為“已預(yù)約”或“已簽到”的講座看其中是否有與新講座時間重疊的記錄。Transactional(rollbackFor Exception.class) public ReserveResult reserveLecture(ReserveRequest request) { // ... 省略前面的庫存校驗(yàn)邏輯 ... // 新增時間沖突檢測 Lecture newLecture lectureMapper.selectById(request.getLectureId()); ListLecture userLectures lectureMapper.selectOverlappingLectures( request.getUserId(), newLecture.getStartTime(), newLecture.getEndTime(), Arrays.asList(ReserveStatus.RESERVED.getCode(), ReserveStatus.CHECKED.getCode()) ); if (!userLectures.isEmpty()) { return ReserveResult.fail(您已預(yù)約了時間沖突的講座 userLectures.get(0).getTitle()); } }對應(yīng)的SQLSELECT DISTINCT l.* FROM reservation r INNER JOIN lecture l ON r.lecture_id l.id WHERE r.user_id #{userId} AND r.status IN (0, 1) AND l.status IN (1, 2) AND NOT (#{newEndTime} lt; l.start_time OR #{newStartTime} l.end_time)這個“NOT (結(jié)束時間小于等于對方開始時間 或 開始時間大于等于對方結(jié)束時間)”的判斷就是區(qū)間重疊檢測的經(jīng)典寫法涵蓋了包含、被包含、交叉等所有重疊情況。4.3 簽到邏輯與狀態(tài)流轉(zhuǎn)簽到功能在第二版才加入二維碼。管理員手機(jī)上打開一個小程序頁面其實(shí)就是一個適配移動端的網(wǎng)頁掃描學(xué)生出示的二維碼識別學(xué)號后調(diào)用簽到接口。簽到接口的邏輯不復(fù)雜Transactional(rollbackFor Exception.class) public CheckResult checkIn(CheckInRequest request) { // 1. 判斷當(dāng)前時間是否在講座開始前30分鐘到結(jié)束后1小時之間 Lecture lecture lectureMapper.selectById(request.getLectureId()); Date now new Date(); if (now.before(DateUtil.addMinutes(lecture.getStartTime(), -30)) || now.after(DateUtil.addHours(lecture.getEndTime(), 1))) { return CheckResult.fail(不在簽到時間段內(nèi)); } // 2. 查詢預(yù)約記錄 Reservation reservation reservationMapper.selectByLectureIdAndUserId( request.getLectureId(), request.getUserId()); if (reservation null) { return CheckResult.fail(未查詢到該學(xué)生的預(yù)約記錄); } if (reservation.getStatus() ReserveStatus.CHECKED.getCode()) { return CheckResult.fail(該學(xué)生已簽到請勿重復(fù)操作); } if (reservation.getStatus() ReserveStatus.CANCELED.getCode()) { return CheckResult.fail(該學(xué)生的預(yù)約已取消); } // 3. 更新簽到狀態(tài) reservation.setStatus(ReserveStatus.CHECKED.getCode()); reservation.setCheckTime(now); reservationMapper.updateById(reservation); return CheckResult.success(); }簽到狀態(tài)的變化會聯(lián)動講座表的一個統(tǒng)計(jì)字段實(shí)際到場人數(shù)。講座結(jié)束后管理員把這些到場人數(shù)對比預(yù)約人數(shù)就能得出到場率。這個數(shù)據(jù)在學(xué)期末做第二課堂學(xué)分認(rèn)定時很有用。4.4 管理端講座發(fā)布與審核管理端的核心操作是講座的發(fā)布與審核。主講人提交講座申請后需要院系管理員審核。審核通過后講座狀態(tài)變?yōu)椤翱深A(yù)約”系統(tǒng)會給學(xué)生推送消息如果有消息模塊的話。審核的操作很簡單就是一個update操作但審核后有一個關(guān)鍵動作初始化預(yù)約時間窗口。在講座表里reserve_start_time和reserve_end_time這兩個字段是在審核通過時由系統(tǒng)自動設(shè)置的。默認(rèn)情況下預(yù)約開始時間是審核通過時刻預(yù)約截止時間是講座開始前2小時。這樣設(shè)計(jì)的考慮是主講人提前一周提交申請管理員審核通過后立即開放預(yù)約到講座開始前2小時截止讓學(xué)生能從容安排時間。如果某個院系想設(shè)置自定義的預(yù)約窗口也可以在審核頁面手動修改。審核這里還有一個細(xì)節(jié)講座狀態(tài)是“待審核”時學(xué)生端是看不到這條講座的。我第一版沒注意結(jié)果學(xué)生端把待審核的講座也展示出來了學(xué)生點(diǎn)了預(yù)約結(jié)果提示“講座暫未開放預(yù)約”搞得大家一頭霧水。后來我在查詢講座列表時加了一個過濾條件學(xué)生端只能看到status為1可預(yù)約和2已截止的講座避免數(shù)據(jù)混亂。5. 前端頁面與交互設(shè)計(jì)思路5.1 頁面結(jié)構(gòu)與路由組織這個系統(tǒng)我做了兩個端管理端和學(xué)生端。管理端的頁面比較重用了Vue加Element UI典型的后臺管理布局左側(cè)菜單頂部導(dǎo)航中間內(nèi)容區(qū)。菜單包括講座管理、預(yù)約管理、用戶管理、統(tǒng)計(jì)報(bào)表、系統(tǒng)設(shè)置。學(xué)生端則輕量很多用Thymeleaf模板渲染頁面包括首頁講座列表、講座詳情、我的預(yù)約、個人中心。學(xué)生端的講座列表頁是整個系統(tǒng)訪問量最高的頁面必須做分頁。我一開始做的是全量查詢結(jié)果講座多了以后頁面加載明顯變慢后來改成了MyBatis Plus自帶的分頁插件每頁10條配合標(biāo)題模糊搜索和時間排序體驗(yàn)就好多了。列表頁每個講座卡片上要展示講座標(biāo)題、主講人、時間、地點(diǎn)、剩余名額。剩余名額這個字段很關(guān)鍵它會刺激學(xué)生的緊迫感也是預(yù)約轉(zhuǎn)化率的重要推動因素。講座詳情頁則需要更完整的信息講座簡介、主講人背景、內(nèi)容大綱、往期評價如果有的話。頁面上最重要的按鈕是“立即預(yù)約”這個按鈕不是永遠(yuǎn)可點(diǎn)的要根據(jù)講座狀態(tài)動態(tài)變灰或變紅。狀態(tài)為“可預(yù)約”且當(dāng)前時間在預(yù)約窗口內(nèi)按鈕顯示“立即預(yù)約”名額滿了顯示“已滿員”預(yù)約截止了顯示“預(yù)約已結(jié)束”講座已完成顯示“查看回放”如果沒有回放就顯示“已結(jié)束”。這些狀態(tài)判斷在前端做一次后端接口再做一次雙保險。5.2 移動端適配與用戶體驗(yàn)必須強(qiáng)調(diào)學(xué)生端一定要優(yōu)先考慮移動端體驗(yàn)。現(xiàn)在大學(xué)生基本都是用手機(jī)刷講座信息沒人會打開電腦登錄系統(tǒng)去預(yù)約。我在第二版改版時專門把學(xué)生端做成了響應(yīng)式布局Bootstrap柵格系統(tǒng)搭配媒體查詢讓頁面在手機(jī)瀏覽器上能流暢操作。具體來說幾個關(guān)鍵頁面的移動端適配方案講座列表卡片式設(shè)計(jì)一張卡片就是一整屏寬度的信息塊標(biāo)題在頂部中間是講座信息底部是預(yù)約按鈕。講座詳情頭部大標(biāo)題下方時間地點(diǎn)信息用圖標(biāo)加文字排列簡介部分可折疊默認(rèn)只顯示兩行點(diǎn)擊展開。我的預(yù)約用Tab切換“已預(yù)約”“已簽到”“已取消”“爽約記錄”四類每條記錄展示講座信息、狀態(tài)標(biāo)簽和操作按鈕取消預(yù)約、查看電子票。還有一個小細(xì)節(jié)預(yù)約按鈕的點(diǎn)擊反饋要即時。我加了按鈕防重復(fù)點(diǎn)擊的機(jī)制前端通過disabled屬性控制點(diǎn)擊一次后按鈕變成“處理中...”等接口響應(yīng)后再更新狀態(tài)。不然學(xué)生們連點(diǎn)五下后端就要處理五次請求雖然事務(wù)能兜底但日志里全是重復(fù)操作的記錄排查問題時看著就心煩。6. 常見問題與排查技巧實(shí)錄6.1 并發(fā)預(yù)約導(dǎo)致的超賣問題第一個要說的坑肯定是超賣。我上面雖然講了原子扣減的寫法但第一次上線時用的就是經(jīng)典的“先查后寫”結(jié)果就被現(xiàn)實(shí)教育了。當(dāng)時某學(xué)院發(fā)布了一場知名校友的講座開放預(yù)約后幾十秒內(nèi)就涌入幾百個請求后臺日志里出現(xiàn)了reserved_count超過capacity的情況一條講座數(shù)據(jù)被預(yù)約了201人容量只有200。排查過程是這樣的打開后臺日志搜索對應(yīng)講座的預(yù)約操作記錄發(fā)現(xiàn)同一秒內(nèi)有三個請求都查到了reserved_count199都滿足了小于200的條件然后依次執(zhí)行了更新和插入。雖然每條記錄都成功了但庫存已經(jīng)超了。解決方式就是前面提到的把“查詢更新”合并成一條原子UPDATE語句。改完之后我又加了一個保險在插入預(yù)約記錄前先用聯(lián)合唯一索引做一次捕獲如果插重復(fù)了就報(bào)錯回滾雙保險更穩(wěn)。6.2 事務(wù)失效的場景說到事務(wù)很多人只知道在方法上加Transactional注解但注解不是萬能的。我遇到過事務(wù)不生效的情況排查了好久才發(fā)現(xiàn)原因方法內(nèi)部自己調(diào)了自己。Spring的事務(wù)代理機(jī)制是基于AOP的只有通過代理對象調(diào)用方法時事務(wù)注解才會生效。如果你在一個Service方法里直接調(diào)用同一個類的另一個帶事務(wù)注解的方法事務(wù)是不會啟用的因?yàn)檎{(diào)用的是this對象的方法沒有走代理。那個場景是這樣的我在Service里寫了一個公開方法createLectureAndPublish它調(diào)用了同一個類里的createLecture方法該方法上有Transactional注解。結(jié)果createLecture里的操作沒被事務(wù)管理哪怕拋了異常前面插入的數(shù)據(jù)也不會回滾。解決辦法有兩個要么把需要事務(wù)的方法拆到另一個Service類里要么在調(diào)用時通過Spring注入的代理對象調(diào)用。我選擇了拆類的方案更清晰也更符合單一職責(zé)。另外還有一個容易踩的坑事務(wù)方法內(nèi)部catch了異常不往外拋。事務(wù)回滾的觸發(fā)條件是異常傳播超過了事務(wù)邊界如果你在方法內(nèi)部把異常吞掉了事務(wù)自然認(rèn)為一切正常不會回滾。所以catch塊里至少要拋出RuntimeException或者用rollbackFor顯式指定回滾的異常類型。6.3 狀態(tài)不一致的現(xiàn)場還原還有一個數(shù)據(jù)一致性問題是簽到和預(yù)約統(tǒng)計(jì)對不上。有一次管理員反饋某場講座預(yù)約顯示了180人但實(shí)際簽到表只有120人差了整整60人。我第一反應(yīng)是簽到功能有bug但查了半天代碼邏輯沒問題。后來發(fā)現(xiàn)原因在業(yè)務(wù)規(guī)則上系統(tǒng)允許學(xué)生在講座開始前取消預(yù)約取消后reserved_count會減1但講座的“實(shí)際到場人數(shù)”統(tǒng)計(jì)的是簽到表中狀態(tài)為“已簽到”的記錄。所以預(yù)約人數(shù)180人包含了中途取消又新增的預(yù)約實(shí)際到場120人是最終的簽到人數(shù)兩者之間沒有直接關(guān)系。這不是bug是統(tǒng)計(jì)口徑的問題。解決方案是在統(tǒng)計(jì)報(bào)表里分別展示“累計(jì)預(yù)約人次”“當(dāng)前有效預(yù)約人數(shù)”“實(shí)際簽到人數(shù)”“取消次數(shù)”“爽約次數(shù)”五個指標(biāo)讓管理員根據(jù)自己的需要選擇使用哪個口徑。同時在報(bào)表頁面加了一個文字說明解釋每個指標(biāo)的計(jì)算方式避免再被當(dāng)成bug提過來。6.4 常見問題速查表問題現(xiàn)象可能原因解決方案預(yù)約人數(shù)超容量查詢和更新非原子操作改用UPDATE原子扣減SQL事務(wù)不起作用同類內(nèi)部方法調(diào)用拆分Service類或使用代理對象調(diào)用用戶能重復(fù)預(yù)約一場講座業(yè)務(wù)校驗(yàn)遺漏加聯(lián)合唯一索引兜底學(xué)生端可以看到待審核講座查詢過濾條件缺失列表查詢條件限制status范圍簽到時間判斷不準(zhǔn)確時區(qū)或DateFormat問題統(tǒng)一用服務(wù)器時區(qū)傳參用時間戳預(yù)約了但名單上沒有預(yù)約記錄被誤刪用狀態(tài)標(biāo)記替代物理刪除同一個時間段預(yù)約了多場講座沖突檢測邏輯缺失加區(qū)間重疊檢測SQL管理員導(dǎo)出名單亂碼Excel工具類未設(shè)置編碼使用EasyExcel并指定UTF-8提示排查問題的時候不要一上來就去看代碼先復(fù)現(xiàn)問題、確認(rèn)現(xiàn)象再根據(jù)現(xiàn)象反推代碼路徑。很多“bug”其實(shí)是使用方式和業(yè)務(wù)口徑的問題先和提出方對齊需求能省下大量無用功。我個人在實(shí)際操作中的體會是這個系統(tǒng)的技術(shù)難度其實(shí)不大真正的難點(diǎn)在于把業(yè)務(wù)規(guī)則想清楚然后把數(shù)據(jù)模型設(shè)計(jì)得足夠穩(wěn)。很多看起來很復(fù)雜的功能比如并發(fā)預(yù)約、時間沖突檢測、簽到統(tǒng)計(jì)本質(zhì)上都是幾個字段和幾條SQL的事。反而是那些不起眼的小細(xì)節(jié)——預(yù)約窗口的時間控制、狀態(tài)流轉(zhuǎn)的約束、統(tǒng)計(jì)口徑的統(tǒng)一——決定了整個系統(tǒng)好不好用。后面如果要擴(kuò)展可以在這個基礎(chǔ)上加消息推送預(yù)約成功通知、講座開始前提醒、講座評價打分、線上直播鏈接集成甚至對接學(xué)校的統(tǒng)一身份認(rèn)證那基本上就是一個貼近生產(chǎn)的完整平臺了。你可以先把核心流程跑通再根據(jù)實(shí)際反饋迭代這是做這類管理系統(tǒng)最務(wù)實(shí)的一條路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
性色高清在线| 综合熟女| 九月丁香婷婷色| 五月丁香在线| 黄色性爱网网| 日韩本不卡视频在线观看 | 9精品久久久久| 亚洲av影院在线观看| 超碰在线97国产| 国产午夜福利电影免费在线观看| 亚洲图片色图欧美另类| 人妻在线臀日韩| 综合97| 久久久久久久一级黄色打同平台| 精品九九| 亚洲凸凹超碰成人| 亚洲精品成人激情在线| 人人爱人人乐人人操| 9999亚洲电影| 精品久久在线区一区| 成人性爱免费播放| 97操97干| 高凊专区人人操| 2024黄色视频| 久神马| 精品毛片久久久精品毛片| 亚洲图片欧美色图| 国产日本一区二区三区蜜臀在线观看| 亚欧美色| 精品人妻一区春色| 99爱久久视频频| 成人麻豆av电影网站| 96精品久久久久久久久| 日韩15p| 日本高清加勒比| 丁香五月社区| 国人欧美精品一区二区| 久久av成人无码免费| 青青草在线视频美女| 青娱乐av在线| 亚洲激情 欧美色图| 五月天玖玖资源站| 亚洲囯产精品女人久久久| 四虎午夜影院| 国产免a费看黄片在线| 激情小说亚洲视频| 一道本东京热加勒比一区二区三区| 色婷婷导航| 亚洲欧美日韩免费电影| jazzjazz国产精品麻豆| 丝袜人妻av一区二区| 亚洲小说视频| 久久久久久人| 亚洲国产精品无码AV久久| 超碰午夜| 中文字幕精品三级久久久| 一个人在线看的黄色电影网站| 天天日少妇逼AV| 日韩乱码Av| 男人兔费天堂| 日韩欧美视频青青| 视频在线观看一二三区| 日韩美女,国产传媒,视频一区| 日韩天堂av电影在线观看| 亚州精品丝袜-不卡成人免费| 色婷婷狠狠| 多毛小伙内射老太婆| 国产精品区在线12p| 天天日天天干天天操| 日本色色视频网站| 久久这里只精品免费福利| 97美日韩视频| 亚洲97| J?P?NESEHD熟女熟妇伦| 综合操逼| 动漫片子网站3黄| 色天堂综合| 老色69| 大香蕉色十月| 蜜臀AV成人精品蜜臀AV久久| 男人的天堂日韩| 亚洲偷91色| x97av| 久久久久久无码人妻中文字幕| 91高潮喷水美女| 中日韩久久久免费看| 亚洲天堂久久久久久粉红视频| 狠狠色伊人亚洲综合网站色| a在线观看| 日欧操屄视频| 91美女在线看| 久草毛片| 免费视频a级毛片免费视频| 台欧久久精品视频| 精品久久97| 国产成人精品必看 | 人妻久热在线| 91丝袜激情在线| 亚洲日韩久久精品一区| 少妇被c 黄 免费观看| 亚洲一卡2卡3卡4卡乱码网站| 日韩AV一起草| 亚洲图片欧美91N| 精品黄色电影| 欧美一级久久久久久久大片动画| 国产丝袜视频| 日本媚薬中文字幕在线| 人人操人人爽人人操人人| 自慰白浆在线观看| 日韩无码久久熟女一级片| 中文字幕熟女人妻丝袜| 久久精品国产精品亚洲艾通辽熟妇 | 国产树林里野战在线看| www.男人天堂| 涩综合导航| 日本人体九九九九九九| 91无码精品| 亚洲国产无码精品首页久久久| 美国久久一二三四| 女性喷水高潮在线观看| 怡红院怡春院| 精品国产乱码久久| 97网址www| 天天综合网91| 91 亚洲 欧洲| 精品亚洲黄色片 国产精品导航一区二区 | 亚洲熟妇丝袜在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 91久久久亚洲| 亚洲综合影片| 五月婷婷丁香六月丁香| 日韩欧美丝袜诱惑| 久久综合资源一区二区| 色天天野狼综合社区| 很很热性爱视频| 欧美熟爽综合| 精品无码一区二区三区| 精品176精品2| 91成人久久 | 99精品综合久久久久五月天| 美国aaaaa一级黄片| 欧美亚洲涩涩| 日韩成人性爱电影在线播放| 亚洲精品久久久久毛片A片拉屎 | 欧美日韩中文视频播放| 91劲爆| 午夜大香蕉| 人人妻人人玩人人澡人人爽| 精品精品精品| 一本色道综合久久欧美| 日本九九久久99| 97任你吞精| 91综合无码| 日韩乱码Av| 蜜乳AV色欲AVAV无码| 嫩草美女久久| 免费A V在线| 欧美性爱三区二区| 男人的天堂激情| 高清国产无码av| 爱妻综合网| 免费一级视频特黄色大片| 亚洲小说视频| 国产91丝袜在线播放蜜月| 丁香五月婷婷啪啪| 俄罗斯一区二区视频在线观看| 麻豆区久久久久亚| 国产av激情无码久久天堂| 久久久久亚洲精品| 狼人综合婷婷激情四射 | 国语精品av| 色综合中文字幕不卡| 激情小说日韩无码| 超碰色图| 日日碰视频网| 国产偷仑| 在线观看国产黄色| 亚洲一区二区在线观看91| 亚洲日韩乱码中文无码蜜桃臀网站| 久操大香蕉| 国产中文字幕在线点播| …亚洲黄色厕厕女女在线播…| 一区二区三区蜜桃成人撸久久东京热 | 亚洲超碰在线| 亚洲欧美在线观看2021| 熟妇xxxxx性春色| 亚洲美腿丝袜香蕉影视欧美成人| 日韩人妻无码精品系列| 日韩亚洲美女一区久久| 激情综合五月| 无码抄逼网| 强奸乱伦AV网址| 97精品视频| 久久超碰天天| 中文字幕人乱码中文字的预防方法| 亚洲色色色| 久久免费精品视频免一| 97人妻免费中文字幕| 最新9久久久9免费视频| 欧美夜夜骑视频| 亚洲情色五月天 | 欧美激情欧美精品| 97天天爽| 久久久蜜桃一区二区三区| 亚洲黄网在哪免费看| 亚洲精品乱码线路中文字幕| 精品无码一区二区三区| 欧美视频一| 青青草国产欧美非洲黑人| 2017天天插| 中文字幕熟女人妻丝袜丝| 91日日夜夜| 亚洲天天影视色综合| 精品乱码久久久久| 久久一二三四五六七八九区区| 97资源超碰| 日韩在线76| 吻戏激情性巴克| 六月丁香啪啪| 国产后入精品| 日韩人妻网站| 金典av| 香蕉免费一区二区三区不读| 午夜美女诱惑电源网| 伊人网在线点播| 操亚州| 91五月天| 91久久国产精品| 黄页| 综合色欧美| 久久在肏| 97这里都是精品| 无码人妻精品一区二区中文| 99爱久久视频频| 激激五月| 午夜后入| 激情内射| 亚洲九九九| 亚洲精品一二牛牛| 少妇一区二区三区精选| 日韩欧美国产一区二区三区四区| 99精品在线| 婷婷国产精品九区| 久久久精品一区二区| 久久男人| 在线一道啪| 老熟妇一区二区三区…| 日韩不卡av一二三| 精品性爱一二三区| 很很干很很操| 91老熟女老女人国产老太| 日韩特一级久久| 亚洲AV无码乱码| 人人操人人插人www| 色激情五月天| 校园春色综合香蕉| 大香蕉一级黄色片久久| 99精品成人免费看| 欧美亚洲丝袜美女电影| 午夜亚洲| av无码av无码专区| 久久免费中文字幕在线观看| 超碰一区二区| 日韩欧无码一区二区三区免费不卡 | 熟女人妻一区二区三区免费看| 成人五月天丁香激情综合| www.99中文字幕| 天天透伊人| 人妻天天爽夜夜爽2| 岛国在线国产| 久久久久日本视| 熟女露脸激情自拍视频| 性爱网站一区二区| 97天天摸天天碰| AV男人天堂网| 操逼操逼逼操操逼91 | 色婷婷六月| 日韩人人精品| 韩国一级做A片免费的| 亚洲欧美中日韩| 国产97视频| 欧美丝袜制服久久| 福利大香蕉| 亚洲图片日本AⅤ欧美在线| 色区久久| 99啪啪| 好爽视频在线观看视频 | 国产农村妇女精品1区二区| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 国产乱色国产精品免费视| 亚洲综合色男人网| 青娱乐休闲视频在线观看| 亚洲天堂久久| 亚洲精品久久久久毛片A片拉屎 | 亚洲影视高清第一页| 中文字幕一区二区日韩网| 亚洲中文字幕乱码无码一区二区| 国产精品午夜AV完会免费| 天天日夜夜爽| 久久女人| 青青草十区九区爱夜| 亚洲无码精品AV久久久| AV老汉| 欧美黄色大片在线观看 | 亚洲成人黄色在线观看| 乱码人妻一区二区三区| 亚洲 欧美 手机在线观看| 青青草中日韩在线| 丁香五月婷婷啪啪| 东京热男人的天堂| 欧美超碰96| 三级日韩一区二区三区| 黑人粗大V S日韩女优视频| 91精品人妻电影| 9997se| 大香网伊人久久综合| 操久久久久| 国产精品久久久视频| 人妻9117c| 1204金沙人妻懂旧版免费| 成人八戒网站| 欧美激情专区| 99国内熟女露脸视频| 精品一区二区成人动漫| 啊啊啊操死我| 一区二区三区无卡视频在线观看| 欧美日韩性爱视屏免费看了| 啊啊啊免费视频| 日韩午夜国产| 久久婷综合| 精品无码久久久久久久杏吧| 欧美女同在线| 91性生活久久久| 亚洲成人性爱在线观看| 成人午夜高潮av猛片| 97网址97| 后入内射蜜桃臀| 午夜无码精品免费看性色| julia国产在线 | 欧美加勒比| 性色av一区二区| 岛国精品视频在线观看| 午夜乱轮操逼视频免费看| 不卡六六在线91| 热久久91婷婷| 久久人妻丝袜一区二区三| 性在久久久久久| 天天噜| 超碰碰小说97| 91草草草| 亚州乱码中文字幕综合久久久| 国产AV高清AV无码| 91午夜无码| 97亚洲中文| 99re6国产精品99re| 欧美另类色图片| 久久激情亚洲精品无码?V| 久久夜夜| 精品对白久久不卡| 熟女露脸激情自拍视频| 国产日韩欧美| 熟妇艹鸡八| 乱精品一区字幕二区| 国产三级日产三级韩国三级| 秋霞成人一级在线观看| 无码精品久久| 国产精品嫩草影院午夜两性| 亚洲天堂久久久久久粉红视频| …中文字幕亚洲乱,97人妻无码费视… | 国产久久久9999| 欧美做爰无码A片视频| 新久久AV| 亚洲激情综合另类男同| 国产日韩欧美操逼视频| 日韩国产不卡在线视频| 国产乱伦性爱区| 婷婷av在线中文字幕| 欧美后入| 肉动漫无遮挡h在线观看| 夜夜欧美| 亚洲自拍97| 亚洲黄色电影| 欧美综合天堂| 高清无码人妻久久久一区二区三区aⅴ| 欧美91网| 国产v亚洲v日韩v欧美v片另类| 超碰色97| 97爱爱| 少妇久久久| 日本国产欧美一区三区二区 | 嗯~啊~快点 死我视频| 亚洲一区深夜| 亚洲av热热色| KK色在线影院| 欧美日韩中文字幕人妻| 久久大黄片| 久久国产AⅤ| 日韩免费高清大片在线| 亚洲天堂AV在线播放| 无码精品蜜桃一区二区三区ww| 亚洲日韩美女中文字幕乱| 亚洲古典另类欧美在线| 99色热| 欧美亚涩| 国产五码丝袜屁眼| 日本天堂在线播放| 热99这里有精品综合久久 | 中文字幕三四五区| 中文乱码字字幕在线第5页| 日本三级A片网站com| 亚洲色 国产 欧美 日韩| 二色av| 欧美综合第一| 97操综合| 精品人成视频在线观看| 手机在线人成免费视频| 丰满欧美少妇| 99re6国产精品99re| 中文字幕第7页| 欧美91在线| 18禁中文字幕| 人妻天天夜夜爽一区二区| 又黄又粗又硬又长又大| 精品一级| 综合影视国产无码| 特级大荫道BBwBBwBBW| 国产一区二区精品在线视频| 性色亚洲| 九九综合久久| 一本久久精品中文字| 国产精品农村妇女| 日韩三级天堂在线观看| 北京专精特新企业招聘信息| 激情文学亚洲| 无遮挡一级毛片视频免费的| 大香蕉综合久久| 欧美亚洲高清晰| 亚洲无码精品AV久久久| 中文字幕jul-617人妻熟女| 一道本东京热加勒比一区二区三区| 亚洲人综合| 无码不卡八戒| 日本天天人人狠狠在线日美女 | 无码国产Av| 欧美综合骚| 精品9999| 东北丰满熟女国产一区| 日日干日日操五月天伦理视频| 91黄射| 国产精品免费日韩| 91处女视频在线观看| 三上悠亚在线毛片91| 婷婷丁香六月| 亚洲色图 91| 青娱乐久久艹| 色哟哟精品1精品2| wwwcaobibi| www.夜夜| 黄色AV影视| 日本熟妇色熟妇在线视频播放| 午夜美女福利视频| 女人的久久久| 国产一级内射高清视频| 国产999精品久久久久久| 死我十八禁| 日韩一级成人毛片免费观看 | 亚洲中文字幕av | 欧美成人国产精品| www.久久最新地址| 综合性视频99| 2018色综合天天操| AV女优男人的天堂| 天天摸,夜夜摸| 青青青青操国内视频在线| 熟妇在线视频一区二区| 日本加勒比无码专区| 婷婷大香蕉| 殴美性天天| 精品精品精品| 人妻精品视频一区二区三区| 丝袜综合| 国产精品一级特黄aaa大片在线观看| 日韩电影天堂视频一区二区| 国产极品99热在线播放69| 亚洲精品97中文字幕| 久久久久久久亚洲Av无码| 欧美黑人91| 日韩乱伦视频| 九九草| AND人妻系列| 中文字幕日韩电影人妻| 欧洲精品欧洲精品| 久99热| 少妇综合| 97伦乱| 操操AV电影| 欧美夜夜草视频| a片亚洲一本通视频| 日本精品第一视频在'| 国产免费内射视频| 天天α片| 深爱五月婷婷| 少妇高潮流水av免费| 9999九九九久久久| 亚洲色五月| 天天看夜夜看日日干| 亚洲人久久久网| 人妻嗯啊啊在线播放 | 夜草欧美| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 亚洲欧美综合区自拍另类| 亚洲伊人青青草| 看看小穴| 在线观看日韩av不卡| 综合网天天| 天天影视之亚洲综合网| 麻豆天美电影一区二区| 91动漫操逼视频| 国产精品电影大全| 亚洲综合嫩| 欧洲精品人妻| 久久久久久久久久久97| 免费看日产一区二区三区| 久久的免费性爱视频| 午夜福利一区二区三区四区五区色婷婷| 中文字幕啊啊啊在线观看视频| 亚洲欧美综合区自拍另类| 大香蕉久久| 9997se| 91激情网| 好吊色一区| 乱人伦 国语对白:视频直接看| 中文字幕交换人妻| 99久久精品欧美国产| 久久尹人大香焦视| 九九九成人| 男人的天堂日韩| 欧美精品 - 91爱爱| 黄色污污污污污污网站| 亚洲 日韩 欧美 国产综合体| 自拍偷拍 高清无码| 在线播放成人高清免费视频| 色婷婷一区二区三区久久| 欧美,日韩,中文,另类| 色欲色香天天天综合网www-亚洲综合国| 亚洲激情综合| av大香蕉| 日本天天操| 大香蕉五月天婷婷| av凤凰久久久| 99爱爱| 黄色高清无码无码破解免费暗网| 国产不卡免费在线视频| 可能人人看人人摸| 色网在线视频观看免费| 国产亚洲精品无码三区| 久久69精品久久久久久久| 日日干天天干夜夜爽| 风月影院十八禁| 激情小说亚洲色图| 欧美999| 精品无码一区二区三区色欲| 老熟女乱伦片| 人妻少妇精品久久久| 久久精品一区| 极品美女福利在线观看| 偷拍自拍在线视频观看| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 中国熟女网站| 蜜汁欧美| 久久超碰98| 日韩999| 青青草依人大香蕉| 欧美综合天堂| 探花精品 一区二区| 99re免费| ..日韩av毛片精品久久久| 国产理论视频在线播放| 自拍偷拍2025在线观看| 激情五月天综合网| 亚洲最大黄网| 少妇三P| 久久久久婷婷精品av电影| 久久精品久久久久久久| 午夜国产综合视频在线观看| 免费αⅴ在线观看| 亚洲精品美女久久久久久久久| 狠狠干综合| av操操不卡| 成人欧美日超碰| 91 综合网| 另类亚洲一区二区三区| 爱av免费| 午夜福利久久久噜久噜久久综合 | 久久九精品| 18精品一二区| 无码直播久久久| 毛片电影一区二区三区| 国产视频一区二区三区久久亚洲天堂| 亚洲色图 图片| 久久啊啊| 亚洲无吗在线视频| 91狠婷| 2026国产精品视频| 久久久久久性爱免费视频| 密乳无码| 亚洲一二三精品久久网| 婷婷五月天色网| 欧美Aⅴ| 九九热精品| 精品一国2| 国产精品免费久久久久久久久久| 日本国产高清色www视频在线| 久操高青| 国产一区二区在线看| 日本操逼视频不卡直接放| 一起草av| 激情文学小说一区二区 | 亚一综合久久久久久久久久| 日韩人妻少妇中文字幕| 天天性射网| 国产女人与拘做受视频免费| 成人影 天天操 亚洲| 99热欧美| 在线人人人人人人精品超| 久久久久9999妇女| 国产捆绑一区| 中文啪啪视频| 91少妇人妻| 色色婷婷五月天| 国产精品69久久久久孕妇欧美| AA级电影三区| 日日干夜夜操视频h| 国内毛片热久久思思热| WWW.操逼.COM| 欧美日动态视频| 人妻无码久久一区二区三区免费| 三级精品三级在线观看| 日韩av在线播放不卡| 先锋音影AV| 中文字幕高清精品一区| 夜夜高潮夜夜爽| 91骚熟女| 精品久久青青草| 亚洲色图欧美| 99精品丰满人妻无| 色吧 综合| 韩国轻伦国内自拍一区| 肉动漫无遮挡h在线观看| 精品一区二区三区蜜桃臀赵总 | 亚洲a色| 91看黄片| 亚洲一二三精品久久网| 丰满人妻区一区二区三| 天天操夜夜操| 国产日本一区二区三区蜜臀在线观看| 骚货人妻偷情自拍在线视频| 91老女人| 97中文字幕色| 成人5码视频| 午夜久久久| 中文字幕一区电影在线观看| 啊啊啊啊啊啊啊在线| 香港久久久| 3p国产色噜噜一区| 综合五月天| 久超碰在| 亚洲春色欧美激情自拍| 天天日日日射| 波多野结衣一级视频| 在线情色电影 91大 | 日韩性爱高清免费视频| 精品少妇高潮久久| 亚洲精品一区中文字幕乱码| 精品人妻中文字幕高清| 久久久久ab| 色噜噜人妻丝袜a∨先锋影 | 韩国一级婬片A片无码天美| 欧美熟女丝袜| 天天插天天射| 日本黄色精品专区网站| 激情婷婷丁香| 志村玲子视频一区二区| 亚洲av综合伊人久久| 亚州欧美综合| 97免费在线视频在线观看| 国产精品一区av在线| 夜夜爽夜夜摸夜夜操免费视频| 这里只有精品视频| 男女激烈网站最新| 99热精品在线观看| 色第一页| 久久婷婷五月| 午夜一级免费毛片| 美欧色综合| 好舒服视频| 五月丁香亭亭| 97人人操人人摸| 久久中出| 午夜视频久久久| 欧美性暴力猛交XXXX| 六月婷婷综合| 高清一区AV无码| 久久久久久久精| 久久久久婷婷精品av电影| 91原创在线观看| 蜜桃av综合网发布| 人人贴人人摸| 亚洲精品97| 久久久亚洲熟妇资源| 狠狠色一区二区中文字幕| 蜜臀少妇一区二区| 日本123区操B视频| 天天综合网日韩7799| 在线视频97| 久久综合97| 天天搞欧美| 99re这里| 极品后入免费视频| 美女久久久久久久| 无码人妻一区二区一牛影视| 欧美日韩999| 囯产操逼片| 大香焦A片| 国内精品嫩模A∨私拍小视频| 亚洲 欧美 色图| 精品在线78| 爱丝福利| 色九九九九九九| 日产成人久久| 色女免费在线观看视频网址| 久日91在线| 91总综合网| 青青国产在线拍揄自揄拍| 久久综合久久综合人久久夜精品| 九九热免费国产视频婷婷伊人| 成人精品在线| 国产亚洲99久久精品| 欧美在线观看综合国产| 国产成人无码高清| 在线性黄高清免费视频| www…国产操逼| 欧美综合区| 综合激情五月天| 丁香六月激情综合| 成人精品在线观看| 欧美熟女少妇| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 资源在线观一 二| 久久久爆乳翘臀一线天伦理视频| 青草视频在线看看看看看看看看看| 欧美久热| 99re6久热只有精品6在线直播| 玖玖人人爱| 人人爱夜夜爱| 东京热精品97综合网| 男人的天堂在线| 久久天堂网| 综合五月天| 亚洲av性爱电影| 无码外流操逼视频| 自拍偷拍 日韩无码| 九九色图| 一区,二区,三区网站| 丝袜视频一区二区在线播放国产中文 | 91插B网站| 97色综合中文网| 中文字幕黄片在线| 国产精品宅男免费| 99热精品免费| 久热精品色情| 亚洲加勒比色图| 欧美色999| 人人操人人搞人人草| 色色色999| 国产专区路线| 超碰在线在公开超碰在线在公开| 78超碰| 天天激情干| 五月丁香激情综合网| 亚洲天堂自拍| 青青久草| 国产欧美日韩一区二区三区| 欧洲色| 国产AV人人 夜夜人人澡| 超碰偷拍| se吧提供国产乱老熟视频胖女人| 国产精品亚洲免费| 欧美一区二区传媒| 大香蕉日韩欧美| 91伊人久| 亚洲综合网电影91| 91老熟女91老女人| 日本黄色精品专区网站| 九月色婷婷| 在线一区| 亚洲精品一二牛牛| 中文字幕成人| 日韩精品国模| 久久久久久久久久va| 亚洲人成网www| ...日韩成人一区二区三区字幕| 精品综合久久久久久五月天| 亚洲精品视频在线播放| 欧美亚洲宗合色性图| 日本影视久久免费| 欧美精品999| 久草精品一区| 欧洲欧美视频一区二区| 你操综合| 91天堂| 国产无马av| 亚洲诱惑天堂 | 日本天天操| 99re8免费高清在线| 外站AV在线| 色综合久久久久| 看看日B真人视频| 在线免费观看日韩一区| 怡红院怡春院| 999综合网| 色激情五月天| 五月天婷婷社区| 国产一区二区欧美日本| 婷婷15月天青娱乐| 亚洲图片日本AⅤ欧美在线| 国产天天骚| 日本一级特级毛片视频| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 蜜臀av一区二区三区免费观看| 91网站18+| 日本一区二区成人在线| 日韩八十路老熟女| 久久精品国产亚洲AV嘿嘿| 欧美精品久久| 国产精品久久久久久久黄无码 | av三级电影在线播放| 色综合美国| 综合夜夜| 欧美综合色站| 91亚洲色人| 日韩资源网| 欧美日韩国产高清在线一二三区| 青青三级视频| 欧亚性爱视频免费看| 国产后入清纯| 欧美精品999| 97超碰欧美手机| 欧美熟妇视频| 午夜亚洲WWW湿好大| 久久久久久91香蕉国产| 秋霞久久亚洲精品成人| 九九热午夜欧亚国产视频| 国产尹人在线视频免费| 欧美96精品在线| 青青草视频爽一爽| 国产乱伦亚洲| 97精品人妻一二三四| 婷婷色综合| 天天干天天操天天操夜夜操天天操| 欧美日韩人人精品| 久久五月天婷婷丁香中文字幕| 亚洲精品1区| 国产精品视频精品一二| 97亚洲中文| 中文字幕日韩精品一区二区三区| 最新三级网址| 91中出视频| 欧美少妇第一页| AAAAAAAAA黄片| 中文字幕第7页| ,国产乱人伦精品一区二区三区| 国产又色又粗又黄又爽| 草B在线| 99re6国产精品99re在线| 高清无码在线播放网站| 90后后入| 亚洲91网。| 777奇米影视777四色| 大学生美女口爆| 日韩视频小说在线观看| 丁香六月天| 欧美Aⅴ| 密臀在线一区尤物| 国产乱人妻精品入口| 欧美日韩成人| 性色生活片久久毛片婬片免费放女人一级毛片 | 亚洲综合网91| 亚州综合AⅤ| 99激情| 亚洲第2页| 亚洲欧美小说| 99热国产精品| 东京成人一区| 另类小说五月天| 日韩欧美午夜视频在线| 91夜色| 小电影欧美91| 无码久| 久久综合日韩亚洲欧美| 日韩精品一区二区三区色欲| 人人干黄色| 丝袜美腿亚洲| 91美女精品| 精品视频久久区| 久久99手机免费视频| 丁香婷婷色五月| 手机在线人成免费视频| 欧美日韩性爱电影在线| 精品黄色电影| 72av视频| 亚春色色| 精品美女人人干| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 人澡逼| 天天操人人操骚逼网站| 台湾大香蕉99热| 免费看污网站| 97超级久久强资源| 熟妇熟女视频一区二区三区| 自拍鲍鱼一区在线高清观看免费| 园内精品自拍视频在线播放| 免费av在线播放二区| 亚洲AV成人精品网站在AV| 日韩超碰97| 96久久久久久久| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 在线观看亚洲成人精品| 翔田千里A片一区二区| 无码天堂| 蜜臀99久久精品久久久懂爱| 60秒不遮不挡| 先锋女优在线观看视频| 久久久91| 高清孕妇孕交 交| 亚洲视频精选| 亚洲久久久久| 色汉综合| 国产精品美女久久久久久网站| 亚洲黑人在线| 深夜福利黄片| 国产精品成人AV片免费看网站| 欧美色图综合| 26uuu成人影片| 日韩簧片免费看| 国产精品亚洲天堂网址| 九月丁香婷婷色| 天天做日日做天天欢。| 午夜精品久久久久久久99蜜桃一| 强奸乱伦动态污图免费| 亚洲av强奸乱伦| 五月天偷拍| 偷拍欧美激情| 久久久久密臀一区二区| 久草精品一区| 欧美性五月| 夜夜欧美| 午夜啪| 啪啪免费| 九九久久精品| 精品射1999| 96国产污污污丝袜| 丰满熟妇大乳做爰| 97超碰日韩| 人人看人人插| 人、人、摸,人、人、草| 五月天激情网图片| 成人日本精品九区| 色五月激情AV在线| 加勒比aⅴ| 牛牛操视频逼| 无码抄逼网| 久久久久久性爱片| 国产精品丝袜久久亚洲不卡| 97超碰影音| AV麻豆免费一区| 日韩激情啪啪| 小草精彩毛片| 日本免费一区二区不卡| 美女诱惑久久| 操日韩第| 五月天激情小说网| 久久久久久波多野吉衣高潮| 中出20p| 影音先锋日本乱伦| 天天干天天操天天干天天操| 神马精品视频| 97久久国产亚洲精品超碰热| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 中文字幕jul-617人妻熟女| 国产欧美一区二区| 亚洲图片欧美另类综合免费视频大大香| 久久二| 午夜福利免费福利视频| 啪啪91| 老熟女综合网| 国产欧美日韩一区二区三区| 婷婷五月天影院| 91n免费处女| 无码久久亚洲高清,| 在线播放中文字幕| 欧美中文狠| 国产白丝av| 91色婷婷综合久久中文字幕二区| 99热导航| 国产深喉视频一区二区| 亚洲日韩成人性爱视频| 啊啊啊啊二区好大| 欧美综合自拍| 99热这里只有精| 爱丝福利| 综合 欧美 亚洲 日本| 亚洲丝袜B诱惑| 精…码一二三区| 99操视频| 怡红院亚洲怡春院av| 少妇一区二区三区高速| 射丝袜高跟鞋99| 一区二区高清视频| 婷婷激情四射| 一区二区播放| 夜间福利片1000无码| 91久久18禁| 丁香五六月啪啪| 熟妇最新先锋一二三区| 国产精品福利视频| 激情丁香五月| 久久久久久久唑| 国产精品色| 日韩大香蕉AV影片| 五月婷婷久久综合| 清纯唯美综合亚洲| 亚洲一区二区性爱电影| 欧美最大综合网| 亚乱色| 欧美性五月| 色综合久| 午夜操操操| 欧美性爱系列| 67914在线兔费成人视频| 免费综合亚洲中文| AV女资源| 色婷婷丁香五月| 伊人网高清| 性欧美另类高清| 中文字幕后石码三区四区| 亚洲天堂性爱| 女性喷水高潮在线观看| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 欧美特大黄一级片片免费| 日韩高清一二三| www狠狠| 97 色综合| AV色天香在线| 伊人网青青| 亚洲熟久久| 中文字幕亚洲在线一区| 日韩精品午夜操呦呦不卡影院| 夜夜嗨一区二区| AAAA欧美日韩| 成熟熟女国产精品一区二区| 333kkkk·亚洲com久久| 大逼色网站| 99re这里只有精品中心播放| 国产色综合亚洲色综合吹潮| 欧美天堂第二区| 99综合免费视频| 国产精品久久久吖| 嫩草影院永久在线制服丝袜| 国产一级黄色片在线观看| 91美| 久久仑合| 亚洲成?V人片在线观看福利| 国产99热| 蜜臀久久久国产| 立川理惠无码一区二区| 超碰美国| 亚洲熟久久| 黑丝少妇| 午夜视频好爽啊| 欧美激情 亚洲色图| 欧美日韩理论一区| 激情接吻视频久久久久久| 久久久久久九九九| 性爱AV天堂| 大奶啊啊好爽 | 欧美日韩美女精品久草一区二区三区 | 中文字幕伊人| 台湾佬激情综合| 国产精品自在线发布| 97干在线| 99蜜月精品久久| 亚洲男人的天堂V| 欧美日韩性爱精品| 一二三四视频中文字幕在线看| 久久东京热成人| 激情终合网| 992这里有精品| 91人妻做a观看视频| 亚洲在线| 无码二级三级| 狠狠2050在线观看| 综合久草| 亚洲激情四射| 日韩精品中文字幕一| 国产精品爆乳懂色蜜乳| 天美传媒精品久久视频| 天美传媒AV国产在线| 看看小穴| 国产一级片| 一区二区视频在线播放| 豆花视频操逼网址| 天天92av| 少妇熟女视频一二三区| 日本99一区二区| 婷婷成人久久久精品| www狠狠| 女人午夜视频777| 这里只有精品视频在线观看麻豆| 久久久新亚洲AV| 九久精品| 超碰色大香蕉| 青草伊人久久| 成人精品欧洲亚洲| 狠狠图片青青草| 婷婷色香| 色一射色一射| 超碰久久性爱| 久久久久免费少妇| 色婷婷电影网| 成人午夜无码视频| 综合久久欧美| 一区三区啪啪| 日韩三级天堂在线观看| 国产 丝袜 欧美中文 另类| 久久久草成人网站久久久草成人久久久草久久久 | 德国一二三不卡| 日韩人妻少妇中文字幕| 96精品在线| 殴美,日韩国产伦精品| 色色丁香| 亚 欧 美 综合| 97久久精品亚洲| 69超碰综合| 97色冈| 精品久久久中文字幕不| 韩国轻伦国内自拍一区| 97青青操视频| 玖玖蜜臀资源网| 久久亚洲不卡一区二区三区| 狠狠热这里都是精品| 精品网站99999| 欧洲精品网| 久久 久久国内精品亚洲| 欧美第一页| 国产丁香精品露脸视频| 亚洲欧美洲综合| 欧美色亚洲| 五月丁香六月综合缴清无码| 豆花视频操逼网址|