精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文搞懂大廠商品中心設計!

開發 前端
刪除商品并非物理刪除(真正的執行刪除數據),而是通過將表中某字段標記為刪除狀態。還原商品實際就是將刪除狀態再修改回來。如果商品需要物理刪除,必須是先邏輯刪除才能進行物理刪除,刪除前需要檢查狀態。

1 雪花算法使用

IdWorker idWorker=new IdWorker(1,1);
for(int i=0;i<10000;i++){
    long id = idWorker.nextId();
    System.out.println(id);
}

配置分布式ID生成器

  • 將IdWorker.java拷貝到util包
  • 在工程的resources下新增applicationContext-service.xml
<!‐‐雪花ID生成器‐‐>
<bean id="idWorker" class="com.qingcheng.util.IdWorker">
    <constructor‐arg index="0" value="1"></constructor‐arg>
    <constructor‐arg index="1" value="1"></constructor‐arg>
</bean>

2 新增和修改商品

2.1 表結構

t_spu 表

字段名稱

字段含義

字段類型

字段長度

備注

id

主鍵

VARCHAR



sn

貨號

VARCHAR



name

SPU名

VARCHAR



caption

副標題

VARCHAR



brand_id

品牌ID

INT



category1_id

一級分類

INT



category2_id

二級分類

INT



category3_id

三級分類

INT



template_id

模板ID

INT



freight_id

運費模板id

INT



image

圖片

VARCHAR



images

圖片列表

VARCHAR



sale_service

售后服務

VARCHAR



introduction

介紹

TEXT



spec_items

規格列表

VARCHAR



para_items

參數列表

VARCHAR



sale_num

銷量

INT



comment_num

評論數

INT



is_marketable

是否上架

CHAR



is_enable_spec

是否啟用規格

CHAR



is_delete

是否刪除

CHAR



status

審核狀態

CHAR



t_sku 表

字段名稱

字段含義

字段類型

字段長度

備注

id

商品id

VARCHAR



sn

商品條碼

VARCHAR



name

SKU名稱

VARCHAR



price

價格(分)

INT



num

庫存數量

INT



alert_num

庫存預警數量

INT



image

商品圖片

VARCHAR



images

商品圖片列表

VARCHAR



weight

重量(克)

INT



create_time

創建時間

DATETIME



update_time

更新時間

DATETIME



spu_id

SPUID

VARCHAR



category_id

類目ID

INT



category_name

類目名稱

VARCHAR



brand_name

品牌名稱

VARCHAR



spec

規格

VARCHAR



sale_num

銷量

INT



comment_num

評論數

INT



status

商品狀態 1-正常,2-下架,3-刪除

CHAR



2.2 需求與實現

2.2.1 需求分析

詳見靜態原型。

2.2.2 實現思路

前端傳遞給后端的數據格式:

{
    "spu": {
        "name": "這個是商品名稱",
        "caption": "這個是副標題",
        "brandId": 12,
        "category1Id": 558,
        "category2Id": 559,
        "category3Id": 560,
        "freightId": 10,
        "image": "http://www.qingcheng.com/image/1.jpg",
        "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",
        "introduction": "這個是商品詳情,html代碼",
        "paraItems": {
            "出廠年份": "2019",
            "贈品": "充電器"
        },
        "saleService": "七天包退,閃電退貨",
        "sn": "020102331",
        "specItems": {
            "顏色": [
                "紅",
                "綠"
            ],
            "機身內存": [
                "64G",
                "8G"
            ]
        },
        "templateId": 42
    },
    "skuList": [
        {
            "sn": "10192010292",
            "num": 100,
            "alertNum": 20,
            "price": 900000,
            "spec": {
                "顏色": "紅",
                "機身內存": "64G"
            },
            "image": "http://www.qingcheng.com/image/1.jpg",
            "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",
            "status": "1",
            "weight": 130
        },
        {
            "sn": "10192010293",
            "num": 100,
            "alertNum": 20,
            "price": 600000,
            "spec": {
                "顏色": "綠",
                "機身內存": "8G"
            },
            "image": "http://www.qingcheng.com/image/1.jpg",
            "images": "http://www.qingcheng.com/image/1.jpg,http://www.qingcheng.com/image/2.jpg",
            "status": "1",
            "weight": 130
        }
    ]
}

