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

ARTICLE DETAIL

資訊詳情

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

售后物流WMS實(shí)戰(zhàn):序列號(hào)追溯與庫(kù)齡預(yù)警的倉(cāng)庫(kù)管理方案

售后物流WMS實(shí)戰(zhàn):序列號(hào)追溯與庫(kù)齡預(yù)警的倉(cāng)庫(kù)管理方案 簡(jiǎn)介GreaterWMS是一套面向企業(yè)倉(cāng)庫(kù)管理場(chǎng)景的開(kāi)源式WMS解決方案脫胎于福特亞太區(qū)售后物流倉(cāng)儲(chǔ)供應(yīng)鏈實(shí)踐后獨(dú)立演進(jìn)為可擴(kuò)展的企業(yè)級(jí)系統(tǒng)。資源提供完整前后端源碼與工程配置覆蓋庫(kù)存控制、庫(kù)位管理、訂單處理、出入庫(kù)管理、退貨處理、條碼掃描等核心業(yè)務(wù)模塊適合企業(yè)應(yīng)用系統(tǒng)開(kāi)發(fā)者、供應(yīng)鏈從業(yè)者以及希望深入理解WMS業(yè)務(wù)邏輯的技術(shù)人員。壓縮包共2000個(gè)文件以JavaScript1529個(gè)、Python179個(gè)、Vue105個(gè)等前端腳本和后端邏輯為主輔以44個(gè)Markdown說(shuō)明文檔、33個(gè)CSS樣式、29個(gè)JSON配置以及C/Java等擴(kuò)展代碼整體約85.15MB目錄結(jié)構(gòu)清晰適合按模塊研讀。目前已有42人學(xué)習(xí)瀏覽借助這份資料可以學(xué)習(xí)真實(shí)WMS的架構(gòu)拆分、接口設(shè)計(jì)、庫(kù)位與批次管理邏輯也能為二次開(kāi)發(fā)或課程設(shè)計(jì)提供可直接參考的代碼基線。1. GreaterWMS 倉(cāng)庫(kù)管理系統(tǒng)一套被售后物流逼出來(lái)的實(shí)戰(zhàn)方案值得照著做GreaterWMS 這套倉(cāng)庫(kù)管理系統(tǒng)的底子來(lái)自某大型汽車(chē)廠商亞太區(qū)的售后物流倉(cāng)儲(chǔ)供應(yīng)鏈流程設(shè)計(jì)它的人最初要解決的不是電商發(fā)貨而是售后件怎么追溯、庫(kù)齡怎么管控、質(zhì)檢區(qū)怎么流轉(zhuǎn)這一連串沒(méi)人愿意碰的臟活。和市面上把入庫(kù)、出庫(kù)、庫(kù)存三張表拼起來(lái)的通用 WMS 不同這套系統(tǒng)把序列號(hào)、批次、質(zhì)檢狀態(tài)、庫(kù)齡預(yù)警當(dāng)成了第一公民從數(shù)據(jù)模型到出庫(kù)策略都按售后倉(cāng)的規(guī)則在走。適合三類(lèi)人正在給自有倉(cāng)庫(kù)選型 WMS 的物流負(fù)責(zé)人想基于開(kāi)源系統(tǒng)做二次開(kāi)發(fā)但被現(xiàn)有框架鎖死的開(kāi)發(fā)者以及剛?cè)胄?、想搞懂倉(cāng)庫(kù)管理系統(tǒng)真實(shí)數(shù)據(jù)流和狀態(tài)機(jī)怎么落地的工程師。接下來(lái)我按它解決了什么問(wèn)題 → 怎么部署跑通 → 核心流程怎么設(shè)計(jì) → 哪些坑最容易翻車(chē) → 值得投入的進(jìn)階方向這條線把這套精簡(jiǎn)化方案講透。2. 售后物流倉(cāng)庫(kù)和電商倉(cāng)的根本區(qū)別先搞懂它在解決哪一類(lèi)問(wèn)題2.1 售后件為什么比新品難管序列號(hào)、批次與追溯鏈電商倉(cāng)管的是SKU × 數(shù)量 × 庫(kù)位售后物流倉(cāng)管的是序列號(hào) × 批次 × 來(lái)源 × 狀態(tài)。同一個(gè)零件從供應(yīng)商進(jìn)來(lái)時(shí)是新品發(fā)給經(jīng)銷(xiāo)商后因?yàn)橘|(zhì)量問(wèn)題退回回到倉(cāng)庫(kù)就變成了待檢品檢測(cè)完可能翻新、報(bào)廢或者退回供應(yīng)商。同一個(gè)序列號(hào)在這些狀態(tài)之間流轉(zhuǎn)每一次流轉(zhuǎn)都必須留痕因?yàn)橐坏┏霈F(xiàn)批次性質(zhì)量問(wèn)題倉(cāng)庫(kù)要在幾小時(shí)內(nèi)圈定這批貨發(fā)給了誰(shuí)、還剩多少在庫(kù)里。這套 WMS 里最核心的設(shè)計(jì)不是庫(kù)存表而是庫(kù)存流水Inventory Transaction。每一筆入庫(kù)、出庫(kù)、移庫(kù)、盤(pán)點(diǎn)差異都對(duì)應(yīng)一條流水庫(kù)存余額只是流水的投影。售后場(chǎng)景下改了庫(kù)存沒(méi)留流水等于沒(méi)改這也是它和很多通用系統(tǒng)最本質(zhì)的分歧點(diǎn)。我見(jiàn)過(guò)不少團(tuán)隊(duì)把流水當(dāng)成可有可無(wú)的審計(jì)功能結(jié)果追溯鏈條一斷問(wèn)題件只能靠人工翻 Excel。2.2 一個(gè)售后 WMS 的最小數(shù)據(jù)模型五張核心表怎么設(shè)計(jì)不看完整表結(jié)構(gòu)只看構(gòu)成追溯鏈的最小集合。這套系統(tǒng)的數(shù)據(jù)模型可以壓縮成五張核心表表職責(zé)關(guān)鍵字段售后場(chǎng)景下的注意點(diǎn)product物料主數(shù)據(jù)sku_code, name, unit, is_serial_tracked必須區(qū)分按序列號(hào)管理和按數(shù)量管理兩類(lèi)物料location庫(kù)位主數(shù)據(jù)location_code, zone, type質(zhì)檢區(qū)、退貨暫存區(qū)、待報(bào)廢區(qū)都是獨(dú)立 zone不能混在架位上lot批次lot_no, product_id, supplier_id, production_date批次號(hào)全局唯一生產(chǎn)日期直接參與庫(kù)齡計(jì)算serial序列號(hào)serial_no, lot_id, status狀態(tài)至少要有在庫(kù)、已出庫(kù)、鎖定、待報(bào)廢四種stock實(shí)時(shí)庫(kù)存product_id, location_id, lot_id, quantity唯一約束由 productlocationlot 組成serial 管理的物料還要加 serial 維度這張表的順序就是你的建庫(kù)順序先有物料和庫(kù)位再有批次接著序列號(hào)掛在批次下最后庫(kù)存永遠(yuǎn)指到某個(gè)庫(kù)位、某個(gè)批次、某個(gè)序列號(hào)。實(shí)際開(kāi)發(fā)時(shí)常見(jiàn)錯(cuò)誤的順序是先建庫(kù)存表再補(bǔ)批次導(dǎo)致無(wú)數(shù)歷史單據(jù)沒(méi)法回填批次追溯鏈從第一天就斷了。2.3 售后物流最看重的能力清單選型或自研前先對(duì)著打分在汽車(chē)售后倉(cāng)里下面這些能力每一項(xiàng)都是硬需求缺一個(gè)都會(huì)在后期用人工來(lái)補(bǔ)序列號(hào)級(jí)追溯從整車(chē)召回反查到零件序列號(hào)、批次、供應(yīng)商、入庫(kù)日期、出庫(kù)去向。庫(kù)齡預(yù)警與先進(jìn)先出超過(guò) 90 天、180 天、365 天的庫(kù)存自動(dòng)亮燈出庫(kù)時(shí)強(qiáng)制按庫(kù)齡升序分配。質(zhì)檢狀態(tài)機(jī)待檢、合格、不合格、待報(bào)廢四個(gè)狀態(tài)狀態(tài)切換必須走流程不能直接改庫(kù)存。多包裝單位同一個(gè) SKU 要同時(shí)支持按件、按箱、按托出入庫(kù)且換算關(guān)系可配置。移庫(kù)與盤(pán)點(diǎn)差異流盤(pán)點(diǎn)差異不是改一下數(shù)量而是生成盤(pán)盈、盤(pán)虧單據(jù)和財(cái)務(wù)流程聯(lián)動(dòng)。拿這套清單去對(duì)照市面上的通用 WMS你會(huì)發(fā)現(xiàn)很多系統(tǒng)在庫(kù)存管理上很強(qiáng)但序列號(hào)追溯和庫(kù)齡預(yù)警往往做成有但是個(gè)擺設(shè)。這套系統(tǒng)把這兩項(xiàng)從輔助功能提到了主流程這是它值得借鑒的地方。3. 用 Docker Compose 把整套 WMS 跑起來(lái)從零到掃碼收貨3.1 部署前的環(huán)境準(zhǔn)備與目錄規(guī)劃常見(jiàn)做法是把三個(gè)服務(wù)拆開(kāi)PostgreSQL 存業(yè)務(wù)數(shù)據(jù)、后端 API 處理業(yè)務(wù)邏輯、前端負(fù)責(zé)操作界面。我一般建議至少給這套系統(tǒng)準(zhǔn)備一臺(tái) 4 核 8G 的服務(wù)器磁盤(pán)根據(jù)庫(kù)存流水量估算建議預(yù)留 100G 起步因?yàn)閹?kù)存流水表膨脹速度比想象中快得多。目錄規(guī)劃上不要把所有東西堆在/opt下亂放按下面的結(jié)構(gòu)組織/opt/wms/ ├── backend/ # 后端項(xiàng)目的 Dockerfile 與代碼掛載 ├── frontend/ # 前端靜態(tài)文件與 Nginx 配置 ├── postgres/ # 數(shù)據(jù)庫(kù)數(shù)據(jù)目錄用命名卷或 bind mount 都行 └── deploy/ ├── docker-compose.yml └── .env.env里放環(huán)境差異比如端口、數(shù)據(jù)庫(kù)密碼、時(shí)區(qū)。不要在任何源碼文件里硬編碼數(shù)據(jù)庫(kù)密碼這是我見(jiàn)過(guò)最普遍的安全翻車(chē)點(diǎn)尤其是這套系統(tǒng)的代碼常被拿到內(nèi)網(wǎng)之外演示密碼一旦打成明文等于把整個(gè)倉(cāng)庫(kù)的數(shù)據(jù)權(quán)限送出去。3.2 編寫(xiě) docker-compose.yml三個(gè)服務(wù)的最小可跑配置后端我用 Django 風(fēng)格的配置來(lái)舉例因?yàn)檫@套 WMS 的后端思路是典型的 Python 業(yè)務(wù)框架ORM 管數(shù)據(jù)模型、遷移管表結(jié)構(gòu)、API 管前端交互。下面是完整的最小編排文件version: 3.8 services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: wms POSTGRES_USER: wms_user POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: [CMD-SHELL, pg_isready -U wms_user] interval: 10s timeout: 5s retries: 5 backend: build: ../backend restart: unless-stopped depends_on: db: condition: service_healthy environment: DB_HOST: db DB_PORT: 5432 DB_NAME: wms DB_USER: wms_user DB_PASSWORD: ${DB_PASSWORD} TZ: Asia/Shanghai volumes: - ../backend:/app ports: - 8000:8000 frontend: build: ../frontend restart: unless-stopped depends_on: - backend ports: - 80:80 volumes: - ../frontend/nginx.conf:/etc/nginx/conf.d/default.conf:ro volumes: postgres_data:這里db服務(wù)顯式加了健康檢查backend用depends_on.condition: service_healthy等數(shù)據(jù)庫(kù)就緒再啟動(dòng)。不這么配置的話前三次啟動(dòng)大概率出現(xiàn)后端連不上數(shù)據(jù)庫(kù)直接崩潰退出這是容器編排里最經(jīng)典的玄學(xué)問(wèn)題本質(zhì)不是玄學(xué)是啟動(dòng)順序沒(méi)控制。TZ: Asia/Shanghai一定要設(shè)不然庫(kù)齡預(yù)警按 UTC 算時(shí)間儲(chǔ)存在日期邊界上會(huì)整體差 8 小時(shí)庫(kù)存賬面上整天差出庫(kù)齡滿 90 天的判斷偏差。3.3 首次啟動(dòng)與初始化創(chuàng)建管理員、初始化基礎(chǔ)數(shù)據(jù)配置文件就位后需要做一次完整的初始化。以下是我每次部署都會(huì)走的命令序列cd /opt/wms/deploy # 1. 首次構(gòu)建鏡像拉依賴(lài)會(huì)比較慢建議設(shè)好代理或提前構(gòu)建緩存 docker compose up -d --build # 2. 確認(rèn)三個(gè)服務(wù)的狀態(tài) docker compose ps # 3. 初始化數(shù)據(jù)庫(kù)表結(jié)構(gòu)這個(gè)命令只在第一次運(yùn)行時(shí)執(zhí)行 docker compose exec backend python manage.py migrate # 4. 創(chuàng)建超級(jí)管理員 docker compose exec backend python manage.py createsuperuser # 5. 初始化基礎(chǔ)數(shù)據(jù)倉(cāng)庫(kù)、庫(kù)區(qū)、默認(rèn)庫(kù)位 docker compose exec backend python manage.py init_demo_datamigrate執(zhí)行的是建表語(yǔ)句會(huì)按數(shù)據(jù)模型的遷移歷史把所有表建出來(lái)之后代碼里改模型也會(huì)生成新的遷移文件這個(gè)命令要反復(fù)跑。createsuperuser創(chuàng)建管理后臺(tái)的登錄賬號(hào)。init_demo_data是我習(xí)慣保留的一個(gè)自定義命令它會(huì)創(chuàng)建默認(rèn)倉(cāng)庫(kù)、幾個(gè)基礎(chǔ)庫(kù)區(qū)收貨區(qū)、質(zhì)檢區(qū)、存儲(chǔ)區(qū)、發(fā)貨區(qū)以及一組演示用的物料和供應(yīng)商。忘記執(zhí)行migrate是最常見(jiàn)的初始化翻車(chē)點(diǎn)后端起來(lái)后任何接口都報(bào)relation does not exist。看到這個(gè)報(bào)錯(cuò)不要懷疑代碼先檢查有沒(méi)有跑遷移。3.4 用命令行模擬一次掃碼收貨驗(yàn)證整條鏈路通不通不急著接 PDA 硬件先用 API 模擬掃碼槍的動(dòng)作。掃碼收貨的業(yè)務(wù)邏輯是拿著收貨單號(hào)找到預(yù)期到貨的明細(xì)掃一個(gè)物料條碼/序列號(hào)校驗(yàn)后把庫(kù)存加到收貨暫存區(qū)。用 curl 模擬如下# 按收貨單號(hào)查詢待收貨明細(xì) curl -X GET \ http://127.0.0.1:8000/api/inbound/order/ASN2024001/details \ -H Authorization: Token 你的_token | python -m json.tool # 提交一次掃碼收貨參數(shù)是明細(xì)ID和掃描到的序列號(hào) curl -X POST \ http://127.0.0.1:8000/api/inbound/receive \ -H Authorization: Token 你的_token \ -H Content-Type: application/json \ -d {detail_id: 101, serial_no: SN202411001001}正常響應(yīng)里會(huì)返回這條序列號(hào)分配到的目標(biāo)庫(kù)位同時(shí)庫(kù)存流水里生成一條收貨記錄。到這一步說(shuō)明數(shù)據(jù)庫(kù)、后端 API、權(quán)限校驗(yàn)、庫(kù)存流轉(zhuǎn)整條鏈路已經(jīng)通了。Authorization: Token是 Django REST Framework 常見(jiàn)的認(rèn)證方式二開(kāi)時(shí)如果換成 JWT把請(qǐng)求頭里的 Token 換成Bearer即可注意別在文檔里把兩者混著寫(xiě)。4. 核心業(yè)務(wù)流程落庫(kù)入庫(kù)、出庫(kù)、盤(pán)點(diǎn)與庫(kù)齡的接口設(shè)計(jì)4.1 收貨到上架的完整狀態(tài)機(jī)四個(gè)狀態(tài)怎么轉(zhuǎn)換售后倉(cāng)的收貨不能直接入儲(chǔ)存位至少要經(jīng)過(guò)收貨、待檢、合格/不合格、上架/隔離這四個(gè)階段。我把這套系統(tǒng)的狀態(tài)機(jī)簡(jiǎn)化成一條鏈待收貨(OPEN) → 已收貨(RECEIVED) → 質(zhì)檢通過(guò)(QUALIFIED) → 已上架(IN_STOCK) ↓ 質(zhì)檢不通過(guò)(REJECTED) → 已隔離(IN_QUARANTINE)實(shí)現(xiàn)上不要用 if-else 到處散落判斷狀態(tài)定義一張狀態(tài)轉(zhuǎn)換表控制合法路徑。后端偽代碼如下# 定義狀態(tài)轉(zhuǎn)換的合法路徑 STATE_FLOW { OPEN: [RECEIVED, CANCELLED], RECEIVED: [QUALIFIED, REJECTED], QUALIFIED: [IN_STOCK], REJECTED: [IN_QUARANTINE, RETURNED], IN_QUARANTINE: [SCRAPPED, RETURNED], IN_STOCK: [ALLOCATED, PICKED], } def transition(record, target_state, operator, **payload): 執(zhí)行狀態(tài)轉(zhuǎn)換不合法直接拋異常合法則寫(xiě)入流水 if target_state not in STATE_FLOW.get(record.state, []): raise IllegalTransition( f當(dāng)前狀態(tài) {record.state} 不能轉(zhuǎn)到 {target_state} ) # 在事務(wù)里更新?tīng)顟B(tài)并寫(xiě)流水 with transaction.atomic(): record.state target_state record.operator operator record.save() InventoryTransaction.objects.create( record_idrecord.id, from_staterecord.state, # 注意這里要先取舊值 to_statetarget_state, operatoroperator, payloadpayload, )注意from_state一定要在賦值給record.state之前取舊值這個(gè) bug 我見(jiàn)人踩過(guò)不止一次先改了狀態(tài)再寫(xiě)流水結(jié)果流水的 from_state 和 to_state 永遠(yuǎn)一樣追溯鏈信息直接失效。狀態(tài)表的另一個(gè)價(jià)值是給每個(gè)狀態(tài)綁定權(quán)限比如只有質(zhì)檢角色能執(zhí)行QUALIFIED轉(zhuǎn)換這個(gè)在后面抗審計(jì)的時(shí)候非常有用。4.2 出庫(kù)波次與揀選策略按庫(kù)齡、批次、序列號(hào)三道過(guò)濾售后出庫(kù)有個(gè)硬性要求先進(jìn)先出按庫(kù)齡走同批次優(yōu)先序列號(hào)精確匹配。波次分配的邏輯就是在這三個(gè)維度上逐層過(guò)濾順序不能反。先按庫(kù)齡升序排再在相同庫(kù)齡內(nèi)按批次聚攏最后按需求里的序列號(hào)清單精確鎖定。我用 Python 代碼描述這個(gè)分配器方便你理解它為什么這樣排順序def allocate_stock(order_lines): 按庫(kù)齡優(yōu)先、批次聚攏、序列號(hào)精確匹配分配庫(kù)存 allocation [] for line in order_lines: # 第1層按庫(kù)齡升序排序庫(kù)齡 現(xiàn)在 - 入庫(kù)時(shí)間 candidates Stock.objects.filter( productline.product, location__zoneSTORAGE, # 只從存儲(chǔ)區(qū)分配 quantity__gt0, ).order_by(inbound_date) # 第2層如果訂單指定了批次直接過(guò)濾批次 if line.lot_no: candidates candidates.filter(lot__lot_noline.lot_no) # 第3層如果訂單指定了序列號(hào)精確匹配 if line.serial_no: candidates candidates.filter(serial__serial_noline.serial_no) for stock in candidates: take min(line.remaining_qty, stock.quantity) allocation.append((stock, take)) line.remaining_qty - take if line.remaining_qty 0: break if line.remaining_qty 0: # 分配不足不等于失敗但要返回缺量原因 raise Shortage(line.line_no, line.remaining_qty) return allocation這段的核心在order_by(inbound_date)它讓庫(kù)齡天然成為第一排序條件。不要嘗試用庫(kù)存表的更新時(shí)間代替入庫(kù)時(shí)間那是兩個(gè)概念混用會(huì)讓庫(kù)齡報(bào)表從第一天就是錯(cuò)的。分配成功的庫(kù)存要立刻標(biāo)記為ALLOCATED狀態(tài)并做預(yù)占預(yù)占數(shù)量單獨(dú)記在庫(kù)存表的allocated_qty字段上可分配數(shù)量是quantity - allocated_qty這樣波次不會(huì)把同一批庫(kù)存分給兩個(gè)訂單。4.3 盤(pán)點(diǎn)差異的閉環(huán)從盤(pán)盈盤(pán)虧到財(cái)務(wù)調(diào)整盤(pán)點(diǎn)模塊最常見(jiàn)的錯(cuò)誤是直接把賬面數(shù)量改成實(shí)盤(pán)數(shù)量這會(huì)讓問(wèn)題線索被抹掉。這套系統(tǒng)的正確處理方式是生成差異單寫(xiě)入流水再用差異單驅(qū)動(dòng)財(cái)務(wù)調(diào)整。盤(pán)點(diǎn)差異生成的接口邏輯我一般這樣寫(xiě)def create_count_diff(zone, count_lines): 生成盤(pán)點(diǎn)差異單不直接改庫(kù)存 diff_lines [] for item in count_lines: book_qty Stock.objects.filter( productitem.product, locationitem.location, ).aggregate(totalSum(quantity))[total] diff item.actual_qty - (book_qty or 0) if diff 0: continue diff_lines.append({ product: item.product, location: item.location, book_qty: book_qty or 0, actual_qty: item.actual_qty, diff: diff, # 正數(shù)盤(pán)盈負(fù)數(shù)盤(pán)虧 }) if not diff_lines: return {created_count: 0} # 生成一張盤(pán)點(diǎn)差異單狀態(tài)為待審核 diff_order CountDiffOrder.objects.create( zonezone, statusPENDING, linesdiff_lines, ) return {created_count: len(diff_lines), order_no: diff_order.order_no}差異單審核通過(guò)后才會(huì)執(zhí)行庫(kù)存調(diào)整。調(diào)整時(shí)正差異走盤(pán)盈流水入賬負(fù)差異走盤(pán)虧流水同時(shí)觸發(fā)財(cái)務(wù)憑證。這套設(shè)計(jì)把盤(pán)點(diǎn)和調(diào)賬分成兩步給財(cái)務(wù)留了審批節(jié)點(diǎn)哪怕是內(nèi)網(wǎng)小團(tuán)隊(duì)我也建議保留這個(gè)審批動(dòng)作因?yàn)楸P(pán)虧單后面是要扣 KPI 的直接改庫(kù)存會(huì)讓責(zé)任追蹤變成一筆爛賬。5. 售后 WMS 最容易翻車(chē)的 6 個(gè)坑從數(shù)據(jù)遷移到并發(fā)扣減5.1 現(xiàn)象庫(kù)存顯示負(fù)數(shù)但系統(tǒng)沒(méi)報(bào)錯(cuò)出庫(kù)單還在繼續(xù)打原因庫(kù)存扣減邏輯沒(méi)有加鎖兩個(gè)并發(fā)請(qǐng)求同時(shí)讀到同一行庫(kù)存為 5各自扣完 3 后都寫(xiě)出 2最終賬面變成 -1。售后倉(cāng)對(duì)負(fù)庫(kù)存容忍度為零因?yàn)樾蛄刑?hào)追溯不允許出現(xiàn)憑空多出的負(fù)數(shù)出庫(kù)。解決扣減庫(kù)存時(shí)必須使用數(shù)據(jù)庫(kù)行鎖并校驗(yàn)扣減后不為負(fù)。不要試圖用 Python 層的標(biāo)志位控制并發(fā)兩個(gè)進(jìn)程之間根本不共享內(nèi)存。with transaction.atomic(): stock Stock.objects.select_for_update().get(pkstock_id) if stock.quantity - stock.allocated_qty need_qty: raise InsufficientStock(f庫(kù)存不足可分配 {stock.quantity - stock.allocated_qty}) stock.quantity - need_qty stock.save()select_for_update()會(huì)把對(duì)應(yīng)行鎖住直到事務(wù)結(jié)束這是解決扣減并發(fā)最通用的做法。代價(jià)是會(huì)阻塞同行的其他事務(wù)所以務(wù)必保證事務(wù)體盡量短不要在鎖里做報(bào)表統(tǒng)計(jì)或調(diào)用外部接口。5.2 現(xiàn)象同一個(gè)序列號(hào)被兩次掃碼入庫(kù)兩張收貨單都顯示成功原因序列號(hào)全局唯一約束只建在序列號(hào)表上但收貨接口沒(méi)有在事務(wù)開(kāi)始時(shí)就檢查序列號(hào)是否已經(jīng)存在導(dǎo)致先到的一單還沒(méi)提交后到的一單在檢查時(shí)沒(méi)看到新記錄雙雙通過(guò)。解決把唯一性檢查合并進(jìn)插入操作本身直接依賴(lài)數(shù)據(jù)庫(kù)唯一索引的沖突報(bào)錯(cuò)而不是先查再插。try: Serial.objects.create( serial_noserial_no, lotlot, productproduct, statusIN_STOCK, ) except IntegrityError: # 捕獲唯一索引沖突返回序列號(hào)重復(fù)請(qǐng)核對(duì)來(lái)源 raise DuplicateSerial(serial_no)這個(gè)現(xiàn)象最隱蔽的地方在于單機(jī)單庫(kù)時(shí)出現(xiàn)的概率很低一旦開(kāi)啟多實(shí)例部署檢查再插的窗口期被放大重復(fù)入庫(kù)基本必然出現(xiàn)。所以我在二開(kāi)時(shí)項(xiàng)目里所有涉及唯一編號(hào)生成的接口一律不做先查后插只依賴(lài)數(shù)據(jù)庫(kù)約束兜底。5.3 現(xiàn)象波次已經(jīng)分配完庫(kù)存揀貨時(shí)發(fā)現(xiàn)庫(kù)存被別人挪走原因波次分配只寫(xiě)了庫(kù)存表的allocated_qty但移庫(kù)、盤(pán)點(diǎn)調(diào)整的代碼沒(méi)有檢查這個(gè)字段。比如一個(gè)庫(kù)存被波次預(yù)占 10 件同時(shí)有人做移庫(kù)把這 10 件挪到了別區(qū)預(yù)占記錄還掛在原庫(kù)存上揀貨時(shí)當(dāng)然找不到貨。解決所有會(huì)改變quantity的操作必須同時(shí)校驗(yàn)allocated_qty挪庫(kù)時(shí)不允許挪走已預(yù)占部分確需挪走要先把預(yù)占釋放重新分配。releaseable stock.quantity - stock.allocated_qty if request_qty releaseable: raise AllocatedLockedError( f當(dāng)前可移庫(kù)數(shù)量為 {releaseable}含預(yù)占庫(kù)存不可移動(dòng) )這個(gè)坑在售后倉(cāng)尤其嚴(yán)重因?yàn)橘|(zhì)檢區(qū)、隔離區(qū)、存儲(chǔ)區(qū)之間的移庫(kù)非常頻繁任何一條移庫(kù)路徑漏掉預(yù)占校驗(yàn)波次完整性就崩了。5.4 現(xiàn)象數(shù)據(jù)遷移完成后盤(pán)點(diǎn)怎么都對(duì)不上差異單滿天飛原因遷移時(shí)只搬了庫(kù)存余額沒(méi)有搬庫(kù)存流水。更嚴(yán)重的是遷移腳本把歷史訂單的收貨完成時(shí)間當(dāng)成了庫(kù)存入庫(kù)時(shí)間導(dǎo)致庫(kù)齡全部錯(cuò)誤。解決遷移順序必須是單據(jù)先于流水流水先于余額。庫(kù)存余額在遷移時(shí)反推生成絕不直接復(fù)制舊表里的數(shù)字。# 遷移邏輯按三階段走 def migrate_wms_data(raw_snapshot): # 階段1遷移物料、庫(kù)位、批次、序列號(hào)主數(shù)據(jù) migrate_master_data(raw_snapshot) # 階段2遷移入庫(kù)單/出庫(kù)單/移庫(kù)單及明細(xì) move_ids migrate_orders(raw_snapshot) # 階段3按單據(jù)流水重放生成庫(kù)存余額 replay_transactions(move_ids)凡是遷移后庫(kù)存賬實(shí)不符的九成都是階段順序錯(cuò)了。寧可在遷移時(shí)多花三天打通單據(jù)流也不要圖省事只搬余額否則后面每個(gè)月盤(pán)點(diǎn)都在還這筆技術(shù)債。5.5 現(xiàn)象前端報(bào)表加載超過(guò) 10 秒數(shù)據(jù)庫(kù) CPU 飆升原因典型的是 N1 查詢和缺索引。前端要顯示一行庫(kù)存記錄后端卻循環(huán)查了 20 次明細(xì)表而庫(kù)存流水表的record_id、created_at沒(méi)有索引按時(shí)間段查流水直接全表掃描。解決報(bào)表接口一律用聚合查詢一次 SQL 出結(jié)果給流水表建組合索引。-- 流水表必備組合索引按時(shí)間范圍查詢和按單據(jù)維表關(guān)聯(lián)同時(shí)覆蓋 CREATE INDEX idx_inv_txn_record_time ON inventory_transaction (record_id, created_at); -- 按倉(cāng)庫(kù)物料庫(kù)位的實(shí)時(shí)庫(kù)存匯總避免逐行暴查 SELECT product_id, location_id, SUM(quantity) AS total_qty, SUM(allocated_qty) AS alloc_qty FROM stock WHERE warehouse_id WH01 GROUP BY product_id, location_id;優(yōu)化之后如果還慢下一個(gè)排查點(diǎn)是序列化層確認(rèn)沒(méi)有在 Python 循環(huán)里逐條訪問(wèn) ORM 的關(guān)聯(lián)屬性。這套系統(tǒng)的報(bào)表慢基本逃不出這三個(gè)原因缺索引、N1、循環(huán)內(nèi)查詢。5.6 現(xiàn)象多倉(cāng)并發(fā)修改同一個(gè)物料主數(shù)據(jù)時(shí)數(shù)據(jù)庫(kù)死鎖原因兩個(gè)事務(wù)各自更新了不同的子表之后又同時(shí)去更新父表鎖的獲取順序不一致導(dǎo)致死鎖。這種問(wèn)題在單倉(cāng)部署時(shí)幾乎不出現(xiàn)一旦做成多倉(cāng)或總部-分倉(cāng)兩級(jí)模式各倉(cāng)同時(shí)改物料主數(shù)據(jù)死鎖就變成高概率事件。解決鎖定主數(shù)據(jù)的順序必須全局一致比如所有事務(wù)都先鎖物料主表再鎖子表且事務(wù)保持短小。BEGIN; -- 所有涉及主數(shù)據(jù)更新的業(yè)務(wù)統(tǒng)一先鎖父行 SELECT * FROM product WHERE id 101 FOR UPDATE; -- 再更新關(guān)聯(lián)子表 UPDATE product_supplier SET is_active 0 WHERE product_id 101; COMMIT;死鎖出現(xiàn)時(shí)數(shù)據(jù)庫(kù)一般會(huì)主動(dòng)犧牲一個(gè)事務(wù)表現(xiàn)為某個(gè)請(qǐng)求突然報(bào)deadlock detected。不要靠重試硬扛要從鎖順序上根治。把先父后子寫(xiě)進(jìn)代碼評(píng)審清單比事后查 pg 日志省事得多。6. 把 WMS 從能用調(diào)到好用三個(gè)值得投入的二次開(kāi)發(fā)方向6.1 對(duì)外暴露冪等 API讓過(guò)賬、訂單同步不再重復(fù)記賬倉(cāng)庫(kù)系統(tǒng)和其他系統(tǒng)對(duì)接時(shí)最痛的點(diǎn)是對(duì)方超時(shí)重試同一個(gè)入庫(kù)單被推了三次。給核心寫(xiě)操作加上冪等鍵是最值錢(qián)的改造。做法是每個(gè)請(qǐng)求頭帶一個(gè)Idempotency-Key服務(wù)端用數(shù)據(jù)庫(kù)唯一約束記錄這個(gè)鍵的處理結(jié)果重復(fù)請(qǐng)求直接返回第一次的結(jié)果不再執(zhí)行扣減。6.2 用 ABC 分類(lèi)重排庫(kù)位把熱銷(xiāo)件和呆滯件分離售后倉(cāng)的庫(kù)位分配經(jīng)??咳耸止び洝?梢园闯鰩?kù)頻次把物料分成 A、B、C 三類(lèi)A 類(lèi)占出庫(kù)量 80% 的物料放在離揀貨口最近的庫(kù)位C 類(lèi)呆滯件挪到高層或遠(yuǎn)端這個(gè)改動(dòng)不需要改接口只要定期跑一次重排任務(wù)生成的庫(kù)位調(diào)整建議讓倉(cāng)管確認(rèn)后執(zhí)行。庫(kù)內(nèi)行走距離縮短之后揀貨效率的提升會(huì)直接體現(xiàn)在人均單量上這是投入產(chǎn)出比最高的優(yōu)化項(xiàng)。6.3 給庫(kù)齡預(yù)警加一個(gè)低代碼定時(shí)任務(wù)異常庫(kù)存不再無(wú)人管庫(kù)齡超過(guò) 180 天沒(méi)有動(dòng)銷(xiāo)的庫(kù)存在售后倉(cāng)里意味著潛在的呆滯風(fēng)險(xiǎn)。設(shè)計(jì)一個(gè)每天凌晨執(zhí)行的定時(shí)任務(wù)掃描所有在庫(kù)批次把超過(guò)閾值天數(shù)的批次寫(xiě)入預(yù)警表同時(shí)按預(yù)警級(jí)別生成不同的處理任務(wù)90 天觸發(fā)提醒180 天強(qiáng)制要求提交處理意見(jiàn)365 天自動(dòng)封存并停止出庫(kù)分配。這樣庫(kù)齡從報(bào)表指標(biāo)變成了主動(dòng)任務(wù)而不是等人去看報(bào)表才發(fā)現(xiàn)問(wèn)題。做這套系統(tǒng)二開(kāi)時(shí)我吃過(guò)最大的虧就是一開(kāi)始太迷信復(fù)雜設(shè)計(jì)把狀態(tài)機(jī)、權(quán)限模型全部推到極致結(jié)果團(tuán)隊(duì)內(nèi)沒(méi)人跑得動(dòng)。后來(lái)我把精力集中到三件事上庫(kù)存扣減并發(fā)控制、序列號(hào)唯一約束、庫(kù)齡計(jì)算口徑統(tǒng)一。這三件事穩(wěn)住之后其他模塊哪怕糙一點(diǎn)倉(cāng)庫(kù)也能正常運(yùn)轉(zhuǎn)。希望這些經(jīng)驗(yàn)對(duì)你幫到你少走我當(dāng)年繞的彎路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本www操操操| 婷婷丁香六月| 久久久久久性爱片| 青青草华人在线欧美在线| 亚洲中文字幕熟女| 精品十三区| 啊啊啊操死我| a网站免费观看| 大粗鳼巴久久久久| 中文无码一二三区| 激情小说在线视频| 日韩av三四区| 2024年最新色情网站在线观看| 久久曰曰| av亚欧| 日韩免费看黄片| 很很很很操| 日韩欧美午夜视频在线| 国产第二页| 国产亚洲精品农村妇女 | 亚洲国产丝袜熟女av| 四季AV一区二区凹凸精品小说| 97亚洲精品| 青青欧美在线| 免费中文综合精品| 99re热| 岛国艾薇凹凸视频天堂| 蜜臀久久99精品久久久久电影| 亚洲九月丁香| 老熟女网站| 在线女人91| 日本人妻中文字幕精品| 后入式五六区| 美女AV一区二区| 亚洲?V无码专区在线电影| 无码久| 欧美国产欧美在线观看| 天天综合~91| 天美传媒一二三区永久网站| 亚洲日韩人妻中文字幕一区| 91色射| 久久99网站| 久久伊人影院| 91伊人大香蕉| 亚洲精品久久久久久久蜜桃臀| 欧美日韩国产人人| 激情综合97| aV中亚| 秋霞男人网| 91在线视频观看国产| 亚洲日韩美女中文字幕乱| 一摸二插三插| 中日无幕一二三四区| 国产日韩欧美中文在线播放| 国产精品久久久久9999小说| 天天摸天天碰天天添青青| 久久人人爽爽人人爽人人片αV| 超碰97资源网亚洲| 色爱欲亚洲| 免费看久久久性性| av网站免费线看| 97精品视频网站| 欧美在线播放aaaa| av在线观看不卡网站| 这里只有精品97| 青青草玖玖爱| 黄色污污污污污污网站| 无码又爽又硬又激情免费视频| 成年人三级黄色片视频| 日韩av在线精品观看| 9999九九九久久久| 亚洲影视综合网| 日韩色欲久久一二三四区| www.人人摸在线视频| 双插在线| 亚洲精品 大香蕉| AV不卡在线| 久久人| 啊啊啊久久久视频| 久久25| 1769精品一区二区三区| 天天视频网站黄| 啊啊啊无码| 久久久久久裸体| 91啪9色| 国产精品一二三免费网站| 18禁网站在线播放| 激情黄色片在线观看| 亚洲欧美洲综合| 插入粉嫩少妇视频| 亚洲限制级| 亚洲棕合电彰| 久久精品天美| 欧美日本天堂| 亚洲国产精品久久久男人的天堂| 免费的av网| 91美女丝袜诱惑视频| 久久精品店| 日本乱人伦片中文三区| 黄色成人网久久久久久| 肉动漫无遮挡h在线观看| 中文字幕第23区| 天天摸夜夜摸| 免费中文在线| 亚洲二区精品在线观看| 国产精品高清2021在线| 啊啊啊想要| 97超碰影音| 人妻 制服 日韩 中文 在线| 久久伊人网视频一区二区三区 | 少妇无码999| 亚洲日本天堂| 大香蕉欧美国产日韩高潮| 欧美日日网| 97国产成人精品免费视频| 亚洲天堂人妻熟妇视频| 高清无码在线播放网站| 热无码中文亚洲H一道本一区二区| 69精品| 日韩久射综合| 91激情国产| 老司机免费视频在线91| 久久人妻少妇| 精品久久久一本一道| 国产日韩人人| 国产AV人人 夜夜人人澡| 又大又白奶子| 日本97久久久精品| 超碰免费欧美7| 热热热热日日漂亮永久永久国产日| 亚洲欧美天堂在线| 美女91在线观看| 婷婷国产精品九区| 麻豆九九九| 九九久久国产精品| 60秒免费视频| 一二三区精品视频| 91综合中文字幕| 四虎精品永久在线播放| 看免费的黄片| 日本www操操操| AV九九| 69人妻精品一区二区绯色| 五月丁香在线| 无码久| 综合性视频99| 男人天堂网手机版婷婷| 日韩97P| 丝袜美腿av女优在线| 亚洲天堂男人| 欧美91视频| 搡老熟女老女人老熟妇免费视频| 亚洲黑丝在线| 五十路熟女工口 | 免费综合亚洲中文| 啊啊啊啊啊在线观看网址 | 亚洲av淫乱| 99久国产精品午夜性色福利| 色综合网1| 天天操av懂色| 亚洲日韩东京热一区| 一区超碰一区| 牛牛操视频逼| 国产免费一区在线观看| 麻豆天美国美国产| 亚洲国产中文字幕| 操www| 亚洲精品影视老司机| av一区二区三区 中文| 一区二区 韩日AV| 国产精品高潮久久AV| 精品少妇人妻一区二区三区| 黑人狂躁日本妞一区二区三区| 亚洲精品无码少妇久久| 操操操操网黑人| 在线小说视频一区| 九九热久久99精品re| 日本黄 R色 成 人网站| 91爰爱欧美| 亚洲91色| 韩国一级婬片A片AAAAA| 欧美一区二区传媒| 五月天伊人网| 男人天堂婷婷五月天校园春色| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 600国产精品视频| 伊人网免费视频| 日韩乱插| 久久精品99| 13小男生GAY自慰脱裤子| 国产99热| 一二三四区操操Av| 日本欧美一区二区三区免费| 国产性感骚丝袜在线| 日韩av电影网站| 欧美的性爱网站免费| 国产激情综合五月久久| 国产成人五月天丁香花| 亚洲蜜乳av| 精品美女在线视频| 国产一区二区三区久久久精品| 天天插天天射| 51一区二区三区| 色翁荡息又大又硬又粗又爽| 2025亚洲男人天堂| 亚欧无码线免费观看视频| 99热在线观看| 天天久久| 欧苏综合色综合| 亚洲精品九九九| 一起草AV| 国产熟女无套内射| 欧美亚洲丝袜人妻制服99| 亚州精品人妻一二三区| 竹菊影视国产一区二区| 夜夜嗨一区二区三区三州加勒比 | 综合久久9| 天美传媒一二三区永久网站| 久一区久久蜜桃| 色999;丁香五月| 农村少妇久久久久久久| 91久久久久久| 国产9l 大屁股| 亚洲五月婷婷| 91一区二匹| 天天操女人| 欧美色图片| 婷婷尹人大香蕉免费| 日韩啪啪视频| 国产黄a三级三级三级av在线看 | 人妻天天夜夜爽一区二区| 加勒比伊人| 日韩美脚一区二区网站| 一区二区三区免费视频入口 | 国内精品伊人久久久久影院会| 60秒免费小视频| 久久久久久久国产视频| 亚洲双插| 天天综合欧美综合| 人人摸人人干人人拍97| 久操免费电影| 色女网日韩| 亚洲综合另类小说色区亚洲成av人片在www | 狠狠爱综合网| 97精品久久久久中文字幕| 国产日韩精品人妻久久久久色欲网站| 天天操天天7| 91麻豆va国产精品| 国产操逼网站亚洲一级黄色| 亚洲免费97免费| 操逼视频亚洲| a'v在线资源| 久久亚码| 天天操狠狠日夜夜干超碰撸com视频在线观看| 无码人妻一区二区三区四区老鸭窝| 国产欧美美女免费观看视频| 日本理论在线| 中文日本免费高清| 黑人综合网| 天天看特黄的免费网站| 色五月激情网| 女人被男人桶爽视频网站| 色亚洲欧美| 97综合在线观看| 日本一区二区做爱的视频| 青青草大香蕉视频| 黑人干亚洲| 91婷婷伊人狠人| 精品欧美А∨无码黑人大荫蒂| 精品二区三四区五电影 | 丁香五月天激情综合| 啪啪视频免费在线观看| 欧美亚洲清纯| 岛国不卡超碰护士AV在线播放| 色婷婷影视| 蜜乳视频网站| 懂色Av| 51一区二区三区| 超碰国产情侣自拍网| 精品超碰国产| 91免费看一区二区三区| AV乱伦国产| 天天日天天干天天摸天天操| 国产风韵犹存熟妇三区| 精品一区二区三区四区外站| 九九热男人天堂| 手机看片1025| 中文字幕123| 水多多映视AV| 蜜臀久久99精品久久久| 97精品全部| 精品综合久久久久久97| 伊人嫩草| 欧美日韩97在线| 亚洲中文电影| 午夜精品久久久久久久99热影院| 丁香六月婷婷综合| 97精品国产97久久久久久| 在线观看亚洲专区| 色欲蜜臀AV| 免费久久一级毛片大黄| 性无码专区2020| 日本韩高清无砖码22o| 久久亚洲一区女同性恋中文字幕| 啊啊啊啊,啊啊好多水| 国产成人主播| 素颜老阿姨乱情色| 超碰午夜在线| 九七毛片九九毛片| 欧美高清91| 午夜操操操| 大香交| 操死我了啊啊啊| 丝袜高跟澳门91视频| 激情四射五月天| 精品一区二区三区四区外站| 品亲网欧美品亲网| 天堂涩涩| 国产97av| 亚洲图片激情小说| 女沟厕偷窥piss小便| 秋霞Av理论一级在线| 2019天天干| 亚洲欧美999| 免费夜夜爱黄色视频毛片| 久久五月天婷婷| 日日夜夜干| 四月丁香婷婷| 江都AV在线| 9999亚洲精品| 91中文字幕在线观看| 美女啊啊啊啊啊啊| 免费日韩黄片| 人妻中文字幕日韩电影| 91麻豆va国产精品| 久久a久久| 老师充足的奶水小说| 97爱b| 亚洲性综合11| 亚洲色电影在线| 桃色五月天| 久久乐| 精品9区| 日韩偷拍一区二区三区 | 美国一区二区三区视频| 日少妇亚洲版| 国产无码精品成人| 国产人伦精品一区二区三区 | 懂色aV一区二区天美传媒| 性色乱AV一区二区| 三级网色| 国产精品人妻免费精品| av久日| 99国产精品在线观看| 国产强奸无码乱伦| 亚洲日韩XXX| 激情综合色| 国产区日韩区在线观看| 一区二区视频你懂的| 亚洲aV无码成人在线观看| 人妻精品一区二区| 性爱AV天堂| av天堂影视中文在字幕在线中文 | 五月香婷婷| av网站免费线看| 亚洲AV成人精品网站在AV| 久久国产对白激情浪潮| 97色婷| 亚洲成人性爱网站在线播放| 一区二区高清视频| 自拍啪啪视频| 超碰97欧美日韩| yazhousetuoumei| 久久9视频| 中文字幕人成乱码熟女香港| 欧美色青| 天天久久久久久| 亚洲激情色片| 日日黄色三级网站| 伊人97色天使| 97WW精品| 日韩精品人妻系列无码天堂| 黄色AAAAA欧美| 97欧美视频| 淫纸中9区| 成人天天爽| 中文操逼字幕| 超碰吊日色| 国产精品一区二区三| 97在线观看免费视频l| baisiav| 鲁鲁色综合网| 欧美中文字幕男人天堂久久精品 | 草伊人高潮喷水超碰| 欧美综合色站| 男人把坤坤插入女人的下体| 日韩午夜国产| 91爰爱欧美| 色网1| 日本五区不卡| 久久伊人影院| 亚洲国产精品成人综合| 中文字幕人成乱码熟女香港| 欧美日韩电影成人在线| 免费中文在线| 亚洲男人的天堂一区二区| 日韩AV色图| 欧美一区二区成人一卡| 亚洲第一男人天堂| 97色在线| 国产精品白虎| 免费成人在线熟妇网| 超碰69| 日韩亚洲欧美中文字幕| 97欧美性爱| 内射黑人| 国产色产精品在线观看 | 东京太热久久久| oumeisetupian| 一本一道久久综合久久| A片A5445444| 日本一级黄色电影| 老鸭窝日丰县女人| www.亚洲黄色| 天天插天天射| 亚洲天天影视色综合| 老司机香蕉| 美国黄片aaa| 99热91| 99热婷婷一区二区三| 无遮挡男女激烈动态图| 婷婷精品国产一区二区三区日韩| 夜夜无码| 爱av免费| 天天热精品| 无码高清少妇久久| 人妻精品综合中文字幕在线| 91蜜臀人妻中文字幕在线| 97在线精品观看视频| 91九九九馒头| 成人精品无码| 久久人妻四季| 999精品国产高清一区二区| 人妻插插人妻人| 国产成人99久久亚洲综合| 91丝袜美女| 久9无限国产| 中文字幕av亚洲在线| 中国的操老妇女| 1禁看欧美黄片免费看| 熟人人妻少妇精品久久| 丁香五月综合| 久久久97| 九九九九九九九九九五码| 一区二区三区成人高清视频| 日本黄页视频在线观看| 久久女婷| 国产最火爆久久国产网站网站 | 欧亚久久偷拍视频| 亚洲性感丝袜诱惑在线观看| 久久精品人人做人人看| 欧美女同在线| 欧美老妇女内射网址| 亚洲免费人妻在| 日韩免费a级毛片无码a∨| 97精品视频免费| 大香网站| 日本中文熟女视频| 岛国999| 99成人| 93人人操人人| 国产黄色小视频网站| 啊啊啊啊好疼| 东京男人天堂| 欧美性Fer办公室秘书| 欧美亚洲第1页| 午夜免费福利视频一区| 麻花豆传媒剧国产MV出差| 啪啪啪亚欧美视频| 青青草一本道福利视频| 任我爽在线视频免费观看| 人妻在线中出视频| 桃花色涩综合影院| 香蕉热人人精品| 校园春色亚洲色图| 色偷偷2020免费视频播放| 极品粉嫩少妇视频| 九九九影院| 久久偷拍人| 亚洲人在线| 99热色这里只有精品| 综合网色| 九九热在线精品视频| 国产呦精品一区二区三区下载| 乱伦熟女专区| 无码一区二区精品视频久久久春药 | 色路综合| 日韩图色| 爱逼综合| 另类图片欧美激情综合| 亚洲精品久久久久毛片A片拉屎| 3P丝袜熟女 色综合| 综合网亚洲在线| 国产AB视频| 色与欲影视天天看综合网| 亚洲第二页| 97啪啪| 又粗又长又爽在线观看| 欧美另类综合久久| 日本精品一区二区中文字幕| 日韩啪啪啪啪啪| 天天日B狠狠操| 欧美日韩亚洲高清不卡一区二区三区| 91美女在线视频| 男人的天堂日本东京热| 欧美丝袜91| 国产精品白领在线观看| 久久91视频| 欧美成人黄网色网站| 五月丁香狠狠爱| 亚洲影院小综合| 97在线日韩中文字幕| 国产色产精品在线观看| 毛片电影一区二区三区| 亚洲日韩乱码中文无码蜜桃臀网站| av 模特一区了| 色综合91好| 久草免费福利在线播放| 日本片日本片祼观看网站在线看中文版网页在线看 | 亚洲大色堂| 色97国产69香蕉| 26uuu最新| 黄色性爱网网| 欧洲一区二区三区免费| 欧美综合网在线| 啪啪啪综合网| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 国产高清1234区| 国产乱码精品久久久久久| 欧美96在线|欧| 亚欧性爱ab| 亚洲少妇在线影音| 成人性爱AV在线免费观看| 久久久999日本大片| 97这里有精品| 亚洲人妻av| 青青操日韩| 国模无码一区二区三区在线| 日本中文字幕高跟| 91这里只有精品| 亚洲综合五月天婷婷丁香| 天天干人人乐| 东京热激情视频一二三区| 97超碰人妻| 91 手机在线播放 绯色| 欧姜老司机| 色色无码| 男人的天堂99| 色哟哟-国产专区| 国产真乱mangent| 国产精品电影推荐| 亚洲成?V人片在线观看福利| 久久偷偷色综合蜜桃| 蜜臀AV网站| 超碰久久.com| 一区=区三区视频| 色欲无码人妻日韩欧美精品| 午夜精品久久久99热蜜桃的功能特点 | 99少妇| caopeng97| 韩三级a视频在线观看| 99精品网站| 欧美日韩操逼嗦吊| 国产精品交换一区二区| 日本淫乱女一区二区三区视频| 欧美三级免费伊人| 操逼网免费无码视频| 熟女精品日韩一区二区三区| 亚州春色| 国产无遮挡| 人人操人人大香蕉| av网页一区二区三区| 欧美日韩色| 操亚州| 91xingse| 精品人妻伦一区二区三区久久| 日韩美脚一区二区网站| 欧美性爱系列| 无码最新| 十八岁啪啪视频免费看| 日日夜夜摸| 欧美大的香蕉有线电视视频| 久久久久密臀视频| 天天日天天射天天干| av优播| 丁香激情网| 狠狠干婷婷| 亚洲春色激情小说| 殴美性色a级欧美| 色色色99| 五月色丁香| 九九热在线视频| 91丨九色丨大屁股| 精品少妇高潮久久| 啊啊啊轻点在线观看| 丝袜av一区二区三区| 91美女在线视频| 久日91在线| 青青草久久| 日本 情色 1区2区3区| 亚洲小说视频| 亚洲性爱成人| 亚洲国产麻豆一区二区三区| 午夜福利免费福利视频| 狠狠激情综合狠狠操中文字幕| www.人人cao| www.夜夜| 男人的天堂在线| 久久人| 色哟哟AⅤ| 97人人夜夜精品视频| 人妻一区二区三区四区视频| 按摩中文字幕| 国产色呦呦| 欧美亚州综合图片| 亚洲av无码成人精品国产| 色97欧美| 久久超碰免费的| 日韩卡一卡二卡三在线| 欧美色综合网| 欧美黄色图片| 色爱综合网| 欧美亚洲特P| 国内操逼视频二区| 97干在线| 亚洲精品国产日韩无码AV永久免| 香蕉国产97| 91在线视频免费中出| 大色综合网| 在线视频亚洲无码| 精品人妻一区二区三区四区石在线| 超碰99热中文字幕| 超碰碰碰碰| 大香蕉黄色一级片免费看| 欧美亚洲丝袜人妻制服中文99| 97资源超碰| 国产精品亚洲一区二区三区四区| 青春草莓视频在线观看网址| 国产午夜福利合集| 婷婷五月天综合网| 黄片直播三级黄片两女一男| 国产真乱mangent| 啊啊啊啊免费视频| 狠狠干妹子| 免费农村成人少妇人妻Aa一区二区视频| 久久男女激情视频网站| 国产精品久久妻无码网站| 超碰97综合在线| 乱码人妻一区二区三区| 欧美激情片一区二区| 99精品在线观看| 欧美v亚洲v日韩v最新在线二区| а√天堂资源官网在线资源| 国产乱子伦久久精品综合一区二区三| 亚洲综合伊人| AV99热18这里只有精品| 色五月天AV| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 双插在线| 无码91| 五月天综合网| 欧美日韩操逼嗦吊| 日韩精品视频在线观看一卡二卡| 1769国内精品视频| 天天射天天操天天干天天吃2018| 超碰97综合在线| 大茄子熟女AV导航| 亚州精品人妻一二三区| 淫穴高潮色图| 区一二区日韩亚洲乱码av电影| 嗯嗯啊中文字幕| 中文字幕 码 自拍 视频 区| 久操精品网| 五月天社区| 九九99精品| 亚洲精品色| 亚洲黄色影视| 天天操夜夜操| 久久草草欧美精品| 天天看片天天爽| 国产自制av蜜乳| 久久人妻| 午夜人人操| 日韩免费一级性爱视频| 久久久久亚洲三级电影| 国产精品成人久久一区二区三区| 一级日本牲交大片好爽在线看| 日韩一级性爱无码| 18禁美女裸体无遮挡啪啪| 久久久久久国产精品免费网站| 操逼操逼视频操逼| 99热啪啪| 蜜桃色色网站视频三区| 欧洲中文字幕| 97超碰久| 91少妇通奸网站| 超碰偷拍| 亚洲另类天堂| 三级色综合| 最新国产亚洲精品精品国产亚洲综合| 九九香蕉网| 97中文超碰| 久久同城AV| 精品久久97观看在线视频| 9118禁| 亚洲精品天堂久久A∨51成人漫| 欧美熟女操屄| 一色网男人的天堂| 欧洲乱码视频| 大香蕉中文网| 青草精品视频一日本久久久久网站| 97干97色| 免费簧片在线观看| 黑丝少妇| 91在线/欧洲| 亚洲色性| 超碰国产精品久| 91九色首页| 啊啊啊啊啊啊啊好爽不要| 丰满熟女人妻一区二区三五十一路| 婷婷激情丁香| 性久久| 久久,精品一二三| 91精品婷婷国产综合久久竹菊| 久草毛片| 欧美亚洲一级在线观看| 日韩欧美女优电影| 伊人色综合欧美| 亚洲一区二区三区春色| 乱伦AVxx| 99re9这里只有精品| 久久久久久中文| 中文人妻av高清一区| 69人妻精品一区二区绯色| 欧美伦乱爱| 国产精品久久久啊| 91麻豆va国产精品| 久久国语| 欧美激情久操网| 九月色婷婷| 国产精品69久久久久孕妇欧美| 国产强奸乱伦欧美| 大香蕉亚洲中文| 欧美色图 人妻| 综合亚洲欧美精品日韩?v| 亚洲图片偷拍视频区| 日韩午夜国产| 成人小说另类在线| 99国产人成精品| 高清无码学生妹高潮| 天天干天天燥| 欧美大香蕉97| 97超碰色色| 激情网五月天| 九九九九热只有精品| 色色福利| 超碰天天操| 欧美成人A√在线一区二区| 色香色欲天天综合网天天来吧| 熟女色图在线| 久久精品一区二区三区四区五区| 91精品国产麻豆国产自产在| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 国产精品一级特黄aaa大片在线观看| 日韩一级二级| 日韩欧美传媒一区国产| 不卡啪啪视频| 男人天堂导航| 国产乱伦一二三区| 人妻激情视频| 67194国产| 日本幼女18+| 色色激情五月天| 久久九九精品一区二区 | 日韩免费a级毛片无码a∨| 国产成人+综合亚洲+天堂| 亚洲天堂久| 日韩人妻播放| 热热色AV| 5月婷婷6月六月丁香| 精品无av| 又黄又爽在线观看视频| 九九九九九精品| 麻豆国产av网| 亚洲AV成人精品网站在AV| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 天天视频黄| 91黑丝少妇| 日本熟女免费視颖| 97碰碰日本乱偷人妻中文的| 十八禁的黄污污免费网站| 日韩专区久久久| 国产一区二区三区影片| 日本大香蕉综合网红本杳社区| 亚洲乱熟女一区二区三区大香蕉| 超碰色97| 婷婷九月| 欧美影院一区二区三区| 色综和网| 青娱乐久久艹| 九色黄站| 乱日视频| 高清成年美女黄网站免费大全| 男女香蕉一区二区| 99久热| AV一起草在线| 青青草原狼av| 97人妻免费中文字幕| 综合五月天| 天天影视综合网欧美精品| Av手机版天堂网| 伊人色综合欧美| 天天添天天干电影| 成人精品一区二区91毛片不卡| 老女人91| 91女网站| 亚洲 中文字幕 精品| 嫩草 我啊~嗯~在线| 天堂精品在线| 艹精品| 一区二区影视| 日韩精品三区四区| 探花一区在线| 精品三级在线专区| 啊啊啊轻点在线观看| 粘花网06av视频| 干干干天天| 久久丝袜| 久久久久久裸体| 丝袜 亚洲 偷拍| 手机在线中文字幕国产| 欧美久久人体| 欧美性后入| 九九香蕉网| 日本淫乱女一区二区三区视频| 一区=区三区视频| 在线v中文字幕一区二区三区 | 国产97色在线 | 亚洲| 久草新免费| 日本123区操B视频| 久久久久久69国产一区二区| 精品欧美乱码久| 欧美天天综合站| 伊人综合色网| 黄片www.| 日韩在线欧美精品一区二区| 极品人妻少妇综合| 色在线69堂| 北京美女一区二区| 色婷婷aV一区二区三区麻豆综合| 毛片电影一区二区三区| 国产一区二区三三视频| 亚洲国产精品无码AV久久| 91制服丝袜| 亚洲色图 图片| 久久日本熟妇熟色高清| 欧美成人9797| 丁香五月偷拍| www激情| 高跟丝袜AV专区国产| 成人日韩3| 色逼综合| 久草看看看| 91无码人妻精品一区二区三区蜜桃 | 国产亚洲女v在线观看| av一区二区三区不卡| 日本一区二区不卡| 日本在线伊人啪啪| 亚洲欧美碰碰| 性色综合网| 综合自拍| 国产嫩草精品A88AV| 精品一二三区女同| 亚洲电影91| 伦理日韩国产久久| 日韩天天本| 香蕉av一区二区三区| 91激情综合| 热久日综合| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 欧美嫩性色| 色综合美国| 91在线综合网| 亚洲欧美九九| 亚洲人在线| 日韩高潮一区| 97视频观看| 午夜天堂精品久久| 久久av网| 手机av亚洲丝袜美腿日韩第一页二页| 东北操逼| 东京热AV男人的天堂| 九九操久久国产免费视频| 国产一| 综合亚州欧美| 日日超碰亚洲| 操逼A∨| 狠狠中文字幕| 操逼网站地址| 五月天激情四射| 精品久久久九九九孕妇| 欧美曰韩国产精品| 男人的天堂2000| 国产精品禁久久久精品| 天美传媒AV在线| 国产资源中文字幕在线| 性爱边摸边日免费AV| 亚洲五码一区二区三区| 狠狠狠狠狠干| 97亚洲资源| AV中文字幕剧情1区2区3| 丝袜美腿91| 亚洲巨爆乳一区二区三区四季网| 国产极品粉嫩馒头一线天av| 亚洲国产成人精品无码专区| 大香蕉手机视频| 婷婷四五区| 一区二区三区成人 | 爆乳免费黄网站| 欧美日韩国产人人| 亚洲图片视频小说| 岛国黄片网站| 日本精品网站在线中文| av国产无码| 亚洲 图片 欧美 色图| 中文字幕人乱码中文字的预防方法 | 欧美高清第一页| 天天夜躁日日躁狠狠2002| 亚洲无无码αⅴ每日更新| 看黄片视频免费| 九九无码| 爱干爱射网啊啊啊| 后入福利视频| 无码一区免费在线不卡| 97资源视频| www久| 9长久久精品| 一本色道久久综合精品婷婷| 日韩精品一区二区高清| 97在线视频观看| 亚洲三级网址久久最新| 91狠狠综合久久| 嗯啊抽插大香蕉网页| 99色色网| 久久久少妇诱惑精品视频| 久久草草亚洲蜜桃臀| 一级久久久久久久久久久 | 脫衣舞一区二区三区| 婷婷综合网| 日本孕妇孕交| 亚洲高清无码免费观看视频| 91伊人影视综合| 日韩一二三区| 久久黄片国产一区二区| 骚货人妻偷情自拍在线视频| 国产精品高朝久久久久久久| 在线免费观看高清无码视频| 丁香五月婷婷五月| 91综合天天看| 黄色工厂这里只有精品| 国产午夜激片Av毛片不卡| 国产精品久久久777| 屁股久久久久久| 毛片电影一区二区三区| 久艹99| 中文字幕国产| 夜夜操av亚洲一区二区| 少妇精品久久| wwwss在线观看| 日韩97精| 国产精品自拍xxxx| 日日橹狠狠爱欧美超碰| 97欧美| 懂色综合久久久| 2017大香蕉国产精品久久| 91天天看| 亚洲另类综合欧美| 国产传媒美日韩av| www.99色| 四虎884a| 美女91在线| 91日韩在线| 久久99九九九九6666免费观看软件| 日本一级婬片试看三分钟| 第四色色综合91| 欧美福利视频啊啊啊啊| 亚洲图片欧美在线视频| 亚洲精品蜜桃久久久| 婷婷五月天色色| 国产99999久久精品| 99国产精品视频尤物| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 国产激情av女片自拍| 97超级色碰碰| 曰韩成人免费视频| 久久风骚城市人| 五月婷婷综合在线| 高清无码91| 亚 欧 美 综合| 国产成人亚洲精品无码最新在线| 欧美日韩情色一区二区| 国产精品内射婷婷一级二| 爱干爱射网啊啊啊| 在线毛片片免费观看| 精品999日本| av日韩手机在线影视| 麻豆黄站| 久久小视频| 国产强奸乱伦无码视频| 国产精品九9| 午夜.DJ高清在线观看免费7| 91无摭挡| 久久精品中文字幕观看| 亚洲,欧美,综合网| 日韩人体偷拍| 国产精品久久妻无码网站| 久久久不卡区一区二区三区久久久| 家庭乱伦性爱av| 麻豆熟妇乱妇熟色A片在线看| AV中文在线| 99re免费视频精品全部| 黄色十八禁| 日本日皮视频逼| 精品视频一区二区| 天堂资源站| 亚洲AV无码国产成人| 男人天堂电影院| 亚洲精品一区二区免费在线观看| Av手机版天堂网| 欧美日韩亚洲少妇寂寞影院正在播放| 国产女上位好爽在线| 成人性交免费视频| 久久精品72| 婷婷激情五月| 中文色综合| 91人妻爽爽人人做人人澡| 国产日韩手机视频在线| 久久风骚城市人| 操人妻丝袜高跟| 国内毛片国产专区二| 日韩欧美加勒比| 91欧美综合在线| 这里只有精品视频| 久久美女国产| 极品国产内射| 91精品久久久久久久久久| 91N欧美| 欧美精品久久久久久久久88| 色97干| 美国三级日本三级久久99| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 黄色不卡视频| 婷婷色五月激情| 中文字幕一区二区三区高清| 老熟女网站| 偷拍片久久| 色老汉色| 又大又白奶子| 欧美gv在线观看| 国产suv一区二区三区6| 亚洲色情在线影视| 天天日日日射| 激情综合婷婷| 国产精品色片一区二区| A片大香蕉在线| 丝袜美腿91| 欧美一区二区三区黄色影视| 久久嫩草国产成人一区| 在线只有精品| 国产尤物AV尤物在线观看不卡| 中文字幕美女91| 麻豆久久一区二区三区| 久操影视| 久噜噜| 免费网站观看www在线观| 91男女啊啊啊| 超碰在线人妻| 国产一区二区视频在线播放| 精品欧美А∨无码黑人大荫蒂| 花花AV导航| 97久久超碰日韩精品| 精人妻无码一区二区三区伊人直播| 最新欧美色网| www久久99| 九九99精品| 亚洲天堂 视频你懂的| 久操com| 无码高清国产AV| 成人免费看吃奶视频网站| 一起草三级AV电影在线观看| 精品免费囯产一区二区三区| 玖玖无码超碰| 校园春色美腿丝袜| 97爱碰| 国产精品色约约| 麻豆a'v电影| 91老熟女91老女人| 日韩三级性| 精品美女人人干| 欧美亚洲综合999| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 日韩性爱长视频免费| 男人综合网| 夫妻天天操岛国视频| 超碰免费97| 乱伦一二三| 日本成熟少妇A∨网站| 被窝影院午夜看片无码| 人人干黄色| 影音先锋视频在线| 人人操人人操人人操人人操人人操人人人11.CM | 久久久久日本视| 嗯阿好爽好紧| 天操老女人| 美美91成人国产精品欧美精品久久久久久久 | 欧美一级久久久久久久大片动画 | 91综合熟女| 亚洲色图91| www.色吧5.com| 亚洲一区二区久久久久| 欧美黑人精品一区二区| 国产强奸超碰AV| 色噜噜婷婷| 久久久久无码| 北京美女一区二区| 色香91| 亚洲人妻精品一区二区| 91久久久亚洲| 在线A日本| 色丁香五月婷婷| 成人情色一区二区| 97干色天堂| 亚洲国产精品成人无码久久久| 成人小说另类在线| 国内毛片无遮挡国产| 亚洲午夜福利在线影院| 国产第二页| 亚洲成人在线乱码色午夜| 欧美激情 亚洲色图| 少妇久久久久久久| 国产精品久久久久久久电影渣男| 人人看欧美性爱| 国产18精品亚洲精品| 黄色网址久久精品欧美喷水| 9热9热综合网| 久久精品高清无码一区| 怡春院久久| ,成人免费啪啪视频| 欧美顶级黄片AAAAA在线免费看| 口爆综合网|