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

ARTICLE DETAIL

資訊詳情

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

Spring Boot實戰(zhàn):構(gòu)建小區(qū)團(tuán)購管理系統(tǒng)的核心技術(shù)解析

Spring Boot實戰(zhàn):構(gòu)建小區(qū)團(tuán)購管理系統(tǒng)的核心技術(shù)解析 簡介這是一套面向Java初學(xué)者與畢業(yè)設(shè)計學(xué)生的小區(qū)團(tuán)購管理系統(tǒng)實戰(zhàn)項目源碼基于SpringBoot后端框架與Vue前端技術(shù)棧構(gòu)建解決社區(qū)場景下商品發(fā)布、訂單管理、用戶協(xié)同采購等核心業(yè)務(wù)需求。資源包含826個文件涵蓋122個Java后端邏輯類、62個Vue組件頁面、160個JS交互腳本、79個GIF動效素材及35個JPG/PNG圖片資源輔以MySQL數(shù)據(jù)庫腳本與MyBatisPlus持久層配置整體壓縮包大小為25.55MB。目錄結(jié)構(gòu)完整呈現(xiàn)從緒論、技術(shù)選型、系統(tǒng)分析、數(shù)據(jù)庫設(shè)計到各模塊實現(xiàn)的全流程含用戶信息管理、圖片/視頻素材上傳等關(guān)鍵功能代碼。已有63人學(xué)習(xí)下載適合用于課程設(shè)計、畢設(shè)開發(fā)或SpringBootVue全棧能力訓(xùn)練可直接運行調(diào)試并快速理解B/S架構(gòu)下團(tuán)購系統(tǒng)的典型分層設(shè)計與前后端聯(lián)調(diào)邏輯。1. 項目概述從零到一構(gòu)建一個小區(qū)團(tuán)購管理系統(tǒng)最近幾年社區(qū)團(tuán)購的模式可以說是遍地開花尤其是在一些大型社區(qū)里由熱心業(yè)主或團(tuán)長牽頭組織的團(tuán)購解決了大家日常采購的不少痛點。但隨之而來的問題也很明顯訂單統(tǒng)計靠接龍、收款對賬靠手動、商品信息更新不及時團(tuán)長們常常忙得焦頭爛額效率低下還容易出錯。作為一個有多年Java后端開發(fā)經(jīng)驗的從業(yè)者我意識到是時候用技術(shù)手段來解放這些“民間團(tuán)長”的生產(chǎn)力了。于是我決定動手設(shè)計并實現(xiàn)一個輕量級、易部署、功能完備的小區(qū)團(tuán)購管理系統(tǒng)。這個項目的核心目標(biāo)很明確為小區(qū)內(nèi)的團(tuán)購活動提供一個數(shù)字化的管理平臺。它需要覆蓋從商品上架、訂單收集、支付對賬到配送核銷的全流程同時兼顧團(tuán)長管理員和普通住戶用戶兩種角色的使用體驗。在技術(shù)選型上我毫不猶豫地選擇了Java Spring Boot這套經(jīng)典組合。Spring Boot的“約定大于配置”理念和快速啟動能力能讓我們把精力集中在業(yè)務(wù)邏輯的開發(fā)上而不是繁瑣的框架整合。配合MyBatis-Plus、Redis、MySQL這些成熟的技術(shù)??梢钥焖贅?gòu)建出一個穩(wěn)定、可擴(kuò)展的后端服務(wù)。這個系統(tǒng)不僅僅是CRUD的簡單堆砌它涉及到一些典型的電商業(yè)務(wù)場景比如庫存的并發(fā)控制、訂單狀態(tài)的流轉(zhuǎn)、微信支付或支付寶的集成、以及基于角色的權(quán)限管理。接下來我將從整體設(shè)計、核心模塊實現(xiàn)、踩坑實錄以及部署上線這幾個方面為你完整拆解這個項目的構(gòu)建過程。無論你是想學(xué)習(xí)Spring Boot實戰(zhàn)還是正打算為你的小區(qū)開發(fā)一個類似的管理工具相信這篇詳盡的記錄都能給你帶來直接的參考價值。2. 系統(tǒng)整體架構(gòu)與核心設(shè)計思路在動手寫代碼之前合理的架構(gòu)設(shè)計是保證項目后期可維護(hù)、可擴(kuò)展的關(guān)鍵。對于這個小區(qū)團(tuán)購系統(tǒng)我采用了經(jīng)典的分層架構(gòu)和前后端分離模式后端提供RESTful API前端可以是Vue、React或小程序負(fù)責(zé)展示和交互。這樣做的最大好處是職責(zé)清晰前后端開發(fā)可以并行也便于未來多端適配比如同時開發(fā)Web管理端和住戶用的小程序。2.1 技術(shù)棧選型與考量為什么是這套技術(shù)棧每一個選擇背后都有其實際考量。后端框架Spring Boot 2.7.x。這是Java領(lǐng)域微服務(wù)開發(fā)的事實標(biāo)準(zhǔn)。它內(nèi)嵌了Tomcat服務(wù)器通過Starter依賴能一鍵集成絕大多數(shù)常用組件如數(shù)據(jù)庫、緩存、安全等。我選擇2.7.x這個長期支持版本是因為它足夠穩(wěn)定社區(qū)資源豐富避免了使用最新版本可能遇到的未知坑。持久層MyBatis-Plus MySQL。MyBatis-Plus在MyBatis的基礎(chǔ)上做了大量增強提供了通用的Mapper和Service能極大減少單表CRUD的代碼量。對于團(tuán)購系統(tǒng)里大量的商品、訂單、用戶數(shù)據(jù)關(guān)系型數(shù)據(jù)庫MySQL是可靠的選擇。同時使用MyBatis-Plus的樂觀鎖插件能優(yōu)雅地處理庫存扣減這類并發(fā)問題。緩存Redis。主要用于兩類場景一是緩存熱點數(shù)據(jù)如首頁的商品列表、分類信息減輕數(shù)據(jù)庫壓力二是存儲用戶登錄的Token采用JWT方案時可以將Token加入黑名單或存儲額外信息以及用作分布式鎖確保在高并發(fā)下單時庫存扣減的準(zhǔn)確性。權(quán)限安全Spring Security JWT。Spring Security提供了強大且靈活的安全框架。結(jié)合JWTJSON Web Token實現(xiàn)無狀態(tài)的認(rèn)證授權(quán)是當(dāng)前主流。用戶登錄后后端生成一個包含其身份和權(quán)限信息的Token前端在后續(xù)請求中攜帶后端驗證Token有效性并解析出用戶信息無需在服務(wù)端保存會話。其他工具Lombok通過注解自動生成Getter/Setter、構(gòu)造方法等讓實體類代碼更簡潔。Hutool一個Java工具類庫提供了很多實用的方法比如日期處理、加密解密、HTTP客戶端等能避免重復(fù)造輪子。Swagger/knife4j自動生成API文檔前后端聯(lián)調(diào)和測試時非常方便。注意技術(shù)選型沒有絕對的好壞只有是否適合當(dāng)前場景。對于小區(qū)團(tuán)購這種量級這套技術(shù)棧在開發(fā)效率、運行性能和團(tuán)隊學(xué)習(xí)成本上取得了很好的平衡。如果預(yù)估并發(fā)量極高可以考慮引入Spring Cloud Alibaba套件做微服務(wù)拆分但初期務(wù)必避免過度設(shè)計。2.2 核心業(yè)務(wù)模塊劃分根據(jù)業(yè)務(wù)流程我將系統(tǒng)后端劃分為以下幾個核心模塊每個模塊對應(yīng)一個代碼包package職責(zé)單一用戶模塊 (user)負(fù)責(zé)住戶的注冊、登錄、個人信息管理。這里區(qū)分了普通用戶和團(tuán)長管理員團(tuán)長擁有額外的管理權(quán)限。商品模塊 (product)涵蓋商品分類、商品信息的增刪改查、商品上下架、庫存管理。商品信息包括標(biāo)題、圖片、規(guī)格、價格、起團(tuán)數(shù)量等。團(tuán)購活動模塊 (campaign)一次團(tuán)購可以看作一個活動。它關(guān)聯(lián)了具體的商品并設(shè)置了活動開始時間、結(jié)束時間、成團(tuán)條件如最少參團(tuán)人數(shù)等。這是整個系統(tǒng)的核心驅(qū)動單元。訂單模塊 (order)用戶參與團(tuán)購即生成訂單。這是最復(fù)雜的模塊之一涉及訂單創(chuàng)建、支付集成第三方支付、取消、退款、發(fā)貨、確認(rèn)收貨等完整的狀態(tài)流轉(zhuǎn)。購物車模塊 (cart)雖然團(tuán)購有時是直接下單但提供一個購物車功能能讓用戶體驗更好支持批量下單。地址模塊 (address)用戶管理自己的收貨地址。權(quán)限與安全模塊 (security)集成Spring Security和JWT處理登錄認(rèn)證、接口權(quán)限攔截。公用模塊 (common)存放全局配置、工具類、統(tǒng)一返回結(jié)果封裝、異常處理、常量定義等。這種模塊化劃分使得代碼結(jié)構(gòu)清晰便于團(tuán)隊協(xié)作和后續(xù)的功能迭代。例如當(dāng)需要增加一個“拼團(tuán)提醒”功能時可以很明確地在campaign模塊下進(jìn)行擴(kuò)展。3. 數(shù)據(jù)庫設(shè)計與關(guān)鍵表結(jié)構(gòu)解析數(shù)據(jù)庫設(shè)計是系統(tǒng)的基石設(shè)計得好后期開發(fā)事半功倍。我遵循了第三范式的基本理念同時針對性能做了適當(dāng)?shù)姆捶妒皆O(shè)計如冗余字段。以下是幾個核心表的設(shè)計思路3.1 用戶表 (sys_user)這張表存儲所有系統(tǒng)用戶包括普通住戶和團(tuán)長。通過一個user_type字段來區(qū)分角色如0-普通用戶1-團(tuán)長/管理員。密碼存儲務(wù)必使用加密算法如BCrypt進(jìn)行哈希處理絕對不要明文存儲。CREATE TABLE sys_user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵, username varchar(50) NOT NULL COMMENT 用戶名如手機(jī)號, password varchar(100) NOT NULL COMMENT 加密后的密碼, nickname varchar(50) DEFAULT NULL COMMENT 用戶昵稱, avatar varchar(255) DEFAULT NULL COMMENT 頭像URL, phone varchar(20) DEFAULT NULL COMMENT 手機(jī)號, user_type tinyint(4) NOT NULL DEFAULT 0 COMMENT 用戶類型0-普通用戶1-團(tuán)長, status tinyint(4) NOT NULL DEFAULT 1 COMMENT 狀態(tài)0-禁用1-正常, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 創(chuàng)建時間, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新時間, PRIMARY KEY (id), UNIQUE KEY uk_username (username), KEY idx_phone (phone) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用戶表;3.2 商品表 (product) 與商品分類表 (product_category)商品分類表是一個樹形結(jié)構(gòu)支持多級分類如水果-進(jìn)口水果-車?yán)遄?。商品表則關(guān)聯(lián)分類并包含豐富的商品屬性。CREATE TABLE product ( id bigint(20) NOT NULL AUTO_INCREMENT, category_id bigint(20) NOT NULL COMMENT 分類ID, name varchar(200) NOT NULL COMMENT 商品名稱, sub_title varchar(500) DEFAULT NULL COMMENT 商品副標(biāo)題, main_image varchar(500) DEFAULT NULL COMMENT 主圖, sub_images text COMMENT 子圖JSON數(shù)組, detail text COMMENT 商品詳情富文本, specs json DEFAULT NULL COMMENT 規(guī)格JSON如[{key:重量,value:5kg},{key:產(chǎn)地,value:智利}], price decimal(10,2) NOT NULL COMMENT 單價, stock int(11) NOT NULL DEFAULT 0 COMMENT 庫存, status tinyint(4) NOT NULL DEFAULT 1 COMMENT 狀態(tài)0-下架1-上架, create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_category_status (category_id,status), KEY idx_status (status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品表;實操心得specs字段使用MySQL的JSON類型存儲商品規(guī)格非常靈活前端解析也方便。sub_images字段存儲圖片URL的JSON數(shù)組避免了為商品圖片單獨建表簡化了查詢。但要注意JSON字段的索引和查詢效率問題如果規(guī)格查詢條件非常復(fù)雜可能需要考慮更結(jié)構(gòu)化的設(shè)計。3.3 團(tuán)購活動表 (campaign)這是連接商品和訂單的橋梁是業(yè)務(wù)的核心。CREATE TABLE campaign ( id bigint(20) NOT NULL AUTO_INCREMENT, product_id bigint(20) NOT NULL COMMENT 商品ID, title varchar(200) NOT NULL COMMENT 活動標(biāo)題, start_time datetime NOT NULL COMMENT 開始時間, end_time datetime NOT NULL COMMENT 結(jié)束時間, group_size int(11) NOT NULL COMMENT 成團(tuán)人數(shù)要求, current_size int(11) NOT NULL DEFAULT 0 COMMENT 當(dāng)前參團(tuán)人數(shù), price decimal(10,2) NOT NULL COMMENT 團(tuán)購價, status tinyint(4) NOT NULL DEFAULT 0 COMMENT 狀態(tài)0-未開始1-進(jìn)行中2-已結(jié)束(成功)3-已結(jié)束(失敗), create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_product_time (product_id,start_time,end_time), KEY idx_status (status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT團(tuán)購活動表;狀態(tài)流轉(zhuǎn)邏輯一個定時任務(wù)可以使用Spring的Scheduled注解會定期掃描此表根據(jù)當(dāng)前時間和start_time、end_time以及current_size與group_size的對比自動更新status字段。例如時間到了start_time狀態(tài)從0變?yōu)?時間過了end_time如果current_size group_size狀態(tài)變?yōu)?成功否則變?yōu)?失敗。3.4 訂單表 (order) 與訂單明細(xì)表 (order_item)考慮到一個訂單可能包含多個商品雖然團(tuán)購常見是單商品但設(shè)計上預(yù)留擴(kuò)展性我采用了主-明細(xì)結(jié)構(gòu)。訂單表記錄訂單總覽訂單明細(xì)表記錄具體商品。CREATE TABLE order ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 訂單ID, order_no varchar(32) NOT NULL COMMENT 訂單號唯一業(yè)務(wù)生成, user_id bigint(20) NOT NULL COMMENT 用戶ID, campaign_id bigint(20) DEFAULT NULL COMMENT 參與的團(tuán)購活動ID, total_amount decimal(10,2) NOT NULL COMMENT 訂單總金額, pay_amount decimal(10,2) NOT NULL COMMENT 實際支付金額, pay_type tinyint(4) DEFAULT NULL COMMENT 支付方式1-微信2-支付寶, status tinyint(4) NOT NULL DEFAULT 0 COMMENT 訂單狀態(tài)0-待支付1-已支付2-已發(fā)貨3-已完成4-已取消5-退款中6-已退款, delivery_info json DEFAULT NULL COMMENT 配送信息JSON包含收貨人、電話、地址等, pay_time datetime DEFAULT NULL COMMENT 支付時間, delivery_time datetime DEFAULT NULL COMMENT 發(fā)貨時間, end_time datetime DEFAULT NULL COMMENT 交易完成時間, create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_order_no (order_no), KEY idx_user_status (user_id,status), KEY idx_campaign (campaign_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT訂單表;訂單號生成策略這是一個容易忽略的細(xì)節(jié)。我采用的方案是年月日時分秒6位隨機(jī)數(shù)用戶ID后4位例如202405201430259876541234。這樣既保證了唯一性又一定程度上包含了時間信息和用戶信息排查問題時比較方便??梢允褂肏utool的IdUtil或自定義工具類生成。4. 核心業(yè)務(wù)邏輯實現(xiàn)與代碼詳解有了清晰的數(shù)據(jù)結(jié)構(gòu)接下來就是實現(xiàn)核心業(yè)務(wù)邏輯。我將挑幾個最具代表性的功能點結(jié)合代碼講解其中的關(guān)鍵技術(shù)和避坑點。4.1 用戶認(rèn)證與JWT集成首先在pom.xml中引入Spring Security和JWT相關(guān)依賴。dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-security/artifactId /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-api/artifactId version0.11.5/version /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-impl/artifactId version0.11.5/version scoperuntime/scope /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-jackson/artifactId version0.11.5/version scoperuntime/scope /artifactId然后創(chuàng)建一個JwtUtil工具類負(fù)責(zé)Token的生成和解析。Component public class JwtUtil { Value(${jwt.secret}) // 從配置文件中讀取密鑰 private String secret; Value(${jwt.expiration}) // Token有效期如 7天 private Long expiration; // 生成Token public String generateToken(String username, Long userId, Integer userType) { MapString, Object claims new HashMap(); claims.put(userId, userId); claims.put(userType, userType); return Jwts.builder() .setClaims(claims) .setSubject(username) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() expiration * 1000)) .signWith(SignatureAlgorithm.HS512, secret) .compact(); } // 從Token中解析用戶名 public String getUsernameFromToken(String token) { return getClaimsFromToken(token).getSubject(); } // ... 其他解析方法如解析userId, userType // 驗證Token是否有效 public Boolean validateToken(String token, UserDetails userDetails) { final String username getUsernameFromToken(token); return (username.equals(userDetails.getUsername()) !isTokenExpired(token)); } private Boolean isTokenExpired(String token) { final Date expiration getExpirationDateFromToken(token); return expiration.before(new Date()); } }接著需要配置Spring Security。我創(chuàng)建了一個SecurityConfig類繼承WebSecurityConfigurerAdapterSpring Boot 2.7.x仍支持或?qū)崿F(xiàn)SecurityFilterChainBeanSpring Security 5.7推薦方式。這里展示后一種更現(xiàn)代的方式Configuration EnableWebSecurity public class SecurityConfig { Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 禁用CSRF因為我們是前后端分離使用JWT無狀態(tài)認(rèn)證 .csrf().disable() // 設(shè)置會話管理為無狀態(tài) .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() // 配置請求授權(quán)規(guī)則 .authorizeRequests() .antMatchers(/api/auth/login, /api/auth/register, /swagger-ui/**, /v3/api-docs/**).permitAll() // 登錄注冊和API文檔放行 .antMatchers(/api/admin/**).hasRole(ADMIN) // 管理員接口需要ADMIN角色 .anyRequest().authenticated() // 其他所有請求都需要認(rèn)證 .and() // 添加我們自定義的JWT過濾器 .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class) // 處理異常如未認(rèn)證、權(quán)限不足 .exceptionHandling() .authenticationEntryPoint(new JwtAuthenticationEntryPoint()) .accessDeniedHandler(new JwtAccessDeniedHandler()); return http.build(); } Bean public JwtAuthenticationFilter jwtAuthenticationFilter() { return new JwtAuthenticationFilter(); } // 密碼加密器 Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }自定義的JwtAuthenticationFilter會攔截所有請求從Header中提取Token并進(jìn)行驗證如果有效則將用戶信息設(shè)置到Spring Security的上下文中供后續(xù)業(yè)務(wù)邏輯使用。踩坑實錄務(wù)必在Spring Security配置中放行Swagger相關(guān)的路徑/swagger-ui/**,/v3/api-docs/**否則本地調(diào)試時連API文檔都打不開。另外JwtAuthenticationEntryPoint和JwtAccessDeniedHandler需要自定義以返回統(tǒng)一的JSON格式錯誤信息而不是默認(rèn)的登錄頁或403頁面。4.2 團(tuán)購下單與庫存并發(fā)控制這是整個系統(tǒng)最核心、也最容易出問題的業(yè)務(wù)。用戶下單時需要檢查活動是否進(jìn)行中、庫存是否充足然后扣減庫存、創(chuàng)建訂單。在高并發(fā)場景下多個用戶同時購買最后一件商品會導(dǎo)致“超賣”。方案一數(shù)據(jù)庫樂觀鎖在商品表product中增加一個版本號字段version。更新庫存時帶上版本號作為條件。// Product實體類 public class Product { private Long id; private String name; private Integer stock; private Integer version; // 版本號 // ... getters and setters } // Service層更新庫存方法 Transactional public boolean reduceStock(Long productId, Integer quantity) { Product product productMapper.selectById(productId); if (product null || product.getStock() quantity) { throw new BusinessException(商品不存在或庫存不足); } // 使用MyBatis-Plus的UpdateWrapper在更新時檢查版本號 UpdateWrapperProduct updateWrapper new UpdateWrapper(); updateWrapper.eq(id, productId) .eq(version, product.getVersion()) // 樂觀鎖核心版本號必須匹配 .setSql(stock stock - quantity , version version 1); int rows productMapper.update(null, updateWrapper); return rows 0; // 如果rows0說明版本號不匹配更新失敗被其他線程搶先修改了 }在訂單創(chuàng)建邏輯中調(diào)用reduceStock如果返回false則拋出“庫存更新失敗請重試”的異常提示用戶重新下單。方案二Redis分布式鎖對于秒殺級別的超高并發(fā)數(shù)據(jù)庫樂觀鎖可能壓力較大??梢允褂肦edis的SETNX命令或Redisson客戶端實現(xiàn)分布式鎖確保同一時間只有一個線程能執(zhí)行扣減庫存的核心邏輯。public boolean reduceStockWithRedisLock(Long productId, Integer quantity) { String lockKey product_lock: productId; String requestId UUID.randomUUID().toString(); // 唯一標(biāo)識本次請求用于安全釋放鎖 try { // 嘗試獲取鎖設(shè)置過期時間防止死鎖 Boolean locked redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, 10, TimeUnit.SECONDS); if (Boolean.TRUE.equals(locked)) { // 獲取鎖成功執(zhí)行庫存扣減 Product product productMapper.selectById(productId); if (product.getStock() quantity) { return false; } // 扣減庫存這里可以不用樂觀鎖因為鎖保證了串行化 product.setStock(product.getStock() - quantity); productMapper.updateById(product); return true; } else { // 獲取鎖失敗稍后重試或直接返回失敗 return false; } } finally { // 釋放鎖確保是同一個請求釋放的避免誤刪其他請求的鎖 if (requestId.equals(redisTemplate.opsForValue().get(lockKey))) { redisTemplate.delete(lockKey); } } }實操心得對于小區(qū)團(tuán)購這種場景并發(fā)量通常不會達(dá)到秒殺級別使用數(shù)據(jù)庫樂觀鎖是簡單有效的首選方案代碼清晰對數(shù)據(jù)庫壓力也相對可控。如果真遇到極端情況再考慮引入Redis分布式鎖。但無論用哪種方案一定要在業(yè)務(wù)層給用戶友好的提示比如“當(dāng)前購買人數(shù)過多請稍后再試”而不是直接拋出晦澀的異常。4.3 微信支付集成與回調(diào)處理集成第三方支付是電商系統(tǒng)的標(biāo)配。以微信支付JSAPI用于小程序或公眾號H5支付為例步驟大致如下配置商戶信息在application.yml中配置商戶號mchid、API密鑰apiV3Key、證書路徑等。統(tǒng)一下單用戶提交訂單后后端調(diào)用微信支付統(tǒng)一下單接口生成預(yù)支付交易會話標(biāo)識prepay_id。返回支付參數(shù)將prepay_id及其他必要參數(shù)如時間戳、隨機(jī)串、簽名按照前端要求小程序或H5的格式組裝好返回給前端。前端調(diào)起支付前端使用返回的參數(shù)調(diào)起微信支付界面。處理支付回調(diào)用戶支付成功后微信服務(wù)器會異步通知我們的后端一個特定的回調(diào)URL。這是最關(guān)鍵也是最容易出錯的一步。支付回調(diào)接口的實現(xiàn)要點驗證簽名必須使用微信支付提供的證書和算法驗證回調(diào)請求的簽名確保請求來自微信官方防止偽造支付成功通知。處理冪等性同一個支付訂單微信可能會多次發(fā)送回調(diào)。我們的接口必須保證即使收到重復(fù)通知業(yè)務(wù)邏輯也只執(zhí)行一次比如只將訂單狀態(tài)從“待支付”改為“已支付”一次??梢酝ㄟ^在數(shù)據(jù)庫中記錄微信支付訂單號transaction_id或使用Redis記錄已處理的通知ID來實現(xiàn)。異步處理驗證簽名和冪等性檢查通過后應(yīng)盡快返回SUCCESS的XML響應(yīng)給微信然后通過消息隊列或異步線程去執(zhí)行后續(xù)耗時的業(yè)務(wù)邏輯如更新訂單狀態(tài)、發(fā)送支付成功通知等避免因業(yè)務(wù)處理超時導(dǎo)致微信認(rèn)為回調(diào)失敗而重復(fù)通知。PostMapping(/wxpay/notify) public String wxPayNotify(HttpServletRequest request) throws Exception { // 1. 獲取請求體微信發(fā)送的XML數(shù)據(jù) String body HttpUtils.readData(request); // 2. 將XML轉(zhuǎn)換為Map并驗證簽名此處省略具體驗簽代碼需使用微信支付SDK MapString, String notifyMap WxPayUtil.xmlToMap(body); boolean signatureValid wxPayService.isSignatureValid(notifyMap); if (!signatureValid) { return WxPayUtil.mapToXml(Map.of(return_code, FAIL, return_msg, 簽名失敗)); } // 3. 處理業(yè)務(wù) String orderNo notifyMap.get(out_trade_no); // 我們的商戶訂單號 String transactionId notifyMap.get(transaction_id); // 微信支付訂單號 // 3.1 冪等性檢查查詢本地訂單判斷是否已處理過 Order order orderService.getByOrderNo(orderNo); if (order ! null order.getStatus().equals(OrderStatus.PAID.getCode())) { // 訂單已支付直接返回成功 return WxPayUtil.mapToXml(Map.of(return_code, SUCCESS, return_msg, OK)); } // 3.2 更新訂單狀態(tài)為已支付記錄微信支付單號等 boolean updateSuccess orderService.handlePaySuccess(orderNo, transactionId); if (updateSuccess) { // 3.3 可以在這里觸發(fā)異步事件如發(fā)送短信、更新團(tuán)購活動參團(tuán)人數(shù)等 eventPublisher.publishEvent(new OrderPaidEvent(this, orderNo)); return WxPayUtil.mapToXml(Map.of(return_code, SUCCESS, return_msg, OK)); } else { return WxPayUtil.mapToXml(Map.of(return_code, FAIL, return_msg, 處理失敗)); } }5. 后臺管理功能實現(xiàn)要點團(tuán)長管理員需要一個后臺管理界面來管理商品、活動、訂單和用戶。這里主要講后端API的設(shè)計。5.1 商品與活動管理商品和活動的增刪改查是基礎(chǔ)功能。需要注意的是上架一個團(tuán)購活動時必須進(jìn)行業(yè)務(wù)校驗關(guān)聯(lián)的商品必須存在且已上架?;顒拥拈_始時間必須晚于當(dāng)前時間?;顒拥慕Y(jié)束時間必須晚于開始時間。團(tuán)購價不能高于商品原價除非有特殊邏輯。如果活動進(jìn)行中或已結(jié)束則不允許修改核心信息如價格、成團(tuán)人數(shù)只能修改一些補充信息或提前結(jié)束活動。對于列表查詢通常需要支持分頁、按名稱搜索、按狀態(tài)篩選等。使用MyBatis-Plus的Page對象和QueryWrapper可以輕松實現(xiàn)。GetMapping(/admin/campaign/list) public ApiResultPageCampaignVO listCampaign(RequestParam(defaultValue 1) Integer pageNum, RequestParam(defaultValue 10) Integer pageSize, RequestParam(required false) String keyword, RequestParam(required false) Integer status) { PageCampaign page new Page(pageNum, pageSize); QueryWrapperCampaign queryWrapper new QueryWrapper(); queryWrapper.like(StringUtils.isNotBlank(keyword), title, keyword); queryWrapper.eq(status ! null, status, status); queryWrapper.orderByDesc(create_time); PageCampaign campaignPage campaignService.page(page, queryWrapper); // 將Campaign Page 轉(zhuǎn)換為 CampaignVO PageVO中可能包含商品名稱等關(guān)聯(lián)信息 PageCampaignVO voPage convertToVOPage(campaignPage); return ApiResult.success(voPage); }5.2 訂單管理與狀態(tài)流轉(zhuǎn)后臺需要能看到所有訂單并支持按訂單號、用戶、狀態(tài)等多維度篩選。更重要的功能是訂單狀態(tài)的強制操作比如發(fā)貨輸入物流單號將訂單狀態(tài)從“已支付”改為“已發(fā)貨”。取消訂單對于未支付的訂單可以手動關(guān)閉對于已支付的訂單需要走退款流程。處理退款對接微信/支付寶的退款接口并在退款成功后更新訂單狀態(tài)。這些操作都需要記錄操作日志方便后續(xù)追溯。可以設(shè)計一張order_operate_log表記錄訂單ID、操作類型、操作人、操作前狀態(tài)、操作后狀態(tài)、備注和時間。6. 系統(tǒng)部署與運維考量開發(fā)完成后如何讓系統(tǒng)穩(wěn)定運行起來我推薦使用Docker容器化部署簡單高效。6.1 使用Docker Compose一鍵部署編寫一個docker-compose.yml文件定義MySQL、Redis和應(yīng)用服務(wù)。version: 3.8 services: mysql: image: mysql:8.0 container_name: community-mysql environment: MYSQL_ROOT_PASSWORD: your_strong_password MYSQL_DATABASE: community_buy ports: - 3306:3306 volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d restart: always redis: image: redis:7-alpine container_name: community-redis ports: - 6379:6379 volumes: - ./redis/data:/data restart: always app: build: . container_name: community-app depends_on: - mysql - redis ports: - 8080:8080 environment: - SPRING_PROFILES_ACTIVEprod - DB_HOSTmysql - REDIS_HOSTredis restart: always然后在項目根目錄創(chuàng)建DockerfileFROM openjdk:11-jre-slim VOLUME /tmp ARG JAR_FILEtarget/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT [java,-jar,/app.jar]在服務(wù)器上只需安裝好Docker和Docker Compose將項目Jar包和配置文件準(zhǔn)備好執(zhí)行docker-compose up -d整個服務(wù)棧就會啟動。6.2 配置文件與敏感信息管理切勿將數(shù)據(jù)庫密碼、支付密鑰等敏感信息硬編碼在代碼或application.yml中。Spring Boot支持多種配置方式生產(chǎn)環(huán)境配置使用application-prod.yml并通過環(huán)境變量SPRING_PROFILES_ACTIVEprod激活。敏感信息使用環(huán)境變量或?qū)iT的配置中心如阿里云ACMSpring Cloud Config。在docker-compose.yml中通過environment傳遞。# application-prod.yml 示例 spring: datasource: url: jdbc:mysql://${DB_HOST:localhost}:3306/community_buy?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai username: ${DB_USER:root} password: ${DB_PASSWORD:} # 從環(huán)境變量獲取 redis: host: ${REDIS_HOST:localhost} port: 6379 wx: pay: mchid: ${WX_MCHID} apiv3-key: ${WX_API_V3_KEY} # 從環(huán)境變量獲取6.3 日志與監(jiān)控日志使用Logback或Log4j2配置合理的日志級別和滾動策略。將日志文件掛載到宿主機(jī)便于查看。關(guān)鍵業(yè)務(wù)操作如支付回調(diào)、庫存扣減務(wù)必記錄INFO或WARN級別日志。健康檢查Spring Boot Actuator提供了/actuator/health端點可以集成到Docker的健康檢查或運維監(jiān)控平臺中。錯誤報警可以集成Sentinel或SkyWalking進(jìn)行鏈路追蹤和異常報警。對于小型項目至少應(yīng)該配置日志文件監(jiān)控當(dāng)出現(xiàn)大量ERROR日志時能及時通知。7. 開發(fā)與部署過程中的常見問題排查在實際開發(fā)和部署中我遇到了不少典型問題這里總結(jié)一下希望能幫你避坑。問題現(xiàn)象可能原因排查步驟與解決方案服務(wù)啟動報DataSource連接失敗1. 數(shù)據(jù)庫地址/端口錯誤。2. 數(shù)據(jù)庫未啟動。3. 用戶名密碼錯誤。4. 網(wǎng)絡(luò)不通Docker容器間。1. 檢查application.yml配置特別是生產(chǎn)環(huán)境配置文件是否激活。2. 使用docker ps或mysql -h host -u user -p手動連接測試。3. 在Docker Compose中確保服務(wù)依賴depends_on設(shè)置正確但注意它只控制啟動順序不保證數(shù)據(jù)庫已就緒。建議應(yīng)用啟動腳本中加入對數(shù)據(jù)庫的健康檢查重試機(jī)制。微信支付回調(diào)一直收不到或收到但簽名驗證失敗1. 回調(diào)URL未在微信商戶平臺正確配置或未備案。2. 服務(wù)器防火墻/安全組未開放對應(yīng)端口。3. 驗簽邏輯錯誤特別是APIv3密鑰或證書不對。4. 網(wǎng)絡(luò)問題導(dǎo)致微信無法訪問你的公網(wǎng)回調(diào)地址。1. 在微信支付后臺仔細(xì)檢查回調(diào)URL確保是https生產(chǎn)環(huán)境必須且可公網(wǎng)訪問。2. 使用curl或Postman模擬微信回調(diào)本地調(diào)試驗簽邏輯。3.務(wù)必使用微信支付平臺提供的證書工具重新下載證書并確保代碼中加載的證書路徑正確。APIv3密鑰和之前的API密鑰不同。下單時出現(xiàn)“庫存超賣”1. 未做并發(fā)控制。2. 樂觀鎖更新失敗后未給用戶明確提示。3. 緩存與數(shù)據(jù)庫庫存不一致。1. 確??蹨p庫存的操作是原子性的使用4.2節(jié)提到的樂觀鎖或分布式鎖。2. 在Service層捕獲樂觀鎖更新失敗異常返回明確的業(yè)務(wù)錯誤信息如“庫存不足請重新下單”。3. 如果使用了Redis緩存商品庫存需要保證緩存和數(shù)據(jù)庫的雙寫一致性更新數(shù)據(jù)庫后要刪除或更新緩存。前端請求API返回403或4011. 請求未攜帶Token或Token已過期。2. Token格式錯誤。3. 接口路徑被Spring Security攔截但用戶角色權(quán)限不足。1. 檢查前端請求頭Authorization是否正確格式Bearer your_jwt_token。2. 在JwtAuthenticationFilter中打印Token解析日志看是否拋出異常。3. 檢查SecurityConfig中的權(quán)限配置antMatchers().hasRole()是否與用戶實際角色匹配。使用MyBatis-Plus查詢結(jié)果字段為null1. 實體類屬性名與數(shù)據(jù)庫字段名未正確映射下劃線轉(zhuǎn)駝峰默認(rèn)開啟但特殊名稱可能不對。2. 查詢時未指定要查詢的列默認(rèn)查詢所有但可能有關(guān)聯(lián)字段未在SQL中體現(xiàn)。1. 在實體類字段上使用TableField注解指定數(shù)據(jù)庫列名如TableField(user_type)。2. 檢查是否使用了TableName注解指定表名。3. 對于復(fù)雜的聯(lián)表查詢建議使用自定義的XML映射文件或QueryWrapper手動構(gòu)建查詢SQL。最后再分享一個部署時的小技巧在docker-compose.yml中為應(yīng)用服務(wù)添加一個healthcheck配置讓Compose能判斷應(yīng)用是否真正啟動成功這比單純的depends_on更可靠。app: build: . ... healthcheck: test: [CMD, curl, -f, http://localhost:8080/actuator/health] interval: 30s timeout: 10s retries: 3 start_period: 40s這個項目從設(shè)計到實現(xiàn)再到部署上線幾乎涵蓋了中小型Java Web項目的全流程。過程中最大的體會是清晰的業(yè)務(wù)邊界劃分和穩(wěn)健的并發(fā)處理是后端系統(tǒng)的生命線。不要急于堆砌功能先把核心鏈路用戶-商品-活動-訂單-支付跑通、跑穩(wěn)。這個系統(tǒng)完全可以作為Spring Boot的進(jìn)階練手項目其中涉及的JWT認(rèn)證、樂觀鎖、支付集成、Docker部署等都是非常實用的技能點。你可以根據(jù)自己小區(qū)的實際需求在此基礎(chǔ)上增加更多功能比如拼團(tuán)提醒、團(tuán)長傭金統(tǒng)計、財務(wù)報表導(dǎo)出等讓它真正成為一個好用、耐用的社區(qū)工具。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
六九九九| 欧美最婬乱婬爆婬牲视频| 天天综合-91入口| 第四色色综合91| 99老司机精品视频在线观看| 超碰97人人乐| 极品AV网站在线观看| 久久免费精品视频免一| 狠狠爱综合网| 日韩国产九九精品一区二区三区毛片| 另类图片五月| 国模不卡| 约操熟妇| 999亚洲国产视频| 久伊人网78| 国产白嫩精品久久| 久无码| 女人 A一级| 夜色综合| 97久操| 伊人青青草久久| 一个人免费视频观看在线WWW| 亚洲情色图片区| 色婷婷电影网| 久久黄色性爱视频| 99视频这有这里有精品| 久久av一级av少妇av高潮 | 国产精品久久天天干| 中文字幕欧美精品亚洲日韩蜜臀| 在线黄色污污网站| 性性欧美| 色91综合网| 婷婷久久五月| 亚洲女毛多水多21P| 国产一级内射高清视频| 五月天亚洲色图| 日韩AV噜噜噜一区二区三区四区| 日韩天天本| 九九色综合| 中文字幕 国产 精品| 少妇3P性爱自拍| 久久亚洲AV无码白度| 91热热色| 快灬快灬 一下爽蜜桃在线观看 | 日日夜夜狠狠| 久久久久免费少妇| 亚洲91亚洲| 综合色图,成人综合网| 色九区| av午夜影院在线播放| 人人做天天爱| 成人八戒网站| 91碰碰| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 伊人久久大香线蕉无码| 欧成人精品一区二区三区| 精品久久久久成人码免| 高清视频一区| 色与欲影视| 啊啊啊啊免费视频| 精品一级毛片在线观看| 中国一级操逼视频| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 国产传媒日韩| 成人97人人超碰人人| {男男暴菊gay无套网站| 成人26uuu| 国产精品爽爽v| 亚洲成人性爱网站在线播放| 色色五月丁香| 久久天天躁日日躁狠狠躁 | 九九九久久久久| 日韩不卡码| 一本一首道人妻少妇免费久久| 超碰人妻久久人妻中文97| 熟女网站最新| 婷婷国产精品一区二区| 密乳AV免费观看| 欧美日韩国第一区| 呻吟 欧美 日本 中出| 亚洲丝袜少妇在线| 草草影院最新网址| 艹我哪美一区无码| 亚洲影视高清第一页| 久久久久白虎| 国产日韩区| 成人美女av| www99热| 久久只有精品一区二区三区| 91高清欧美| 亚洲日韩人妻中文字幕一区| 91精品久久综合熟女| 欧美综合第一| 精品久久97| 亚洲欧洲自拍图片专区满春格| 欧美在线观看综合国产| 免费人人搞97| 精品美女少妇一区二区| 国产理论视频在线播放| 亚洲日本男人天堂网| 长久操视频| 91社区伊人| 亚洲最新中文字幕免费| 日韩精品操少妇| 日本人妻天堂网站在线播放| 99福利社| 五月婷婷综合在线| com 首页 18岁 禁区 女优 免费 精选 同城| 亚洲日韩美女丝袜美腿人妻视频| 黄片aaaaa一区| 九九九久久久久| 9Ⅰ超碰| 欧美日韩在线国产在线| 和协影院中文字幕三区| 欧美一级黄色免费专区| 日韩久久超碰色| 激情综合 婷婷五月 红杏| 99re国产精品视频| 91艹逼精品| 国产极品馒头逼| 国产超碰| 亚洲少妇综合| 91校园春色长篇| 看全色黄大色大片免费视频| 99热这里是精品| 99re热| 色操逼网| 欧美影音在线| 另类综合另类| 99久久久| 天天插天天插| 天天日天天干少妇日| 国产精点久久久成人| 加勒比伊人综合| 日本不卡高清视频| 天天操天天日青青草超碰av| 日韩久久激情精品| 强乱老妇中文字幕| 久操热线| 69av一区二区三区| 啊啊啊啊啊啊啊啊要喷了| 囯戸精品高潮呻吟旡码| 女人18精品一区二区三区| 免费中文在线| 美女t无毒不卡不卡| 久碰视频| 人妻一二三区| 91少妇通奸网站| 强奸乱伦Av网| 96久久久久久久| 久99| 亚洲**2021在线观看| 亚洲AV无码天美传媒一区| 97天堂| 一区二区三区蜜桃成人撸久久东京热 | 五月综合久久| 无码一区免费在线不卡| 色偷综合| 欧美熟妇视频| 男人a天堂手机在线版| 操老熟女AV| 激情综合五月婷婷| 色五天伊人| 变态另类专区| 插老姨肥穴| 岛国网址国产 | 色香综合天天影视综合 | 中文字幕视频在线观看| 亚欧美天堂在线| 密乳AV免费观看| 一卡二卡三卡| 91黑丝美女| 乳欲人妻办公室奶水| 啊啊啊爽爽| 99九九久久| 亚洲AV成人无码久久精品播放| v91av| 久久成年精品| 久久久草成人网站久久久草成人久久久草久久久 | 人妻少妇精品一区二区三区| 天天看天天干| 97精品视频在线播放| 毛片17S| 亚洲国产精品无码AV在线| 美女t无毒不卡不卡| 久偷拍欧美日韩三区| 色色综合网站| 屁屁影院一区二区三区国产 | 九九久久久久久爱| 天天干天天做| 久久久激情| 国产日韩色综合| 天天天干977| 啊啊啊不要好爽日韩无码一区| 巨爆乳肉感一区二区三区竹菊影视| 亚洲精品97| 人人九九精| 国产乱弄免费在线视频。| 久99热| 亚洲欧美自拍偷拍| 99re28在线观看| 欧美青青视频| 日韩av三四区| 成年男人的天堂| 日本高清有码网址视频| 再深点灬舒服灬太大了添视频| 久9九综合在线| 加勒比人妻综合| 国产传媒日本欧美专区| 亚洲色图欧美色图制服丝袜| 人人人人人人少妇| 亚洲黄色影视| 婷婷九月色| 睡产熟女乱伦| 性在久久久久久| 日韩欧美操逼xxx| 亚洲综人| 免费男人的天堂| 亚洲天堂资源| 青青草玖玖爱| 99蜜月精品久久| 国产免费一区| 大香蕉日亚洲日本亚大| 日本精品九九九| 伊人少妇久久久| 久久久专区| 9999亚洲电影| 九九亚洲色在线观看| 97一区二压| 日韩天天本| 日本最新1区2区3区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 天天综合91入口| 国产乱弄免费在线视频。| 久久综合99| 大香蕉综合| 熟女被操视频网址| 五月天开心网| 午夜久久一区二区无码中出| 久久久久久久 九九九九九九九| 国产少妇与亚洲av| 中国小夫妻勾搭露脸淫荡对白| 青青草黑寡妇男人天堂| 在线观看视频91| 欧洲一区二区三区四区在线观看| 97资源亚洲| 女人综合网| 夜夜草天天| 亚欧无码在线| 丁香五月性| 91精品成人www| 亚洲蜜臀懂色| 亚洲se电影| 婷婷午夜清品久久久久久久性色视频观| 97日韩超碰超碰中文字幕| 亚洲动态色图| 无码 黑人一区二区三区| 国产又黄又粗的视频| 国产精品久久久久亚洲av| 久久久精品成人国产| 97超碰碰碰| 99精品热| 天堂亚洲欧美| 中日韩久久久| 日韩偷拍色图| 欧美97av| 成人日韩3| 免费黄色视频网址| 欧洲一区二区三区免费| 97免费视频在线| 98人妻精品一区二区色欲| 亚洲成人美女无吗| 色91综合网| 亚洲久草AV色图| 久夜视频| 97人人超| 综合欧美日韩在线| 96麻豆精品一区二区三区| 成·人免费午夜在线观看| 亚洲毛片一级带毛片基地| 黄页大片在线观看| 欧美激情在线观看视频| 亚洲中文国际强奸字幕| 91 丝袜在线| 综合少妇网| 久久久久久日韩| 国产性感骚丝袜在线| 黄页网站成人免费| 丝袜剧情| 亚洲人妖网| 欧美激情综合网| 五月婷婷性爱| 国产精品乱码久久久久久久| 久久久久久亚洲Av无码| 东京热av男人的天堂| 日日骚AV| 久久久久久久久久久久久9999| 亚洲日本大香蕉1| 思思热国产在线视频| 美女高潮视频91| 精品女同一区| 久久人人爽人人爽人人片Ⅴ| 九九九热精品| 亚洲最大的综合性av| 天堂伊人久久| 1级黄色夫妻对换性交免费看| 日韩乱码Av| 久久免费少妇| 六六久久日韩不卡| 东北操逼| 乳欲人妻办公室奶水| 国产精品久久久久久久免牛肉蒲团| 国产色图乱伦| 亚州久久9| 啪啪啪精品| 午夜激情床戏激情| 国产精品久久久吖| 先锋音影AV| 日韩精品人妻一| 青青伊人久久| 99色综合| 成人性爱免费播放| 九九九热精品| 丁香五月影院| 亚洲无码精品AV久久久| 色天堂综合| 久久精品国产亚洲AV嘿嘿| 天天爽爽爽爽| 中文字幕,人妻,日韩| 亚洲一二三| 天天干人妇| JuliaAnn丝袜熟女系列| 欧美第38页| 精品国产丝袜一区二区三区乱码| 无马一区二区| 99天天超碰| 亚洲中文字幕熟女| 亚洲欧洲日产国产综合网| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 国产精品一区人妻精品阁在线| 人妻丝袜美腿中文字幕| 91/欧美| 超碰人人干| 久久午夜色播影院免费高清| 九七人妻在线| 国产女人高潮视频| 欧美亚洲尤物久久| 亚州综合色| 国产精品密臀网在线观看| 老司机深夜影院18未满| 亚洲,欧美,综合网| 日韩无码服务区| 99综合| 久久这里只精品免费福利| AV色图| 一区二区日韩欧美久久| 免费?级毛片无码?∨蜜芽试看| 蜜桃臀AV在线| 性色国产东北露脸精品视频| 日本精品成人无码| 一区操逼日比视频| 激情小说亚洲| 我想要啊 啊 啊| 日韩情色视频| 色狠狠综合| 国产精品99精品视频网站| 欧美97免费| 啊啊啊啊啊啊啊啊啊啊在线观看| 日本三级中国三级99人妇网站| 粉嫩av久久一区二区三区| 亚洲综合色图欧美| 蜜臀无码一区二区| 99精品无码| 日日摸夜夜夜夜爽| 中文字幕一区二区日韩网| 蜜臀99精品国产高清在线观看| 青青草大香蕉在线视频| 又大又长又爽| 激情五月天色播| 国产成人超碰在线| 26uuu最新| 天天干18禁| 色九色久| 久久精品男人的天堂| 老师充足的奶水小说| 99亚亚热| 亚洲人成网www| 久久这里只精品99re66图| 国产精品美女久久久久AⅤ国产馆| 99rre在线精品99re8| 亚洲精品人伦一区二区| 亚洲视频二区 | 亚洲最大的黄色电影网站。| AV一二区| 国产精品乱码久久久久久久久久久久| 91红杏| 亚洲综合另类欧美久久久| 亚洲成人福利电影免费| 岛国网址国产| 国产福利影视| 精品少妇一区二区三区在线视频| 亚洲日韩国产欧美综合v| 人妻精品一区二区在线| 岛国艾薇凹凸视频天堂| 国产三级多多影院2022国产AA一级毛片无码 | 淫纸中9区| 精品无码一区二区三区| 综合网亚洲1| 成人草草视频| 久久久久久免费电影| 亚洲人人夜夜澡人人爽| 老熟女乱伦片| 午夜天堂精品久久久久91| 国产精品亚洲免费| 加勒比色综合| 操逼内射干逼白丝91| 日本少妇va7777| 亚州,欧美在线| 亚洲AV秘 精品久久老牛影视| 日本护士高潮| 亚洲色图国产另类| 亚洲熟妇一,二,三期| 亚洲国产欧美中文永久| 国产欧美日产一区二区三区 - 国产欧美日| 99re28在线观看| 日本女人操逼| 伊人9| 国产精品露脸在线观看| 男人的天堂2010| 91美女视频直播| av在线观看不卡网站| 天美传媒国产原创中文字幕亚洲欧美另类 | 操逼短片| 欧美日韩操逼嗦吊| 正宗无毛一线天嫩逼| 欧美视频中文字幕区| 嗯嗯啊好大| 人人艹亚洲| 日韩精品影视| 日逼视频日本| 女人18精品一区二区三区| 日本高清一区二区在线| 凹凸精品熟女在线观看| 亚洲天堂人人妻| 国产乱伦亚洲色图高清无码| 九一综合网| 日韩一级特黄av毛片| 欧美少妇高潮| 日本熟妇一区二区三区| 中国熟妇| 久久久久久久国产| 777奇米影视777四色| 91殴美| 91五月天| 资源在线观一 二| 久久久一区二区三区三州| 91丨精品丨国产丨丝袜| 涩五月婷婷| 伊人久久综合影院精品久久久| 亚州综合AⅤ| 丰满人妻一区二区三区在线| 精品伊人久久久大香线蕉小说| 99久久免费看精品国产一区| 日韩钢筋无码高清啾啾啾| 激情久久久| 午夜乱轮操逼视频免费看| 国产精品伦理| 午夜精品久久久99| 人妻激情偷乱视频一区二区三区| 操婷婷逼| 香蕉久久国产AV一区二区| 亚洲精品国产精品乱码不99| 7777奇米影视久久| 国产操逼网站亚洲一级黄色| 91精品人| 人妻精品视频一区二区三区| 久9re热视频这里只有精品| 国产夫妻性生活视频| 欧美72网页| 一区二区 韩日AV| 亚洲另类综合欧美| 在线啊啊啊啊| 成人网欧美风情| 欧美男女午夜啪啪| 精产品久久| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 日韩成人高清一区二区| 疯操AV| 欧美中文字幕一区| 久久发布国产伦子伦精品| 97视频在线免费看| 97国产亚洲中文在线| 色女综合| 欧美日韩国产色五月综合在线| 亚洲欧美综合网| 久久久女人| 日产操逼| 日韩女模中文造逼| 99999精品视频| 欧美综合制服在线| 欧美色视| 午夜影美女日鸡鸡天天视频国产| 天天视频综合在线观看视频| 欧美亚州手机在线| 日日黄色三级网站| 精品九九九九九九| 日韩乱伦视频| 欧美精品偷拍| 九t超碰| 97久久网| 亚洲精品美女久久久久久久久| 天天干少妇| 欧美熟女妇同| 绯色一区二区三区不卡少妇| 婷婷久久综合久| 中文字幕大片三级狠狠干| 亚洲影视高清第一页| 午夜国产综合视频在线观看| 欧美强奸乱能| 另类视频在线| 视频黄色国产一级| 在线视频五十市| 美女黄页网站| 欧美一级特黄淫片在线观看| 丰满搜索结果 -第18页- 久久高清无码| 久久中文字幕人妻熟av女蜜柚| 一区二区三区亚洲| 日韩99神马视频播放| 亚洲一区中文精品| 校园春色综合| 国内毛片欧美香蕉精品| 青青色综合| 日韩免费中文字幕视频| 亚洲黄色影视| 超碰97 线线 在现| 色呦呦、国产精品| 性爱视频免费网址| 亚拍在线| 日韩欧美操逼xxx| 白丝1区2区3区| 欧美aa一级片| 黑人性欧美| 青青操在线视频| 一道本东京热加勒比一区二区三区 | 超碰99re| 91挑色欧美| 天天看,天天做| 国产精品久久久| 上床不卡网站| 国产玖玖| 一区二区三区 日韩欧美| 国产中午字一暮区| 少妇高潮特黄A片| 农村少妇久久久久久久| 青青草日本中文字幕| 亚洲日韩精品在线播放| 操逼视频国产无套| 90后后入| 免费97视频| 中文字幕乱碼在线| 爱爱动态120秒| 亚洲成人日韩小说| 久久岛国| 射综合网| 人妻91少妇| 伊人991| 色欲人妻一区二区在线| 黑操B| 伦理片秋霞免费影院| 成年人黄色视频免费| 9精品久久久久| 大干人妻| 国产精品久久久久久久久久久久久久| 自拍视频大全亚洲专媒视频/一区二区三区| 亚欧性爱ab| 探花在线免费观看视频国产一区| 国产精品原创巨作?v网站| 大香蕉78| a片偷拍视频| 伊人专区一区二区三区| 久久久91| 久久 精品| 96麻豆精品一区二区三区| 国产2.3.4区| 亚洲九九视频| 我要色综合网| 家庭乱伦性爱av| 欧美顶级黄色大片免费| 日本久久天堂| 婷婷五月天久久久| 麻豆国产96在线| 乱伦熟女区| 探花熟女,姿勢到位,體驗感也到位| 乱伦系列一区二区| 四虎影视在线| 久久亚码| 超碰97综合在线| a片自拍直播视频| 国产操逼逼网| www.四虎在线| 国产亚洲日本| 69精品| 26uuu性物| 污啪啪啪视频| 久久久av爱| 欧美激情精品久久久| 超碰97丝袜| 婷婷去俺也去六月色| 男人天堂2019亚洲| 成人精品水蜜桃久久久久久久| 另类欧美综合| 国产成人免费观看在线视频| 欧美 亚洲 大香| 亚洲色图A| 欧美成人一级免费电影| 久久99国产综合精品女同| 91AV天美在线视频| 日韩欧美成人综合在线| 日本一区二区电影网站| 97se亚洲综合自| 女人与公拘交酡2020视频| 伦理日韩国产久久| 无码丰满熟妇一区二区浪潮AV| 婷婷色导航| 91M一社| 操迟操逼在巾线Fre看| 97色论| 九热中文字幕| 久久欧美1卡2卡3| 亚洲人妻久久久| 日韩中文字幕视频| 天天天乱色综合全| 国产狂喷潮在线精品| 天天摸天天碰天天添青青| 中文字幕日韩专区精品系列| 亚洲熟妇熟在线电影视频| 精品69网| 九九自拍伦理| 国产精品自拍欧美在线| 欧美精品激情| 91美女视频在线| 九九九九精品九九九九| 久久久久久性爱片| ,成人免费啪啪视频| 精品人妻二区三区| 色久桃花影院在线观看| 熟女欧美日韩综合婷婷| 午夜乱轮操逼视频免费看| 亚洲淫乱骚妇AV| 成人无码影片视频在线| 大香蕉78| 亚洲 中文 欧美 日韩 在线| 一本久久精品中文字| 丝袜美腿欧美| 2018色综合天天操| 蜜臀av在线播放一区二区三区| 26UUU欧美日本| 欧美日韩不卡传媒| 久久久久久九九九九-美女久久久久久久-成人AV | 精品日韩人妻精品一二三区| 亚洲图片视频小说| 黑丝日韩av丝袜av| 婷婷97| 日韩三级天堂在线观看| 中国一级操逼视频| 黄色片A级一区二区三区| 日韩精品三级| 国产蜜臀精品一区二区尤物| 久久久一区二区| 在线人妻熟女一区二区三区四区五区| 激情网五月天| 久久亚洲AV无码专区国产精品| 免费看久久久性性| 先锋色眉乱伦资源| 九九热AV| 久久这里只精品免费福利| 国产精品乱码久久| 久久久蜜桃臀无码视频| 欧美日韩中文字幕人妻| 97超碰美女| 久久久涩| 日韩性爱啪啪视频| 网友自拍第1页 | 日本道日本道中文字幕日本道最新日本道在线观看| 日本女厕偷拍| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 欧美 牲| 超碰激情808| WWW黄片COM| 国产在线视频二区| 亚洲日韩人妻中文字幕一区| 国产真乱mangent| 天天综合网日韩7799| 亚洲啪啪视频一区二区| 亚洲精品久久久久久久蜜桃臀| 18禁看网站一区| 人妻另类 专区 欧美 制服| 日韩免费在线视频观看| 日本www操操操| 91人妻最真实刺激绿帽| 爽 好舒服 无码刺激久久| 久超碰在| 人妖欧美一区二区| 99re这里只有精品9| 人人操人人摸avav| 性色乱AV一区二区| 中文字幕第二页| 青青青国产手线观看视频2| 少妇天堂网络| 国产美女在线精品免费看| 国产精品熟女九九九| 成人性爱全视频观看| 亚洲欧美日韩中文播放| 99国产精品自在自在| 国产亚洲人妻综合日韩 久久| 内射老妇BBWX0C0CK| 蜜臀va69| 精品美女少妇一区二区三区| 99操碰| 人人操人人干xxx| 中文字幕精品三级久久久| 亚洲精品久| 乱伦3P视频| 蜜乳视频网站| 丰满人妻-区二区三区免费看| 啊啊啊不要好疼视频| 亚洲精品无码久久AV| 97日韩| 午夜啊啊| 风骚少妇视频中文字幕| 国产熟妇一区二区| 久久婷婷国产一区二区色| 日韩欧美中文| 正在播放国产精品一区| 激情小说亚洲| 干B网| 97国产伦理| 欧美大香蕉同搞| 在线观看中文字幕| 婷婷亚洲综合| 久久曰曰| 人人做,人人操,人人摸| 日日骚av| 麻豆区久久久久亚| 中国的操老妇女| 97操在线| 亚洲av热热色| 热天堂一区二区| 亚洲色人妻综合| 国产亚洲在线| 99热9| 日韩中文字幕视频在线观看| 囯产操逼片| 午夜无码精品免费看性色| 青娱乐欧美激情一区二区| 在线视频97| 成人久久久精品| 超碰97欧美日韩| 亚洲国产青青| 日本最新1区2区3区| 亚洲十八禁止| 日韩欧美蜜桃精品久久中文字幕久久| 午夜天堂网| 少妇内射www在线观看视频| 亚洲激情天堂网| 色妇91| 色偷偷综合91久久噜噜| 玖玖大干人妻| 欧美 亚洲精品首页| 青青草好吊色| 超碰97护士| 肉动漫无遮挡h在线观看| 热思思免费视频| 波多野结衣被操50分钟免费视频| 亚洲啪啪视频免费| 成人青青草原伊人| 亚洲精品97在线| 乱伦av.com| 自拍第一页| 九九免费影片| 欧洲亚洲人妻无码高清久久三区四区| 97免费在线观看| 插入逼91| 91午夜无码| 蜜乳Av成人片网站| 97色伦97色伦国产欧美| 狼狼色丁香久久婷婷综合五月| 黄在线| 96精品在线| 美女AV一区二区| 久草加勒比一区在线| 一区AV| 夜夜影视四色| 色999人与兽| 丝袜视频一区二区在线播放国产中文 | 99在线精品视频| 亚洲字幕一区二区| 女人被添高潮免费视频| 素人播放一区| 日韩综合97P| 欧美性色网| 变态乱伦伪娘灌肠一区二区| 久久九九精品一区二区| 成人婷婷丁香| 美女主播色欲91抠b在线播放| 一二视频神马久久传媒| 超碰九7| 日本免费人成视频播放120秒| 99操视频| av麻豆啪啪| 欧美天天综合网| 91三级理论片播放器| 蜜桃久久久久久久| 久久久久久免费电影| 中文日韩欧美熟| 一级岛国大片| 国产精品交换一区二区| 天天综合网久久ww| 国产午夜精品一区二区三区牛牛| 午夜乱轮操逼视频免费看| 97精品国产97久久久久久| daxiangjiao你懂的| 亚洲中文字幕在线视频一区二区| 91精品丝袜在线观看| 区二区亚洲婷| 老外又粗又长一晚做五次| 亚洲精品丝袜-不卡成人免费…… 久久久久成人蜜桃精品 | 交换娇妻呻吟声不停中文字幕| 色5月婷婷| 国产诱惑| 一区二区三区探花在线观看| 欧美亚综合色图| 91亚洲电影| 婷婷激情五月综合| 极品一区二区三区免费| 激情无码日韩| 欧美日韩人人早| 啪啪综合网| 亚洲美乱| 97久久国产| 99在线精品观看99| 综合少妇网| 久久久 国产精品| 久久久神马影院| 日韩亚洲中文字幕在线| 久久久久久久极品香蕉视频| 色臀av| 狠狠色狠狠色狠狠五月| 亚洲十八禁止| 亚洲第一狼人丝袜美女另类| 久久国产三区| 日韩情色一区二区| 99热在线观看| 看全色黄大色大片免费视频| 久久久久久久久久久久久9999| avav青青草久久夜| 婷婷丁香久久| 欧美性夜| 久久9精品视频| 91国产操逼视频| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 大香蕉123| 色五月AV| 岛国小电影| 日韩黄色av中文字幕| 日韩精品9999| 青青伊人这里只有精品| 天天日美女的B| 91在线无码精品秘 软件| 久久久久久99999国产精品| 国产成人自拍视频在线| 2020中文字幕在线观看| 亚洲欧洲美腿丝袜| 国产农村妇女毛片精品久久| 亚洲第一精品在线视频| 麻豆区久久久久亚| 黑操B| 国产成人亚洲精品无码最新在线| 老鸭窝黄色视频网站| 亚洲乱码国产乱码精网站| www.高清无码诱惑一区.com| 天堂中文资源在线bt| 91日韩网站| 在线观看十八禁| 亚洲?V无码专区在线电影| 五月天人妻综合| 天天影视网综合少妇| 久久免费99精品久久久久久| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 在线综合色| 亚洲成成熟女人综合一区二区| 无码9区| 国产成人99久久亚洲综合| 午夜精品久久久久久久99热影院| 日韩A优精品在线观看| 97久久久久| 最新中文字幕av| 伊人婷婷五月天| 三久久久四久久久久| 又黄又粗又硬又长又大| 亚洲欧洲国产综合av| 久久久三区二区一区| 天天综合在线4| 熟女色综合久久| 国产精品九九九| 男人天堂网手机版婷婷| www鬼畜国产男人的天堂| japan日本高清乱xxxx| 超碰95| 亚洲欧美日韩中文久久自慰| 丝袜熟女2P| 国产真实野战在线视频| 欧美亚洲se91| 99精品在线观看| 久久精品国产99精品亚洲蜜...| 午夜经典| 久草在| 香一区二区三区| 99综合| 超碰在线人人射| 清纯唯美综合亚洲| 成人一区二区三区四区| 探花激情视频| 国产白丝AV| 人妻美腿丝袜制服诱惑综合天堂-| 国产福利av精彩对白| 国产最火爆久久国产网站网站| 五月天久久人妻| 很黄很污的免费网站| 极品销魂美女一区二区| 亚洲精品少妇| 91性情| 国产精品一区在线播放| 亚洲91色在线| 91xingse| 国产精品久久久亚洲一区| 色婷婷亚洲婷婷| 亚洲中文字幕av| 国产精品成人无码av无码免费| 中文字幕日韩精品久久| 97九色| 欧美亚洲中文| 日韩在线国产字幕| 女性91网站| 九九九精品美女| 酒色综合网| 中文字幕精品专区搜索结果91| 小明看看网址| 大香蕉综合久久| 亚洲 欧美 另类 日韩 人妻一区| 2025亚洲男人天堂| 久久欧美1卡2卡3| 九久9热| 亚洲永久永久永久永久一级一级一级精品 | 伊人91| 三级色影综合网| 欧美色图20p| 亚洲黑人在线| 影音先锋每日最新资源在线观看| 精品视频在线观看精品| 美女天天干| 成人免费视瓶| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 天天干人人看综合| 国产综合色精品在线观看| 日韩成年人性爱视频| 国产91影院| 精品国产91av一区二区三区| 中文字幕一区二区韩| 六十路日本| 吻戏激情性巴克| 欧美三级一级| 西西美女视频网| 性生活性生大爱77AV国产| 60秒试看最爽10分钟网站| 极品色电影院| 97久久超碰日韩精品| 欧美色图片色哟哟| 黄色成人网久久久久久| 国产日韩欧美中文在线播放| 国产农村一一级特黄毛片| 丁香六月婷婷久久综合| 蜜臀99999| 久久天堂网| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 免费A片三p视频| 91在线超高颜值国产| 婷婷精品视频| 91色碰| 97少妇人妻中文字幕久久 | 人人射人人操人人摸| 97久久资源| 日韩无码AB| 精品人妻高清麻豆av| AVE乱伦| 亚洲一欧洲中文字幕在线| 国语av最新自产拍在线观看| 在线中文字幕极品av| 色玖玖| 曰本熟女视频| 欧美精品黑人猛交高潮| 777琪琪午夜免费A片| 大香蕉综合网| 亚洲区限制级| 麻豆久久一区二区三区| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 日本久久精品| 色呦呦、国产精品| 久久9精品网站| 亚洲国产精品V?在线播放| 怡红院一区二区熟女人妻| 噜噜噜无码AV一级一级久久影院| 久热伊人99re| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 国产精品毛片?v一区二区三区| 中文字幕国产| 九九热免费国产视频婷婷伊人五月 | 午夜福利视频在线一区| 区一二区日韩亚洲乱码av电影| 国产精品白丝AV| 国产人妖视频一区在线观看| 婷婷色五月激情| 好舒服视频| 精品无码一区二区三区色欲| 99碰碰| 色阁阁AV综合网| 国产AAAAAABBBBB| 日韩在线视频1234| 欧美色图20P| 手机在线免费看的av| 久久婷婷伊人| 不卡一区视频| juliaann丝袜| 人人插人人搞人人操| 日韩天堂av电影在线观看| 蜜臀网址在线| 韩三级a视频在线观看| www.狠狠干.coom | 亚洲日韩黑丝| 综合五月婷婷亚洲一区| 肉丝网站91| 成人线上超碰| 北条麻妃99精品青青久久| 78精品| 九月丁香婷婷| 亚洲图片 欧美电影| 丰满人妻av一区二区三区| AV色图| 日本道久久综合色色| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 超碰色97| 狠狠操狠狠插| 91精品国产91熟女| 综合色99| 亚洲精品啪视频| 九九久久久九九| 久久久久国产精品久久久| 日韩欧美午夜视频在线| 高清肉丝中文无码| 中日亚韩免费视频| 91欧美另类| 亚欧Av| 天天天天天超碰| 欧美少妇性爱网站| 大香蕉色欲AV| 久久99精品视频| 亚洲高清综合网| 日韩乱码av| 性天堂| 好爽,再快点啊哈嗯嗯嗯嗯| 人人人摸人人| 亚洲综合情色| 国产成人午夜视频网址| 精品少妇一区二区三区| 日韩av无码网站| 久久久久9| 亚洲资源站| 人妻精品4K4K4K4K4| 国产91精品福利在线| 中文字幕精品亚洲熟女| 亚洲天堂 视频你懂的| 色区97| JULIA人妻风俗店中出电影| 国产欧美另类久久久精品课程| 男人天堂一区二区| 欧美不卡五十路| 夜夜青青无码影院| 少妇99| 黑丝少妇麻豆| 精品久久久一本一道| 国产成人无码久久精品| 欧美激情久操网| 天天色踪合| 91超碰人人操| 亚欧毛片基地国产毛片基地| 国产第二页| 婷婷综合久久| 免费的黄片有限公司| 一二三四区电影| 欧美日韩国产中文超碰| 色天使亚洲综合在线观看| 亚洲极品| 亚州成人A√| 国产欧美精选激情视频| 97色操| 囯产精品强| 欧美性爱97超碰| 黄色AAAAAAAAAAA大片| 亚州综合图片| 中文字幕 人妻不满 在线视频| 日韩成人精品| 国产精选视频| 亚洲视频一二区| AA丁香综合激情| 91美女在线| 天天综合网AV91| 九九RE视频在线精品| 日本成人A片免费看| 超碰久草| 午夜福利区| 德国一二三不卡| 色婷久久| 欧美一区二区三区另类精品| 色欲av国内精品久久久久久| 91欧美少妇| 天天澡天天爽日日av| 91久青| 日韩成人精品视频自拍| 极品销魂美女一区二区 | 亚洲?V高清一区二区三区尤物| 禁片 高清 在线观看视频网站| 成年人性爱日韩| 天天操夜夜嗨| 久久在线观看免费视频| 色综合大香蕉| 天天日天天射天天干| 久久人人妻| 成人性爱美曰韩| 久久黄色视频一区二区三区| 激情五月天中文字幕色| 久久有码视频| 国产青视频| 中文字日本乱码| 不卡超碰护士AV在线免费播放| 超碰在线人妻| 91人妻最真实刺激绿帽| 日韩综合无码一区久久92| 五月婷亚洲精品天堂| 日韩欧视频| 久久久久久久9最新免费视频观看| 91人人看| 久久最新免费视频23| 蜜臀AV网站| 干婷婷综合网| 中文字幕91页| 国产精品制服丝袜清纯唯美| 久久精品中文字幕无码l| 午夜一区二区三区国产| 秋霞网无码| 国偷自 一区二区|