2.3 代碼實現

2.3.1 SPU與SKU列表的保存

/**
* 商品組合實體類 
*/
public class Goods implements Serializable {

    private Spu spu;

    private List<Sku> skuList;
}

SpuServiceImpl新增方法:

@Autowired
private SkuMapper skuMapper;
@Autowired  
private IdWorker idWorker;
@Autowired
private CategoryMapper categoryMapper;

/**
* 保存商品
* @param goods 商品組合實體類
*/
@Transactional
public void saveGoods(Goods goods) {
    // 保存一個spu的信息
    Spu spu = goods.getSpu();
    spu.setId(idWorker.nextId()+"");
    spuMapper.insert(spu);
    
    //保存sku列表的信息
    Date date=new Date();
    //分類對象
    Category category = categoryMapper.selectByPrimaryKey(spu.getCategory3Id());
    List<Sku> skuList = goods.getSkuList();
    for (Sku sku:skuList){
        sku.setId(idWorker.nextId()+"");
        sku.setSpuId(spu.getId());

        //sku名稱 =spu名稱+規格值列表
        String name=spu.getName();
        //sku.getSpec() {"顏色":"紅","機身內存":"64G"}
        Map<String,String> specMap = JSON.parseObject(sku.getSpec(), Map.class);
        for(String value:specMap.values()){
            name+=" "+value;
        }
        sku.setName(name);//名稱
        sku.setCreateTime(date);//創建日期
        sku.setUpdateTime(date);//修改日期
        sku.setCategoryId(spu.getCategory3Id());//分類id
        sku.setCategoryName(category.getName());//分類名稱
        sku.setCommentNum(0);//評論數
        sku.setSaleNum(0);//銷售數量

        skuMapper.insert(sku);
    }
}

該方法要對兩個表操作,需添加事務:

@Service(interfaceClass=SpuService.class)

在類上加@Transactional,并在@Service注解中指定接口為SpuService.class。

SpuController修改add方法:

@PostMapping("/save")
public Result save(@RequestBody Goods goods){
    spuService.saveGoods(goods);
    return new Result();
}

3 建立分類與品牌的關聯

3.1 需求

Q:為什么要建立分類與品牌的關聯?

A:因為我們在前臺搜索時,需要通過分類找到品牌列表。

Q:分類與品牌是什么關系?

A:多對多。

Q:在什么地方添加關系?

A:我們不在后臺單獨實現分類與品牌的關聯,而是在添加商品時自動添加關聯。

3.2 實現思路

  • 設計中間表tb_category_brand表
  • 創建實體類、數據訪問接口
  • 在添加商品的saveGoods方法中添加代碼邏輯 ,將SPU的品牌編號和分類編號一起插入到(中間表)

3.3 代碼

創建實體類

@Table(name="tb_category_brand")
@Data
public class CategoryBrand implements Serializable {
    @Id
    private Integer categoryId;
    @Id 
    private Integer brandId;
}

聯合主鍵,templateId和brandId都有@Id注解。

新建數據訪問接口

public interface CategoryBrandMapper extends Mapper<CategoryBrand> {
}

修改saveGoods方法

CategoryBrand categoryBrand =new CategoryBrand();
categoryBrand.setBrandId(spu.getBrandId());
categoryBrand.setCategoryId(spu.getCategory3Id());
int count=categoryBrandMapper.selectCount(categoryBrand);
if(count==0) {
    categoryBrandMapper.insert(categoryBrand);
}

4 根據ID查詢商品

根據id 查詢SPU和SKU列表 ,顯示效果:

