亚洲有码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
返回資訊列表
超碰97亚洲区| www.99中文字幕| 丁香六月婷婷综合| 99热免费| 干B| 精品欧美日韩在线观看| 日本道人妻久久久在线不卡色视频| 亚洲中文字幕av| 亚洲另类春色| 一本大道不卡一二三区| 欧美日韩亚洲五月天婷婷| 日韩9999| 久久久啊啊啊| 人人操人人摸人| 青青青青青手机视频| 天天插网| 亚洲国产麻豆一区二区三区| 91美女中出| 手机不卡视频不卡在线一二三区 | 国产乱青青草久久| 欧美九九九九九| 13小男生GAY自慰脱裤子| 欧美性爱日韩性爱| 欧美日韩高潮喷水91| 超碰人妻中文在线| 欧美96精品在线| 中文精品一区二去| 男人的天堂2019AV| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 久久春色| 久精品无码av一区二免费国产在线观看| 色丁香五月婷婷| 射欧美综合| 人妻大香蕉| 日韩免费a级毛片无码a∨| 三级特黄60分钟播放| 日本九九九九| 人妻少妇精品久久久| 国产熟妇 码视频户外直播| 东京热视频网| 色嘟嘟人妻天堂网| 国产精品一区二区麻豆| 国产精品爽爽va在线观看98| 天天干天天日天天射黄色| 91久久国外网| 人人操,人人插| 六月婷婷综合| 亚洲精品白丝| 亚洲春色欧美激情自拍| 中文字幕日产av人| 91欧美综合| 中文字幕成人理论在线| 97色色,97综合| 亚洲黄色视频在线观看视频| 在线黄页看毛片| 夜夜操中文字幕| 精品一级| 国产67194| 另类视频在线| 日韩无码三级影院| 艳美熟妇先锋一二三区| 欧美激情高清性猛交| AV不卡在线| 欧美日韩理论一区| 激情婷婷综合久久| 欧美少妇大量自拍视频在线观看| 中文字幕精品亚洲熟女| se吧提供国产乱老熟视频胖女人| 亚洲人精品久久久喷水| 美女黄网| 亚洲综合春色| 九九九九九九九九九国产精品 | 射久久| 操比国产| 欧美性Fer办公室秘书| 亚洲欧洲无码bt精品合集| 精品久久青青草| 九九九只有精品| 青椒国产97在线熟女| 亚洲无套久久嗯嗯| 尤物网站91| 97超碰69| 日本操逼无码| 久久同城AV| 欧美精品一区二区少妇免费A片| 蜜桃久久久久久久| 少妇一区二区三区精选| 国产女上位好爽在线| 亚州综合色| 日本在线一二| 亚洲综合欧美| 欧美 亚洲 制服 精品| 四虎影视国产精品| 色婷婷影视| 日韩99999| 婷婷视频网| 视频二区熟女人妻| 国产精品宅男免费| 97色欧洲| 四虎永久在线精品免费网址 | 97欧美色资源| 欧美一级久久久久久久大片动画| 97超碰总站| 国模吧 一区二区三区| 免费成人在线熟妇网| 日韩精品中文字幕一| 老司机午夜福利视频一区二区| 午夜男人av| 国产欧美日产一区二区三区 - 国产欧美日 | 大香蕉99999| 中文字幕啊啊啊在线观看视频| 九九久久久| 超碰亚洲欧美日韩无| 国产操逼网站亚洲一级黄色| 97超碰在线资源网站| 999亚洲国产视频| 97久久天天综合色天天综合色电影| 岛国黄色大片网站| 久久97| 男人干美女| 精品国产人成在线| 一本色道综合久久欧美日韩精品| 久神马| 婷婷五月天激情网| 96久久久久| 精品人妻一区二区免费蜜桃| 欧美日韩一区二区三区四区蜜桃| 亚洲人妻久久久| 国产精品成人在线| 久久久久久久97| 国产午夜福利视频在线| 日韩人成网站在线播放| 国产伦精品| 九九拍拍精品视频在线播放| 色婷婷丁香五月| 三级日韩一区二区三区| 综合亚洲网| 91色综合激情| 国产吞精a级片激情电影| 九九热AV| 涩涩久久精品| 久都青青视频| 国内毛片免费h片在线| 91中文字幕在线观看| 在线观看十八禁| 久久美女国产| 性综合网| 欧洲站一级二级三级h| 国产丝袜美女诱惑| 色牛牛AV| 91社操逼| 超碰成人人人爽人人爽| 欧美在线第五页| 日韩影片中文字幕一区二区三区| 精品国产91av一区二区三区| 九九碰九九爱97超| 久久影视二区三区行押| 欧美第38页| 亚洲天堂热| 性色av蜜臀av色欲aV| 亚洲高清综合网| 天天日天天屌天天操| 91碰碰碰| 黄页网站免费高清在线观看| 欧美一级黄色免费专区| 在线天堂资源亚洲| 少妇色综合| 97免费在线视频在线观看| 天天做日日做天天欢。| 五十路六十路素人熟女| 啊啊啊操死我| 国产精品夜夜夜| 日韩精品9999| 99re这里只有精品3| 3p国产色噜噜一区| 国产自产自拍| 国产兽交视频在线播放| 91精品老女人| 伊人九九九| 日本 免费 一区二区三区 久久香蕉| 欧美性爱精品一区二区| 日韩欧美中文日韩欧美色| 国产高清自拍视频| 亚洲综合影院| 五月天亚洲色图| 狠久久| 国产后入清纯| 亚洲日韩久久精品一区| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 综合一区中亚洲国产成人综合精品| 亚洲无码成人精品| 国产9区| 加勒比综合88| 国产区在线| 骚妻少妇精品性色无码四色A V| 色色综合97| 久久久久久久久久久久久久久乱码| 99热啪啪| 六月丁香婷| 精品国产精品一区二区| 手机在线观看不卡无码av| 91在线超高颜值国产| 国产亚洲深夜激情| 亚洲性爱电影| 亚洲AV性爱电影| 久久精品国产99精品亚洲蜜...| 日韩黄色片子| 美女视频尤物网在线看| 双插性欧美一二三区| 自拍偷拍草一草| 亚洲AV麻豆Aⅴ无码电影一| 超碰97男女| 大香蕉淫人| 狼人狠干| 亚洲中文字幕在现观看| 久久香蕉国产线看观看亚洲女人| 中文乱码字幕观看视频| 六月丁香网| 国产精品久久久久久亚洲色欲| 欧美亚洲清纯| 黄色工厂这里只有精品| 久久精品店| 青青草中文字幕| 九九九久久久| 18禁无码永久免费无限制| 激情小说图片亚洲首页| 亚洲国产91精品一区二区久久| 午夜福利激情在线视频| 美女国产一区二区久久| 五月综合视频| 强奸少妇AV导航网| 97伪v| 肉丝中文无码高清| 国产路线专区| 久久欲| 亚洲第一狼人丝袜美女另类 | 五月丁香六月综合缴清无码| 亚洲免费成人在线高清无码视频 | 天天内射| 欧美色干| 加勒比在线观看一区二区| 国产AV精久久| 99re国产中文字幕| 野狼激情网| 区一二区日韩亚洲乱码av电影| 农村妇女精品一区二区| 日韩精彩视频| 性猛交| 午夜福利1区2区3区| 国产高清免费不卡av| 亚洲制服欧美另类内射| 五月丁香激情综合网| 丁香激情网| 国产福利夜| 天天躁狠狠躁av| 久久久久久久久一区二区三区| A 天堂| 蜜乳AV一区二区三区四| 天天操天天插| 日韩电影天堂视频一区二区| 欧美日韩中文视频播放| 日韩 国产 欧美自拍| 操逼1区| 人妻天天夜夜爽一区二区| 刺激精品视频| 深喉吞精| 蜜乳Av成人片网站| 超碰79人人乐| 伊人久大| 岛国免费黄色网址| 校园春色 男人天堂| 99蜜桃臀亚洲成人在线观看| 91青青在线| 日韩免费三级黄片电影| 婷婷五月激情综合| 99只有精品| 色九九九九九九| 国产自制av蜜乳| 欧美日韩性爱操大逼| 青青爽| 3级毛片一二| 欧美不卡在线一区二区| 色一情一乱一乱一区91Av| 中文字幕乱碼在线| 鸥美中出| www网站黄| 超碰99热中文字幕| 亚洲欧美不卡线| 日韩一级成人毛片免费观看| 天天干天天日天天射黄色大片| 色九色久| 免费在线黄片视频| 亚洲有码 欧美精品| 4虎在线视频| 国内偷拍精品一区二区| 欧美|91色综合| 91精品婷婷国产综合久久| 26UUU欧美日本| 九九亚洲| 东京男人天堂| 久久三| 久草毛片电影怡| 天天肏天天干| 日韩成人免费电影| 欧美在线|亚洲| 肏逼福利网站| 日本午夜久久电影| 久久思思热| 国产精品高潮久久AV| 夜夜操中文字幕| 亚洲美乱| 美女主播色欲91抠b在线播放| 欧美黄色大片在线观看| 人人澡人人爽人人精品| 好爽视频在线观看| 亚洲色综合| 劲爆欧美人妖三区91| 秋霞免费无码视频日韩A片| 长长久久曰曰夜夜成人网| 日韩无码服务区| 高清无码 国产精品| 国产13区| 性无码专区2020| 欧美黑人猛交春色影视大全| 2017亚洲天堂| 96AV精品| 亚洲欧美情色| 97人妻色| 久草加勒比一区在线| 午夜免费视频1000| 久久久人妻| 污啪啪啪视频| 91骚熟女| 婷婷色香| 久久亚洲AV无码专区国产精品 | 亚洲男人天堂2019| 日韩欧美性爱电影在线观看| 久久色人体| 激情综合网激情综合| 青青草日本无码| 2024黄色视频| 97色色色综合网站| 99老司机精品视频在线观看| 亚洲骚男同com| 亚洲av乱伦色图网站| 日韩97超碰| 大香蕉综合网| 一级做受视频免费是看美女| 女人的天堂大香蕉网| 亚洲AV无码AV吞精久久久久| 色天天野狼综合社区| 成人看片网站| 1区2区3区视频| 综合网亚| 8050无码八戒| 久久久人妻| 天天摸夜夜摸| 丰满岳乱妇一区二区三区| 日韩 女同 综合| 色小视频蜜乳| 黑人精品XXX一区一二区| 日韩在线97| 美日韩男女操屄视频| 亚洲区限制级| 国产情侣自拍在线播放| 97超碰色色| 熟女一区二区| 小视频玖玖| 欧美三级偷拍| 香蕉一区二区三区在线视频| 手机在线中文字幕国产 | 亚洲精品xxx| 亚州欧美在线| 欧美少妇第一页| 91小视频| 日韩av在线精品观看| 亚洲综合 欧美| 色婷婷丁香五月| 91岛国动作片| 日韩人妻播放| 天天天天天超碰| 午夜国产成人福利视频| 人人搞人人插人人操| 白 大 人妻 区 在线| 久久艹逼视频| 国产无马在线| 超碰97综合网| 精品国产72| 麻豆啪啪啪视频| 午夜人人操| 超碰社区97| 国产白嫩精品久久| 五月天精品| 丁香九月 婷婷| 精产品久久| 看黄片视频免费| 久久精品黄色| 精品十三区| 亚洲国产精品久久久久婷婷青年| 丰满少妇乱子伦精品无| 精品十三区| 天天干天天燥| 收看日本人日bb| 久久精品国产亚洲粉嫩| 九九热精品在线| 久久久久国产一区二| 久久精品国产Aⅴ| 极品出轨视频网站| 在线黄色污污网站| 亚洲91av| 韩日精品四区| 另类小色呦| 国产综合在线视频网站| 精品人妻一区二区免费蜜桃视频| 制服少妇欧美| 密臀在线免费观看| 伊人久久88国产女| 天天爽人人综合免费7799| 日韩黄片影院| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 嗯嗯,啊啊,国产精品| www网站黄| av在线观看不卡网站| 99999精品| 亚洲丨在线| 久久伦理视频久久大香蕉视频| 97超碰国产精品| 五月婷婷六月色| 强奸乱伦资源| 天天综合网日韩7799| 日韩免费中文字幕视频| 麻豆一区二区三区在线看| 玖玖草久草99蜜月一区二区三区| 加勒比AV网| 中文字幕精品丝袜| 啊啊啊用力在线观看| 天天爽天天爽| 99这里有精品视频| 婷婷五月天色色| 精品国产肉丝袜在线拍国语| 人人爱人人操人人性| 丰满岳乱妇一区二区三区| 97色碰| 大香蕉乱级| 一级日本牲交大片好爽在线看| 日韩人妻播放| 人、人、摸,人、人、草| 久久草大香蕉| 91 手机在线播放 绯色| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 又黑又大又粗| 91操碰| 啊v视频在线观看| 日韩人妻免费精品| 国产日韩欧美三级片| 免费av大片| 五月天丁香婷婷综合网站| 99性爱在线观看| 国产精品视频麻豆入口| 欧亚乱色熟女一区二区| 91动漫操逼视频| 精品一二三区久久AAA片| 欧美顶级黄色大片免费| 黄色性爱网网| 欧美色婷婷| 深爱五月婷婷| 成人AV素股で擦久久| 欧美 中文字幕 一区| 观看视频图片一区二区三区| 久久一区,青青青青草视频在线播放| 91九久| 九九九九日本| 啊啊啊啊啊啊啊啊啊在线观看| 欧美色图片欧美色图| 精品久9| 美女视频尤物网在线看| 国精精品无码一二三区水多多| 男人的天堂在线有码| 天天天天做夜夜夜夜做| 男人a天堂手机在线版| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 欧美黑人168页欧美黑人167| 天天综合青苹果| 天堂性色| 天天爽夜夜爽夜夜爽精| 日本精品无码三级网站| 操逼视频亚洲| 精品精品精品| 韩国三级三级BD在线| 国产人妻精品一区二区三区秋霞| 综合熟妇一区二区三区| 亚洲欧美电影| 2019天天干| 日韩成人精品| 久久国产视频性吧| 夜夜嗨绯色| 亚洲97资源| 青青国产精品在线| 97这里只精品| 天天色综合影视网| a'v在线资源| 97人妻免费中文字幕| 亚洲一本色道中文无码aV天美| 色五月综合| 国产有码一区| 欧美在线大香蕉| 天美久久久久| 成·人免费午夜在线观看| 超碰在线观看av不卡| 国产一区免费午夜视频| 97青青操视频| 久久一二三四五六七八九区| 亚洲小电影免费涩涩成人在线高清| 很黄很色的视频在线观看| 九九色综合| 九九热男人天堂| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 好吊妞转入那个网| 91在线丝袜视频| 超碰天天去日穴| 成人五月天丁香激情综合| 日本高清_区二区三区| HEYZO高无码国产精品227| 欧美制服网站美腿丝袜| 国产有码一区| 可乐操在线| 老熟女搡BBBB搡BBBB视频| 五月丁香色色网| 91性生活久久久| 嗯嗯啊啊啊好爽| 亚洲一曲日韩精品| 看黑人AV不卡| 欧美亚洲首页| 人人摸人人摸人人干| 欧美日韩资源在线| 1024精品在线| 日韩乱伦影音先锋| 日韩影片中文字幕一区二区三区| 极品人妻少妇综合| 最新三级网址| www.超碰在线| 久热99999| 国产精品亚洲色婷婷久久久| 亚洲色鬼| 香港久久久| 黄色网址在线免费观看| 婷婷激情一区二区三区俺也去| 精精品人妻一区二区三区| 免费一级特黄特色大片在线观看看 | 欧美性爱第一页久久| 成人片在线播放| 99热99re6国产在线播放| 国产又色又爽又舒服的三级视频| 国产亚洲精品激情| 91欧美少妇| 久久最新免费视频23| 日本黄色大片一级视频免费麻豆| 中文三一区| 裸模AV女优| 欧美日韩色图片| 蜜臀久久99精品久久久久久酒店 | 五月丁香狠狠爱| 欧美激情亚洲情色| 97色综合中文网| 91精品微拍福利| 色一射色一射| 亚洲加勒比| 天天日少妇逼AV| 高清孕妇孕交 交孕妇| 色色色日本| 色 婷97| 屁股久久久久久久久久| 99综合免费视频| 久久久久久免费电影| 91小视频| 久久久久久九九九九九九| 强奸乱伦麻豆| AV色五月天| 久久亚洲AV无码专区国产精品| 日韩av三四区| 久草精品国产99| 中文字幕天天天天天| 丰满人妻区一区二区三| 久久久久婷婷| 婷婷国产精品一区二区| 伊人91| 麻豆亚洲AV成人无码久久精品| www九九热| 欧美精品庄| 这里有精品| 国产精品一区二区三区免费视频| 加勒比大香蕉视频在线| 亚洲国产丝袜在线观看| 国产av色网| 欧美精品双插| 亚洲少妇诱惑| 久久久久网站-538在线视频-欧美永久乱码 | 色路综合| 操逼无码操逼| 天天综合91入口| 五月婷婷六月丁香| 91人妻中文| 影视综合无码少妇| 亚洲中文字幕在现观看| 青青欧洲黑| 手机在线播放国产福利| 黄页| 婷婷色一区| 乱子伦一区二区三区国产精品| 99热超碰| 日韩色女精品| 射久久| 色欧美综合| 91性高朝久久久久久久久| 精品人妻免费观看| 久久精品店| 日韩无码黄色片| 一起草日韩| 女人的久久久| 日本3级一区二区免费| 草草电影院| 操学生天天| 操日韩第| 91快色色色色色| 国产小视频91| 亚洲第一综合| 嗯嗯啊啊好疼| 精品久操| 少妇一级无码精品| 久久精品国产亚洲AV无码电影| 五月婷婷丁香| 久久天堂网| 试看福利| 亚洲蜜臀懂色| www网站黄| 日本不卡高清视频| 九月婷婷综合| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 97在线观看播放视频| 久久日韩肥臀| 日韩综合97P| 亚洲天堂另类| 麻豆国产精品午夜视频| 玖玖爱免费观看视频| 国产一区二区在线电影| 婷婷色色五月| 情色五月天网| 91亚洲人| 国产亚洲精品美女久久久m| 一区二区三区在线资源| 日韩资源网| 九九久久久| 操逼国产免费| 夜夜狼人妻| 青青五月天| a片在线播放| 色播丁香| 精品视频97| 中文字幕第2页| 岛国黄色大片网站| 91在线丝袜视频| 99热| 大香蕉手机视频| 国产精品97超碰| 四虎国产精品永久在线囯在线| 97干在线| 在线黄色污污网站| 国产精品不卡高清在线观看| 五月天婷婷基地| 欧美色图小说综合| 亚洲成人美女无吗| ai欧美亚洲小说| 国产毛片片精品天天看视频| 中文字幕啊啊啊在线观看视频| 碰人碰碰人人开房人肉| 啪啪资源网| 欧美天堂超碰97| 精品无码久久久久久国产浪潮| 骚乳在线| 国产狂喷潮在线精品| 欧美18老人禁| 久久天天艹| 男人的天堂成人的社区| 亚洲中文字幕在现观看| 在线观看十八禁| 91亚州| 国产福利夜| 亚洲精品白浆高清久久久久久| 伊人国产av| 岛国片在线播放| av 模特一区了| 国产 日韩 另类 视频一区爱| 精品女同一区| 日韩人妻免费精品| 啪啪啪综合| 最新欧洲欧美日本激情网站| 亚洲人天堂| 嗯嗯嗯,草死我| 国产成年免费大片黄在线观看| 97网址97| 日韩三级一区| 国产最火爆久久国产网站网站| 超碰538| 免费一级毛片在线视频观看| 91天天综合日韩欧美| 日本天堂网| 东北丰满熟女国产一区| 欧美精品系列| 欧美aⅴ99久久黑人专区| 久久国产热视频97电影| 我想要 啊 啊 啊| 久久久久久久久久久久黄色| 天天看,天天做| 日本不卡一区二区| 少妇激情AV| 伊人五月天青青草婷婷| 五月天婷精品激情| 91天天| 欧美日韩系列| 久久成年精品| 婷婷五月花| 丰满人妻一区二区三区四区| 欧亚日韩中文在线| 亚洲色图自拍| 蜜奶av| 高清国产av无码| 国内偷自视频区视频综合| 色色97爱| 精品久操| 色香伊人| 国产美女口爆吞精| 欧美日韩99精品麻豆传媒| 操比国产| 麻花豆传媒剧国产MV出差| 天天综合网91| 亚州黄站| 久草线上视频免费看| 乱老熟女一区二区三区| 久久婷五月| 久久老子无码午夜伦不卡| 日日日日做夜夜夜夜无码| 天天爽天天操啊啊啊| 亚洲骚逼少妇| 日1区2区3区2020| 91色人| 中文字幕一区日韩精| 欧美日韩色综合网| 成人无码在线视频网站| 美女天天干| 亚洲加勒比| 久久精品| 91P0RNY大屁股人妻| 老熟妇乱轮| 国产精品第一区第一页| 五月天伊人网| 欧美性天天| 91综合色噜噜| 午夜人人操| 黄色av网站在线播放| 日本精品无码三级网站| jizzjizz欧美| 去干网最新版| 天天天天天天天天天天干美女| 日韩无码视频黄色| 老熟女91| 欧美日韩国产成人高清| 国产又色又粗又黄又爽| 91精品国产日韩欧美综合| 大黄片做爱的大的| 伊人久久大香大香线蕉中文| 99热婷婷| 后入人妻一区| 久久久久人| 久操免费观看| CCYY草草影院地址入口| 永久免费发布性爱网| 丁香六月啪| 嗯嗯啊啊操死我| 夜夜 中文视频rt| 亚洲熟女一区| 国产9熟妇视频网站| 青娱乐淫乱1314| 国产综合网站在线播放| 男人的天堂啪啪啪啪啪蜜桃不卡| 一区 欧美 日韩 麻豆| 亚洲国产中文字幕| 思思热国产高清| 欧美顶级黄色大片免费| 91蜜臀在线久久久久| 97久久天天综合色天天综合色电影| 青青青在线高清视频在线一二三四区| 久久久精品,3| 国产精品美女在线一区| 天天干天天拍| 乱色老一区二区三区的观看方式| 東南亚性呦成人伦理资源在线视频| 日韩无码视频黄色| 天天日少妇逼AV| 国偷自 一区| 国模无码人体一区二区三| 9999免费精彩视频| 97精品97久久| 26uuu最新| 日韩精品99999| 国产九九九九九九| 欧美亚洲自拍另类人妻| 超碰久热| 999热日韩精品| 色欲蜜臀AV| 秋霞午夜视频一区二区| 香蕉精品二区二区| 欧美v亚洲v日韩v最新在线二区| 亚洲三级网址久久最新| 夜草网站| 99热导航| 尤物视频偷拍免费| 久久久一区二区三区四区五区| 男人的天堂午夜av| 99自拍视频在线观看| 精品毛片久久久精品毛片| 国产a级精品| 日日夜夜免费| 婷婷中文字幕| 强乱老妇中文字幕| 色九九综合| 清纯唯美第一页| 人妻久久久| 日夜精品| 禁止观看美女黄| 一区在线国产播放| 99精品丰满人妻无| 97精品一区| 久久婷综合| 深夜视频| 亚洲中文制服诱惑| 亚洲欧美色图| 夜夜高潮夜夜爽| 精品人妻免费观看| AV高清一区| av网页一区二区三区| 国产精品粉嫩福利在线| 欧美人人AAA| 三四中文字幕| 久热久一区二区三区| 激情抓乳插进去啪啪啪日韩 | 很黄很色的视频在线观看| 日韩美女高潮喷水视频| 日韩黄色电影网站| 五十路熟女人妻一区二区三区四区五| 人妻日日夜夜精品| 超碰成人公开| 久久久偷拍| 97色色色综合网站| 无码视频黄色网战| 中文字幕三四区| 91l欧美在线| 日本 欧美 国产一区| 91中出| 国产精品国产| 大屁股xxxxx| 亚洲熟女人妻中文字幕一区二区| 日本青青草在线| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 无码人妻丰满熟妇奶水区毛片| 双插性欧美一二三区| 伊人超碰97| 99热99re6国产在线播放| 亚洲综合97中文网| 国产综合永久精品日韩鬼片| 91天天综合日韩欧美| 风骚少妇视频中文字幕| 麻豆区99999| 国产欧美一级在线观看| 日本女人久久久| 在线情色电影 91大 | 色色色色日本| 在线午夜成人无码视频| 日韩成人小视频| 青青草玖玖爱| 91精品国久久久久久无码| 成人精品在线| 人人操人人操草草| 亚洲精品一二区| 人人爱人人乐人人操| 五月天伊人网| 偷窥自拍亚洲| 超碰天天去日穴| AV在线播放网址| 久久精品成人一区二区三区蜜臀| 亚欧中文字幕在线视频| 中文字幕在线观看丝袜| 五月天激情小说网| 大香蕉av在线| 欧美色五月| 激情色播| 天天综合网一91网| 91 亚洲 欧洲| 欧美制服另类丝袜| 亚洲熟女国产综合另类| 熟妇人妻一区二区三区| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 五月综合视频| 日韩偷拍色图| 夜夜狼人妻| 亚州色国| 欧美亚洲清纯| 巨乳特殊服务按摩| 日曰骚久久精品| 欧美综合色图网| 男人天堂新在线| 免费精品无码一级毛片牛牛影视| 丝袜美腿亚洲| 国产一级高跟丝袜| 日本性爱网址| 夜夜爽33333| 久久夜色一区二区| 久久久久国产精品人妻aⅴ天堂| 欧美女同在线| 亚洲影院成人| 在线一道啪| 99精品网| 熟女自慰久久久| 青青操日韩| 日韩偷拍一区二区三区| 欧美国产伊人久久久久| 亚洲国产成人精品999| 干妹子| 亚洲少妇视频| 精品免费1| 久久人妻无码毛片A片麻豆| 婷婷久久久精品| 这里只有97精品| A级毛片在线看免费| 一级特级aaaa毛片免费观看| 日韩视频啪啪| 五月激情综合网| 亚洲精品国产av天美传媒| 1024精品在线| 97在线精品观看视频| 久久精品99| 密桃99999| 天天操av懂色| 黄久在线| 日本韩国国产精品一区| 手机看av网站在线看| 中文字幕丝袜美腿| 国产一线二线三线av| 国产亚洲女v在线观看| 99啪| 久热这里只有精品9| 秋霞无码av鲁丝片一区| 蜜臀av中字字幕网站| 暴力av在线| 国产剧情AV不卡在线观看| 欧美亚洲国内自拍| 国产精品午夜福利| 国产浮力影院第1页| 性爱AV天堂| 日本潮催一卡操| 日韩精彩免费| 丁香九月婷婷| 99热这里只有精| 亚洲天天自拍| 中文字幕日韩专区精品系列| 日韩精品高清资源在线| 国产精品99999| 欧亚洲精品有视频| 亚洲男人的天堂va亚洲男人社| 四虎影院成年人片| 成人开心网在线视频| 亚洲无码AV九九九| 丝袜高跟澳门91视频| 久久av一级av少妇av高潮| 伊人大香蕉在线| 日韩免费看在线黄色片| 亚洲AV资源| 激情抓乳插进去啪啪啪日韩 | 青青草日逼视频| 欧美一区二区三区不卡高清视频| 黄色网址久久精品欧美喷水| 97超碰欧美精品| 青青青国产| 很很操在线| 加勒比海成人视频网| 亚洲成人精品在线一区| 99色日| 国产视频一区二区免费| 亚洲女优有码无码高清| 99无码| 超碰在线人妻中文字幕| 日本淫穴在线| 婷婷视频在线免费观看| 自拍六区| 欧美一区二区在线资源| 国产极品美女高潮无套在线观看 | 九九久久国产精品怡红院| 激情五月激情综合网| 久久婷婷电影网| 超碰日韩美妻| 一区二区三区四区色图| 黄色免费一级在线毛片| 色诱中文字幕| 国产亚州日韩欧美看片| 婷婷爽人人婷婷爽视频| 国模不卡一本二本三电影| 操逼逼无码| WWW.操逼.COM| 丰满熟女人妻一区二区三五十一路| 亚洲乱码国产乱码精网站| 男人天堂2017| 亭亭在线资源| 九九热免费国产视频婷婷伊人| 日本精品网站在线中文| 极品少妇久久久久| 伊人天堂在线| 亚洲免费人妻在| 黄色成人网久久久久久| 97se亚洲| 老司机免费视频在线91| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 国产搭汕a级片| 欧美激情久久久久| av婷婷色网| 久久丁香| 日韩免费看黄片| 青娱乐欧美激情一区二区| 久久久久白虎| 中日992视频| 欧美色图91p| 欧美伦乱爱| 爱干爱射网啊啊啊| WWW4虎| 中文字幕91综合| 97人人干| 国模精品一区二区三区苹果色戒 | 百度百度日本操逼| 一区二区视频在看| 精品一区二区2| 欧美色图片欧美色图| 久久久久久少妇| 九一综合网| 欧美性,色九九| 91在线免费观看处女| renqi久久久久久久久久久久| 亚洲精品日韩国产欧美| 飘花国产午夜精品不卡| 国内精品久久人妻性色av| 免费看片黄| 国产强奸91| 日韩国产乱子伦App| 色色香蕉| 综合色图区| 久久婷婷五月天| 五月天丁香欧洲日韩| 国产日本熟女顶级一区二区三区视频| 香蕉在线一区二区三区| 国产丝袜美女诱惑| 天天综和| 欧美精品91| 9999九九九久久久| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 神马久久啊啊| 久久超碰av在线| 日本幼女18+| 久久久91| 6080YYY午夜理论片在线观看| 性爱免费视频成人| 韩国一级做A片免费的| 日韩三级一区| 精品96久久| 激情文学亚洲| 国产精品美女久久久久久网站| 国产成人午夜视频网址| 无码操逼网| 欧美精品自慰系列寂寞少妇| 亚洲天堂人妻一区二区| 天天摸夜夜操视频| 九九热国产| 青草草免费网站av| 久热这里| 日本天天干天天搞一区| 欧美78P| 岛国免费黄色网址| 人人爽天天爽| 欧美色图97| 99re超碰| 强奸乱伦大香蕉网| 亚洲成人一二三区| 99精品人人爽| 伊人影院日本| 99久在线精品99re8| 国产黄色动态精品| 久草这里只有精品 | 国产成人精品午夜福利| 人人妻人人玩人人澡人人爽| 欧美视频一区二区在线| 91N五十路| 一卡二卡在线播放| 一本久道在线综合视频| AV天堂丝袜| 久草这里只有精品 | 国产东北女人在线视频| 成年女人18级毛片毛片免费观看| 国产青视频| 一级一性爱免费视频| 9999久久久久| 久久久久久中文| 国产真乱mangent| 亚洲一二三精品久久网| 91亚洲网站| 欧美精品自慰系列寂寞少妇| 久草热制服丝袜在线观看 | 国产乱色国产精品免费视| 久久久久日本视| 精品无码一区二区三区| 国产精品自在线发布| 亚洲一二三| 亚洲制服aⅴ中文字幕| 西西美女视频网| 97在线视频观看网站| 日韩超碰精品综合| 欧美性爱18观看| 翘臀vidoes| 欧美亚州综合网图片| 欧美黄片视频在线观看免费| 一区二区亚州激情久婷婷欧美| 中文字幕精品一区二区精| 欧美午夜视频| 国产无套粉嫩白浆在| 亚洲激情久久久伊人综合| 97干在线视频| 野狼福利社区| 少妇超碰在线| 亚洲综合第一页| 伊人久久国产免费观看视频| 欧州一区二区三区四区| 亚州色站 日韩电影| www.大香| 成人无码欧美一级A片狼牙直播| 黄色av一区二区在线| 日韩猛交| 三级网站超变态精品| av无码精品久久久久| 日韩三级av片| 亚洲精品蜜桃久久久一区二区三区| 人妻性爱一区二区| 日日日大屁股骚女人精品| 丁香五月婷婷色| 欧美性爱第一页久久| 啊啊啊在线看| 久久熟女人| 色一色综合网| 国产精品ww久久| 天天综合站| 中文字幕丝袜美腿| 你懂得91| 岛国1区2区3区在线观看| 久久精品99| 亚州色站 日韩电影| 去干网最新版|