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

ARTICLE DETAIL

資訊詳情

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

SpringBoot+Vue足球青訓(xùn)管理系統(tǒng)實(shí)戰(zhàn):排課與權(quán)限設(shè)計(jì)

SpringBoot+Vue足球青訓(xùn)管理系統(tǒng)實(shí)戰(zhàn):排課與權(quán)限設(shè)計(jì) 1. 足球青訓(xùn)管理系統(tǒng)的真實(shí)痛點(diǎn)為什么常規(guī)CRUD后臺(tái)根本不夠用很多開(kāi)發(fā)者在接觸足球青訓(xùn)俱樂(lè)部管理后臺(tái)這類(lèi)項(xiàng)目時(shí)下意識(shí)地認(rèn)為它不過(guò)是一套常規(guī)的CRUD系統(tǒng)——無(wú)非是把球員信息、教練信息、課程信息增刪改查一遍。但真正深入到業(yè)務(wù)場(chǎng)景里你會(huì)發(fā)現(xiàn)事情遠(yuǎn)沒(méi)有那么簡(jiǎn)單。青訓(xùn)俱樂(lè)部管理后臺(tái)的核心難點(diǎn)在于業(yè)務(wù)對(duì)象的關(guān)聯(lián)性和時(shí)間維度的復(fù)雜性它和普通的電商后臺(tái)、內(nèi)容管理后臺(tái)有著本質(zhì)的區(qū)別。先想一個(gè)基礎(chǔ)問(wèn)題一名小學(xué)員在俱樂(lè)部里的一天涉及多少個(gè)業(yè)務(wù)實(shí)體學(xué)員本人、負(fù)責(zé)的教練員、所在訓(xùn)練梯隊(duì)、當(dāng)天的訓(xùn)練課次、訓(xùn)練出勤記錄、體能測(cè)評(píng)數(shù)據(jù)、技術(shù)評(píng)分、家長(zhǎng)信息、繳費(fèi)記錄……這些實(shí)體之間是強(qiáng)關(guān)聯(lián)的某一個(gè)環(huán)節(jié)的數(shù)據(jù)變動(dòng)往往會(huì)牽動(dòng)其他模塊。比如學(xué)員從U8梯隊(duì)升入U(xiǎn)10梯隊(duì)他的訓(xùn)練計(jì)劃、教練分配、歷史測(cè)評(píng)數(shù)據(jù)的歸屬關(guān)系都要跟著調(diào)整。如果后臺(tái)系統(tǒng)在設(shè)計(jì)時(shí)沒(méi)有把這些關(guān)聯(lián)關(guān)系理順后期維護(hù)起來(lái)就是一場(chǎng)災(zāi)難。另一個(gè)深層痛點(diǎn)是訓(xùn)練計(jì)劃的周期性編排。青訓(xùn)不是一次性活動(dòng)而是按學(xué)期、按周、按課次持續(xù)進(jìn)行的長(zhǎng)周期培養(yǎng)過(guò)程。教練需要提前排好一周甚至一個(gè)月的訓(xùn)練課表課表要支持按梯隊(duì)篩選、按教練匯總、按場(chǎng)地沖突檢測(cè)學(xué)員家長(zhǎng)需要看到請(qǐng)假記錄和出勤反饋財(cái)務(wù)需要核對(duì)每個(gè)學(xué)員的出勤課時(shí)與繳費(fèi)標(biāo)準(zhǔn)的匹配情況。這些需求單純用幾張獨(dú)立的CRUD頁(yè)面根本無(wú)法覆蓋必須有一套圍繞訓(xùn)練周期展開(kāi)的業(yè)務(wù)邏輯設(shè)計(jì)。還有一點(diǎn)是多角色權(quán)限的精細(xì)控制。這個(gè)系統(tǒng)的用戶包括俱樂(lè)部總管理員、教務(wù)主管、教練員、家長(zhǎng)甚至有可能是學(xué)員本人查看個(gè)人檔案。不同角色的數(shù)據(jù)可見(jiàn)范圍完全不同教練只能看到自己帶的梯隊(duì)和學(xué)員教務(wù)能看到全部課表和出勤家長(zhǎng)只能看到自己孩子的訓(xùn)練報(bào)告和繳費(fèi)賬單。如果用一套扁平化的用戶表不做角色和權(quán)限的隔離那企業(yè)級(jí)這三個(gè)字就是空談。所以這篇博客我不想只堆代碼我想從業(yè)務(wù)建模、權(quán)限設(shè)計(jì)、數(shù)據(jù)表結(jié)構(gòu)、排課邏輯、實(shí)際部署踩坑這幾個(gè)維度把這個(gè)系統(tǒng)完整拆開(kāi)講清楚。項(xiàng)目本身是基于SpringBoot Vue MyBatis MySQL這套主流技術(shù)棧實(shí)現(xiàn)的這也是國(guó)內(nèi)企業(yè)級(jí)管理系統(tǒng)中最經(jīng)典、最不容易出錯(cuò)、招人需求最大的組合之一。無(wú)論你是計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生正在做畢業(yè)設(shè)計(jì)還是剛?cè)胄械腏ava開(kāi)發(fā)想找一個(gè)完整的全棧項(xiàng)目練手又或者是小型體育培訓(xùn)機(jī)構(gòu)的技術(shù)負(fù)責(zé)人想?yún)⒖纪?lèi)系統(tǒng)的設(shè)計(jì)思路這篇文章都能給你提供一條清晰完整的路線。先說(shuō)結(jié)論這套系統(tǒng)的價(jià)值不只是能跑通而是它的業(yè)務(wù)邊界設(shè)計(jì)、權(quán)限模型、數(shù)據(jù)字典和排課算法都是經(jīng)過(guò)實(shí)際項(xiàng)目打磨出來(lái)的能夠直接復(fù)用到其他培訓(xùn)類(lèi)管理系統(tǒng)比如少兒編程培訓(xùn)、舞蹈培訓(xùn)、籃球訓(xùn)練營(yíng)中去。2. 技術(shù)選型時(shí)的權(quán)衡為什么是SpringBoot Vue MyBatis這套組合2.1 從架構(gòu)演進(jìn)角度看技術(shù)選型的合理性在動(dòng)筆寫(xiě)代碼之前技術(shù)選型是最關(guān)鍵、也最容易讓新手糾結(jié)的一步?,F(xiàn)在Java后端框架選擇很多SpringBoot、SpringCloud、Quarkus、Micronaut前端更是百花齊放Vue、React、Angular、Svelte。ORM框架也一直在演進(jìn)MyBatis-Plus、JPA、Hibernate各有擁躉。面對(duì)這么多選擇為什么這套青訓(xùn)管理后臺(tái)最終落在SpringBoot Vue MyBatis MySQL上先說(shuō)后端框架。青訓(xùn)俱樂(lè)部管理后臺(tái)屬于典型的中小型企業(yè)級(jí)管理系統(tǒng)它的訪問(wèn)規(guī)模通常在幾十到幾百個(gè)并發(fā)之間業(yè)務(wù)復(fù)雜度中等偏上但遠(yuǎn)沒(méi)有達(dá)到需要微服務(wù)拆分的程度。SpringBoot在這個(gè)體量下是最穩(wěn)的選擇——它內(nèi)置Tomcat、自動(dòng)裝配體系成熟、生態(tài)資料海量遇到任何問(wèn)題幾乎都能在社區(qū)找到現(xiàn)成答案。SpringCloud當(dāng)然也能做但對(duì)這類(lèi)項(xiàng)目來(lái)說(shuō)屬于過(guò)度設(shè)計(jì)引入了服務(wù)注冊(cè)、配置中心、網(wǎng)關(guān)等一堆概念反而增加了部署和運(yùn)維的復(fù)雜度。然后是前端框架。后臺(tái)管理系統(tǒng)對(duì)前端的要求是表單交互密集、數(shù)據(jù)表格展示頻繁、權(quán)限控制的界面級(jí)反饋較多。Vue在這類(lèi)場(chǎng)景下的開(kāi)發(fā)效率非常高尤其是Vue的組合式APIComposition API配合Element-Plus這類(lèi)組件庫(kù)寫(xiě)后臺(tái)管理頁(yè)面基本像搭積木一樣。Vue的學(xué)習(xí)曲線比React平緩模板語(yǔ)法直觀對(duì)團(tuán)隊(duì)成員的Java背景比較友好——畢竟做這種項(xiàng)目的團(tuán)隊(duì)主力往往是后端開(kāi)發(fā)前端能力相對(duì)薄弱Vue的上手成本是最低的。ORM這塊需要多說(shuō)幾句。MyBatis和JPA/Hibernate的爭(zhēng)論持續(xù)了很多年我的態(tài)度很明確管理后臺(tái)系統(tǒng)用MyBatis遠(yuǎn)遠(yuǎn)比JPA穩(wěn)妥。原因有三一是后臺(tái)系統(tǒng)的SQL復(fù)雜度高多表關(guān)聯(lián)查詢、動(dòng)態(tài)條件拼接是常態(tài)MyBatis的XML映射文件給了開(kāi)發(fā)者完全可控的SQL編寫(xiě)能力二是JPA的N1查詢問(wèn)題在復(fù)雜關(guān)聯(lián)場(chǎng)景下很容易踩坑需要一定的經(jīng)驗(yàn)才能駕馭好而MyBatis默認(rèn)就是手寫(xiě)SQL性能問(wèn)題提前暴露三是國(guó)內(nèi)的技術(shù)社區(qū)和企業(yè)里MyBatis的使用率極高招人、交接、維護(hù)都比JPA容易。再加一層MyBatis-Plus單表操作連SQL都不用寫(xiě)了開(kāi)發(fā)效率能提升不少。2.2 數(shù)據(jù)庫(kù)選型和表設(shè)計(jì)的基本原則MySQL在這個(gè)項(xiàng)目里是順理成章的選擇。數(shù)據(jù)量級(jí)在十萬(wàn)級(jí)到百萬(wàn)級(jí)之間單庫(kù)單表完全夠用配合InnoDB引擎、UTF-8mb4字符集、合理的索引設(shè)計(jì)性能毫無(wú)壓力。相比PostgreSQLMySQL在國(guó)內(nèi)的使用基數(shù)更大、云數(shù)據(jù)庫(kù)支持度更好、資料更豐富對(duì)這種體量的業(yè)務(wù)來(lái)說(shuō)沒(méi)什么理由不用它。表設(shè)計(jì)上我要特別強(qiáng)調(diào)一個(gè)容易被忽視的點(diǎn)邏輯刪除字段和審計(jì)字段。很多人設(shè)計(jì)表的時(shí)候只關(guān)心業(yè)務(wù)字段忽略了delete_flag邏輯刪除標(biāo)記、create_time、update_time、create_by、update_by這些基礎(chǔ)字段。在企業(yè)級(jí)系統(tǒng)中這些字段是必不可少的。邏輯刪除的意義在于防止誤刪導(dǎo)致的數(shù)據(jù)不可恢復(fù)審計(jì)字段的意義在于出現(xiàn)數(shù)據(jù)問(wèn)題時(shí)能追蹤責(zé)任鏈。這個(gè)青訓(xùn)系統(tǒng)里光是訓(xùn)練出勤記錄和學(xué)員繳費(fèi)記錄這兩張表就依賴(lài)審計(jì)字段來(lái)解決很多糾紛——家長(zhǎng)說(shuō)孩子上過(guò)課但系統(tǒng)沒(méi)記錄一查create_by和create_time就能定位到是哪位教練在哪個(gè)時(shí)間點(diǎn)錄入的。關(guān)于是否使用外鍵我的建議是物理外鍵慎用邏輯外鍵為主。MySQL在高并發(fā)寫(xiě)入場(chǎng)景下物理外鍵會(huì)帶來(lái)額外的鎖開(kāi)銷(xiāo)而且級(jí)聯(lián)刪除操作極易引發(fā)性能瓶頸和誤刪風(fēng)險(xiǎn)。我們?cè)O(shè)計(jì)這套系統(tǒng)時(shí)全部不用物理外鍵完全依靠應(yīng)用層邏輯來(lái)維護(hù)關(guān)聯(lián)關(guān)系配合索引來(lái)保證查詢性能。這樣做的好處是數(shù)據(jù)表之間的耦合度降低后續(xù)做分庫(kù)分表或者數(shù)據(jù)遷移時(shí)阻力更小壞處是需要開(kāi)發(fā)者在代碼里自己注意關(guān)聯(lián)數(shù)據(jù)的一致性。3. 核心業(yè)務(wù)模塊拆解一張圖看清青訓(xùn)后臺(tái)的真實(shí)功能矩陣3.1 組織架構(gòu)與人員檔案模塊這個(gè)模塊是整個(gè)系統(tǒng)的基礎(chǔ)沒(méi)有它其他模塊都是空中樓閣。組織架構(gòu)上系統(tǒng)分為俱樂(lè)部—訓(xùn)練基地—梯隊(duì)三層結(jié)構(gòu)。一個(gè)俱樂(lè)部可能有多個(gè)訓(xùn)練基地比如城東基地、城西基地每個(gè)基地下根據(jù)年齡段和水平分為若干個(gè)梯隊(duì)比如U8基礎(chǔ)組、U10提高組、U10精英組。每個(gè)梯隊(duì)有固定的主教練可能有助理教練和體能教練。人員的角色分為系統(tǒng)管理員、教務(wù)主管、主教練、助理教練、家長(zhǎng)、學(xué)員。這里有一個(gè)業(yè)務(wù)建模上的細(xì)節(jié)學(xué)員個(gè)人檔案和學(xué)員賬戶是分開(kāi)的。個(gè)人檔案記錄的是學(xué)員的身體數(shù)據(jù)身高、體重、BMI、骨齡檢測(cè)記錄、足球基礎(chǔ)慣用腳、位置偏好、訓(xùn)練年限、緊急聯(lián)系人等學(xué)員賬戶則負(fù)責(zé)登錄認(rèn)證、查看自己的訓(xùn)練報(bào)告和測(cè)評(píng)成績(jī)。為什么要分開(kāi)因?yàn)闄n案數(shù)據(jù)是受隱私保護(hù)且更新頻率低的而賬戶信息是會(huì)變動(dòng)的手機(jī)號(hào)、密碼、登錄狀態(tài)。分成兩張表之后各自的讀寫(xiě)頻率和緩存策略可以差異化設(shè)計(jì)。教練員的檔案也很有講究除了基本信息和聯(lián)系方式還需要記錄執(zhí)教資質(zhì)如教練等級(jí)證書(shū)編號(hào)、有效期、擅長(zhǎng)方向守門(mén)員訓(xùn)練、腳下技術(shù)、戰(zhàn)術(shù)意識(shí)、可帶教的時(shí)間段。這些字段在后面編排訓(xùn)練課表時(shí)是核心的匹配條件——教務(wù)排課時(shí)系統(tǒng)要能篩選出某個(gè)時(shí)間段有空、且執(zhí)教資質(zhì)匹配的教練。3.2 訓(xùn)練課表與排課引擎比想象中復(fù)雜的核心模塊如果讓我選這個(gè)系統(tǒng)里最有技術(shù)含量的模塊我一定選訓(xùn)練排課模塊。表面上它只是新增一個(gè)課程記錄但背后涉及三個(gè)維度的沖突檢測(cè)教練的時(shí)間沖突、場(chǎng)地的使用沖突、學(xué)員梯隊(duì)的并發(fā)沖突。先說(shuō)教練沖突檢測(cè)。排課時(shí)需要判斷教練在目標(biāo)時(shí)間段是否已經(jīng)有其他課程。這個(gè)邏輯如果用代碼硬寫(xiě)很容易犯下只檢測(cè)了精確重疊而沒(méi)有檢測(cè)包含關(guān)系的低級(jí)錯(cuò)誤。比如教練已經(jīng)被安排在14:00-16:00帶課新排的課程是13:30-15:30這是重疊的但如果新課程是16:30-18:30則完全沒(méi)問(wèn)題。正確的沖突檢測(cè)算法應(yīng)當(dāng)是開(kāi)始時(shí)間小于現(xiàn)有課程的結(jié)束時(shí)間且結(jié)束時(shí)間大于現(xiàn)有課程的開(kāi)始時(shí)間兩者同時(shí)成立即為沖突。這套邏輯同樣適用于場(chǎng)地沖突檢測(cè)。我在這里踩過(guò)一個(gè)很實(shí)際的坑最初實(shí)現(xiàn)排課沖突檢測(cè)時(shí)只考慮了教練開(kāi)始時(shí)間這一個(gè)唯一索引結(jié)果同一塊場(chǎng)地被兩個(gè)梯隊(duì)同時(shí)預(yù)訂學(xué)員到了現(xiàn)場(chǎng)才發(fā)現(xiàn)撞場(chǎng)。后來(lái)修正方案是建一個(gè)聯(lián)合檢測(cè)教練沖突查教練維度的交集場(chǎng)地沖突查場(chǎng)地維度的交集一次性把兩個(gè)條件同時(shí)校驗(yàn)。這還沒(méi)完還要處理課程狀態(tài)流轉(zhuǎn)已排課Published、已取消Cancelled、已完成Completed、已結(jié)課Closed。課表模塊必須支持課程取消后的時(shí)間釋放不然取消的課程會(huì)一直占著教練和場(chǎng)地的資源。課程實(shí)例的生成邏輯也值得一提。排課是排課程模板但實(shí)際的數(shù)據(jù)記錄是課程實(shí)例。也就是說(shuō)每周一14:00-15:30的U10精英組訓(xùn)練是一個(gè)課程模板教練填好訓(xùn)練主題、訓(xùn)練大綱后發(fā)布每次實(shí)際執(zhí)行一次的記錄才是課程實(shí)例實(shí)例關(guān)聯(lián)當(dāng)天實(shí)際出勤的學(xué)員、實(shí)際的訓(xùn)練內(nèi)容和教練備注。這種模板-實(shí)例的兩層結(jié)構(gòu)是管理類(lèi)系統(tǒng)很經(jīng)典的建模方式它讓你能夠統(tǒng)一查看本周U10精英組應(yīng)該上幾節(jié)課、實(shí)際上了幾節(jié)、哪節(jié)被取消了而不是面對(duì)一堆離散的課程數(shù)據(jù)無(wú)從聚合。3.3 學(xué)員評(píng)估與發(fā)展追蹤從出勤到多維成長(zhǎng)報(bào)告青訓(xùn)系統(tǒng)的另一個(gè)特色模塊是學(xué)員成長(zhǎng)評(píng)估。普通培訓(xùn)機(jī)構(gòu)的系統(tǒng)里學(xué)員可能只需要考勤和繳費(fèi)記錄就完事了但足球青訓(xùn)非??粗丶夹g(shù)能力的階段性評(píng)估。教練員需要按照統(tǒng)一的評(píng)分維度定期對(duì)學(xué)員的身體素質(zhì)速度、耐力、靈敏、技術(shù)水平傳球、控球、射門(mén)、頭球、戰(zhàn)術(shù)意識(shí)跑位、配合、決策進(jìn)行打分。這個(gè)模塊的表結(jié)構(gòu)核心是學(xué)員評(píng)估表assessment_record包含學(xué)員ID、評(píng)估輪次、各維度得分、綜合評(píng)級(jí)、教練評(píng)語(yǔ)。評(píng)估輪次按學(xué)期階段劃分——學(xué)期初、學(xué)期中、學(xué)期末各一次形成一條學(xué)員的成長(zhǎng)曲線。這個(gè)成長(zhǎng)曲線不僅僅是給家長(zhǎng)看報(bào)告用的它直接決定了學(xué)員能否升級(jí)到精英梯隊(duì)。教練手上拿著數(shù)據(jù)說(shuō)話學(xué)員的晉升和降級(jí)都有量化的依據(jù)而不是看印象分。出勤模塊要和評(píng)估模塊聯(lián)動(dòng)。每個(gè)課程實(shí)例開(kāi)放簽到入口后教練可以逐個(gè)勾選學(xué)員為出勤或請(qǐng)假或缺席未到。系統(tǒng)要能自動(dòng)向家長(zhǎng)端推送出勤狀態(tài)變化這里建議通過(guò)微信模板消息或短信網(wǎng)關(guān)不建議在后臺(tái)系統(tǒng)里做復(fù)雜的實(shí)時(shí)聊天。出勤率的統(tǒng)計(jì)會(huì)直接影響學(xué)期末的評(píng)估資格——很多俱樂(lè)部規(guī)定出勤率低于80%的學(xué)員不能參加學(xué)期末的晉升評(píng)估這一規(guī)則要直接配置進(jìn)系統(tǒng)由系統(tǒng)自動(dòng)截?cái)嗖唤o教練人為操作的空間。3.4 財(cái)務(wù)繳費(fèi)與訂單流水最容易忽略但絕不能出錯(cuò)的模塊最后一個(gè)核心業(yè)務(wù)模塊是財(cái)務(wù)繳費(fèi)。青訓(xùn)管理系統(tǒng)必須包含學(xué)費(fèi)訂單的創(chuàng)建、支付狀態(tài)跟蹤、退款流程、發(fā)票申請(qǐng)。雖然這個(gè)模塊看起來(lái)和培訓(xùn)業(yè)務(wù)本身關(guān)聯(lián)度不高但它是俱樂(lè)部運(yùn)營(yíng)的命脈。我見(jiàn)過(guò)不少青訓(xùn)后臺(tái)系統(tǒng)教練排課做得很好學(xué)員檔案也很完善但財(cái)務(wù)模塊只有一個(gè)簡(jiǎn)單的繳費(fèi)記錄表訂單、退款、賬單、發(fā)票這些字段全部缺位。真到了月底對(duì)賬的時(shí)候財(cái)務(wù)人員只能導(dǎo)出一份Excel自己加工。這套系統(tǒng)的財(cái)務(wù)模塊遵循的是標(biāo)準(zhǔn)訂單流程家長(zhǎng)在小程序端發(fā)起報(bào)名或續(xù)費(fèi)生成學(xué)費(fèi)訂單含訂單號(hào)、學(xué)員、課程包、繳費(fèi)金額、優(yōu)惠政策、支付方式訂單支付成功后自動(dòng)通知教務(wù)主管安排分班如果學(xué)員中途退訓(xùn)走退款流程退款單關(guān)聯(lián)原訂單系統(tǒng)記錄退款原因、操作人、到賬狀態(tài)。這里面有一個(gè)非常關(guān)鍵的字段設(shè)計(jì)——課程包的剩余課時(shí)數(shù)。課消按每次實(shí)際出勤扣除而不是按日歷月扣除。也就是說(shuō)買(mǎi)了30節(jié)課的學(xué)員每參加一次訓(xùn)練課課時(shí)余量減一請(qǐng)假未到不扣課時(shí)除非俱樂(lè)部有明確的請(qǐng)假扣課時(shí)規(guī)則。這套邏輯讓財(cái)務(wù)和教務(wù)之間永遠(yuǎn)不會(huì)因?yàn)檎l(shuí)該扣、誰(shuí)不該扣而起爭(zhēng)執(zhí)。數(shù)據(jù)庫(kù)層面財(cái)務(wù)模塊涉及訂單表和流水表的雙寫(xiě)一致性。我的方案是訂單表保存訂單的當(dāng)前狀態(tài)流水表保存每一次狀態(tài)變更的明細(xì)記錄。支付成功、發(fā)起退款、退款到賬、手動(dòng)調(diào)整每一個(gè)動(dòng)作都寫(xiě)入流水表。這樣任何一筆訂單的前因后果都能完整追溯也方便和第三方支付平臺(tái)的對(duì)賬單進(jìn)行逐筆匹配。4. 數(shù)據(jù)庫(kù)設(shè)計(jì)的實(shí)戰(zhàn)細(xì)節(jié)從物理模型到索引優(yōu)化4.1 表模型全景與核心表結(jié)構(gòu)參考一套完整的青訓(xùn)后臺(tái)系統(tǒng)數(shù)據(jù)庫(kù)一般包含近二十張業(yè)務(wù)表。這里不鋪開(kāi)畫(huà)完整的物理模型我把幾張核心表的結(jié)構(gòu)直接列出來(lái)你可以對(duì)照著自己的項(xiàng)目去調(diào)整學(xué)員檔案表student_profile:id: bigint主鍵student_no: 學(xué)員編號(hào)俱樂(lè)部?jī)?nèi)部編號(hào)用于檔案歸類(lèi)和打印證書(shū)name: 姓名gender: 性別 0-男 1-女 2-未知birth_date: 出生日期height_cm: 身高厘米weight_kg: 體重公斤dominant_foot: 慣用腳 0-左腳 1-右腳 2-雙腳position_preference: 位置偏好guardian_mobile: 監(jiān)護(hù)人手機(jī)號(hào)emergency_contact: 緊急聯(lián)系人emergency_mobile: 緊急聯(lián)系電話physical_exam_date: 最近一次身體測(cè)試日期medical_history: 既往病史過(guò)敏、哮喘、心臟問(wèn)題等status: 狀態(tài) 0-在讀 1-休學(xué) 2-離隊(duì)create_time/update_time: 審計(jì)字段訓(xùn)練課程表training_course:id: bigint主鍵course_no: 課程編號(hào)grade_group_id: 梯隊(duì)IDcoach_id: 主教練IDassistant_coach_id: 助理教練ID可空f(shuō)ield_id: 場(chǎng)地IDweek_day: 星期幾上課1-7start_time: 開(kāi)始時(shí)間如14:00end_time: 結(jié)束時(shí)間如15:30capacity: 最大人數(shù)status: 狀態(tài) 0-草稿 1-已發(fā)布 2-已停用detail: 課程大綱描述課程實(shí)例表training_course_instance:idcourse_id: 關(guān)聯(lián)課程模板IDactual_date: 實(shí)際上課日期start_time/end_time: 實(shí)際開(kāi)始/結(jié)束時(shí)間coach_signin_status: 教練簽到狀態(tài)summary: 本課總結(jié)/訓(xùn)練簡(jiǎn)報(bào)status: 0-待執(zhí)行 1-已完成 2-已取消 3-已結(jié)課學(xué)員出勤表student_attendance:idinstance_id: 關(guān)聯(lián)課程實(shí)例ID索引student_id: 學(xué)員ID聯(lián)合索引attendance_status: 出勤狀態(tài) 0-出勤 1-請(qǐng)假 2-缺席 3-遲到checkin_time: 簽到時(shí)間checkin_by: 簽到操作人remark: 備注學(xué)費(fèi)訂單表tuition_order:idorder_no: 訂單號(hào)student_id: 學(xué)員ID索引package_id: 課程包IDtotal_amount: 訂單總金額分為單位存儲(chǔ)discount_amount: 優(yōu)惠金額payable_amount: 實(shí)付金額pay_status: 支付狀態(tài) 0-待支付 1-已支付 2-已退款 3-部分退款pay_channel: 支付渠道pay_time: 支付時(shí)間expire_time: 訂單過(guò)期時(shí)間4.2 索引設(shè)計(jì)這些字段必須建索引索引設(shè)計(jì)的核心原則是索引服務(wù)的是查詢條件不是表結(jié)構(gòu)本身。回到業(yè)務(wù)場(chǎng)景后端收到的高頻查詢有根據(jù)學(xué)員ID查他的歷史出勤記錄和課程記錄根據(jù)教練ID查他本月需要上的課根據(jù)日期范圍查某天某場(chǎng)地的所有課程根據(jù)狀態(tài)查待支付的訂單列表所以至少要有這些索引student_attendance表建立(instance_id)索引和(student_id, instance_id)聯(lián)合索引training_course_instance表建立(course_id)索引和(actual_date, status)聯(lián)合索引tuition_order表建立(student_id, pay_status)聯(lián)合索引和(order_no)唯一索引。字段類(lèi)型上訂單金額一律用整數(shù)類(lèi)型存分避免浮點(diǎn)誤差——這是一個(gè)非常經(jīng)典但總有人犯的錯(cuò)。所有涉及狀態(tài)值的字段建議用tinyint并在代碼里維護(hù)一個(gè)統(tǒng)一的狀態(tài)枚舉類(lèi)不要散落著魔法數(shù)字。4.3 數(shù)據(jù)字典與統(tǒng)一編碼規(guī)范數(shù)據(jù)字典這塊也建議從第一天就規(guī)范起來(lái)。性別、狀態(tài)、支付渠道這些取值要么建獨(dú)立的字典表要么在代碼里用枚舉類(lèi)統(tǒng)一定義。我傾向于在代碼里定義枚舉類(lèi)因?yàn)樽值浔淼木S護(hù)成本反而高而且跨系統(tǒng)使用時(shí)容易對(duì)不上。但必須有一個(gè)統(tǒng)一的規(guī)范文檔把所有枚舉值和含義寫(xiě)清楚否則過(guò)幾個(gè)月你自己都忘了3代表什么狀態(tài)。主鍵生成策略我推薦使用MyBatis-Plus內(nèi)置的雪花算法ID。雖然自增ID在單庫(kù)單表環(huán)境下沒(méi)有大問(wèn)題但一旦未來(lái)要做數(shù)據(jù)合并比如兩個(gè)基地的數(shù)據(jù)庫(kù)合并或者數(shù)據(jù)遷移自增ID極其容易撞車(chē)。雪花ID是趨勢(shì)而且MyBatis-Plus開(kāi)箱即用不需要額外引入分布式ID組件。5. 權(quán)限模型的落地實(shí)現(xiàn)RBAC如何做到既靈活又安全5.1 基于RBAC的三層權(quán)限模型企業(yè)級(jí)系統(tǒng)的核心標(biāo)識(shí)之一就是權(quán)限管理。這套青訓(xùn)后臺(tái)采用的是經(jīng)典RBAC基于角色的訪問(wèn)控制模型具體落為三層用戶表、角色表、權(quán)限菜單/按鈕表中間用用戶-角色關(guān)聯(lián)表和角色-權(quán)限關(guān)聯(lián)表連接。用戶表單獨(dú)設(shè)計(jì)成member_account和業(yè)務(wù)崗位表教練檔案、學(xué)員檔案通過(guò)account_id字段關(guān)聯(lián)。這樣設(shè)計(jì)的原因在于一個(gè)賬戶可以關(guān)聯(lián)多個(gè)業(yè)務(wù)角色嗎在這個(gè)系統(tǒng)里不行。一個(gè)學(xué)員的賬號(hào)不可能同時(shí)是另一個(gè)梯隊(duì)的教練但這種一人多身份的場(chǎng)景在其他系統(tǒng)里是真實(shí)存在的所以把賬戶體系和業(yè)務(wù)檔案解耦是最穩(wěn)妥的。角色層面系統(tǒng)預(yù)置四類(lèi)角色超級(jí)管理員SUPER_ADMIN、教務(wù)主管EDU_MANAGER、教練員COACH、家長(zhǎng)PARENT。超級(jí)管理員擁有所有菜單和操作權(quán)限教務(wù)主管擁有課表編排、人員管理、財(cái)務(wù)管理、數(shù)據(jù)統(tǒng)計(jì)權(quán)限但沒(méi)有系統(tǒng)配置和審計(jì)日志的查看權(quán)限教練員擁有課表查看、學(xué)員檔案查看、出勤錄入、評(píng)估打分的權(quán)限不能查看財(cái)務(wù)數(shù)據(jù)家長(zhǎng)只能查看自己綁定學(xué)員的檔案、課表、出勤、評(píng)估報(bào)告和繳費(fèi)記錄。5.2 數(shù)據(jù)權(quán)限按鈕權(quán)限之后必須解決的粒度問(wèn)題RBAC解決了能不能訪問(wèn)這個(gè)菜單的問(wèn)題但沒(méi)有解決能訪問(wèn)哪些數(shù)據(jù)的問(wèn)題。教練A登錄系統(tǒng)后理論上他有查看學(xué)員檔案的菜單權(quán)限但他只能看到他帶的梯隊(duì)里的學(xué)員不能讓他在學(xué)員列表里看到全俱樂(lè)部幾千個(gè)孩子的名字和電話。這就是數(shù)據(jù)權(quán)限的范疇。我的實(shí)現(xiàn)方案是基于對(duì)象的權(quán)限過(guò)濾。在學(xué)員列表查詢的Service層先獲取當(dāng)前登錄用戶的角色和關(guān)聯(lián)的梯隊(duì)ID列表然后作為查詢條件注入到MyBatis的SQL動(dòng)態(tài)拼接中。超級(jí)管理員和教務(wù)主管不加梯隊(duì)條件教練員注入他所帶梯隊(duì)的ID集合家長(zhǎng)只能通過(guò)我的孩子接口訪問(wèn)不開(kāi)放學(xué)員列表查詢權(quán)限。這套邏輯寫(xiě)起來(lái)不復(fù)雜但它是區(qū)分玩具系統(tǒng)和企業(yè)級(jí)系統(tǒng)的關(guān)鍵細(xì)節(jié)。5.3 登錄認(rèn)證與安全加固的細(xì)節(jié)認(rèn)證方案上我不推薦用傳統(tǒng)的Session方案更推薦JWTJSON Web Token。因?yàn)楹笈_(tái)管理系統(tǒng)的前端可能同時(shí)部署在多個(gè)渠道——PC瀏覽器、運(yùn)營(yíng)人員使用的平板、甚至嵌入到小程序后臺(tái)。JWT無(wú)狀態(tài)、跨域友好適合這種多端接入的場(chǎng)景。登錄成功后后端簽發(fā)JWT包含userId和role信息過(guò)期時(shí)間設(shè)置為8小時(shí)前后端約定所有請(qǐng)求頭里帶Authorization: Bearer 。有一件容易忽略但極其重要的事JWT密鑰的管理。密鑰不能硬編碼在代碼里更不能提交到Git倉(cāng)庫(kù)。正確姿勢(shì)是放在配置文件里并通過(guò)環(huán)境變量注入部署時(shí)由運(yùn)維單獨(dú)設(shè)置。密碼加密方面使用BCrypt算法不用MD5。MD5撞庫(kù)太容易了BCrypt的自適應(yīng)成本因子讓暴力破解的成本成倍增加這是安全底線。還有一個(gè)接口防刷的細(xì)節(jié)。登錄接口必須加驗(yàn)證碼建議用圖形驗(yàn)證碼滑動(dòng)驗(yàn)證的方式連續(xù)失敗超過(guò)5次鎖定賬號(hào)15分鐘防止暴力破解。所有寫(xiě)操作接口在Controller層做參數(shù)校驗(yàn)在Service層做業(yè)務(wù)校驗(yàn)兩層都過(guò)才允許落庫(kù)。6. 后端核心邏輯的代碼實(shí)現(xiàn)要點(diǎn)排課沖突檢測(cè)與數(shù)據(jù)權(quán)限6.1 排課沖突檢測(cè)的完整實(shí)現(xiàn)思路排課模塊是最能體現(xiàn)一個(gè)開(kāi)發(fā)者代碼功力的地方。下面給出沖突檢測(cè)Service方法的骨架這里省略了部分模板代碼只突出核心邏輯public void createCourse(CourseCreateRequest request) { // 1. 參數(shù)校驗(yàn)重復(fù)字段、必填字段 // 2. 教練時(shí)間沖突檢測(cè) boolean coachConflict checkTeacherTimeConflict(request.getCoachId(), request.getWeekDay(), request.getStartTime(), request.getEndTime()); if (coachConflict) { throw new BusinessException(該教練在所選時(shí)間段已有課程安排); } // 3. 場(chǎng)地沖突檢測(cè) boolean fieldConflict checkFieldTimeConflict(request.getFieldId(), request.getWeekDay(), request.getStartTime(), request.getEndTime()); if (fieldConflict) { throw new BusinessException(該場(chǎng)地在所選時(shí)間段已被占用); } // 4. 校驗(yàn)通過(guò)后插入課程記錄 courseMapper.insert(convertToEntity(request)); }private boolean checkTeacherTimeConflict(Long coachId, Integer weekDay, LocalTime startTime, LocalTime endTime) { // 查同一天教練所有處于有效狀態(tài)的課程 ListTrainingCourse existingCourses courseMapper .selectActiveByCoachAndWeekDay(coachId, weekDay); for (TrainingCourse course : existingCourses) { // 關(guān)鍵判斷新課程與現(xiàn)有課程存在時(shí)間重疊 if (startTime.isBefore(course.getEndTime()) endTime.isAfter(course.getStartTime())) { return true; } } return false; }核心就一行判斷startTime小于現(xiàn)有課程endTime且endTime大于現(xiàn)有課程startTime。這兩個(gè)條件同時(shí)成立說(shuō)明時(shí)間段必然有交集。這個(gè)邏輯不僅適用于課程編排也可以復(fù)用到場(chǎng)地預(yù)約、教室租賃、會(huì)議室預(yù)訂等各種時(shí)間資源沖突檢測(cè)場(chǎng)景是值得背下來(lái)的小函數(shù)。6.2 數(shù)據(jù)權(quán)限過(guò)濾的MyBatis-Plus實(shí)現(xiàn)數(shù)據(jù)權(quán)限的落地我用的是MyBatis-Plus的Wrapper查詢。在Service層動(dòng)態(tài)拼接查詢條件public PageResultStudentProfileVO queryStudentList(StudentPageQuery query) { LambdaQueryWrapperStudentProfile wrapper new LambdaQueryWrapper(); // 根據(jù)當(dāng)前用戶角色動(dòng)態(tài)注入數(shù)據(jù)權(quán)限條件 if (isCoachRole(getCurrentUserId())) { ListLong gradeGroupIds getCoachGradeGroupIds(getCurrentUserId()); if (CollectionUtils.isEmpty(gradeGroupIds)) { // 教練沒(méi)有任何梯隊(duì)直接返回空數(shù)據(jù) return PageResult.empty(); } wrapper.in(StudentProfile::getGradeGroupId, gradeGroupIds); } // 其他查詢條件如姓名模糊搜索、狀態(tài)篩選 if (StringUtils.hasText(query.getName())) { wrapper.like(StudentProfile::getName, query.getName()); } // 分頁(yè)查詢 PageStudentProfile page new Page(query.getPageNum(), query.getPageSize()); studentMapper.selectPage(page, wrapper); return convertToPageResult(page); }這種方式的好處是直觀好維護(hù)壞處是每個(gè)查詢接口都要重復(fù)編寫(xiě)數(shù)據(jù)權(quán)限判斷邏輯。如果項(xiàng)目后期查詢接口數(shù)量膨脹可以考慮把數(shù)據(jù)權(quán)限抽成注解攔截器的形式通過(guò)自定義注解自動(dòng)解析角色和權(quán)限條件。但中小型項(xiàng)目不需要過(guò)度設(shè)計(jì)Service層手寫(xiě)完全夠用反而容易調(diào)試。6.3 事務(wù)控制和異常處理的統(tǒng)一約定寫(xiě)SpringBoot后端時(shí)事務(wù)千萬(wàn)不能只加在Controller層或者干脆不寫(xiě)。正確做法是所有包含多表寫(xiě)操作的Service方法上加Transactional(rollbackFor Exception.class)。比如創(chuàng)建課程時(shí)需要同時(shí)插入課程表、更新教練的可預(yù)約時(shí)間段緩存、記錄操作日志這三步必須在一個(gè)事務(wù)里任何一步失敗都要全部回滾否則會(huì)出現(xiàn)課程創(chuàng)建成功但教練時(shí)間被占用的不一致?tīng)顟B(tài)。異常處理要用全局異常處理器統(tǒng)一收口。在RestControllerAdvice里定義異常映射BusinessException返回業(yè)務(wù)錯(cuò)誤碼和提示信息參數(shù)校驗(yàn)異常返回400未登錄返回401無(wú)權(quán)限返回403系統(tǒng)異常統(tǒng)一返回500并記錄日志。這樣做的好處是前端接到的永遠(yuǎn)是結(jié)構(gòu)統(tǒng)一的JSON不用為每種異常單獨(dú)適配。7. 前端Vue實(shí)現(xiàn)的高效路線基于Element-Plus的后臺(tái)腳手架前端部分我用的是Vue 3 Vite Pinia Vue Router Element-Plus的組合。這套組合是當(dāng)前寫(xiě)管理后臺(tái)效率最高的搭配之一。Vite冷啟動(dòng)速度極快Element-Plus組件庫(kù)覆蓋了后臺(tái)系統(tǒng)90%以上的界面需求Pinia做狀態(tài)管理比Vuex清晰很多。項(xiàng)目的核心目錄結(jié)構(gòu)是這樣的src/ ├── api/ # 接口請(qǐng)求封裝按業(yè)務(wù)模塊拆分為文件 ├── assets/ # 靜態(tài)資源 ├── components/ # 通用組件上傳、富文本、搜索表單等 ├── layout/ # 后臺(tái)整體布局側(cè)邊欄、頂欄、標(biāo)簽頁(yè) ├── router/ # 路由配置含動(dòng)態(tài)路由邏輯 ├── store/ # Pinia狀態(tài)用戶信息、權(quán)限標(biāo)識(shí)、菜單狀態(tài) ├── views/ # 頁(yè)面組件按模塊組織 │ ├── course/ # 課表管理 │ ├── student/ # 學(xué)員管理 │ ├── coach/ # 教練管理 │ ├── finance/ # 財(cái)務(wù)管理 │ └── system/ # 系統(tǒng)設(shè)置 └── utils/ # 工具函數(shù)格式化、下載、鑒權(quán)7.1 動(dòng)態(tài)路由與菜單的權(quán)限聯(lián)動(dòng)前端權(quán)限的動(dòng)態(tài)路由是整個(gè)后臺(tái)體驗(yàn)的關(guān)鍵。用戶在登錄后獲取到當(dāng)前角色允許訪問(wèn)的菜單樹(shù)和后端返回的權(quán)限標(biāo)識(shí)列表然后通過(guò)Vue Router的addRoute方法動(dòng)態(tài)添加路由。這一步做到位后普通教練登錄時(shí)不會(huì)在側(cè)邊欄看到財(cái)務(wù)管理菜單即使他手動(dòng)在瀏覽器地址欄輸入財(cái)務(wù)頁(yè)面的路徑路由守衛(wèi)也會(huì)攔截并跳轉(zhuǎn)到403頁(yè)面。路由守衛(wèi)的偽代碼如下router.beforeEach(async (to, from, next) { const userStore useUserStore(); if (!userStore.token) { next({ path: /login, query: { redirect: to.fullPath } }); return; } if (!userStore.permissionsLoaded) { try { const userInfo await userStore.fetchUserInfo(); const accessRoutes await userStore.buildRoutes(userInfo.roles); accessRoutes.forEach(route router.addRoute(route)); userStore.permissionsLoaded true; next({ ...to, replace: true }); } catch (error) { userStore.reset(); next({ path: /login }); } return; } next(); });7.2 課程排期日歷組件的高效選擇課表管理的前端頁(yè)面不建議自己用表格硬畫(huà)課程時(shí)間表直接用FullCalendar是效率最高的方案。FullCalendar是一個(gè)成熟的開(kāi)源日歷組件支持周視圖、月視圖、日視圖允許拖拽事件調(diào)整時(shí)間正是排課場(chǎng)景需要的交互體驗(yàn)。將課程實(shí)例渲染為日歷上的事件點(diǎn)擊事件彈出課程詳情抽屜可以查看學(xué)員出勤列表、教練備注、操作取消或結(jié)課。這里有一個(gè)交互細(xì)節(jié)值得提一下教練的課程總覽頁(yè)面和周視圖的加載性能。如果一次性把未來(lái)三個(gè)月的課程實(shí)例全部拉下來(lái)前端渲染會(huì)卡頓。優(yōu)化方案是日歷組件切換日期范圍時(shí)單獨(dú)調(diào)用接口只查詢當(dāng)前展示時(shí)間范圍內(nèi)的課程數(shù)據(jù)同時(shí)在事件展示時(shí)做聚合處理——同一時(shí)間段、同一場(chǎng)地的課程實(shí)例合并為一個(gè)事件塊點(diǎn)擊后展開(kāi)具體課程列表。7.3 與后端權(quán)限對(duì)應(yīng)的按鈕級(jí)控制菜單控制是路由層面按鈕層面還需要更精細(xì)的控制。比如教練頁(yè)面上的錄入出勤按鈕只有COACH和EDU_MANAGER角色能看到學(xué)員檔案里的修改家庭住址按鈕只有家長(zhǎng)本人登錄自己的賬號(hào)時(shí)才能操作。這種按鈕級(jí)控制可以用一個(gè)自定義指令v-permission實(shí)現(xiàn)// 全局注冊(cè)權(quán)限指令 app.directive(permission, { mounted(el, binding) { const requiredPerms binding.value; // 例如 [coach:attendance:create] const userStore useUserStore(); const hasPermission userStore.permissions.some(p requiredPerms.includes(p)); if (!hasPermission) { el.parentNode?.removeChild(el); } } });頁(yè)面模板里直接使用el-button v-permission[coach:attendance:create] typeprimary clickopenAttendanceDialog 錄入出勤 /el-button這樣前后端雙重控制安全性和體驗(yàn)都到位了。8. 實(shí)際部署與聯(lián)調(diào)中踩過(guò)的坑這五個(gè)問(wèn)題最值得記錄8.1 時(shí)區(qū)問(wèn)題導(dǎo)致課表全部偏移這是部署階段遇到的第一個(gè)坑。服務(wù)器默認(rèn)時(shí)區(qū)是UTCMySQL連接串里沒(méi)有配置serverTimezone導(dǎo)致前端頁(yè)面上顯示的課程時(shí)間比實(shí)際時(shí)間晚了8個(gè)小時(shí)。排課接口寫(xiě)入數(shù)據(jù)庫(kù)LocalDateTime時(shí)MyBatis的JDBC驅(qū)動(dòng)做了時(shí)區(qū)轉(zhuǎn)換但查詢回來(lái)時(shí)沒(méi)轉(zhuǎn)對(duì)整個(gè)課表亂套。解決方案MySQL連接串統(tǒng)一加上serverTimezoneAsia/ShanghaiuseSSHfalse這里的useSSL按環(huán)境配置同時(shí)數(shù)據(jù)庫(kù)服務(wù)器和Java應(yīng)用服務(wù)器統(tǒng)一設(shè)置時(shí)區(qū)為Asia/Shanghai。這個(gè)坑非常常見(jiàn)尤其當(dāng)你從本機(jī)開(kāi)發(fā)本機(jī)默認(rèn)東八區(qū)部署到云服務(wù)器默認(rèn)UTC時(shí)幾乎必然觸發(fā)。8.2 文件上傳大小限制和Tomcat默認(rèn)配置沖突系統(tǒng)里要做學(xué)員體檢報(bào)告和訓(xùn)練照片的上傳Vue端用Element-Plus的el-upload組件。開(kāi)發(fā)階段一切正常部署到測(cè)試環(huán)境后發(fā)現(xiàn)圖片上傳時(shí)接口直接報(bào)404。查了一個(gè)多小時(shí)才發(fā)現(xiàn)是Nginx的client_max_body_size默認(rèn)只允許1MB而體檢報(bào)告掃描件動(dòng)輒兩三MB。這不是后端代碼問(wèn)題是反向代理層的配置問(wèn)題。處理方式在Nginx的server塊中增加client_max_body_size 20m;同時(shí)SpringBoot里也要同步配置spring.servlet.multipart.max-file-size20MB和max-request-size30MB。兩層都要配只配一層都會(huì)失敗。8.3 跨域配置導(dǎo)致登錄接口偶發(fā)失敗前后端分離部署時(shí)Vue跑在域名ASpringBoot接口跑在域名B跨域問(wèn)題是必然的。我在后端寫(xiě)了一個(gè)全局CORS配置類(lèi)允許指定來(lái)源、指定請(qǐng)求頭和請(qǐng)求方法。配置上線后大部分接口正常但登錄接口偶爾報(bào)錯(cuò)Access-Control-Allow-Origin header contains multiple values。后來(lái)排查發(fā)現(xiàn)是登錄時(shí)后端返回了自定義響應(yīng)頭而Spring的CORS過(guò)濾器又自動(dòng)加了一個(gè)Access-Control-Allow-Origin重復(fù)了。解決方案統(tǒng)一在Spring的CORS配置中聲明所有的跨域規(guī)則同時(shí)確保業(yè)務(wù)代碼中不要把請(qǐng)求頭相關(guān)的內(nèi)容寫(xiě)到response里。配置類(lèi)只保留一個(gè)不要同時(shí)在Filter和Interceptor兩層配置避免頭信息重復(fù)。8.4 JWT過(guò)期后前端靜態(tài)資源無(wú)法加載這個(gè)問(wèn)題比較隱蔽。用戶登錄后長(zhǎng)時(shí)間不操作JWT過(guò)期。這時(shí)用戶在某個(gè)頁(yè)面點(diǎn)擊刷新瀏覽器Nginx會(huì)先嘗試加載該頁(yè)面對(duì)應(yīng)的JS/CSS靜態(tài)資源但這些靜態(tài)資源請(qǐng)求也被前端路由守衛(wèi)攔截了——因?yàn)閍xios攔截器統(tǒng)一給所有請(qǐng)求加了Authorization頭而靜態(tài)資源請(qǐng)求根本沒(méi)有token服務(wù)器返回401。解決方案把靜態(tài)資源請(qǐng)求和API請(qǐng)求分開(kāi)處理。axios攔截器只給API請(qǐng)求加Authorization頭通過(guò)判斷請(qǐng)求URL前綴來(lái)實(shí)現(xiàn)Nginx層對(duì)靜態(tài)資源路徑直接放行不做任何登錄校驗(yàn)。這個(gè)坑在開(kāi)發(fā)階段很難發(fā)現(xiàn)因?yàn)殚_(kāi)發(fā)時(shí)前端和后端是不同端口靜態(tài)資源直接由Vite服務(wù)返回根本不經(jīng)過(guò)后端。8.5 財(cái)務(wù)報(bào)表導(dǎo)出時(shí)Excel亂碼和內(nèi)存溢出財(cái)務(wù)管理的月度報(bào)表需要導(dǎo)出Excel最初用了簡(jiǎn)單的POI版本數(shù)據(jù)量超過(guò)三千行時(shí)導(dǎo)出接口變得極慢還偶發(fā)內(nèi)存溢出。優(yōu)化方案是用阿里開(kāi)源的EasyExcel它基于SAX模式流式讀寫(xiě)內(nèi)存占用大幅降低。導(dǎo)出接口改為先寫(xiě)臨時(shí)文件再異步傳輸給前端前端下載后再刪除臨時(shí)文件。另外注意設(shè)置Excel的字符集為UTF-8否則中文文件名在部分瀏覽器里會(huì)是亂碼。// EasyExcel流式導(dǎo)出的核心寫(xiě)法 String fileName URLEncoder.encode(月度課消報(bào)表.xlsx, UTF-8); response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet); response.setCharacterEncoding(utf-8); response.setHeader(Content-Disposition, attachment;filename fileName); EasyExcel.write(response.getOutputStream(), TuitionReportRow.class) .sheet(課消統(tǒng)計(jì)) .doWrite(reportRowList);9. 這套系統(tǒng)的應(yīng)用邊界與二次開(kāi)發(fā)建議說(shuō)句實(shí)在話這套SpringBoot Vue MyBatis MySQL的青訓(xùn)俱樂(lè)部管理系統(tǒng)單論技術(shù)棧并不算前沿但它勝在業(yè)務(wù)模型貼近真實(shí)場(chǎng)景、代碼結(jié)構(gòu)清晰、權(quán)限模型完整。對(duì)于個(gè)人開(kāi)發(fā)者來(lái)說(shuō)它是一次很好的全棧能力訓(xùn)練對(duì)于團(tuán)隊(duì)來(lái)說(shuō)它是一個(gè)足以支撐中小型俱樂(lè)部日常運(yùn)營(yíng)的可靠基座。如果你恰好要把它作為畢業(yè)設(shè)計(jì)或者面試項(xiàng)目來(lái)呈現(xiàn)我建議你在二次開(kāi)發(fā)時(shí)重點(diǎn)做這幾件事一是把訓(xùn)練評(píng)估模塊做得更細(xì)加入更多維度的雷達(dá)圖可視化讓家長(zhǎng)端能直觀看到孩子的各項(xiàng)能力成長(zhǎng)曲線二是加入消息通知模塊當(dāng)課程取消或臨時(shí)調(diào)整時(shí)通過(guò)郵件和短信觸達(dá)家長(zhǎng)提升系統(tǒng)的人性化程度三是做一個(gè)小程序端微信小程序或支付寶小程序這是家長(zhǎng)最常用的入口也是在面試講解時(shí)最有亮點(diǎn)的擴(kuò)展點(diǎn)。如果你在真實(shí)運(yùn)營(yíng)一家足球俱樂(lè)部我建議先梳理清楚運(yùn)營(yíng)流程再上系統(tǒng)不要讓系統(tǒng)反過(guò)來(lái)綁架流程。比如請(qǐng)假扣不扣課時(shí)的規(guī)則、教練評(píng)分的審核機(jī)制、退費(fèi)的審批層級(jí)這些業(yè)務(wù)規(guī)則必須在系統(tǒng)開(kāi)發(fā)前定下來(lái)不然后期改起來(lái)成本極高。技術(shù)上這套系統(tǒng)完全夠用真正的難點(diǎn)在于業(yè)務(wù)規(guī)則能不能用代碼表達(dá)清楚。最后回到最開(kāi)始的話題管理后臺(tái)系統(tǒng)的核心競(jìng)爭(zhēng)力從來(lái)不在技術(shù)有多炫而在于它把現(xiàn)實(shí)世界的復(fù)雜業(yè)務(wù)約束表達(dá)得有多準(zhǔn)確。一個(gè)能把排課沖突、權(quán)限隔離、課時(shí)統(tǒng)計(jì)、評(píng)估流轉(zhuǎn)都處理妥當(dāng)?shù)暮笈_(tái)哪怕技術(shù)再樸素也是好系統(tǒng)。這也是我在設(shè)計(jì)這套青訓(xùn)后臺(tái)時(shí)始終堅(jiān)持的原則——少一點(diǎn)炫技多一點(diǎn)嚴(yán)謹(jǐn)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中日韓欧美高清| 日本熟女中文| 麻豆av一区二区| 中文字幕精品人妻丝袜| 婷婷91| 大JI巴好深好爽又大又粗视频| 99久久这里只有精品| 亚洲va有码在线天堂| 国产精品久久久亚洲第一牛牛_在线观看| 性色avv| 亚洲欧美日韩精品久| 午夜爽爽爽| 国产九九九九九九| 天天操天天看| 大香蕉欧美国产日韩高潮| 欧美视频在线视频免费va| 日韩欧美亚洲自拍偷拍| 白丝AV| 96超碰网| 亚洲精品乱码久久久久久蜜桃麻豆| 国产视频一区二区三区久久亚洲天堂| 成年人一级黄色毛片大全在线观看| 亚洲一区二区在线观看91| 青青操日韩| 啊啊啊啊啊啊啊啊啊啊在线观看| 啊啊啊好舒服好爽啊啊啊视频| 农村妇女一级二级三级视频| 97综合在线观看| 六月丁丁香| 青青草天天亲夜夜操网| 亚洲AV成人在线| 男男H黄动漫啪啪无遮挡网站| 国产精品色片一区二区| 上海一级黄片| 国产女人成人精品视频| av国产无码| 亚洲一本大道中文字幕无码在线| 天天天天天天天天天天干美女| 大香蕉一区二区在线观看.| 一区二区高清视频| 日韩av性爱在线播放| 操屄日韩| 国产家庭乱伦表演| 国产三级在线现体验区| 干婷婷综合网| 综合网,亚洲,欧美| 97天天在线| 中文字幕伊人| 精品午夜福利| 1769国内精品视频| AV不卡在线| 国产小黄片在线免费观看 | 国产精品白虎| 中亚黄色三级大片| 97久久超碰国产精品| 成人区人妻精品一| 思思视频免费看网站| 激情熟女12P| 亚欧视频在线| 天天流夜夜操| 欧美伦乱爱| 少妇精品久久久八区九区| 精品丰满熟妇人妻一区| 99婷婷一区二区| 日韩操p| 91三级理论片播放器| 午夜男人一级A片7777| 天天日天天爽| 91中文精品日韩欧美在线| 久久综合超碰| 久久久偷拍| 午夜性刺激视频免费观看| 天天插夜夜操| 大胆91| 性生活无遮挡纯毛片在线看| 亚洲高潮影院| 国产人妖的免费的视频| 天天色播| 91天天c| 国产精品久久泡妞网站| 日韩人妻中文视频| 中文字幕精品丝袜| 蜜桃臀av一区二区| 中文字幕日韩人妻视频| 9+1视频网址| 大香蕉啪啪啪啪在线| 九九精品网| 熟妇的味道HD中文字幕| 97网址www| 九七毛片九九毛片| 国产中文精品一区二区在线观看| 亚欧中文字幕在线视频| 欧美色欧美| www黄片免费看com| 96国产污污污丝袜| 婷婷色综合欧美日韩| 五月婷丁香| 天美一区在线| 伊人久久综合影院| 无码视频一区二区| 日韩免费三级黄片电影| 青青国产精品在线| 欧美性夜| 六月激情婷婷| 欧美97色| 亚洲色图综合网| 欧美东京热青青草| 超碰三级秋霞| 亚洲无码精品AV久久久| 日韩三四五区| 色综合av综合久久| 人人手机欧洲亚洲国产人妻| 亚洲天天操| 婷婷色色网| 亚洲一二三四区| 五月丁香婷婷啪啪| 亚洲欧洲日韩中文字幕一区| 五月激情影院| 欧美 亚洲精品首页| 婷婷综合五月天| 丰满熟妇大乳做爰| 欧美日韩精品久久| 亚洲欧洲日韩天堂av| 麻豆久久久久久久久丝袜 | av网站在线看| 国产有码一区| 亚洲视频1区| 亚洲日韩少妇一道本视频| 色狠狠 - 百度| 九九综合网| 东北老女人的激情视频| 午夜福利av电影在线| 97日视频| 熟女精品va中文字幕| 五十路人妻在线| 99在线观看| 青青草中文字幕| 中文字幕二区日韩天堂| a片偷拍视频| 偷拍在线观看视频| www.超碰在线| 大香蕉久| 中文字幕后石码三区四区| 大香蕉在线视频15| 亚洲精品官网在线观看| 揉揉揉夜夜| 亚洲天堂久久| 亚洲国产精品成人综合| 熟女久久久| 五月婷婷六月色| 精品无码欧美三级| 黄色十八禁| 久热无码| 欧美18 在线观看| 亚洲伊人久久精品影院| 精品少妇一区二区三区免费观看| 乱伦日本色图AⅤ| 欧美大的香蕉有线电视视频| 97久久超碰国产网站| 欧美熟妇操操视频| 无码人妻精品一区二区三区九九 | 特级丰满少妇一级AAAA爱毛片| 99国产精品免费| 色情乱伦AV| 欧美人妻制服| 亚洲一二三四区在线免费看视频| 91成人亚洲色图| 久久久久久久久久久六六| 人人操人人干xxx| 国产欧洲精品亚洲午夜拍精品| 九九久久99| 日韩欧美成人午夜福利| 人妻久久一区二区三区 | 2017天天拍大香蕉| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 日韩有码一区三区| 玖玖爱免费观看视频| 亚洲国产成人精品女人久久久| 小骚逼被操的爽不爽| 丁香五月天堂网| 久久精品中文字幕无码l| 久久精品一区二区| 亚洲在线欧美| 日韩久射综合| 屁股久久久久久久久| 国产免费大片| 亚州操操穴网| 久久一二三四五六七八九区区区 | 激情小说五月天| 成人性爱视频在线看| 精品无码一区二区三区色欲| 人人澡人人干| 91白嫩| 亚洲精品 欧美精品| 91狠婷| 丁香六月婷婷| 天天色综合天天操| www成人啪啪18秘 免费| 一区在线观看中文字幕| 牛黄色久午久| 日韩999| 日本精品成人无码| 色5月婷婷| 一区二区三区激情在线观看| 蜜臀AV网站| 免费操逼视频下载| 中文久久爆乳| 久久久一区二区三区四曲免费听| www.超碰在线| 夜夜爽33333| 91麻豆天美国产欧美| 欧美在线播放aaaa| 日韩草久视频| 久久女人视频| 啊啊啊好舒服视频在线观看| 精品一区二区三区18| 熟女高潮精品一区二区| 亚洲精品97久久中文字幕| 狠操91,com| 亚洲丰满很很操| 欧美色道啊| 欧美日韩制服| 91丨人妻丨国产丨丝袜| 免费国产电影一区二区| 欧美一区二区三区另类精品| 少妇高潮对白在线观看| 色婷婷影院| 麻豆人妻精品一区二区| 熟妇熟女一区二三区| 超碰在线人妻不卡| 欧美欧美少妇| 日韩无码三级影院| 99久在线精品99re8热| 小泽玛利亚一二三| 91欧美丝袜| 亚洲欧美洲综合| 97久久超碰| 九色精品视频导航1| 亚洲五月天激情| 欧美日韩国第一区| 蜜汁欧美| 高清国产成人无码| 三级三级三级日本99| 最新一二三区视频| 欧美黑人168页欧美黑人167| 9999久久久| 女同女同恋久久级三级| 丝袜美腿欧美| 久久线上视频免费看| 日本一区视频在线观看| 成人av免费观看| 亚洲熟妇丝袜在线观看| 96超碰网| 性爱乱伦网址| 曰本熟女视频| 性综合网| 国产精品色色| 午夜啊啊| 人人干人人操人人..com| 亚洲欧洲视频小说在线观看| 久久久久久无码人妻中文字幕| 日本在线观看网址| 久久香蕉国产传媒一区剧情天美| 亚洲综合射| 男人的天堂2018| 日本福利二区视频| 秋霞福利网| 欧美中文字幕日韩在线| 激情一区二区三区在线观看| 91中出在线| 亚洲密乳AV| 精品人人| av网站国产主播在线| 国产伦乱91| 欧美亚洲美少妇一区二区| 亚洲毛片基地专区| 97人肏| 国产又粗又长的视频| 成年人黄色小视频网站| 天天日天天射天天干| 骚女天天综合网| 综合色图区| 女人天堂网| 99久久精品无码一区二区| WWW.加勒比人妻一区不卡.com| 91骚熟女| 婷婷色一区| 男女啊啊啊| 国产精品一区二区黄片| 超碰 国产熟女精品一区| 午夜福利激情在线视频| 天天插夜夜爽| 久久久久久亚洲中文| 国产日本熟女顶级一区二区三区视频| 中文字幕成人乱码熟女精品国50 | 97在线播放| 亚洲古典另类欧美在线| 久久精品一区二区三区蜜桃臀| 日韩亚洲精品一区二区| 久久一二三四五六七八九区| 校园春色制服丝袜中文字亚洲| 黑人性欧美| 91大学精品激情戏| 男女啪啪网站免费视频| 欧美页片| AV免费在线播放一区| 免看60秒涩涩视频| 精品一区二区啪啪啪| 欧美在线天堂| 欧美日韩淫加| 日韩一级成人毛片免费观看| 精品二区三四区五电影| 69AV女优男人的天堂| 国产一区二区三区免费视频在性观看 | 欧美嗯啊……在线观看视频免费| 一级毛片电影免费看| 狠插 制服 自拍| 免费一级黄色录像影片| 97欧美色| 日韩精彩免费| 综合久久六月久久婷婷| 国产免费内射视频| 偷拍视频青青草在线视频| 欧美有码亚洲中文字幕一区二区三区四区| 亚欧免费| 操熟女91| 日韩精品怡红院| 一区二区三区激情在线观看| TS人妖另类精品视频系列| 美欧老女人97| 日韩精品 资源| 色视频蜜乳| 天天搞欧美| 亚州操操穴网| 日本人人操人人操| 午夜超爽| 亚洲综合影院| 日韩99999| 偷拍超碰| 国产按摩一区二区三区| 色色福利| 国产狂喷潮在线精品| 九九超碰综合网| 欧美一二三区四五区| 一区二区三区四区免费视频| 蜜臀无码视频在线观看| 亚洲少妇视频| 大香蕉在线SuP| 熟女天天干| 岛国天天午夜影院传媒网| 日韩精品三区四区| 欧亚综合一卡二卡中文字幕| 色爱综合网| 色婷婷六月丁香七月婷婷| 欧美色图99| 男人天堂综合| 久久色激情一区二区三区| 被体育老师抱着c到高潮| 天天看天天日天天操| 午夜福利合集| Aa东京男人的天堂| 狠狠做深爱婷婷久久二区| 富二代亚洲精品99 | 欧美碰碰综合色| 嫩草 我啊~嗯~在线| 日韩 欧美 校园一区| 中文高清一区二区的| 天天躁日日躁AAA片李宗瑞| 99热99在线播放激情| 在线观看不卡一区二区三区| 一区二区三区美女超清| 亚洲毛片基地专区| 亚洲色图91| 久久久久久久97| 亚洲图片 欧美电影| 婷婷探花久久精品一区| 久久伊人东京热| 97在线亚洲| 久久亚洲天堂| 性感美女91影视| 丰满欧美放荡少妇在线| 亚洲影视第一页| 亚洲九九视频在线观看| 97情超碰色| 日本久久久精品电影| 俺也射| 四虎免费视频| 五月激情视频| 性欧美另类高清| 婷婷综合在线观看| 91久久国产综合精品| 鸥美精品一区二区久久婷婷| 国产精品电| nuu12国产麻豆精品| 综合色久欲| 五月天AV资源| 久久久日本电影| 白丝av| 精品亚洲一区在线观看| 久操网视频| AV无码久久久精品| 青青草九九九九九| 欧美日韩精品久久| 久久久78| 性色AV蜜色av色欲av| 亚洲欧洲综合av在线| 日va操| 亚洲色综合| 91人妻超碰| 91色伦综合| 婷婷8月天青娱乐| 亚州一区二区| 操逼视频亚洲| 精品免费一区二区三区在线亚洲人成| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 国语av最新自产拍在线观看| 99综合网| 久久有碼| 久久丝袜| 国产呦精品一区二区三区下载| 这里只有精品视频| 99www.bibizy香蕉资源国产一区二区三区高清 | 少妇淫妇久久久久久久| 久久精品人人做人人看| a级理论午夜日本| 亚洲毛片基地专区| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 久久久草草精品| 男人亚洲天堂| 国产精品99久久久www| 日韩人体偷拍| 欧美色图99| 国产又黄又粗的视频| 巨爆乳肉感一区二区三区竹菊影视 | 国产第二页| 婷婷五月天激情四射| 亚洲黄色a级片| 亚洲夜色在线| 欧美草草高清日韩视频| 日韩欧美综合激情| 精品亚州18| 成人精品无码| 五月天偷拍| 久湿久久 | 色天使大香蕉| 午夜成人爽爽爽爽A片李冰冰| 日韩人妻中文视频| 蜜臀久久99精品久久久久免费观| 好吊色综合| 激情五月天色色网| 亚欧美无遮挡| 亚洲欧洲日韩国产自在线| 大香蕉色网| 亚洲综合另类| 欧美图片偷拍| 欧美色图亚洲色| 色婷婷综合网站| 日韩不卡网操逼中文字幕日韩| 日韩欧美性吧婷婷乱伦大香蕉 | 尤物视频新赏网鲜网色诱网| 日本东京热加勒比久久| 极品后入免费视频| 人人操我人人干| 91操操操操| 蜜臀国产AV中文字幕| 青青草公开在线免费不卡视频| 国产精品免费美女视频| 欧美黑人168页欧美黑人167| 亚洲最大无码中文字幕网站| 欧美肥臀在线| 97操操| 麻豆成人影音在线| 怡红院视频在线| 91综合中文字幕| 青青草日韩无码| 国产乱子伦久久精品综合一区二区三| 这里只有精品久久| 97在线观看免费视频| 青青草原人妻| 一级片在线观看高清无码| 亚州熟妇精品| 亚洲国产欧美中文永久| 超碰色97| 超碰激情808| 免费一级性爱久久| 天天影视之亚洲综合网| 丁香色色网| 91国模| 一区麻豆 高清中文字幕| 大屁股人妻女教师撅着屁股| 天天综合网1| 日本性爱少妇| 91肉丝| 天天天乱色综合全| 亚洲黄网在哪免费看| 东京热综合久久一区二区| 97午夜剧场日韩| 免费av在线播放二区| 日产123区精品免费观看| 探花激情视频| 国产强奸AV在线| 亚洲性猛| 人人爽天天爽| 少妇高潮特黄A片| 亚洲色图欧美色18直播在线| 色爱欲亚洲| 亚洲欧美国产其他二区| 日本不卡一区二区| 中文字幕av片| 躁躁日曰躁2020| 操婷婷逼| 国产传媒午夜理伦精品| 天天射天天色成人| 久偷拍| 玖玖在线视频| 18禁美女裸体无遮挡啪啪| 日本媚薬中文字幕在线| 97在线观视频免费观看| 96精品在线| 亚洲αv一区二区三区| 97综合| 亚洲综合色在线| 丝袜喷水在线| 九九无码| 91精品国产麻豆国产自产在| 嫩呦国产一区二区三区AV| 色九久| 欧美91色| 亚洲日韩熟女人妻高清在线| 打av高清| 日韩成人色图| 丁香六月激情| 桃花色涩综合影院| 丁香五月综合| 91在线视频免费播放| 日韩电影在线观看网址| 试看60秒 爽| 人妻另类| 国产精品禁久久久精品| 精品美女人人干| 嫩草影院永久在线制服丝袜| 黄色二级片网站| 国产原创自拍| 天天日日夜夜| 久久综合九九| 久/久精品99看9| av天堂5| 国产女人操逼视频| 亚洲欧综合另类无码一区| 在线综合 亚洲 欧美中文字幕| 12一15性XXXX粉嫩国产| 国产色图乱伦| 国产美女在线精品免费看| 精品999999| 国产在线播放成人免费| 91无码西班牙视频在线| 天天日天天操天天射河南省| 一起草在线视频| 亚洲欧美色图片| 色姑娘综合网| 精品美女久久久久| 亚洲综合另类小说色区亚洲成av人片在www | 在线观看成人性爱免费小视频| 日韩中文字幕视频| 逼操网站| 伊人色综合网电影 | 亚洲欧美不卡线| 亚洲天堂精品日韩电影| 天天看天天干| 色色香蕉| 99色在线视频| 人妻日日夜夜精品| 久久伊人青青草| 久久精品中文字幕女同| 亚洲欧美校园| av影片在线观看不卡| 乱伦熟女专区| 亚洲成?V人片在线观看福利| 国产一级片| 东北夫妻性偷拍| 天堂在线一区二区| 97 国产精品| 日韩一级二级三级在线不卡观看完整| a亚洲欧美色欲| 搞中出久久| 好湿好紧视频| 91 丝袜在线观看| 麻豆色约约| 天天插网| 福利在线观看一区二区| 中文字幕在线日亚州9| 91neishe| 思思热久久成人| 无码高清操逼| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 97爱欧美| 精品中文字幕第一页| 亚洲天堂日本| www.人人cao| 中文字幕第2页| 天天日B狠狠操| 国产精品麻豆成人av| 素颜老阿姨乱情色| 色官网在线| 外站AV在线| 97免费视频网| 大香蕉黄色一区| 精品人妻av区天天看片| 色情亚洲日本成人| 中文字幕日本久久| 天天激清| 97欧美久久久久久久| 五月婷婷丁香| 国产精品毛片?v一区二区三区| 美国三级日本三级久久99| 欧美91变态| 99999精品成人| 午夜爽爽爽在线观看永久入口姬片| 日韩综合色网| 香蕉99秘 精品一区丁香| 小日子操bb在线看| 大香蕉人妻久久| 国产青视频| 99操碰| 99e久久国产精品| 后入合集| 国产一区二区三区,在线观看观看 五月开心久久AV官网 | 国产精品久久久九九九| 开心五月激情网| 国产av波波国产精品| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国产精品人妻一区二区| 国产成人天堂| 精品久久久九九九孕妇| 亚洲美女自拍偷拍视频| 国产偷人伦激情在线观看| 啊啊啊啊在线播放| 久久精品老司| 日韩pv中文| 国产成人精品亚洲日本| 中文字幕,人妻,日韩| 人妻丝袜一区二区三区在线| 六月婷婷一区二区三区| 不卡九肏| 日本人体九九九九九九| 国产精品日韩在线一区| 午夜精品久久久久久久99| 99re这里只有精品3| 九月丁香| 日韩成人大片一区二区| 中欧人妻丝袜中文字幕| 天干天干天干天天做| 久久久成人精品| 日han少妇无码| 国产日本熟女顶级一区二区三区视频| 噜噜吧,噜噜色,噜噜| 国产传媒操逼视频| 欧美福利视频啊啊啊啊| 啊啊啊好想要| 色汉综合| 日韩色香| 91殴美| 欧美性夜| 97中文字幕九区| 精品无码一区二区三区| 亚洲。天堂。日本在线观看| 色www精品视频在线观看| 91天美传媒精品| 91免费看一区二区三区| 国产精品视屏| 99re这里只有精品9| 精品久9| 久久久久熟女| 风韵犹存大大大大香蕉 | 亚熟hd视频在线| 人妻无码久久一区二区三区免费| 久久国产精品,久久国产| 久极品在线观看| 人妻夜夜爽天天爽麻豆三区网站 | 九九九综合精品| 男人下部插入女人下部| 大香蕉综合| 宗合情欲网| 日本不卡二三区| 日本男人插女人的逼黄色| 久久日本熟女精品一区| 老司机午夜福利视频一区二区| 级品肉射| 玖玖爱伊人玖玖爱| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 二对二中文字幕。| 久草精品视频| 久久成人东京热人妻| 中文有码9| 91久久青青草原精品| 2024黄色视频| 色在线亚洲视频www| 欧美视频一区二区在线| 五月婷婷久久综合| 欧美综合骚| 青青草视频导航官网| 久久亚码| 亚洲丨在线| 男人的天堂 在线一区| 日韩免费高清大片在线| 久久成人国产| 97精品综合| 成人无码专区精品视频| 96久久久精品| 国产精品久久泡妞网站| 无码久久亚洲高清,| 日韩Va亚洲va欧美Ⅴa久久| 操逼日韩无码| 91在线免费观看处女| 老司机免费视频在线91| 久久婷婷成人综合色怡春院| 久久草草亚洲蜜桃臀| 一区二区三区免费岛国片| 在线 制服丝袜中出 人妻| 欧美岛国精品在线观看| 天天色综亚洲91污| 久热伊人99re| 欧美性五月| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 中文字幕人乱码中文字的预防方法 | 99热精品在线| 久久、1234| 欧美自拍网| 国产日韩在线播放av| www.婷婷五月天| 老鸭窝黄色视频网站| 人妻丝袜日本| 日韩av一级黄片| 成年男人的天堂| 91日韩网站| 精品国产一区二区三区四区在线看 | 91色综合| 午夜天堂啪啪| 亚洲精品1区| 超碰91在线| 在线看免费无码AV天堂的| 97高清啪啪| 日韩97在线| 午夜福利视频在线一区| 免费网站观看www在线观| 欧美日韩久久精品爱爱| 欧美专区日本专区| av麻豆啪啪| 永久电影三级在线观看| 俺去也婷婷| 亚洲图片偷拍欧美| 思思热免费在线视频| 亚洲aw毛茸茸在线| 亚洲激情视频| 丁香六月啪啪| 日本免费二区三区| 国产精品探花视频| 欧美日韩亚洲五月天婷婷| 12一15性XXXX粉嫩国产| 熟妇人妻精品一区二区视频色欲| 99热这里只有精品1| 无码天天操| 欧美伦乱爱| 亚洲精品国产无码高清| 日韩av熟女一区二区三区成人| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 裸模AV女优| 欧美黄色手机在线观看| 热久久精品| 少妇一区二区三区| 2011国产精品| 99中文字幕| 亚洲熟妇自偷自拍另欧美| 国际精品久久久| 日本在线不卡一二区| 久久精品综合| av片在线观看免费播放| 51一区二区三区| 国产精品三级视频网站| 欧美色91| 中文字幕一区av| 五十路三区在线| 91国产精品熟女| 人人操人人摸人人骑| 厕所偷拍在线| 成人免费毛片| 美女黑人91神马| av绯色| 久久久久久无码人妻中文字幕| 亚洲精品人妻吞精av| 好色美女九七第一页| 婷婷五月天影院| 欧美综合亚洲综合| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 男人天堂东京热| 天天淫人人妻日日色| 亚洲AV麻豆Aⅴ无码电影一 | 亚洲色图激情小说| 18禁看网站一区| 久草在| 欧亚免费视频| 亚洲欧美另类图片| 狠狠干精品一二三四五六2022| 激情抓乳插进去啪啪啪日韩 | 84YTCOM性无码| 60秒免费小视频| 女人高潮大叫一级毛片| 亚洲动态色图| 先锋音影AV| 日本三级日本三级99| 久久9久| 97欧美日韩中文| 欧美中出1| 永久免费观看的毛片的网站| 亚洲欧洲第二视频在线观看色图| 综合一区中亚洲国产成人综合精品| 久久久久久久性爱| av一区二区三区四区五区久草臀| 久久性爱大全| 在线免费观看高清无码视频| 东北操逼| 午夜福利久久久噜久噜久久综合| 18禁免费视频| 91制服丝袜中文字幕| 99国产精品免费| 久综合网| 国产一区二区三区视频在线看| 欧美后入式| 中文字幕丝袜人妻| 亚洲高清在线| 1人人看人人摸人人操| 黑人性欧美| 九九九久久久久| www.夜夜| α√在线| 亚洲**2021在线观看| 清纯唯美综合亚洲| 亚洲综合影片| 男人的天堂不卡一区二区| 欧美日韩免费性爱| 久久日本熟妇熟色一区| 干美女人妻| 精品然女一区二区| 少妇高潮99p| 日韩久久激情精品| 蜜乳AV.COM| 夜色91| 性高潮久久久久久久久久久| 日韩精品操少妇| 日韩偷拍色图| 高清在线偷拍自拍视频| αⅴ天堂| A一区片| 九九无码| 密臀在线一区尤物| 国产AV天美传媒一区二区三区 | 日韩美一区| 九月丁香| 欧美一级黄片免费播放| 欧美一级久久久久久久大片动画| 亚洲天堂精品日韩电影| 欧美丝袜中文字幕07在线| 国产麻豆一区二三区| 久干网| 黑人天8A∨高清网站| 麻豆天美国美国产| 天天综合精品| 丁香五月性爱| 91精品久久综合熟女| 欧美性爱www免费版| 看大黄色大片原件| 亚洲色欲天天天堂色欲网女| 激情五月天中文字幕色| 91丝袜| 99久草| 97色综合中文网| 色区97| 91色夜| 久久精品区| 久久香蕉国产线看观看亚洲女人 | 亚洲自拍欧美色综合| 人妻熟女一区二区三区在线| 有码色中文字幕在线观看| 精品人妻一区二区免费蜜桃| 色九月综合| 午夜欧美J进J出白浆流出久久久| yirendaxiangjiashipin| 日本三级久| 中文伊人大香蕉视频| 亚洲天堂性爱| 国产人伦精品一区二区三区| 亚洲丝袜色图| 欧美少妇高潮久久91| 伊人色综合欧美| 青草伊人久久| 人人妻人人爽| 日韩在线国产字幕| www.色吧5.com| 国产美女裸体秘 永久无遮挡| 国产精品久久久久无码A√| 亚一综合久久久久久久久久| 亚洲午夜福利在线影院| 曰韩av中文字幕专区| 欧美婷婷| 日本九九久久99播| 青女在线| 欧美日韩国产精品久久色婷婷| 强乱老妇中文字幕| 亚洲国产精品成人久久蜜臀| 女欧美一区二三区| 岛国视频免费在线观看| 91九色在线| 99re这里只有精品3| 欲香欲色天天天综合和网| 大香蕉在线SuP| 国产精品欧美在线观看| 美女天天干| 人摸人人操人| 97久久精品亚洲| 大香蕉男人的天堂| 清纯唯美综合亚洲| 12一15性XXXX粉嫩国产| 强奸乱伦麻豆| 91neishe| 在线情色电影 91大 | 国产精品粉嫩福利在线| 久夜视频| 一牛影视成人片免费| 精品婷婷| 老汉网| 91性网| 欧美91视频| www.zbzhongsen.com| 中文字幕天天天天天| 亚洲久草AV色图| 肉动漫无遮挡h在线观看| 免费观看的黄色的网站| 亚洲无套久久嗯嗯| 久久久久久久久久久久欧美日| 啊v在线观看视频| 精品中文字幕第一页| 五月婷在线| 大香蕉欧美国产日韩高潮| 97超碰欧美精品| 99re公开精品免费视频| 人夜夜精品网站香蕉嫩草| 综合网97| 日韩一级性爱无码| 色色色综合网| 内射中国少妇高清视频免费视频| 天天综合欧美| 亚洲女毛多水多21P| 国产综合久久久鬼色| 亚洲色图A| 亚洲欧美日韩精品久久久一区二区| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 亚洲黄色网址| 精品无码一区二区三区色欲| 99久久婷婷| 亚洲男人天堂视频| 精品国产91av一区二区三区| 91国产精品熟女| 风韵犹存大大大大香蕉| 国产白嫩漂亮KTV在线| 91夜色chaopeng| 综合久久9| 亚洲色综合| 久草成人影片| 淫荡少妇免费| 91美女在线视频| 国产一级内射高清视频| 在线 制服丝袜中出 人妻| 无码人妻丰满熟妇区毛片| 国产成人无码啪| 台湾大香蕉99热| 一级做受视频免费是看美女| 国产人妻精品久久久一区二区三区| 亚洲91射| 国产日本久久免费精品| 屁股久久久久久久久| 日本狂喷奶水在线播放212| 中美日韩毛片| 男女啪啪啪18禁网站| 日韩精品.久久精品.AV女优.天美传媒| 亚洲狠狠入| 中文字幕 国产 精品| 热久久无毒不卡| 婷婷五月天激情网| Aa东京男人的天堂| 乱欲一区二区| av草草在线电影| 人妻中文字幕日韩电影| 97超碰这里只有精品| 精品一区二区成人| 欧美激情亚洲情色| 操逼视频免费日韩无码| 伊人午夜福利视频| 破苞ⅩXXX性无码动漫无码| 欧美日韩97在线| 日本午夜精品理论片A级APP发布| 一摸二插三插| 啊视频在线| 欧美一级二级三级| 欧美成人9797| 久久国产AⅤ| A啊啊在线观看| 懂色av色欲av蜜臀av| 亚洲精品人伦一区二区| 怡红院一区二区熟女人妻| 就去色综合| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 日本精品免费一区二区三区四区| 日本十八禁免费看污网站| 91美女看B| 天堂8在线新版官网| 97亚洲综合在线| 日韩乱码av| 日韩黄片影院| 亚洲清纯唯美| 95人妻爽爽人人做人人澡| 久久色网| 蜜桃色院一区久久| A片 AV一级在线播放观看免费| 新91视频.cmp| 国产精品乱人伊人网| 日本操逼视频不卡直接放| 色在线69堂| www.狠狠操| 性爱网站一区二区| 少妇激情AV| 吻戏激情性巴克| 涩涩涩综合| 青青草在线视频播放器| 九九热九九热| AV不卡在线| 九九热三级片| 丝袜视频一区二区在线播放国产中文| 婷婷丁香五月天综合东京热| 97美日韩视频| 日日夜夜草草草| 亚洲欧美成人在线| 另类图片欧美激情综合| 久久精品99| 欧洲综合视频| 午夜久久无码1000合集| 国产乱子伦久久精品综合一区二区三| 啊啊啊好舒服好爽啊啊啊视频| 色噜噜人妻丝袜a∨先锋影 | 人人干黄色| 欧美性高潮在线| 97精品97| 水澄无码AV| 日本一区二区三区四区免费观看| 国产伦精品| 久久久精品一区二区| 婷婷成人久久久精品| 亚洲欧美在线观看2021| 亚洲性爱成人| 91欧美情色| 免费啊啊啊| 91xingse| 日韩成人大片在线观看| 日韩无码视频黄色| 日韩三级av片| 青青操视频在线| 91色综合激情| 四虎AV在线观看| 日韩黄色一区二区三区| 人人做,人人操,人人摸| 熟妇一区二区| 日本久久久精品电影| 午夜啊啊啊| 91九九九馒头| 五月色综合| 国产超碰人人爽人人做| 国内精品久久人妻性色av| 亚洲天堂资源网| 夜夜嗨一区二区三区三州加勒比 | 不卡超碰护士AV在线免费播放| 国产成人精品日本视频| 久久伊人亚洲AV无码网站| 干超碰碰熟女| 天天干18禁| 日韩精品亚洲一二三| 亚洲青青草| 熟女高潮合集-永久久久-成人AV| 亚洲乱色视频一区、二区在线| av天堂影视中文在字幕在线中文| 在线观看国产黄色| 探花熟女,姿勢到位,體驗感也到位| 91一区二区三区蜜桃| 97超碰精品| 97色亚洲| 久久区| 啊啊啊爽爽| 少妇无码999| 色色九区| 友优传媒精品在线一区二区| 好湿好紧视频| 九九九不卡| aV中文麻| 久久精品超碰| 国产精品乱码久久久| 婷婷国产精品一区二区| 国产精品午夜福利| 竹菊一区二区三区AV线| 偷窥自拍亚洲| 久久久久成人网| 人人妻人人爽一区二区三区| 欧美性天天| 最新日产中文在线麻豆| 91c色| 欧美强奸乱能| 人妻aa| 色官网在线| 狠狠色色| 欧美天天插| 高清不卡视频| 精品97精品97| 亚洲成人妻日韩在线| 超碰97亚洲区| 丰满熟女人妻一区二区三五十一路| 亚洲日韩资源| 操熟女91| 久久精品熟女亚洲AV麻豆软件| 尤物视频视频官网| 男女激烈网站最新| 国产精品久久久久久久毛片1| 国产AV无码AV| 天天干天天插| 91啪9色| 日韩美女,国产传媒,视频一区| 亚洲综合图片在线| 一本色道久久综合狠狠操| 日韩欧美女求操每天更新| 国产色图乱伦| 亚洲 自拍偷拍 欧美| 欧美精品久久久久久久久88| 九九综合久久| 岛国AV一区二区电影| 九一综合网| 在线看污网站| 亚洲天堂在线怕怕视频| 国产探花精品在线| 99∨VTV| 欧美性爱一区| 欧美日本视频一区| 久久久久亚洲| 伊人网综合在线视频| 亚洲无码99| 精久久久91| 色九九久九九| 家庭乱伦国产精品| 麻豆国产96在线| 精品人妻二区三区| 精品久久9| 黄片www视频免费| 亚欧日韩成人| 神马视频久久久久久| 91AV天美在线视频|