{
    "spu": {
        "brandId": 0,
        "caption": "111",
        "category1Id": 558,
        "category2Id": 559,
        "category3Id": 560,
        "commentNum": null,
        "freightId": null,
        "id": 149187842867993,
        "image": null,
        "images": null,
        "introduction": null,
        "isDelete": null,
        "isEnableSpec": "0",
        "isMarketable": "1",
        "name": "黑馬智能手機",
        "paraItems": null,
        "saleNum": null,
        "saleService": null,
        "sn": null,
        "specItems": null,
        "status": null,
        "templateId": 42
    },
    "skuList": [
        {
            "alertNum": null,
            "brandName": "金立(Gionee)",
            "categoryId": 560,
            "categoryName": "手機",
            "commentNum": null,
            "createTime": "2018‐11‐06 10:17:08",
            "id": 1369324,
            "image": null,
            "images": "blob:http://localhost:8080/ec04d1a5‐d865‐4e7f‐a313‐2e9a76cfb3f8",
            "name": "黑馬智能手機",
            "num": 100,
            "price": 900000,
            "saleNum": null,
            "sn": "",
            "spec": null,
            "spuId": 149187842867993,
            "status": "1",
            "updateTime": "2018‐11‐06 10:17:08",
            "weight": null
        },
        {
            "alertNum": null,
            "brandName": "金立(Gionee)",
            "categoryId": 560,
            "categoryName": "手機",
            "commentNum": null,
            "createTime": "2018‐11‐06 10:17:08",
            "id": 1369325,
            "image": null,
            "images": "blob:http://localhost:8080/ec04d1a5‐d865‐4e7f‐a313‐2e9a76cfb3f8",
            "name": "黑馬智能手機",
            "num": 100,
            "price": 900000,
            "saleNum": null,
            "sn": "",
            "spec": null,
            "spuId": 149187842867993,
            "status": "1",
            "updateTime": "2018‐11‐06 10:17:08",
            "weight": null
        }
    ]
}

4.1 代碼

SpuService方法

/**
* 根據ID查詢商品
* @param id 
* @return
*/
public Goods findGoodsById(String id){
    //查詢spu
    Spu spu = spuMapper.selectByPrimaryKey(id);
    
    //查詢SKU 列表
    Example example=new Example(Sku.class);
    Example.Criteria criteria = example.createCriteria();
    criteria.andEqualTo("spuId",id);
    List<Sku> skuList = skuMapper.selectByExample(example);
    
    //封裝,返回
    Goods goods=new Goods();
    goods.setSpu(spu);
    goods.setSkuList(skuList);
    return goods;
}

SpuController

@GetMapping("/findGoodsById")
public Goods findGoodsById(Long id){
    return spuService.findGoodsById(id);
}

5 保存修改

實現思路

  • 修改與新增共用同一個方法
  • 通過spu的id判斷當前操作是新增還是修改
  • 如果是新增需要設置spu的id,對spu執行的是insert操作
  • 如果修改則需要刪除原來的sku列表,對spu執行的是updateByPrimaryKeySelective操作
  • sku列表的插入部分的代碼要判斷sku是否有id,如果有id則不重新生成id

代碼實現

修改SpuServiceImpl的saveGoods:

