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

ARTICLE DETAIL

資訊詳情

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

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

Spring Boot高校講座預(yù)約系統(tǒng)開發(fā)實戰(zhàn):并發(fā)控制、數(shù)據(jù)庫與狀態(tài)流轉(zhuǎn) 1. 項目核心思路與需求拆解1.1 高校講座預(yù)約的真實痛點先講個身邊的場景。某高校每學(xué)期都會安排幾十場講座涵蓋學(xué)術(shù)前沿、就業(yè)指導(dǎo)、心理健康、通識素養(yǎng)等方向。以前是怎么管的學(xué)生會發(fā)通知大家到現(xiàn)場排隊簽到熱門講座經(jīng)常出現(xiàn)兩種情況一是報告廳擠爆了過道里都站滿人消防通道都被堵住二是某些冷門講座來了不到三分之一臺上專家講得尷尬臺下學(xué)生玩手機。后來有人嘗試用在線文檔接龍報名但信息混亂、容易串改、無法統(tǒng)計到場率管理員光是核對名單就要花小半天。這個系統(tǒng)的核心價值就是把“講座預(yù)約”這件事從人工排隊和Excel表里解放出來形成一個學(xué)生在線預(yù)約、后臺統(tǒng)一管理、簽到數(shù)據(jù)自動統(tǒng)計的閉環(huán)。它不是一個花里胡哨的Demo而是真正能部署到校醫(yī)院、圖書館報告廳、教學(xué)樓多媒體教室這類場景里用的管理系統(tǒng)。目標用戶很明確學(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)定、資料多、團隊協(xié)作時上手快學(xué)生開發(fā)者照著官方文檔也能七天落地。1.2 角色劃分與核心業(yè)務(wù)流程這個系統(tǒng)不是孤立的預(yù)約工具它要覆蓋講座從發(fā)布到結(jié)束的完整生命周期。我們梳理下來核心角色分成四類學(xué)生用戶瀏覽講座列表、查看詳情、在線預(yù)約、取消預(yù)約、講座簽到、查看自己的預(yù)約記錄和學(xué)分/學(xué)時累計。講座主講人教師提交講座申請?zhí)顚懼黝}、內(nèi)容簡介、時間、地點、容量等信息查看自己講座的預(yù)約情況和到場率。院系管理員審核主講人提交的講座申請排定講座計劃查看本院系的預(yù)約數(shù)據(jù)統(tǒng)計導(dǎo)出參與名單。系統(tǒng)超級管理員維護基礎(chǔ)數(shù)據(jù)教室、時間段、管理用戶和角色權(quán)限、處理異常數(shù)據(jù)、查看全局統(tǒng)計報表。核心流程其實只有一條主線主講人提交講座申請管理員審核通過后講座狀態(tài)變?yōu)椤翱深A(yù)約”學(xué)生在預(yù)約開放時間內(nèi)搶名額講座開始前或現(xiàn)場進行簽到講座結(jié)束后管理員確認講座完成并統(tǒng)計實際到場人數(shù)。整個流程里有一個容易被忽略的細節(jié)預(yù)約不是無限開放的必須區(qū)分“預(yù)約開始時間”和“預(yù)約截止時間”否則學(xué)生會提前好幾天把名額占滿后面想聽的人進不來。這個需求我在第一版設(shè)計時漏掉了結(jié)果被某院系老師反饋“學(xué)生下午四點半的講座凌晨十二點就把票搶光了”后來才補上預(yù)約窗口的字段。1.3 功能邊界與優(yōu)先級取舍很多人做管理系統(tǒng)容易犯一個毛病啥功能都想加結(jié)果代碼一團亂麻。我理功能清單的時候把需求分成“必須有”和“可以有”兩檔。必須有登錄認證、角色權(quán)限控制、講座CRUD、預(yù)約/取消、簽到、預(yù)約記錄查詢、用戶管理、基礎(chǔ)數(shù)據(jù)統(tǒng)計??梢杂械珒?yōu)先級低消息通知站內(nèi)信、郵件、二維碼電子票、黑名單機制、講座評價、打印簽到表、數(shù)據(jù)導(dǎo)出Excel。實際開發(fā)中我建議把二維碼電子票和Excel導(dǎo)出放到第二階段。不是說不重要而是第一版先把預(yù)約主流程跑通讓學(xué)生能約、管理員能統(tǒng)計這就是上線的最小可用閉環(huán)。我們第一版上線時連二維碼都沒做簽到用的是管理員手機端搜索學(xué)號手工確認雖然原始了一點但核心數(shù)據(jù)鏈路已經(jīng)走通了。后來第二版加了二維碼簽到入場速度從每人20秒降到了3秒體驗差異非常明顯。2. 技術(shù)選型與架構(gòu)設(shè)計解析2.1 為什么是Spring Boot而非其他方案我遇到過不少同學(xué)問為什么不用PHP或者Node.js甚至有人建議用Python的Flask。我的回答是Spring Boot在這個場景下不是“最好”的但它是“最不容易出錯”的。首先高校里的系統(tǒng)往往要運行很多年維護的人可能是下一屆的學(xué)生、另一個部門的老師甚至外包團隊。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)勢在本項目中的短板PHP部署簡單、上手快長期維護的代碼規(guī)范性往往不如Spring體系復(fù)雜業(yè)務(wù)邏輯容易寫成面條代碼Node.js高并發(fā)IO能力強高校運維團隊對Node生態(tài)相對陌生部署和排障成本高Flask輕量靈活缺乏完整的權(quán)限、事務(wù)、ORM生態(tài)做管理系統(tǒng)需要自己拼裝太多零件2.2 整體技術(shù)棧構(gòu)成這個項目的技術(shù)棧我可以直接列出來都是很主流的組合JDK 8我用的是JDK 8穩(wěn)定且兼容性好新項目也可以直接上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)計非常方便Redis用于緩存講座列表和分布式鎖如果數(shù)據(jù)量不大也可以先不引入Vue 2 Element UI前端管理端學(xué)生端我用的是Thymeleaf加Bootstrap因為學(xué)生端的頁面比較輕不需要太大的前端工程Maven依賴管理和打包這套組合的核心思路是后端業(yè)務(wù)邏輯用Spring Boot的依賴注入和事務(wù)管理來組織數(shù)據(jù)庫操作交給MyBatis Plus減少樣板代碼緩存和鎖用Redis解決熱點數(shù)據(jù)的并發(fā)問題。比如講座詳情頁會被頻繁刷新第一次查完放進Redis后面直接命中緩存數(shù)據(jù)庫的壓力會大大降低。2.3 工程結(jié)構(gòu)與分層設(shè)計工程結(jié)構(gòu)上我采用了經(jīng)典的四層架構(gòu)沒有過度設(shè)計。如果你拉過太多開源項目會發(fā)現(xiàn)很多人喜歡建一堆模塊結(jié)果一個幾百兆的小項目拆成七八個Maven子模塊看起來高大上實際維護起來想哭。我建議用單模塊加包名分層的方案簡單直接的代碼樹com.example.lecture ├── controller // 接口入口只做參數(shù)接收和結(jié)果封裝 ├── service // 業(yè)務(wù)邏輯層事務(wù)邊界都在這一層 │ └── impl ├── mapper // MyBatis Plus的Mapper接口 ├── entity // 數(shù)據(jù)庫實體類 ├── dto // 前端交互的數(shù)據(jù)傳輸對象 ├── vo // 視圖對象聚合多表查詢結(jié)果 ├── config // 配置類Redis、攔截器、跨域等 ├── common // 通用工具類、統(tǒng)一返回結(jié)果、異常處理 └── enums // 狀態(tài)枚舉分層設(shè)計最重要的一個原則Controller只做參數(shù)校驗和調(diào)用Service不要在里面寫業(yè)務(wù)邏輯。我見過太多人把查詢數(shù)據(jù)庫的代碼寫在Controller里導(dǎo)致后面想復(fù)用邏輯的時候只能復(fù)制粘貼。Service層的每個方法代表一個完整的業(yè)務(wù)動作方法上標注事務(wù)注解。DTO和VO分開的好處是數(shù)據(jù)庫字段變化不會直接暴露給前端接口。舉個例子講座實體類里有“備注”字段但前端展示時不需要這個字段VO里不包含就可以了返回給用戶的JSON就干干凈凈。3. 數(shù)據(jù)庫設(shè)計與核心表結(jié)構(gòu)3.1 概念模型與ER分析數(shù)據(jù)庫設(shè)計是整個項目的基石表結(jié)構(gòu)沒設(shè)計好后面寫業(yè)務(wù)代碼就是在爛地基上蓋樓。我畫ER圖時先列出核心實體用戶、講座、預(yù)約記錄、教室/場地、學(xué)院。關(guān)系也很清晰一個用戶學(xué)生可以預(yù)約多個講座一個講座可以被多個用戶預(yù)約這是典型的多對多關(guān)系通過中間表“預(yù)約記錄表”來解除多對多關(guān)聯(lián)。講座與教室是多對一教室與學(xué)院是一對多。這里有一個建模時容易犯的錯誤把預(yù)約人數(shù)當成字段直接存在講座表里比如reserved_count而不是通過預(yù)約記錄表實時count。如果并發(fā)量不大直接count也能用但每次查詢都要全表聯(lián)合統(tǒng)計數(shù)據(jù)庫會很吃力。我的做法是在講座表里維護一個冗余字段reserved_count預(yù)約成功時加1取消預(yù)約時減1。這種用空間換時間的做法在中小型系統(tǒng)里非常實用配合事務(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 真實姓名, 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 手機號, 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 講座標題, speaker varchar(50) NOT NULL COMMENT 主講人姓名, speaker_intro varchar(500) DEFAULT NULL COMMENT 主講人簡介, content text COMMENT 講座內(nèi)容簡介, location varchar(100) NOT NULL COMMENT 講座地點, 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è)計。需要注意的有幾點第一預(yù)約記錄表里的聯(lián)合唯一索引uk_lecture_user它的作用是防止同一個人對同一場講座重復(fù)預(yù)約這是數(shù)據(jù)庫層面的最后一道防線即使業(yè)務(wù)邏輯有bug這條索引也能攔住臟數(shù)據(jù)。第二所有表的主鍵都用bigint自增不用雪花算法也不用UUID因為并發(fā)量沒那么大自增主鍵在InnoDB里性能和存儲上都更好。第三狀態(tài)字段用tinyint而不是varchar省空間、查詢快配合項目里的枚舉類做對應(yīng)映射可讀性也不差。3.3 狀態(tài)字段設(shè)計的重要性狀態(tài)字段在整個系統(tǒng)里扮演的角色比我最初設(shè)想的更重要。講座表里的status字段我特意設(shè)計了從0到4五個狀態(tài)值分別對應(yīng)待審核、已審核可預(yù)約、已截止、已完成、已取消。每個狀態(tài)的流轉(zhuǎn)方向是有約束的比如“已完成”的講座不能再變回“可預(yù)約”“已取消”的講座不允許再被預(yù)約。這就像現(xiàn)實中的流程一樣講座一旦結(jié)束數(shù)據(jù)就是歷史數(shù)據(jù)不能隨便改。預(yù)約記錄表的status字段也有講究0已預(yù)約、1已簽到、2已取消、3爽約。區(qū)分“已取消”和“爽約”特別重要因為很多高校會把講座考勤納入第二課堂學(xué)分或綜合素質(zhì)評價。如果學(xué)生預(yù)約了但沒去系統(tǒng)應(yīng)該記錄為“爽約”而不是簡簡單單刪除記錄。后來做統(tǒng)計報表時這個設(shè)計的價值就體現(xiàn)出來了輔導(dǎo)員可以直接看到每個學(xué)生的爽約次數(shù)不再需要人工翻聊天記錄。4. 核心功能實現(xiàn)與關(guān)鍵代碼解析4.1 預(yù)約流程控制與庫存扣減預(yù)約是整個系統(tǒng)最核心的接口也是并發(fā)壓力最大的地方。想象一下一場熱門講座放出來200個名額學(xué)生們在同一時間點瘋狂點擊預(yù)約按鈕如果代碼寫得不對超出了預(yù)約數(shù)量上限超賣問題就來了。我見過很多新手寫的預(yù)約邏輯是這樣的先查講座的reserved_count判斷是否小于capacity如果小于就加1然后插入預(yù)約記錄。這代碼表面上邏輯沒問題但在高并發(fā)下會出大問題。兩個請求同時查到reserved_count199都判斷小于200于是都執(zhí)行了加1操作結(jié)果reserved_count變成了201超出了容量限制。為什么會這樣因為查詢和更新之間不是一個原子操作中間有間隙。正確的做法是利用數(shù)據(jù)庫的行鎖或樂觀鎖機制。我推薦的做法是直接在SQL層面做原子扣減Transactional(rollbackFor Exception.class) public ReserveResult reserveLecture(ReserveRequest request) { // 1. 校驗講座存在且狀態(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的行鎖機制當多個事務(wù)同時更新同一行數(shù)據(jù)時它們會排隊執(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)該阻止這種沖突。實現(xiàn)思路也簡單在插入預(yù)約記錄之前先查一下該用戶已預(yù)約且狀態(tài)為“已預(yù)約”或“已簽到”的講座看其中是否有與新講座時間重疊的記錄。Transactional(rollbackFor Exception.class) public ReserveResult reserveLecture(ReserveRequest request) { // ... 省略前面的庫存校驗邏輯 ... // 新增時間沖突檢測 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)簽到功能在第二版才加入二維碼。管理員手機上打開一個小程序頁面其實就是一個適配移動端的網(wǎng)頁掃描學(xué)生出示的二維碼識別學(xué)號后調(diào)用簽到接口。簽到接口的邏輯不復(fù)雜Transactional(rollbackFor Exception.class) public CheckResult checkIn(CheckInRequest request) { // 1. 判斷當前時間是否在講座開始前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)計字段實際到場人數(shù)。講座結(jié)束后管理員把這些到場人數(shù)對比預(yù)約人數(shù)就能得出到場率。這個數(shù)據(jù)在學(xué)期末做第二課堂學(xué)分認定時很有用。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è)置的。默認情況下預(yù)約開始時間是審核通過時刻預(yù)約截止時間是講座開始前2小時。這樣設(shè)計的考慮是主講人提前一周提交申請管理員審核通過后立即開放預(yù)約到講座開始前2小時截止讓學(xué)生能從容安排時間。如果某個院系想設(shè)置自定義的預(yù)約窗口也可以在審核頁面手動修改。審核這里還有一個細節(jié)講座狀態(tài)是“待審核”時學(xué)生端是看不到這條講座的。我第一版沒注意結(jié)果學(xué)生端把待審核的講座也展示出來了學(xué)生點了預(yù)約結(jié)果提示“講座暫未開放預(yù)約”搞得大家一頭霧水。后來我在查詢講座列表時加了一個過濾條件學(xué)生端只能看到status為1可預(yù)約和2已截止的講座避免數(shù)據(jù)混亂。5. 前端頁面與交互設(shè)計思路5.1 頁面結(jié)構(gòu)與路由組織這個系統(tǒng)我做了兩個端管理端和學(xué)生端。管理端的頁面比較重用了Vue加Element UI典型的后臺管理布局左側(cè)菜單頂部導(dǎo)航中間內(nèi)容區(qū)。菜單包括講座管理、預(yù)約管理、用戶管理、統(tǒng)計報表、系統(tǒng)設(shè)置。學(xué)生端則輕量很多用Thymeleaf模板渲染頁面包括首頁講座列表、講座詳情、我的預(yù)約、個人中心。學(xué)生端的講座列表頁是整個系統(tǒng)訪問量最高的頁面必須做分頁。我一開始做的是全量查詢結(jié)果講座多了以后頁面加載明顯變慢后來改成了MyBatis Plus自帶的分頁插件每頁10條配合標題模糊搜索和時間排序體驗就好多了。列表頁每個講座卡片上要展示講座標題、主講人、時間、地點、剩余名額。剩余名額這個字段很關(guān)鍵它會刺激學(xué)生的緊迫感也是預(yù)約轉(zhuǎn)化率的重要推動因素。講座詳情頁則需要更完整的信息講座簡介、主講人背景、內(nèi)容大綱、往期評價如果有的話。頁面上最重要的按鈕是“立即預(yù)約”這個按鈕不是永遠可點的要根據(jù)講座狀態(tài)動態(tài)變灰或變紅。狀態(tài)為“可預(yù)約”且當前時間在預(yù)約窗口內(nèi)按鈕顯示“立即預(yù)約”名額滿了顯示“已滿員”預(yù)約截止了顯示“預(yù)約已結(jié)束”講座已完成顯示“查看回放”如果沒有回放就顯示“已結(jié)束”。這些狀態(tài)判斷在前端做一次后端接口再做一次雙保險。5.2 移動端適配與用戶體驗必須強調(diào)學(xué)生端一定要優(yōu)先考慮移動端體驗?,F(xiàn)在大學(xué)生基本都是用手機刷講座信息沒人會打開電腦登錄系統(tǒng)去預(yù)約。我在第二版改版時專門把學(xué)生端做成了響應(yīng)式布局Bootstrap柵格系統(tǒng)搭配媒體查詢讓頁面在手機瀏覽器上能流暢操作。具體來說幾個關(guān)鍵頁面的移動端適配方案講座列表卡片式設(shè)計一張卡片就是一整屏寬度的信息塊標題在頂部中間是講座信息底部是預(yù)約按鈕。講座詳情頭部大標題下方時間地點信息用圖標加文字排列簡介部分可折疊默認只顯示兩行點擊展開。我的預(yù)約用Tab切換“已預(yù)約”“已簽到”“已取消”“爽約記錄”四類每條記錄展示講座信息、狀態(tài)標簽和操作按鈕取消預(yù)約、查看電子票。還有一個小細節(jié)預(yù)約按鈕的點擊反饋要即時。我加了按鈕防重復(fù)點擊的機制前端通過disabled屬性控制點擊一次后按鈕變成“處理中...”等接口響應(yīng)后再更新狀態(tài)。不然學(xué)生們連點五下后端就要處理五次請求雖然事務(wù)能兜底但日志里全是重復(fù)操作的記錄排查問題時看著就心煩。6. 常見問題與排查技巧實錄6.1 并發(fā)預(yù)約導(dǎo)致的超賣問題第一個要說的坑肯定是超賣。我上面雖然講了原子扣減的寫法但第一次上線時用的就是經(jīng)典的“先查后寫”結(jié)果就被現(xiàn)實教育了。當時某學(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ù)了就報錯回滾雙保險更穩(wěn)。6.2 事務(wù)失效的場景說到事務(wù)很多人只知道在方法上加Transactional注解但注解不是萬能的。我遇到過事務(wù)不生效的情況排查了好久才發(fā)現(xiàn)原因方法內(nèi)部自己調(diào)了自己。Spring的事務(wù)代理機制是基于AOP的只有通過代理對象調(diào)用方法時事務(wù)注解才會生效。如果你在一個Service方法里直接調(diào)用同一個類的另一個帶事務(wù)注解的方法事務(wù)是不會啟用的因為調(diào)用的是this對象的方法沒有走代理。那個場景是這樣的我在Service里寫了一個公開方法createLectureAndPublish它調(diào)用了同一個類里的createLecture方法該方法上有Transactional注解。結(jié)果createLecture里的操作沒被事務(wù)管理哪怕拋了異常前面插入的數(shù)據(jù)也不會回滾。解決辦法有兩個要么把需要事務(wù)的方法拆到另一個Service類里要么在調(diào)用時通過Spring注入的代理對象調(diào)用。我選擇了拆類的方案更清晰也更符合單一職責。另外還有一個容易踩的坑事務(wù)方法內(nèi)部catch了異常不往外拋。事務(wù)回滾的觸發(fā)條件是異常傳播超過了事務(wù)邊界如果你在方法內(nèi)部把異常吞掉了事務(wù)自然認為一切正常不會回滾。所以catch塊里至少要拋出RuntimeException或者用rollbackFor顯式指定回滾的異常類型。6.3 狀態(tài)不一致的現(xiàn)場還原還有一個數(shù)據(jù)一致性問題是簽到和預(yù)約統(tǒng)計對不上。有一次管理員反饋某場講座預(yù)約顯示了180人但實際簽到表只有120人差了整整60人。我第一反應(yīng)是簽到功能有bug但查了半天代碼邏輯沒問題。后來發(fā)現(xiàn)原因在業(yè)務(wù)規(guī)則上系統(tǒng)允許學(xué)生在講座開始前取消預(yù)約取消后reserved_count會減1但講座的“實際到場人數(shù)”統(tǒng)計的是簽到表中狀態(tài)為“已簽到”的記錄。所以預(yù)約人數(shù)180人包含了中途取消又新增的預(yù)約實際到場120人是最終的簽到人數(shù)兩者之間沒有直接關(guān)系。這不是bug是統(tǒng)計口徑的問題。解決方案是在統(tǒng)計報表里分別展示“累計預(yù)約人次”“當前有效預(yù)約人數(shù)”“實際簽到人數(shù)”“取消次數(shù)”“爽約次數(shù)”五個指標讓管理員根據(jù)自己的需要選擇使用哪個口徑。同時在報表頁面加了一個文字說明解釋每個指標的計算方式避免再被當成bug提過來。6.4 常見問題速查表問題現(xiàn)象可能原因解決方案預(yù)約人數(shù)超容量查詢和更新非原子操作改用UPDATE原子扣減SQL事務(wù)不起作用同類內(nèi)部方法調(diào)用拆分Service類或使用代理對象調(diào)用用戶能重復(fù)預(yù)約一場講座業(yè)務(wù)校驗遺漏加聯(lián)合唯一索引兜底學(xué)生端可以看到待審核講座查詢過濾條件缺失列表查詢條件限制status范圍簽到時間判斷不準確時區(qū)或DateFormat問題統(tǒng)一用服務(wù)器時區(qū)傳參用時間戳預(yù)約了但名單上沒有預(yù)約記錄被誤刪用狀態(tài)標記替代物理刪除同一個時間段預(yù)約了多場講座沖突檢測邏輯缺失加區(qū)間重疊檢測SQL管理員導(dǎo)出名單亂碼Excel工具類未設(shè)置編碼使用EasyExcel并指定UTF-8提示排查問題的時候不要一上來就去看代碼先復(fù)現(xiàn)問題、確認現(xiàn)象再根據(jù)現(xiàn)象反推代碼路徑。很多“bug”其實是使用方式和業(yè)務(wù)口徑的問題先和提出方對齊需求能省下大量無用功。我個人在實際操作中的體會是這個系統(tǒng)的技術(shù)難度其實不大真正的難點在于把業(yè)務(wù)規(guī)則想清楚然后把數(shù)據(jù)模型設(shè)計得足夠穩(wěn)。很多看起來很復(fù)雜的功能比如并發(fā)預(yù)約、時間沖突檢測、簽到統(tǒng)計本質(zhì)上都是幾個字段和幾條SQL的事。反而是那些不起眼的小細節(jié)——預(yù)約窗口的時間控制、狀態(tài)流轉(zhuǎn)的約束、統(tǒng)計口徑的統(tǒng)一——決定了整個系統(tǒng)好不好用。后面如果要擴展可以在這個基礎(chǔ)上加消息推送預(yù)約成功通知、講座開始前提醒、講座評價打分、線上直播鏈接集成甚至對接學(xué)校的統(tǒng)一身份認證那基本上就是一個貼近生產(chǎn)的完整平臺了。你可以先把核心流程跑通再根據(jù)實際反饋迭代這是做這類管理系統(tǒng)最務(wù)實的一條路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
一二三四免费视频| 精品78| 9/A片| 乱伦一区二区三区‘| 九九九只有精品| 精品久久久九九九孕妇| 丁香五月天啪啪| 欧洲欧美视频一区二区| 久久精品一区二区| 精品人妻一区二区三区四区| 亚洲情色无码一区二区三区| 日韩操呦呦影院在线观看| 久碰视频| 最新日韩黄片| 两性色网| 日韩国产欧美伦理在线| 亚洲欧美综合区自拍另类| 97国产超碰| 中文字幕视频在线观看| 91美女高潮| 日韩人妻精品中文字幕| 激情文学欧美| 亚洲射综合网| 91老司机在线视频免费观看| 丁香婷婷激情五月天无毒不卡 | 激情网五月天| 国产精品视频精品一二| 在免费jIzzjIzz在线视频| 另类图片综合| 乱伦熟女论坛| 97在线免费视频观看| 女上位精品在线| 96久久久精品| 91色人| 人妻无码久久一区二区三区免费| 97蜜桃综合| 91久操| 色婷婷综合网站| 永久免费发布性爱网| 亚洲熟女精品| 五月婷婷深深爱| 色优久久| 天天插天天舔舔天天干| 一区二区三区四区姦女| av72网| 中文字幕AV片| 青青草原成人| 国语少妇精| 欧美一级A一级a爱片久久| 91夜色| 亚洲成aⅴ人片不卡无码| 久久久性| 午夜福利精品| 欧美夜夜狠| 99久久com免费视频′| 久久色激情一区二区三区| 国产精品 午夜福利| 欧美色图 人妻| 色婷婷A V一二三四区麻豆综合| 久草毛片| 欧亚无码视频| 性爱av在线免费观看| 九月丁香| 天天做天天爱天天爽AV| 情色大香蕉| 国产久久日| 中亚精品极乱| 26uuu性| 强奸乱伦Av网| 天天综合精品| 搡老女人老91妇女熟女| 激情小说图片亚洲首页| 伊人久久综合精品欧美| 五月丁香久久| 欧美一区二区成人一卡| 婷婷色色五月天福利| 欧美黄色大片在线观看 | 婷婷午夜成人色中色| 黄色视频特级毛片| 中文字幕乱偷人妻久久艾草网| 色九色久| 老熟妇一区二区三区…| 91xingse| 1024精品在线| 67914亚洲精品| 亚洲 图片 欧美 色图| 天天综合麻豆视频| 精品人妻中文字幕高清| 国内精品伊人久久久久影院会| 综合色图亚洲欧美| 午夜精品久久久久久久| 人人摸.人人色| 91色婷婷综合久久中文字幕二区| 久久久久久久久久久久黄色| 天天射夜夜操| 精品精品精品| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 精品少妇999| 家庭乱伦性爱av| 91丝袜美女| 久久r精品| 日韩免费三级黄片电影| 日韩精品人妻中文字幕久久久| 久久蜜桃一区二区| 久久草大香蕉| 久久精品国产精品一区| 国产精品久久久久久久久久久久久久久久久久| 亚洲综合91| 亚洲啪啪性视频| 夜夜 中文视频rt| 久久永久无码人妻视频| 嗯嗯嗯好爽| 亚洲骚男同com| 日本色色视频网站| 男人的天堂无码| 国产欧美日韩一区二区三区| 老鸭窝日丰县女人| 色婷婷九月| 另类图片五月天| 综合影视国产无码| 亚洲怡春院| 亚州免费啪啪视频| 欧洲精品一二三在线| av网站免费线看| 欧美制服网站美腿丝袜| 91综合色| 大香蕉综合| 亚洲国产综合视频| 91新在线欧美| 1769精品一区二区三区| 欧美姓爱综合网| 色九月婷婷| 啊啊啊啊啊啊好多水| 国产成人亚洲精品自产在线 | 人妻日日干| 性欧美精| 亚洲综合97中文网| 欧州一区二区三区四区| 色综合20p| 欧美一级久久久久久久大片动画| 久久精品人妻一区二区| 女人高潮大叫一级毛片| 超碰九区| 国产免费一区| 少妇超碰在线| 乳欲人妻办公室奶水| 天天天操天天天爱| 丁香五月色情| 在线A日本| 一卡二卡三卡| 久久久久久91香蕉国产| 激情视屏国产乱伦强奸| 天天久久| 欧美色亚洲色| 中国小夫妻勾搭露脸淫荡对白| 99久久婷婷丁香| 一本一道久久综合久久| 九九九久千久久激情蜜桃在线看| 色综合av男人天堂| 国产中出内射一区二区| 大香蕉日亚洲日本亚大| 69人妻人人揉人人躁人人精品| 很很操在线| 欧美最大综合网| 亚洲精品一区二区三区新线路| 国产av强奸美女| 91精品丝袜久久久久久| 啊啊啊啊好疼| 91青青在线视频| 人人喜人人妻| 六十路日本| 国产成人自拍视频视频| 91丰满| 999 久久久| 色五月婷婷在线| 成人免费看吃奶视频网站| 啊啊啊啊好多水| 青青草乱入乱欲视频在线观看| 九久9精品| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 欧美淫穴| 日韩AC| 欧美日韩午夜精品一区二区三区| 91情色在线| 久日91在线| 欧美日韩资源在线| 欧美日不卡| 激情五月天社区| 国产精品福利视频播放| 欧美大香蕉久| 亚洲无码 国产无码| 2020中文字幕在线观看| 亚洲男人天堂视频| 成人久久久精品| 嗯嗯嗯啊啊啊操的我好爽| 色噜噜婷婷| 五月婷婷无码| 天天综合色| 免费久久精品麻豆一区二区av| 久久双插| 玖玖玖玖精品国产剧情| 国产毛片在线| 天天色综亚洲91污| 久久久久亚洲Aⅴ无码| 国产欧美岛国精品一区| 国产亚洲女v在线观看| 91丨国产丨白浆秘 洗澡动漫| 国产9熟妇视频网站| 天天影视网色欲色香| 亚洲色91C| 欧美激色| 精品一区二区2| 久久久一区二区三区麻豆| 久久9免费视频| 国产天天噜一噜久久久| 精品人妻一区二区三区不卡断 | 操逼操逼逼操操逼91 | 欧亚免费视频| 欧美亚综合色图| www鬼畜国产男人的天堂| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲精品丝袜| B049AV在线播放| 国产青青美女玩逼视频| 国产成人五月天丁香花| 欧美不在线| 久久黄片国产一区二区| 日本福利二区视频| 少妇69中文| 手机久操欧美综合色码| 国产精品剧情| 国产日韩欧美亚洲精品95| 久干9操| 欧美日韩岛国大片在线观看| 精品一区二区三区蜜桃臀赵总| 中文高清一区二区的| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 加勒比海成人视频网| 99久在线精品99re8| 嗯嗯啊啊操我| 婷婷啪啪| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 国产中出内射一区二区| 亚洲人妻中文高清| 色av中文字| 97干天天| 91看黄片| 人妻嗯啊啊在线播放| 一个人在线看的黄色电影网站| 欧美韩国你懂得在线 | 欧美另类丝袜熟女| 黑人美精品 A片| 国产精品一二三免费网站| 丁香婷婷激情五月天无毒不卡| 久欲AV| 天天色图| 激情小说五月天| 亚av顶级裸体一区二区三区四区五区 | 老熟女91视频| 午夜福利免费精品视频| 亚洲人妻熟妇三十三区| 青青草一区二区高清无码视频| 国产精品亚洲色婷婷久久久| 丁香五月社区| 99这里都是精品| 久久透逼视频| 亚洲色图久久成人| 国语精品对白| 日本一区二区做爱的视频| 欧美激情 日韩精品| 亚洲综人网| 国产精品久久久久久照片| www.狠狠干.coom | 乱伦熟妇一区二区| 久久人妻视频网| 久久人体一区二区| japan日本高清乱xxxx| 一区麻豆 高清中文字幕| 国产精品久久泡妞网站| 国产亚洲色婷婷久久99精品91葵花宝典 | 91欧美美女日韩国产婷婷| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 免费97视频| 精品九九国产无码| 欧美精品 - 91爱爱| 日韩色| 91精品91久久久中77777| 色五月AV在线| 国产视频一区二区免费| 青青草中日韩在线| 免费人成?大片在线播放| 99在线观看无大码| 国产高清精品一区二区三区毛片 | 欧美色吧综合| 2024人人操人人摸| 九九热精品视频六| 丁香五月婷婷啪啪| 色视频蜜乳| 青娱乐大香蕉| 围产精品一区二区三区视频播放| 日本黄色天堂| 天天做天天爱| 2025年A片视频精品| 久久久久久久久久久久久久久乱码| 欧美 亚洲 在线| ′ !γ}丶。。久久精品欧美一区二区三区 | 老熟女搡BBBB搡BBBB视频| 日韩影片中文字幕一区二区三区| 日本性爱视频一级| 久神马| 欧美劲爆视频一区二区| 日韩一二三区| 青青欧洲黑| 5278欧美一区二区三区| 国色综合天| 亚洲另类久操网| 久综合国内精品自在自线| 98精品国产乱码久久久久久| 婷婷中文网| 国产AV中文| 国产精品色哟哟| 自拍偷拍 日韩无码| 亚洲国产日韩精品久久久| 亚洲午夜免费狠狠干| 久久国产逼| 加勒比人妻综合| 久久久久久久久久8888| 国产福利电影| 九七超碰人人乐| 曰本精品久久久| 一个人免费HD91视频| 九九九九九九九九九国产精品 | 91精品无码久久久久久久 | 欧美人妻久久精品二区三区| 精品对白久久不卡| 午夜后入| 香蕉在线一区二区三区| 大香网站| 天天色黄色影院天天操| 在线播放成人高清免费视频| 9美女超碰在线免费观看| 91老司机在线视频免费观看| 偷窥自拍亚洲天堂网爆| 国产在线强奸视频| 九热中文字幕| 久久精品男人的天堂| 亚洲天堂另类美腿| 操少妇很爽av| 日韩人妻一区二区精品| 亚洲天堂中文字| 91丝袜在线观看| 精品制服美女中文一区二区三区| 久久久久久久久久久999| www.久久| 黄色av一区二区在线| 涩综合导航| 97碰| 国产路线专区| 欧美—性—交—色| 久久久久久裸体| 91总综合网| 欧美内射少妇| 日韩乱码av| 欧美一区二区亚洲天堂| 91精品无码人妻系列| 亚洲欧美精品国产一区二区| 69视频入口| 97色在线视频| 超碰免费97| 大香蕉综合网| 久久夜夜| 亚洲婷婷丁香在线| 中文AV制服乱伦| 97欧美超碰| 91 丝袜在线播放| 日本不卡五区| av网站免费看| 搞中出久久| 成人无码在线超碰网| 日韩av无码网站| 欧美成人一级麻豆| 国产二区三区免费视频| 日韩性爱一级片| 国产白丝精品在线观看| 在线中文字幕| 国产区91柔拿会所技师| 人人干人人搞人人摸| 无码免费精品高清| 五月色网| 强上我不卡卡| 999综合色| 亚洲AV在线资源| 亚洲AV在线资源| 91精品在线播放| 美女诱惑久久| 国产久久成人| 色五月网址| 久操九九九九| 国产成人天堂| 少妇高潮一区二区三区在线| 国产精品电影大全| 97人人操人人摸| 在线视频日韩欧美国产| 欧美.亚洲.另类.丝袜.制服.诱惑| 亚洲图片欧美91N| wwe 天天干.com| av72网| 无马一区二区| 日韩簧片免费看| 最近2019中文字幕国语免费版| 激情专区综合| 丝袜喷水在线| 久久久少妇诱惑精品视频| 亚洲小说视频| 国产精品久久久久久久黄无码| 爱我干综合| 伊人国产av| 台湾佬中文娱乐网久久久久久久久久com| 精品无人区麻豆乱码1区2区图片| 亚洲无码 国产无码| 无码精品人妻一区二区三区妖精| 久久久蜜桃一区二区三区| 国产亚卅97| 亚洲性刺激| 久久久久国产一区二| 啊啊啊啊,啊啊好多水 | 欧美色自拍| 人妻精品一区二区三区| 欧美偷拍区| 99色视频| 久操av在线| 污色区网站| 精品成人av一区二区三区在线| 午夜呻吟欧美| 亚洲成成熟女人综合一区二区| 日韩精品资源专区二区| 95人妻爽爽人人做人人澡| 日日AV加勒比| 日日爱99| 嗯嗯啊在线视频| 日本性一区| AⅤ片水多多| 五月激情综合网| 色妇91| 天堂v无码免费视频| 欧美性生活综合| 屁股久久久久久久久| 秋霞一集毛片观看| 99热超碰| 午夜成人爽爽爽爽A片李冰冰| 国产伦精品一区二区三区在线观 | 欧美日韩在线小说 | 欧美三级不卡| 麻豆91熟妇人妻中文字幕茄子| www.91理论| 裸模AV女优| 91精品国产91久久福利| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 久久狠狠色噜噜狠狠狠狠97| www99热| 天干天干天干天天做| 国产精品久久久久中文字幕| 加勒比伊人综合| 操逼逼一区视频| 色婷婷综合久久久久中文一区二区| 酒色综合网| 99在线免费观看| 亚洲骚逼少妇| 精品精品精品| 蜜臀99久久精品久久久懂爱| 水澄无码AV| 亚洲精品人体| 久操九九九九| 天天视频网站黄| 97青娱乐超碰久久| 国产自产自拍| 91精品婷婷国产综合久久| 亚洲一本色道中文无码aV天美| 色香伊人| 五月天婷婷基地| 美欧色综合| 天天综合网国产| 久久成年片色大黄全免费网站| 日本天堂网| 欧美一区二区福利在线| 97精品在线| 人人色人人操在线| 日语五十路和六十路亚洲国产精品 | 日韩丨制服丨中文|在线| 日韩AC| www.男人的天堂| 久久久9品一区二区三区| 99re免费视频精品全部| 日韩av情韩国爱禁区av一区二区| 日韩成人精品中文字幕| A 天堂| 蜜桃狠狠色伊人亚洲综合| 无码少妇精品一区二区60岁老人| 成年人黄色| 你草精品在线视频| 久久五月婷| 狠狠色伊人亚洲综合网站色| 亚洲激情深爱文学小说网站| 97九色人妻| 无码操逼网| 欧洲亚洲少妇| 亚州高清色综合| 亚洲精品色| 日本高清视频xxxx| 97chaopengongkai| 青草视频人妻在线观看| 性色一线| 欧美特大黄一级片片免费| 97超碰超碰| 破处bbq| 人妻在线中出视频| 翔田千里av一区二区三区| 亚洲男人综合| 蜜臀久久99精品久久久久久婷婷| 亚拍在线| 天天干天天日天天射黄色片| 婷婷色网| 一级性爱aaaa| 一级aaaaa欧美中文字幕录像片| 亚洲熟女av中文字幕| 欧美色自拍| 中美日韩毛片| 97舔舔| 色婷婷导航| 夜间福利片1000无码| 欧美高清18A片| 校园春色亚洲色图| 怡红院网站在线视频| 神马久久网| 青青草在线视频人人想人人上| 欧美综合区| 亚洲黄色a级片| 眼镜人妻101.com| 26UUU欧美日本| 亚洲成人ab| 91黄射| 日韩熟女视频二区| 蜜臀aV午夜一区二区三区| 欧美 综合| 夜夜狼人妻| 大香蕉手机在线视频| 日韩欧美视频青青| 九九成人视频| 天天日日夜夜| 国产伦精品一区二区三区视频女| 人妻啊啊人妻啊| 色色操| 色综合天天| 丁香久久| 精品国产乱码久久久久久影片| 操逼日韩无码 | 南澳成人一级片在线播放| 91男女| 大香蕉一人| 人妖欧美一区二区| 91久久婷婷| 日韩综合色图| 日韩成人无码| 久久国产性爱| 韩国三级理论在线| 五月丁香啪啪网| 天天干天天干天天干| 资源在线观一 二| 夜夜中出国产| 99re69| 国产91专区| 精品女同一区二区三区| 加勒比中文av| 国产精品一区二区亚洲人成毛片| 亚洲精品性爱片| 岛国艾薇凹凸视频天堂| 综合色久| 久久精品视频28| 久久一本大香蕉 | 国产97在线 | 亚洲| 亚洲一区二区在线观看91| 综合亚洲欧美精品日韩?v| 小日子操bb在线看| 99综合免费视频| 国产白嫩精品久久| 日韩97视频| 性猛交| 国产日逼视频| 色区久久| 新97国产超碰| 欧美一级二级三级| 95自拍视频在线观看| 国产麻豆一级精品视频| 日韩在线视频1234| 亚洲综合 欧美| 视频不卡中文字幕| 天堂8在线新版官网| 99青草| AV男人天堂网| www.色吧5.com| 亚洲一区日韩| 97视频7| 亚州男人天堂| 国产日韩在线播放| 99re只有精品| 狠狠色综合网| 日韩天天本| 啪啪综合网| 成人三级片无码| 自拍盗摄一区| 久9无限国产| 在线看片国产精品每日更新| 青苹果影院男人的天堂| 一区二区三区高清| 亚洲 欧美日韩 另类| 亚洲图片欧美制度| 亚洲天堂男人的天堂| 97摸视频| 少妇丝袜在线观看AV| 成人性爱免费播放| 天美国产三级传媒| 大香蕉懂9| 91成人在线免费视频| 欧美一二在线| 91人妻在线视频| 大香蕉婷婷| 干美女人妻| 三级网色| 色阁阁AV综合网| 国产v片在线免费观看| 日韩人妻精品久久久久| 91N综合网| 国产吞精a级片激情电影| 人妻熟女一区二区三区在线| 中文字幕av亚洲精品| 五月激情在线| 97亚洲中文| 操91| 男女国产精品| 天天日天天爽| 97Ai亚洲| 口爆综合网| 99re这里只有精品9| 色婷婷五月综合| 鸥美中出| 91在线美女| 五月婷亚洲精品天堂| 久久本道| 日本精品网站在线中文| 综合天天网| 亚洲囯产精品女人久久久| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 综合一区二区影视| www黄片免费看com| 疯操AV| 99热色精品| 精品人妻av区天天看片| 亚洲色堂免费视频| 久热精品在线国产| 四虎在线观看网站| 国产免费久久久久| 射综合网| 做爱福利视频一区二区| 偷拍自拍在线视频观看| 97在线视频观看免费| 五月天激情国产综合婷婷婷| 白丝一区| 亚洲综合贴图91 | 国产精品另类| 91亚洲青青草原精品1区| 成人精品在线免费视频| 国产乱码精品久久久久久| 51一区二区三区| 加勒比综合在线| 密臀在线免费观看| AA特级绝黄| 久草新在线| 五十路熟女工口| 日韩av不卡在线观看| 男人天堂新在线| 自拍欧美| 久久99久久99久久99人受| 可免费观看的av毛片中日美韩| 国产丰满少妇久久久精品影院| 精品一二三区久久AAA片| 天堂综合网| 超碰这里只有精品| 中文字幕 码 自拍 视频 区| 欧美一区二区一级岛国大片| 欧美女同在线| AV高清一区| 丰满人妻大屁一区二区| 国产高清成人免费视频| 啊啊啊好疼| 日日骚中文字幕| 亚洲视频小说| 校园春色制服丝袜中文字亚洲| 自怕偷自怕亚洲精品| 激情小说激情视频| 国产久久日| 天天插天天舔舔天天干| 强奸a片网| 一级@啪啪视频| 国内一区二区免费| 快播久久人人aV| 日日A∨| 色香阁在线| 亚洲欧洲综合视频在线| 26uuu性物| 亚洲中文字幕在线视频一区二区| 久久久久成人网| 91欧美综合在线| 天美一二三在线观看Av| 久久,精品一二三| 国产男女无套视频免费观看| 欧美亚洲第一页| 亚洲欧美另类激情小说 | 亚洲天堂,男人| 久久免费精品视频免一| 精品少妇人妻av久久免费| 天堂v无码免费视频| 97久久久久| 97超碰影音| 午夜精品久久999热蜜桃介男人用| 干B视频伊人网| 日韩AV电影网站| 在线v中文字幕一区二区三区| 无码精品久久久天天影视| 国产在线能看的你懂的| 少妇被c 黄 免费观看| 97精品在线视频| 天堂性色| 人妻丝袜一区二区三区在线| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 一区二区三区黄片免费观看| 亚洲精品国产日韩无码AV永久免| 色波多| 国产强奸AV在线| www久久国产精品| jazzjazz国产精品麻豆| 超碰在线人人射| 丝袜人妻av一区二区| 国产精品国产亚洲区艳妇糸列| 中文乱码字字幕在线第5页| 狠狠操狠狠操操| 国产美女高潮| 亚洲国产精品成人综合| 三级日本一区二区三区| 伊人丁香五月婷婷| 亚洲91在线播放影院| 在线一道啪| 国产精品久久久久久片| 亚洲精品人妻吞精av| 亚洲综合九九| 婷婷日韩一区二区三区中文字幕在线| 婷婷情色综合网| 91嫩草欧美| 亚洲国产丝袜在线观看| 国产AV无码AV| 久操不卡视频| 天天舔天天 | 日韩丨制服丨中文|在线| 久久99干一本高清| 丝袜美腿亚洲| 九月丁香婷婷色| 九久9精品| 四虎影库国产精品免费| 97超碰热线| 日韩色图 一区二区| 超碰久超碰久| 人妻偷拍一区二区三区| 精品性爱一二三区| 麻豆 欧美 日韩| 欧美日韩亚洲五月天婷婷| 丝袜视频网国产90| 一区在线精品中文字幕| 大香网站| 99久久com免费视频′| 精品一区二区三区四区外站| 欧美,日韩,中文,另类| 国产操逼网站亚洲一级黄色| 青娱乐亚洲自拍| 91国产精品在线看| 欧美 日韩 婷婷 五月| 亚洲男人在线观看天堂| 人人操人人操人人人操| 狠狠干狠狠色| 久久九精品| 午夜αv| 国产一区二区欧美日本| 精品射1999| 91久久国产精品| 大香焦A片| 九月丁香婷婷| 麻豆一区二区三区在线看| 国产精品4p在线观看| 亚洲av乱伦色图网站| 一区二区三区 丝袜高跟| 久久久久久999| av无码精品久久久久| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 在线人人人人人人精品超| 日韩在线女优天天干| 欧亚 另类 久| 九九久久一区二区伦理| 国产无遮挡| 欧美牲| 99视频精品| 色综合99999| 久久精品 六十路 熟女 欧美| 六月婷婷色综合| 啊啊啊在线看| 国产精品无套内谢| 免费网色网站| 中文AV制服乱伦| www.97在线| 操操啪| 任我爽在线视频免费观看| 国产精品99精品视频网站| 亚洲人精品久久久喷水| 91熟女在线| 国产亚洲99久久精品| 亚洲美腿丝袜香蕉影视欧美成人| 最好看的中文字幕在线2018| 久久精品老司| Sekablack无码一区| 久久久99久9| 日本影视久久免费| 国产欧美美女免费观看视频| 亚洲 欧美 色图| 亚洲宅男天堂| 嗯嗯啊好爽| 欧美另类色图片| 亚洲男人天堂av| 国产av白丝| 日本操逼视频免费| 九一综合精品视品av| 国产精品精品系列在线观看| 91女在线观看| 黑人精品XXX一区一二区| 婷婷五月天久久精品视频一区二区三区| 久久激情婷婷| 香一区二区三区| 国产美女口爆吞精视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲另类欧美精品| 欧美猛交黑寡妇中文字幕| 强奸乱伦亚洲第一页| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 欧美激情 亚洲色图| 99精品免费| 欧美黄页| av东京热男人的天堂| 欧美另类综合久久| 亚洲天天自拍| 精品久一区免费| 欧美探花网| 九99久久| 成人在线视频二区| 樱花蜜乳av| 久久天堂网| 欧美.亚洲.另类.丝袜.制服.诱惑| 亚洲欧美日韩偷拍色图| 97精品国产手机| 美日韩成人| 精品人妻一区二区三区四区石在线| 97国产色图 | 日韩久射综合| 天天弄欧美| 国产亚州高清国产拍精| 好吊色综合| 96国产污污污丝袜| 色色丁香| 2020中文在线一区二区三区| 久久有码视频| 国产亚卅97| 一区二区娱乐网站| 波多野结衣AV无码一区| 九九九国产精品| 91夜夜蜜桃臀1区2区3区| 亚洲精品久久一区二区三区蜜桃臀| 伊人久久大香大香线蕉中文 | 色色五月婷婷| 中文字幕五月婷婷免费| 亚洲少妇视频| 色色色色色色色色综合| 亚州情色j区| 日本成人电影资源网| 九九碰九九爱97超| 人妻精品一区一区三区蜜桃91| 91在线视频免费中出| 91GD.COM| 无码操逼网| 日韩免费a级毛片无码a∨| 青青草导航在线视频| 亚洲欧美国产中文字幕| 中文字幕老熟妇黄色视频| 国产午夜激片Av毛片不卡| 亚洲九九九| 夜夜高潮夜夜爽夜夜爱爱一区| 1二区9| 婷婷国产精品九区| 婷婷综合激情| 黄色免费网页无码| 黄色大片免费在线| 亚洲美女av无码| 亚洲男人天堂手机版| 激情四射婷婷六月天| 人妻 欧美 中文| 中文一区二区婷婷视频| 五月天伊人| 欧美日韩操逼嗦吊| 亚洲最新中文字幕免费| 少妇高潮流水av免费| 一区二区乱码福利| 久久人| 蜜臀久久99精品久久久久久酒店| 亚洲男人天堂2| 亚洲精品白丝| 成人十八禁日韩欧美一二三| 亚洲免费日韩在线一区二区| 日韩99999色| 欧美黑人XXXⅩ高潮交| 天天爽天天干| 欧美激情综合色综合啪啪五月| 日韩乱伦视频| 综合欧美日本三级| 3p国产欧美99热| 精品亚洲国产成人AV制服丝袜 | 亚洲揄拍网| 一区二区不卡| 色超碰综合| WWW.加勒比人妻一区不卡.com| 欧美五区| 欧美 熟女 日韩| 日韩在线97| 狠狠躁日日躁夜夜躁A| 欧美亚洲宗合色性图| 国产女人9999| 久久久九九| 97精品一区二区视频在线观看| 91精品操美女| 日韩欧美女求操每天更新| 日韩一级二级三级| 天天综合97| 99久久国产精品免费高潮| 国产亚洲福利第一页丝袜| 成全动漫视频观看免费下载| AA级电影三区| 思思热在线cao| 久久6热视频免费观看| 国产精品秘 福利姬在线观看| 性爱综合网| 亚洲 中文 女同| 亚洲天堂情色| 骚熟女AV网| 91精品老女人| 成人小说视频在线精品欧美| 人人摸人人添人人操| 日本熟妇色熟妇在线视频播放| 天堂网 主播 亚洲| 久久久免费高清中文视频| 密臀在线一区尤物| 午夜男女爽爽爽影院视频| 亚洲精品xxx| 狠狠爱综合网| 东京成人一区| 色天天野狼综合社区| 黑人综合网| 福利操逼| 另类视频在线| 9 7超碰在线免费观看| 天天激色| 久9无限国产| 亚洲国产尤物yw在线观看| 久久激情综合| 久久有碼| 精品人妻一区二区三区视频在线| 2023天天操夜夜操| 中文字幕成人理论在线| 98色网| 91国精产品| 久久久久久9| 夜嗨影院| 欧美成不卡网| 亚洲中文sv| 日韩成人在线性爱视频| 婷婷综合五月| 久久99精品国产| 欧亚日韩中文在线| 一级特级aaaa毛片免费观看| 欧美 亚洲 制服 精品| 日日干夜夜欢| A级国产欧美激情在线| 欧美 亚洲 偷拍自拍| 97中文字幕色| 东京热综合久久一区二区| 亚洲人妻在线一区| 青青草在线成人视频| 国产天天噜一噜久久久| 久久久久久久久久久免费精品| 大香蕉伊人久久| 日日干夜夜欢| 亚洲无码国产精品久久| 日本有码影片下载| 黑人精品欧美一区二区蜜桃| 丁香六月激情| 三级片大波波| 97超碰超碰| 亚洲色五月| 久久久久久免费电影| 免费?级毛片无码?∨蜜芽试看| 夜夜爽爽爽| 蜜臀Av一区二区三区| 国产精品蜜乳AV| 好舒服视频| WWW操逼| 动漫片子网站3黄| 久久久久久久九九九九| 九九色图| 欧洲色综合| 久久肏大逼| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 2017天天操| 五月婷视频| 人妻91少妇| 25国产精品免费观看| 婷婷激情丁香| 操99| 五月天婷婷社区| 另类天堂| 密乳无码| 日本久久久精品电影| 国产高清视频无码在线| 天天综合网国产| 国产一区在线播放| 蜜臀av在线播放一区二区三区| 婷婷10月天青娱乐| 色婷婷电影网| 97K超碰在线| 激情五月天综合网| 老司机香蕉| 五月天婷婷小说| 天堂综合网| 婷婷亚洲中文字幕在线| 婷婷丁香激情| 欧美综合第一| 黄色视频60分钟| 欧美色日| 九九黄色视频在线观看| 国产97色在线 | 亚洲| 超碰在线成人| 久久六六| 超碰中文字幕人妻草一区| 中文字幕亚洲永久精品| 亚洲人妻久久久| 加勒比大香蕉视频在线| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 又粗又长又大国产不卡| 亚洲欧美爆| 亚洲第一黄色av网站| 好色美女九七第一页| 天天干少妇| 婷婷在线视频在线观看| 97精选久久| 婷婷五月天基地| 天天做天天爱夜夜爽毛片试看| 九九九九九用不成了| 熟妇操花| 亚洲人天堂| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚州五月| 国产怡红院| 天天天天天天天天天天干美女| 欧美成人精品欧美一级乱黄一区二… | 欧美在线综合| 国产av尤物| 国产精品久久久久久照片| 国产熟码AV| 日本少妇va7777| 在线观看黄色电话| 久久亚洲AV无码白度| 日日骚精品视频| 嗯嗯啊操我| 91社区拍啪人妻| 97精品网| 91在线一起| 丝袜综合| 99热66| 亚洲精品无码成人久久久99| 91色插| 亚洲91综合| 国产精品2020| 免费看日本操逼视频| 26uuu国产亚洲综合| 欧美亚洲手机在线| 欧美色图91p| 欧美最婬乱婬爆婬性视频| 亚洲第一在线视频| 在线播放免费av福利片| 特色a在线上| 亚洲色天堂九9| 亚州春色| 麻豆久久久久久久久丝袜| 国产亚洲综合欧美一区| 日韩亚洲精品一区二区| 热99这里有精品综合久久 | 青草香蕉网| 男人亚洲91首页在线| 国产一区二区视频在线播放| www亚洲免费| a级免费在线观看| sewuyueav| 怡红院亚洲怡春院av| 性性欧美| 天天日天天射天天干| 国产少妇与亚洲av| 九九碰九九爱97| 99精品成人免费看| 做爱A级亚欧| 中文人妻av高清一区| 亚洲中字幕日本一区二区三区 | 久草久热| 一区二区三区在线资源| 婷婷久久五月| 亚洲熟女中文字幕在线| 久久久久久久亚洲Av无码| 日韩中文字幕精品一区在线| 中日韩一区二区三区欧美| 青青草国产欧美非洲黑人| 中文字幕三四五区| 水滴偷拍| 大香蕉淫人| 大香蕉人妻久久| 女生看匆91网站| 东京太热男人的天堂久久久| 久热精品在线| 91n处女在线观看| 密臀在线视频| 伊色久人大在线| 青青久久艹| 韩国一级做a久久久久| 密臀国产在线| 国产成人免费观看在线视频| 亚洲图片日本AⅤ欧美在线| 青娱乐福利99| 黄色片一区二区三区四区五区| 欧美A片中文字幕| 啪啪啪东京| 约操熟妇| 伊人久操| 欧美一级A片在线看视频性色| 天天躁日日躁AAAXX| 亚洲中文字幕网| 欧美亚州手机在线| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 日本精品网站在线中文| 欧美精品一区二区少妇免费A片| 强奸乱伦AV网站| A片 AV一级在线播放观看免费|