/**
* 保存商品
* @param goods
*/
@Transactional
public void saveGoods(Goods goods) {
    //保存一個spu的信息
    Spu spu = goods.getSpu();
    if(spu.getId()==null){//新增商品
        spu.setId(idWorker.nextId()+"");
        spuMapper.insert(spu);
    }else{ //修改
        //刪除原來的sku列表
        Example example=new Example(Sku.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("spuId",spu.getId());
        skuMapper.deleteByExample(example);

        //執行spu的修改
        spuMapper.updateByPrimaryKeySelective(spu);
    }

    //保存sku列表的信息
    List<Sku> skuList = goods.getSkuList();
    for (Sku sku:skuList){
        if(sku.getId()==null){//新增
            sku.setId(idWorker.nextId()+"");
            sku.setCreateTime(date);//創建日期
        }
        //添加sku
    }

//建立分類和品牌的關聯
}

6 未啟用規格的sku處理

6.1 需求分析

有些商品沒區分規格,即一個spu對應一個sku ,這時sku列表只傳遞一條記錄,且無規格(spec)屬性,要對其判斷,避免因空值產生異常。

6.2 實現思路

在saveGoods方法的sku列表循環中添加代碼,判斷

// 構建SKU名稱,采用SPU+規格值組裝
if(sku.getSpec()==null || "".equals(sku.getSpec())){
    sku.setSpec("{}");
}

7 商品審核與上下架

7.1 商品審核

7.1.1 需求分析與實現思路

商品審核:新錄入的商品是未審核狀態,也是未上架狀態。

實現思路

  • 修改審核狀態,如果審核狀態為1,則上架狀態也修改為1
  • 記錄商品審核記錄
  • 記錄商品日志

7.1.2 代碼實現

/**
* 商品審核
* @param id
* @param status
* @param message
*/
@Transactional
public void audit(String id, String status, String message) {
    //1.修改狀態 審核狀態和上架狀態
    Spu spu = new Spu();
    spu.setId(id);
    spu.setStatus(status);
    if("1".equals(status)){//審核通過
        spu.setIsMarketable("1");//自動上架
    }
    spuMapper.updateByPrimaryKeySelective(spu);
    
    //2.記錄商品審核記錄
    
    //3.記錄商品日志
}
@GetMapping("/audit")
public Result audit(Long id){
    spuService.audit(id);
    return new Result();
}

7.2 下架商品

7.2.1 需求與實現思路

下架商品,修改上下架狀態為下架。下架商品不修改審核狀態。 下架商品需要記錄商品日志。

7.2.2 代碼實現

/**
* 下架商品
* @param id
*/
public void pull(String id) {
    Spu spu = spuMapper.selectByPrimaryKey(id);
    spu.setIsMarketable("0");//下架狀態
    spuMapper.updateByPrimaryKeySelective(spu);
}
@GetMapping("/pull")
public Result pull(String id){
    spuService.pull(id);
    return new Result();
}

7.3 上架商品

7.3.1 需求分析

將商品修改為上架狀態,需要驗證該商品是否審核通過,未審核通過的商品不能上架。 上架商品需要記錄商品日志。

7.3.2 代碼實現

通過審核的商品才能上架:

/**
* 商品上架
* @param id
*/
public void put(String id) {
    //1.修改狀態
    Spu spu = spuMapper.selectByPrimaryKey(id);
    if(!"1".equals(spu.getStatus())){
        throw new RuntimeException("此商品未通過審核");
    }
    spu.setIsMarketable("1");
    spuMapper.updateByPrimaryKeySelective(spu);
    
    //2.記錄商品日志
}
@GetMapping("/put")
public Result put(String id){
    spuService.put(id);
    return new Result();
}

7.4 批量上下架

7.4.1 需求分析

前端傳遞一組商品ID,后端進行批量上下架處理,處理后給前端返回處理的條數

7.4.2 代碼實現

/**
* 批量上架商品
* @param ids
*/
public int putMany(Long[] ids) {
    Spu spu=new Spu();
    spu.setIsMarketable("1");//上架
    
    //批量修改
    Example example=new Example(Spu.class);
    Example.Criteria criteria = example.createCriteria();
    criteria.andIn("id", Arrays.asList(ids));//id
    criteria.andEqualTo("isMarketable","0");//下架
    criteria.andEqualTo("status","1");//審核通過的
    criteria.andEqualTo("isDelete","0");//非刪除的
    return spuMapper.updateByExampleSelective(spu, example);
}
@GetMapping("/putMany")
public Result putMany(Long[] ids){
    int count = spuService.putMany(ids);
    return new Result(0,"上架"+count+"個商品");
}

8 刪除與還原商品

8.1 需求分析

刪除商品并非物理刪除(真正的執行刪除數據),而是通過將表中某字段標記為刪除狀態。

還原商品實際就是將刪除狀態再修改回來。

如果商品需要物理刪除,必須是先邏輯刪除才能進行物理刪除,刪除前需要檢查狀態。

8.2 實現思路

  • 邏輯刪除商品,修改spu表is_delete字段為1
  • 商品回收站顯示spu表is_delete字段為1的記錄
  • 回收商品,修改spu表is_delete字段為0
責任編輯:武曉燕 來源: JavaEdge
相關推薦

2025-01-16 00:20:41

2023-05-22 13:27:17

2024-01-29 12:22:07

設計模式策略模式

2024-02-19 13:11:38

門面模式系統

2024-02-26 11:52:38

代理模式設計

2024-04-12 12:19:08

語言模型AI

2022-03-24 08:51:48

Redis互聯網NoSQL

2024-02-27 11:59:12

享元模式對象

2024-02-04 12:04:17

2024-02-21 12:24:33

模板設計模式框架

2024-02-23 12:11:53

裝飾器模式對象

2024-01-30 13:15:00

設計模式責任鏈

2021-03-22 10:05:59

netstat命令Linux

2023-09-08 08:20:46

ThreadLoca多線程工具

2023-09-15 12:00:01

API應用程序接口

2021-08-05 06:54:05

觀察者訂閱設計

2024-02-20 12:09:32

模式工廠方法接口

2024-02-18 12:36:09

2024-02-22 12:13:49

適配器模式代碼

2023-04-03 15:04:00

RPCPHP語言
點贊
收藏

51CTO技術棧公眾號

精品欧美一区二区三区久久久| 在线亚洲午夜片av大片| 精品少妇在线视频| 午夜福利视频一区二区| 日产国产高清一区二区三区| 精品国产自在精品国产浪潮| 国产情侣久久久久aⅴ免费| 天堂在线中文网官网| 国产精品免费av| av一区和二区| 姑娘第5集在线观看免费好剧| 日韩美女视频网站| 日韩毛片一区| 亚洲电影在线播放| 视频一区二区在线| 丰满大乳国产精品| 免费人成黄页网站在线一区二区| 欧美人在线视频| 国产精品久久免费观看| 福利在线一区| 欧美老肥妇做.爰bbww| 尤物九九久久国产精品的特点| 中国黄色录像片| 亚洲欧美自偷自拍| 国产精品影视在线| 国产精品1234| 日韩精品人妻中文字幕| 国产精品久久观看| 亚洲精品中文字幕女同| 久久久久无码国产精品一区李宗瑞 | 欧美精品一区二区三区很污很色的 | 国产a久久麻豆| 国产欧美日韩亚洲精品| 波多野结衣国产| 亚洲图片在线| 久久成年人视频| 情侣偷拍对白清晰饥渴难耐| 免费看成人哺乳视频网站| 精品国产乱码久久久久久久 | 成人在线视频免费看| 亚洲成人av一区| 人妻互换免费中文字幕| 麻豆视频网站在线观看| 欧美韩日一区二区三区四区| 免费看成人av| 青青色在线视频| 91天堂素人约啪| 精品国产乱码久久久久久108| 午夜精品久久久久久久99| 国产在线看一区| 成人女保姆的销魂服务| 91午夜交换视频| 精久久久久久久久久久| 国产在线拍揄自揄视频不卡99| 国产黄色免费视频| 老司机精品久久| 国产成人综合亚洲| 最近日韩免费视频| 久久精品理论片| 91精品视频在线播放| 国产精品久久777777换脸| 久久99这里只有精品| 91久久久久久久久久| 国产女人高潮毛片| 国产美女精品人人做人人爽| 亚洲在线观看视频| 国内老熟妇对白xxxxhd| 国产91精品入口| 国产一区精品视频| 四虎影视精品成人| 国产免费观看久久| 男插女免费视频| 免费在线中文字幕| 欧美日韩亚洲国产一区| 国产一二三四在线视频| 久久69成人| 日韩视频在线一区二区| 美女黄色一级视频| 免费看av成人| 久久久国产精品亚洲一区| 久久久久久久久精| 亚洲欧美成人| 国产日韩欧美中文在线播放| 国产高清精品软件丝瓜软件| 99久久久精品| 性欧美精品一区二区三区在线播放| 男人天堂久久久| 亚洲福中文字幕伊人影院| 18岁网站在线观看| 欧美激情啪啪| 亚洲国产精品一区二区三区| 日本美女xxx| 好吊日精品视频| 国产精品ⅴa在线观看h| 国产视频一区二区三| av动漫一区二区| 亚洲一二三区在线| 国产亚av手机在线观看| 欧美亚洲综合色| 日韩黄色一区二区| 欧美日一区二区| 欧美激情xxxx性bbbb| 波多野结衣电影在线播放| 国产麻豆一精品一av一免费 | 91精品秘密在线观看| 午夜伦理精品一区| 91超薄丝袜肉丝一区二区| 成人av在线一区二区| 亚洲精品中文字幕乱码三区不卡| 毛片网站在线看| 欧美日韩在线不卡| 91丝袜在线观看| 一区二区三区国产精华| 日本午夜精品理论片a级appf发布| 99热这里只有精品在线| 久久久五月婷婷| www.男人天堂网| 欧美日韩免费电影| 亚洲跨种族黑人xxx| 久久久久人妻一区精品色欧美| 日韩精品一二三四| 久久久久天天天天| 国产三级伦理在线| 3751色影院一区二区三区| 法国空姐电影在线观看| 悠悠资源网久久精品| 91久久久久久久久久久| av黄色在线观看| 欧美性猛交xxxxx水多| 女性生殖扒开酷刑vk| 99久久九九| 国产精品久久久久久久久久久久久久 | 国产一区二区成人| 美日韩一二三区| 99视频热这里只有精品免费| 国产xxxx振车| 日本少妇精品亚洲第一区| 深夜福利91大全| 久久久久久av无码免费看大片| 91丝袜美腿高跟国产极品老师| 国产精品va在线观看无码| 国产一区二区高清在线| 精品国产区一区二区三区在线观看| 怡红院av久久久久久久| 久久综合九色综合久久久精品综合| 97视频在线免费| 风间由美性色一区二区三区四区| 欧美国产日韩一区二区在线观看| av免费观看在线| 亚洲黄一区二区三区| 四虎国产精品永久免费观看视频| 日韩在线第七页| 国产这里只有精品| 免费大片黄在线观看视频网站| 欧美日精品一区视频| 男人的天堂官网| 免费欧美在线视频| 正在播放91九色| 久久中文字幕一区二区| 久久99视频精品| 天堂中文网在线| 欧美日韩国产综合视频在线观看中文 | 无码人妻丰满熟妇区五十路| 久久久91精品国产一区二区精品| 欧在线一二三四区| 成人毛片免费看| 国产在线视频91| 性爱视频在线播放| 亚洲国产精品热久久| 国产成人免费观看视频| 久久久三级国产网站| 手机看片福利盒子久久| 国产精品99在线观看| 91网免费观看| 亚洲少妇视频| 中文字幕av一区中文字幕天堂| 国产又粗又黄又爽| 亚洲一区二区三区中文字幕| 在线观看av中文字幕| 日韩电影在线一区二区三区| 致1999电视剧免费观看策驰影院| 在线综合色站| 国产91久久婷婷一区二区| 三区四区电影在线观看| 欧美成人bangbros| 国产成人精品777777| 国产精品成人免费| 日本道中文字幕| 日韩国产欧美一区二区三区| 色哟哟免费网站| 欧美理论电影在线精品| 国产精品久久久久久久午夜| 日本成人不卡| 亚洲图片在线综合| 精品国产av一区二区三区| 日本韩国精品一区二区在线观看| 97精品在线播放| 972aa.com艺术欧美| www.精品在线| 9久re热视频在线精品| 亚洲乱码国产乱码精品天美传媒| 在线精品国产亚洲| 国产精品网红直播| 国产精品13p| 不卡中文字幕av| 欧美日本网站| 精品精品国产高清一毛片一天堂| 久久久久精彩视频| 性做久久久久久免费观看| 99热6这里只有精品| 91天堂素人约啪| 69xxx免费视频| 久久99最新地址| 一区二区xxx| 国产美女一区| 女人被男人躁得好爽免费视频| 欧美手机视频| 欧美不卡福利| 超碰成人在线观看| 51国偷自产一区二区三区的来源| 最新欧美电影| 欧美一级成年大片在线观看| 午夜小视频在线观看| 日韩视频―中文字幕| 国产视频第一页在线观看| 亚洲精品xxx| 国产自产一区二区| 欧美一区二区美女| 国产又粗又猛视频| 欧美三级三级三级| 无码人妻熟妇av又粗又大| 精品动漫一区二区| 黄网站免费在线| 亚洲综合免费观看高清完整版在线| 亚洲欧美精品久久| 国产精品毛片无遮挡高清| 欧美熟妇激情一区二区三区| 91麻豆国产自产在线观看| 男人网站在线观看| 成人av在线播放网址| yjizz视频| 成人18精品视频| 怡红院一区二区| 成人丝袜高跟foot| 免费观看污网站| 成人免费黄色大片| www.啪啪.com| 99久久精品一区二区| 亚洲av无码一区二区三区网址| 成人美女在线观看| 2一3sex性hd| 97精品国产露脸对白| 无码精品一区二区三区在线播放 | 久久国产欧美精品| 欧美xxxx在线| 欧美日韩精品一区| 精品国内自产拍在线观看视频| 日韩国产一区久久| 91综合在线| 蜜桃网站在线观看| 一区二区视频欧美| 久久网站免费视频| 日韩国产欧美在线观看| 最新免费av网址| 国产69精品久久久久毛片| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 国产精品久久久久久一区二区| aaaa欧美| 91精品国产一区二区三区动漫 | 久久在线观看免费| 人妻少妇无码精品视频区| 国产精品短视频| 久久精品视频久久| 色综合久久九月婷婷色综合| 中文字幕av资源| 日韩一级免费观看| 先锋av资源站| 色婷婷av一区二区三区在线观看| 超碰在线免费播放| 26uuu亚洲伊人春色| 国产一区影院| 国产精品一国产精品最新章节| 亚洲精品国产setv| 91社在线播放| 午夜在线观看免费一区| 中国黄色片一级| 91在线一区二区三区| av资源在线免费观看| 亚洲高清视频的网址| 亚洲午夜无码久久久久| 欧美成人猛片aaaaaaa| 日本护士...精品国| 久久香蕉国产线看观看av| 亚洲天堂av在线| 夜夜嗨av一区二区三区中文字幕| 久久久久久久久国产| 免费在线黄色电影| 精品国产一区二区三区久久久狼 | 中文字幕一区二区三区不卡在线| 久久亚洲精品大全| 欧美午夜精品理论片a级按摩| www.四虎在线观看| 亚洲性xxxx| 久久电影网站| 国产日韩欧美中文| 沈樵精品国产成av片| 国产欧美日韩小视频| 久久er精品视频| 久久av无码精品人妻系列试探| 一区二区三区色| 在线免费一级片| 日韩经典第一页| 牛牛精品在线| 成人www视频在线观看| 精品72久久久久中文字幕| 久无码久无码av无码| 国内精品伊人久久久久av一坑| 国产特级黄色录像| 舔着乳尖日韩一区| 午夜精品久久久久久久爽 | 日韩精品一区二区不卡| 91精选在线观看| avtt亚洲| 国产精品网站大全| 九九精品久久| 久久综合色视频| 成人网在线免费视频| 中文字幕影音先锋| 91精选在线观看| 麻豆传媒视频在线| 国产精品一区二区久久久久| 国产va免费精品观看精品视频 | 免费一级片视频| 91精品国产品国语在线不卡| 一级毛片视频在线| 国产精品久久久久久av下载红粉| 亚洲小说图片视频| 国产精品后入内射日本在线观看| 成人激情午夜影院| 日本三级中文字幕| 亚洲国产精品中文| 九色porny视频在线观看| 国产精品视频免费一区| 亚洲天堂久久| 影音先锋黄色资源| 香蕉成人啪国产精品视频综合网 | 久久综合狠狠综合久久激情 | 久久国产精品久久w女人spa| 野外性满足hd| 色狠狠综合天天综合综合| 玖玖综合伊人| 国产精品成人久久久久| 第四色成人网| 欧美成人福利在线观看| 国产精品乱码人人做人人爱| 国产精品久久久久久久免费看| 久久精品成人一区二区三区| 精品国产一级| 久久av综合网| 99国产麻豆精品| 不卡av电影在线| 久久精品免费播放| 成人av综合网| 黄色免费视频大全| 国产精品你懂的| 精品久久在线观看| 97人洗澡人人免费公开视频碰碰碰| 欧美理伦片在线播放| 亚洲乱码国产一区三区| 国产精品久久三区| 国产成人a人亚洲精品无码| 欧美激情视频在线| 亚洲色图美女| 午夜不卡福利视频| 午夜精品久久久久久久久久 | 国产aaaaa毛片| 亚洲免费大片在线观看| 韩国av免费在线| 国产精品va在线播放我和闺蜜| 五月精品视频| 超碰男人的天堂| 欧美精品亚洲一区二区在线播放| 波多野在线观看| 先锋影音网一区| 懂色av一区二区在线播放| 日韩视频在线观看一区| 日韩中文字幕不卡视频| 福利电影一区| 日本黄大片一区二区三区| 亚洲图片欧美综合| 超碰在线国产| 国产中文一区二区| 久久成人久久爱| 日韩一区二区视频在线| 久久中国妇女中文字幕| 九九免费精品视频在线观看| 91精品视频国产| 色www精品视频在线观看| 新版中文在线官网| 新呦u视频一区二区|