• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于華為appcube的口罩預(yù)約與配送系統(tǒng)的開發(fā)與設(shè)計

    2021-10-30 02:43張鼎仁任娟韓英夫
    科海故事博覽·中旬刊 2021年9期

    張鼎仁 任娟 韓英夫

    摘 要 隨著“互聯(lián)網(wǎng)+”的快速發(fā)展,用戶的需求也日益增加,敏捷開發(fā)、快速跟進(jìn)用戶需求變得更加重要。華為云appcube是華為自主研發(fā)的aPaaS服務(wù)平臺,開發(fā)者可以迅捷高效的整合自己的實際需求,集成云計算、大數(shù)據(jù)、視頻、人工智能、5G等多種新技術(shù)的平臺,將這些新技術(shù)以組件化的方式接入和融合至開發(fā)者數(shù)據(jù),本文以口罩預(yù)約與配送系統(tǒng)的開發(fā)與設(shè)計為例,通過華為appcube平臺快速開發(fā)構(gòu)建。最后總結(jié)分析本項目的成功經(jīng)驗,以及項目存在的不足和改進(jìn)措施。

    關(guān)鍵詞 appcube aPaaS JavaScript 預(yù)約配送

    中圖分類號:TN919 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-0745(2021)09-0005-05

    1 緒論

    在新冠疫情影響下,口罩成為人們?nèi)粘I钪斜夭豢扇钡娜沼闷?,如何分配和調(diào)度口罩成為人們面臨的一項難題,即使是同一地區(qū),不同社區(qū)和鄉(xiāng)鎮(zhèn)也存在需求不均衡的現(xiàn)象,手動通過填報表格匯總統(tǒng)計,這項工作本身耗時耗力,不同地區(qū)的表格格式還可能不盡相同,更會影響發(fā)放口罩的效率。因此,亟需開發(fā)一個能快速適應(yīng)各種需求、能夠快速構(gòu)建的口罩預(yù)約與配送系統(tǒng),引入的華為appcube開發(fā)平臺可安裝行業(yè)服務(wù),平臺自身擁有豐富的工具集,它是支持在云上開發(fā)、測試、部署、運維的aPaaS平臺,針對不同水平的開發(fā)者,可采用對應(yīng)程度的開發(fā)模式,促進(jìn)了開發(fā)的高效應(yīng)用和實現(xiàn),降低了開發(fā)門檻。

    2 口罩預(yù)約與配送系統(tǒng)總體設(shè)計方案

    第一步,注冊登錄。開發(fā)者通過注冊華為開發(fā)者中心進(jìn)入應(yīng)用開發(fā);第二步,創(chuàng)建應(yīng)用。首先定義命名空間,創(chuàng)建APP及目錄并定義業(yè)務(wù)對象,之后組裝前端頁面,定義市政報表管理頁面,配置物業(yè)人員無需登錄即可預(yù)約和市政人員使用的菜單最后編譯發(fā)布應(yīng)用,其中組裝前端頁面包括定義市政人員管理頁面、定義市政人員修改頁面、定義物業(yè)人員預(yù)約頁面、定義“根據(jù)ID查詢”邏輯和定義“新增與編輯”邏輯;第三步,應(yīng)用獨立部署并對外開放。獨立部署后的應(yīng)用包括三個方面,分別是物業(yè)人員掃碼預(yù)約、市政人員管理信息和市政人員報表統(tǒng)計。

    3 口罩預(yù)約與配送系統(tǒng)詳細(xì)設(shè)計方案

    3.1 定義業(yè)務(wù)對象

    通過appcube創(chuàng)建app以及相應(yīng)目錄,app名稱為MaskMgtApp,開發(fā)者支持多種數(shù)據(jù)格式的字段,這樣就能靈活應(yīng)對各種用戶需求,同時平臺可以通過增刪改自定義對象,同時每個字段需要定義是否需要索引、是否必需、創(chuàng)建人、最后修改人、最后修改時間。

    對應(yīng)口罩預(yù)約的申請信息,我們同時需要自定義一個對象以表示預(yù)約信息,對象名稱為MaskMgtInfo,華為appcube會自動將這些信息寫入數(shù)據(jù)庫表結(jié)構(gòu),開發(fā)者無需再寫相關(guān)的數(shù)據(jù)庫增刪查改的接口,省去了大量數(shù)據(jù)交互的工作量,這種可視化建立表結(jié)構(gòu)的方法也為用戶更快的了解項目提供了基礎(chǔ)(口罩預(yù)約信息屬性表如表1所示)。

    3.2 組裝前端頁面

    3.2.1 定義“新增與編輯”邏輯

    //本腳本用于新增或者修改信息

    import * as db from ‘db;//導(dǎo)入處理object相關(guān)的標(biāo)準(zhǔn)庫

    import * as context from ‘context;//導(dǎo)入上下文相關(guān)的標(biāo)準(zhǔn)庫

    import * as date from ‘date;

    import * as buffer from ‘buffer;

    //定義入?yún)⒔Y(jié)構(gòu),入?yún)?個參數(shù):業(yè)務(wù)對象,為必填字段

    @action.object({ type: “param” })

    export class ActionInput {

    @action.param({ type: ‘Struct, required: true, label: ‘object })

    maskMgtInfo: object;

    }

    //定義出參結(jié)構(gòu),出參包含1個參數(shù),記錄業(yè)務(wù)對象的id

    @action.object({ type: “param” })

    export class ActionOutput {

    @action.param({ type: ‘String })

    maskMgtInfoId: string;

    }

    //使用數(shù)據(jù)對象lgj__maskMgtInfo__CST

    @useObject([‘lgj__MaskMgtInfo__CST])

    @action.object({ type: “method” })

    export class editMaskMgtInfo {? ? //定義接口類,接口的入?yún)锳ctionInput,出參為ActionOutput

    @action.method({ input: ‘ActionInput, output: ‘ActionOutput })

    public editMaskMgtInfo(input: ActionInput): ActionOutput {

    let out = new ActionOutput();? ? //新建出參ActionO utput類型的實例,作為返回值

    let error = new Error();? ? //新建錯誤類型的實例,用于在發(fā)生錯誤時保存錯誤信息

    try {

    let maskMgtInfo = input.maskMgtInfo;? ? //將入?yún)①x值給maskMgtInfo變量,方便后面使用

    let s = db.object(‘lgj__MaskMgtInfo__CST);? ? //獲取lgj__MaskMgtInfo__CST這個Object的操作實例

    //新增口罩預(yù)約信息

    if (!maskMgtInfo[‘id]) {

    //合法性效驗

    this.doValidate(input);

    this.checklegality(input);

    //根據(jù)預(yù)約小區(qū)名稱與聯(lián)系人手機號碼,查詢近8天內(nèi)是否有預(yù)約記錄,如果有預(yù)約記錄,則不允許再次預(yù)約

    let maskMgtInfosByCondition = s.queryByCondition({

    conjunction: db.Conjunction.AND,

    conditions: [

    { field: “l(fā)gj__expectArriveDate__CST”, operator: db.Operator.gt, value: date.format(date.now(), ‘yyyy-MM-dd, context.getTimeZone()) },

    { field: “l(fā)gj__residence__CST”, operator: db.Operator.eq, value: maskMgtInfo[‘lgj__residence__CST] },

    { field: “l(fā)gj__phoneNumber__CST”, operator: db.Operator.eq, value: maskMgtInfo[‘lgj__phoneNumber__CST] }]

    });

    console.log(“maskMgtInfosByCondition is: “ + JSON.stringify(maskMgtInfosByCondition));

    if ((maskMgtInfosByCondition || []).length) {

    let expectArriveday = maskMgtInfosByCondition[0].lgj__expectArriveDate__CST;

    //效驗8天后的日期

    let now = date.now();

    now.setDate(now.getDate() + 8);

    if (expectArriveday <= date.format(now, ‘yyyy-MM-dd, context.getTimeZone())) {

    error.name = “EM”;

    error.message = "您近8天內(nèi)有預(yù)約,不能再預(yù)約.";

    throw error;

    }

    }

    else {

    this.removeSpace(maskMgtInfo);

    let maskMgtInfoId = s.insert(maskMgtInfo);? ? //向lgj__MaskMgtInfo__CST插入一條數(shù)據(jù),返回數(shù)據(jù)的唯一標(biāo)識即口罩預(yù)約信息ID

    if (maskMgtInfoId && maskMgtInfoId != “”) {

    out.maskMgtInfoId = maskMgtInfoId;

    }

    else {

    error.name = “EM”;

    error.message = “maskMgtInfo Cannot Be Added.”;

    throw error;

    }

    }

    }

    //編輯修改口罩預(yù)約信息

    else {

    this.removeSpace(maskMgtInfo);

    let id = maskMgtInfo[‘id];

    delete maskMgtInfo[‘id];

    let count = s.update(id, maskMgtInfo);? ? //根據(jù)口罩預(yù)約信息ID,編輯更新lgj__maskMgtInfo__CST的一條數(shù)據(jù)

    if (count && count == 1) {

    out.maskMgtInfoId = id;

    }

    else {

    error.name = “EM”;

    error.message = “maskMgtInfo Cannot Be Updated.”;

    throw error;

    }

    }

    } catch (error) {

    console.error(error.name, error.message);

    context.setError(error.name, error.message);

    }

    return out;

    }

    //去除空格

    private removeSpace(maskMgtInfo) {

    //防止前后空格入庫

    maskMgtInfo[‘lgj__phoneNumber__CST] = maskMgtInfo[‘lgj__phoneNumber__CST].replace(/\s+/g, “”);

    maskMgtInfo[‘lgj__residence__CST] = maskMgtInfo[‘lgj__residence__CST].replace(/\s+/g, “”);

    maskMgtInfo[‘name] = maskMgtInfo[‘name].replace(/\s+/g, “”);

    if (maskMgtInfo[‘lgj__address__CST]) {

    maskMgtInfo[‘lgj__address__CST] = maskMgtInfo[‘lgj__address__CST].replace(/\s+/g, “”);

    }

    }

    //檢查具體的合法性

    private checklegality(input) {

    console.log(“checklegality”);

    let error = new Error();

    if (JSON.stringify(input.maskMgtInfo) == “{}”) {

    error.name = “EM”;

    error.message = “”;

    error.name = “EM”;

    error.message = "信息有誤";

    throw error;

    }

    console.log(input.maskMgtInfo[‘lgj__residence__CST]);

    //residence不能為空

    let residence = input.maskMgtInfo[‘lgj__residence__CST];

    if (!residence || residence.replace(/\s+/g, “”) == “”) {

    error.name = “EM”;

    error.message = "請?zhí)顚?預(yù)約小區(qū)名稱.";

    throw error;

    }

    if (/[~!@#$%^&*()/\|,.<>?”();:_+\-=\[\]{}a-zA-Z]/.test(residence.replace(/\s+/g, “”))) {

    error.name = “EM”;

    error.message = "請?zhí)顚?無特殊符號及數(shù)字與字母的小區(qū)名稱.";

    throw error;

    }

    console.log(input.maskMgtInfo[‘lgj__orderCount__CST]);

    //orderCount不能為空

    let orderCount = input.maskMgtInfo[‘lgj__orderCount__CST];

    if (!orderCount) {

    error.name = “EM”;

    error.message = "請?zhí)顚懣谡诸A(yù)約數(shù)量.";

    throw error;

    }

    let numberReg = /^([1-9][0-9]{0,2})$/;

    console.log(!numberReg.test(orderCount));

    if (!numberReg.test(orderCount) || orderCount > 500) {

    error.name = “EM”;

    error.message = "請正確填寫口罩預(yù)約數(shù)量,最多預(yù)約500個.";

    throw error;

    }

    //expectArriveDate不能為空

    let expectArriveDate = input.maskMgtInfo[‘lgj__expectArriveDate__CST];

    console.log(expectArriveDate);

    if (!expectArriveDate || expectArriveDate == “”) {

    error.name = “EM”;

    error.message = "請?zhí)顚懫谕竭_(dá)日期.";

    throw error;

    }

    //效驗3天后的日期

    let now = date.now();

    now.setDate(now.getDate() + 2);

    if (expectArriveDate <= date.format(now, ‘yyyy-MM-dd, context.getTimeZone())) {

    error.name = “EM”;

    error.message = "期望到貨日期,請至少填寫3天后日期.";

    throw error;

    }

    console.log(input.maskMgtInfo[‘lgj__phoneNumber__CST]);

    //phoneNumber不能為空

    let phoneNumber = input.maskMgtInfo[‘lgj__phoneNumber__CST];

    if (!phoneNumber || phoneNumber.replace(/\s+/g, “”) == “”) {

    error.name = “EM”;

    error.message = "請?zhí)顚懧?lián)系人手機號碼.";

    throw error;

    }

    //手機號碼合法

    let reg = /^1[3|4|5|7|8][0-9]{9}$/;

    console.log(reg.test(phoneNumber.replace(/\s+/g, “”)));

    if (!reg.test(phoneNumber.replace(/\s+/g, “”))) {

    error.name = “EM”;

    error.message = "請?zhí)顚懞戏ǖ穆?lián)系人手機號碼.";

    throw error;

    }

    console.log(input.maskMgtInfo[‘name]);

    //personName不能為空

    let personName = input.maskMgtInfo[‘name];

    if (!personName || personName.replace(/\s+/g, “”) == “”) {

    error.name = “EM”;

    error.message = "請?zhí)顚?聯(lián)系人姓名.";

    throw error;

    }

    if ((/[~!@#$%^&*()/\|,.<>?”();:_+-=\[\]{}0-9]/.test(personName.replace(/\s+/g, “”)))) {

    error.name = “EM”;

    error.message = "請?zhí)顚?無特殊符號的聯(lián)系人姓名.";

    throw error;

    }

    }

    //長度基礎(chǔ)效驗

    private doValidate(input) {

    console.log(“doValidate”);

    for (let property in input) {

    console.log(property);

    if (Array.isArray(input[property])) {

    console.log(‘a(chǎn)aa + input[property]);

    for (let tmp of input[property]) {

    this.doValidate(tmp);

    }

    } else {

    let buf = buffer.from(input[property] || ‘);

    console.log(‘bbb + input[property]);

    if (typeof (input[property]) == “string”) {

    console.log(‘ccc + input[property]);

    if (property != “url”) {

    if (buf.size() > 255) {

    context.throwError(‘請檢查--某個屬性是否填的長度>255, property);

    }

    }

    } else if (typeof (input[property]) == “object”) {

    console.log(‘ddd + input[property]);

    for (let i in input[property]) {

    buf = buffer.from(input[property][i] || ‘);

    if (i == “l(fā)gj__residence__CST”) {

    if (buf.size() > 64) {

    context.throwError(‘請檢查--預(yù)約小區(qū)名稱是否填的長度>64, i);

    }

    }

    else (i != “url” && i != “content”) {

    console.log(‘eee + buf);

    if (buf.size() > 255) {

    context.throwError(‘請檢查--某個屬性是否填的長度>255, i);

    }

    }

    }

    }

    }

    }

    }

    }

    Appcube平臺同時支持腳本驗證功能,可以通過編輯器測試新增邏輯能否正常執(zhí)行,測試的結(jié)果以json字符串格式顯示。同理,可以采用同樣的方法定義“根據(jù)Id查詢”邏輯,腳本名稱定義為queryMaskMgtDetail。

    腳本代碼如下所示:

    /*****************************

    * 本腳本用于按記錄ID查詢信息記錄

    * ***************************/

    import * as db from ‘db;//導(dǎo)入處理object相關(guān)的標(biāo)準(zhǔn)庫

    import * as context from ‘context;//導(dǎo)入上下文相關(guān)的標(biāo)準(zhǔn)庫

    //定義入?yún)⒔Y(jié)構(gòu)

    @action.object({ type: “param” })

    export class ActionInput {

    @action.param({ type: ‘String, required: true })

    maskMgtInfoId: string;//口罩預(yù)約ID

    }

    //定義出參結(jié)構(gòu)

    @action.object({ type: “param” })

    export class ActionOutput {

    @action.param({ type: ‘Struct, label: ‘object })

    maskMgtInfo: object;//口罩預(yù)約對象

    }

    @useObject([‘lgj__MaskMgtInfo__CST])//使用數(shù)據(jù)庫對象lgj__MaskMgtInfo__CST

    @action.object({ type: “method” })

    export class QueryMaskMgtInfoDetail {

    @action.method({ input: ‘ActionInput, output: ‘ActionOutput })

    public queryMaskMgtInfoDetail(input: ActionInput): ActionOutput {

    let out = new ActionOutput();? ? //新建出參ActionO utput類型的實例,作為返回值

    let error = new Error();? ? //新建錯誤類型的實例,用于在發(fā)生錯誤時保存錯誤信息

    try {

    //必填校驗

    if (!input.maskMgtInfoId || input.maskMgtInfoId == “”) {

    error.name = “TM”;

    error.message = "請傳入口罩預(yù)約記錄的Id.";

    throw error;

    }

    //獲取lgj__MaskMgtInfo__CST這個Object的操作實例

    let s = db.object(‘lgj__MaskMgtInfo__CST);

    //查詢字段(全部)

    let option = {};

    //查詢條件

    let condition = {

    “conjunction”: “AND”,

    “conditions”: [{

    “field”: “id”,

    “operator”: “eq”,

    “value”: input.maskMgtInfoId

    }]

    };

    //調(diào)用按條件查詢lgj__MaskMgtInfo__CST的接口

    let record = s.queryByCondition(condition, option);

    //如果查詢到數(shù)據(jù)

    if (record && record[0]) {

    //將結(jié)果掛入輸出對象中

    out.maskMgtInfo = record[0]

    }

    } catch (error) {

    console.error(error.name, error.message);

    context.setError(error.name, error.message);

    }

    return out;

    }

    }

    3.2.2 組裝頁面

    3.3 定義市政管理報表

    Appcube報表關(guān)聯(lián)的對象需要設(shè)置為“允許報表使用”,定義的報表分為按預(yù)約日統(tǒng)計各小區(qū)預(yù)約量報表和按期望到貨日統(tǒng)計各小區(qū)待配發(fā)量報表。同時,為了方便物業(yè)人員的使用,能夠?qū)⑷藗兊目谡中枨髷?shù)量及時快速統(tǒng)計,我們將申請設(shè)置為通過二維碼掃碼預(yù)約的形式免登陸登記。

    3.4 獨立部署并對外開放

    項目開發(fā)成功后,我們還可以導(dǎo)入對應(yīng)的資產(chǎn)包給其他用戶,以便其他用戶直接使用和測試該項目。這種軟件包式的管理方式大大提高了項目部署效率,免去了部署開發(fā)環(huán)境的重復(fù)操作,同時云端部署還省去了運維成本,提高了項目運行的穩(wěn)定性。

    4 結(jié)語

    本文主要介紹了基于華為appcube平臺開發(fā)的口罩預(yù)約與配送系統(tǒng),它可以滿足新冠疫情防控期間口罩需求的統(tǒng)計匯總的現(xiàn)實需求,解決了基層繁雜的表格填報難題,對其他行業(yè)的數(shù)據(jù)統(tǒng)計和匯總同樣具有借鑒意義,更加值得學(xué)習(xí)的地方是該aPaaS平臺云開發(fā)、云測試、云部署、云運維的特點。它不再依賴于復(fù)雜的現(xiàn)場網(wǎng)絡(luò)環(huán)境和硬件局限性,同時大大縮短了項目開發(fā)周期,提高了工作效率。同時在appcube平臺開發(fā)過程中也發(fā)現(xiàn)了一些問題,比如開發(fā)的舊模塊無法適配新版本的問題。在后續(xù)的學(xué)習(xí)和工作中,我將不斷充電學(xué)習(xí),開發(fā)具有高適配性、高安全性的口罩預(yù)約與配送系統(tǒng)。

    国产 一区精品| 久久久久性生活片| 天堂√8在线中文| 久久国产乱子免费精品| 国产一区二区三区视频了| 一个人看视频在线观看www免费| 精品一区二区三区av网在线观看| av视频在线观看入口| 久久久久久国产a免费观看| 亚洲熟妇熟女久久| 成人无遮挡网站| 啦啦啦啦在线视频资源| 亚洲av中文字字幕乱码综合| 亚洲专区国产一区二区| 精品久久久久久久久亚洲 | 精品久久久久久久人妻蜜臀av| av福利片在线观看| 午夜影院日韩av| АⅤ资源中文在线天堂| 亚洲av免费高清在线观看| 精品久久久久久成人av| 亚洲最大成人中文| 3wmmmm亚洲av在线观看| 精品免费久久久久久久清纯| 亚洲一区高清亚洲精品| 91狼人影院| 国产午夜福利久久久久久| 久久亚洲精品不卡| 91久久精品国产一区二区成人| xxxwww97欧美| 亚洲精华国产精华液的使用体验 | 老司机深夜福利视频在线观看| 国内精品美女久久久久久| 久久这里只有精品中国| 久久亚洲真实| 色尼玛亚洲综合影院| 久久久久免费精品人妻一区二区| 精品人妻1区二区| 久久人人爽人人爽人人片va| 男人和女人高潮做爰伦理| 欧美国产日韩亚洲一区| 国产精品98久久久久久宅男小说| 日本 av在线| 超碰av人人做人人爽久久| 亚洲成人久久爱视频| 又黄又爽又刺激的免费视频.| 看十八女毛片水多多多| 国内揄拍国产精品人妻在线| 一个人观看的视频www高清免费观看| 美女高潮的动态| 国产伦精品一区二区三区四那| 夜夜看夜夜爽夜夜摸| 成人国产麻豆网| 欧美日韩乱码在线| 久久草成人影院| 亚洲精华国产精华液的使用体验 | 小说图片视频综合网站| 国产精品,欧美在线| 亚洲黑人精品在线| 久久精品国产鲁丝片午夜精品 | 男人和女人高潮做爰伦理| 国产在视频线在精品| 久久久久国产精品人妻aⅴ院| 精品人妻1区二区| 欧美性猛交黑人性爽| 日本一二三区视频观看| 淫妇啪啪啪对白视频| 麻豆一二三区av精品| 亚洲av二区三区四区| 搡老岳熟女国产| 校园人妻丝袜中文字幕| 中文字幕免费在线视频6| 亚洲va日本ⅴa欧美va伊人久久| 国产男靠女视频免费网站| 亚洲国产欧美人成| 久久久久性生活片| 日韩,欧美,国产一区二区三区 | 国产 一区 欧美 日韩| 国产高清不卡午夜福利| 亚洲av免费在线观看| 久久久久国内视频| 午夜精品一区二区三区免费看| 国产亚洲精品久久久久久毛片| 精品一区二区免费观看| 亚洲最大成人手机在线| 天堂av国产一区二区熟女人妻| 欧美一区二区精品小视频在线| 十八禁网站免费在线| 一本一本综合久久| 亚洲中文日韩欧美视频| 五月伊人婷婷丁香| 最后的刺客免费高清国语| 欧美国产日韩亚洲一区| 麻豆久久精品国产亚洲av| 美女高潮喷水抽搐中文字幕| 狂野欧美白嫩少妇大欣赏| a级一级毛片免费在线观看| 日本免费一区二区三区高清不卡| 亚洲性夜色夜夜综合| xxxwww97欧美| h日本视频在线播放| 午夜a级毛片| 99久久无色码亚洲精品果冻| 国产成人a区在线观看| 欧美三级亚洲精品| 露出奶头的视频| 国产精品美女特级片免费视频播放器| 天堂av国产一区二区熟女人妻| 亚洲 国产 在线| 麻豆国产97在线/欧美| 别揉我奶头~嗯~啊~动态视频| 99热这里只有是精品50| 婷婷精品国产亚洲av在线| 极品教师在线免费播放| 日韩欧美在线二视频| 免费无遮挡裸体视频| 国产蜜桃级精品一区二区三区| 久久天躁狠狠躁夜夜2o2o| 久久精品国产亚洲av天美| 亚洲精品一卡2卡三卡4卡5卡| 亚洲美女视频黄频| 久久久色成人| 韩国av一区二区三区四区| 亚洲真实伦在线观看| 18禁在线播放成人免费| 日本在线视频免费播放| 色哟哟哟哟哟哟| 变态另类丝袜制服| 国产单亲对白刺激| 欧美精品啪啪一区二区三区| 国产私拍福利视频在线观看| 人妻少妇偷人精品九色| 欧美绝顶高潮抽搐喷水| 国产91精品成人一区二区三区| 成年人黄色毛片网站| 国产精品电影一区二区三区| 精品久久久久久,| 最近中文字幕高清免费大全6 | 久久久午夜欧美精品| 国产精品精品国产色婷婷| 啦啦啦啦在线视频资源| 国产亚洲精品久久久久久毛片| 日本精品一区二区三区蜜桃| 久久久久性生活片| 又紧又爽又黄一区二区| 亚洲无线在线观看| 人妻久久中文字幕网| 国产白丝娇喘喷水9色精品| 一进一出好大好爽视频| 亚洲人成伊人成综合网2020| 亚洲色图av天堂| 国产蜜桃级精品一区二区三区| 一级黄片播放器| 欧美日韩国产亚洲二区| www.色视频.com| 在线免费十八禁| 久久久久久久久中文| 亚洲欧美日韩无卡精品| 免费观看的影片在线观看| 日韩一区二区视频免费看| 老熟妇仑乱视频hdxx| 露出奶头的视频| 成年女人毛片免费观看观看9| 亚洲最大成人中文| 国产av不卡久久| 中文字幕精品亚洲无线码一区| 亚洲精华国产精华液的使用体验 | 神马国产精品三级电影在线观看| 91久久精品国产一区二区成人| 老师上课跳d突然被开到最大视频| 国产一区二区三区视频了| 露出奶头的视频| 如何舔出高潮| 欧美一区二区精品小视频在线| 日本免费a在线| 高清在线国产一区| 人人妻,人人澡人人爽秒播| 狠狠狠狠99中文字幕| 欧美国产日韩亚洲一区| 99国产极品粉嫩在线观看| 99国产精品一区二区蜜桃av| 真实男女啪啪啪动态图| 午夜福利18| 国产精品久久久久久av不卡| 亚洲三级黄色毛片| 黄片wwwwww| 俺也久久电影网| 中文字幕av在线有码专区| 欧美日韩精品成人综合77777| 久久久久九九精品影院| 亚洲成av人片在线播放无| 最新中文字幕久久久久| 可以在线观看的亚洲视频| 欧美日韩国产亚洲二区| 亚洲熟妇中文字幕五十中出| 欧美成人免费av一区二区三区| 国产亚洲精品久久久久久毛片| a级毛片免费高清观看在线播放| 欧美成人免费av一区二区三区| 在线天堂最新版资源| 男女边吃奶边做爰视频| 日本三级黄在线观看| 国内精品美女久久久久久| 欧美一区二区亚洲| 亚洲在线观看片| 国产精品久久久久久亚洲av鲁大| 一本久久中文字幕| 欧美人与善性xxx| 国产蜜桃级精品一区二区三区| 国产人妻一区二区三区在| 91在线观看av| 美女高潮喷水抽搐中文字幕| 91麻豆av在线| 久久热精品热| 99riav亚洲国产免费| 免费一级毛片在线播放高清视频| 亚洲美女视频黄频| 麻豆av噜噜一区二区三区| 亚洲专区国产一区二区| 观看美女的网站| 午夜久久久久精精品| 日韩一本色道免费dvd| 欧美成人性av电影在线观看| 国产激情偷乱视频一区二区| 久久亚洲精品不卡| 亚洲成a人片在线一区二区| 国产精品98久久久久久宅男小说| 舔av片在线| 级片在线观看| 成人三级黄色视频| 人妻少妇偷人精品九色| 九九在线视频观看精品| 最近中文字幕高清免费大全6 | 日本 av在线| 国产人妻一区二区三区在| 日韩精品中文字幕看吧| 国产精品日韩av在线免费观看| 婷婷丁香在线五月| 亚洲 国产 在线| 欧美黑人巨大hd| 赤兔流量卡办理| 久久亚洲精品不卡| 欧美中文日本在线观看视频| av.在线天堂| 俄罗斯特黄特色一大片| 成人综合一区亚洲| 国产伦精品一区二区三区视频9| 可以在线观看的亚洲视频| 国产探花极品一区二区| a级毛片免费高清观看在线播放| 欧美国产日韩亚洲一区| 91av网一区二区| 久久午夜亚洲精品久久| 伦理电影大哥的女人| 十八禁网站免费在线| 女的被弄到高潮叫床怎么办 | 最新在线观看一区二区三区| 麻豆久久精品国产亚洲av| 啪啪无遮挡十八禁网站| 亚洲性久久影院| 国产高清视频在线观看网站| 亚洲精品乱码久久久v下载方式| 22中文网久久字幕| 亚洲欧美清纯卡通| 99久久九九国产精品国产免费| 久久久久久国产a免费观看| 国产精品永久免费网站| 少妇人妻一区二区三区视频| 一级黄片播放器| 国产熟女欧美一区二区| 夜夜爽天天搞| 色5月婷婷丁香| 精品乱码久久久久久99久播| 性欧美人与动物交配| 国产免费一级a男人的天堂| 69人妻影院| 欧美最黄视频在线播放免费| 亚洲一级一片aⅴ在线观看| 美女高潮的动态| 我的老师免费观看完整版| 女人十人毛片免费观看3o分钟| 又黄又爽又刺激的免费视频.| 精华霜和精华液先用哪个| 最近在线观看免费完整版| 又黄又爽又免费观看的视频| 舔av片在线| 精品久久久噜噜| 久久亚洲精品不卡| 亚洲avbb在线观看| 午夜福利欧美成人| 亚洲av不卡在线观看| 神马国产精品三级电影在线观看| 国产美女午夜福利| 色哟哟哟哟哟哟| 嫩草影院入口| 亚洲欧美日韩东京热| 成年女人永久免费观看视频| 国产在线精品亚洲第一网站| 亚洲av.av天堂| 久久久国产成人精品二区| 国产免费一级a男人的天堂| 久久天躁狠狠躁夜夜2o2o| 特级一级黄色大片| or卡值多少钱| 国产伦精品一区二区三区四那| 国产精品一及| 欧美高清性xxxxhd video| 欧美又色又爽又黄视频| 午夜精品在线福利| 国产精品亚洲一级av第二区| 欧美成人性av电影在线观看| 精品一区二区三区av网在线观看| 国产 一区精品| 欧美xxxx性猛交bbbb| 亚洲经典国产精华液单| 嫩草影院精品99| 欧美一级a爱片免费观看看| 美女大奶头视频| 午夜爱爱视频在线播放| 久久热精品热| 国产人妻一区二区三区在| 在线天堂最新版资源| 免费人成视频x8x8入口观看| 国产精品国产高清国产av| 亚洲最大成人av| 级片在线观看| 香蕉av资源在线| 极品教师在线视频| 国产真实伦视频高清在线观看 | 97人妻精品一区二区三区麻豆| 乱系列少妇在线播放| 国产午夜福利久久久久久| 欧美xxxx黑人xx丫x性爽| 日韩国内少妇激情av| 嫩草影院精品99| 国产欧美日韩精品一区二区| 国产黄a三级三级三级人| 日韩欧美国产在线观看| 亚洲av.av天堂| 亚洲男人的天堂狠狠| 久久人人精品亚洲av| 美女 人体艺术 gogo| 午夜福利在线观看免费完整高清在 | 久久久久精品国产欧美久久久| 国产 一区精品| xxxwww97欧美| 国产精品福利在线免费观看| 欧美中文日本在线观看视频| 国产一区二区三区av在线 | 1024手机看黄色片| 成年女人看的毛片在线观看| 男人的好看免费观看在线视频| 少妇高潮的动态图| 男女视频在线观看网站免费| 亚洲av五月六月丁香网| 99国产精品一区二区蜜桃av| 少妇高潮的动态图| 久久亚洲真实| 欧美最新免费一区二区三区| 在线观看午夜福利视频| 亚洲人成网站在线播放欧美日韩| 中国美女看黄片| 婷婷亚洲欧美| 欧美成人a在线观看| 国产精品一区二区三区四区免费观看 | 嫩草影院新地址| netflix在线观看网站| 男女边吃奶边做爰视频| 国产在线男女| 91久久精品国产一区二区三区| 国产精品野战在线观看| 色哟哟·www| 黄色欧美视频在线观看| 波多野结衣高清作品| 亚洲天堂国产精品一区在线| 亚洲一级一片aⅴ在线观看| 乱码一卡2卡4卡精品| 一进一出好大好爽视频| 十八禁国产超污无遮挡网站| 亚州av有码| 国产 一区 欧美 日韩| 国产私拍福利视频在线观看| 欧美极品一区二区三区四区| 国产爱豆传媒在线观看| 人妻少妇偷人精品九色| 久久欧美精品欧美久久欧美| 美女高潮的动态| 色在线成人网| 99久国产av精品| 91午夜精品亚洲一区二区三区 | 国产老妇女一区| 九九热线精品视视频播放| 亚洲天堂国产精品一区在线| 日韩一本色道免费dvd| 一区二区三区四区激情视频 | 欧美黑人欧美精品刺激| 精品久久久久久久久亚洲 | 亚洲欧美日韩高清在线视频| 亚洲 国产 在线| 91久久精品国产一区二区成人| 免费观看精品视频网站| 97人妻精品一区二区三区麻豆| 久久午夜亚洲精品久久| 天天一区二区日本电影三级| 日韩欧美三级三区| 女的被弄到高潮叫床怎么办 | 一个人看视频在线观看www免费| 午夜福利欧美成人| 国产亚洲精品久久久com| 欧美高清成人免费视频www| www.色视频.com| 欧美3d第一页| 久久香蕉精品热| 丝袜美腿在线中文| 国产精品人妻久久久久久| 高清日韩中文字幕在线| 精品一区二区三区视频在线| 在线播放无遮挡| 亚洲熟妇熟女久久| 日韩欧美在线二视频| 午夜免费成人在线视频| 俺也久久电影网| 色5月婷婷丁香| 少妇的逼好多水| 亚洲人成网站在线播| 嫩草影视91久久| 免费观看的影片在线观看| 不卡视频在线观看欧美| 国产精品日韩av在线免费观看| 精品久久久久久久久久久久久| 亚洲自拍偷在线| 日本黄色视频三级网站网址| 五月玫瑰六月丁香| aaaaa片日本免费| 日本免费一区二区三区高清不卡| 亚洲四区av| 又紧又爽又黄一区二区| 观看美女的网站| 日韩大尺度精品在线看网址| 热99在线观看视频| 热99re8久久精品国产| 欧美不卡视频在线免费观看| 搡女人真爽免费视频火全软件 | 久久久成人免费电影| 人妻少妇偷人精品九色| 久久精品国产亚洲av涩爱 | 国产又黄又爽又无遮挡在线| 欧美+亚洲+日韩+国产| 嫩草影院入口| 精品人妻一区二区三区麻豆 | 内射极品少妇av片p| 十八禁网站免费在线| 国产单亲对白刺激| 国产三级中文精品| 2021天堂中文幕一二区在线观| 成人午夜高清在线视频| 亚洲狠狠婷婷综合久久图片| 级片在线观看| 精品人妻偷拍中文字幕| 最近最新免费中文字幕在线| 亚洲美女视频黄频| 久久久色成人| 全区人妻精品视频| 欧美在线一区亚洲| 中文在线观看免费www的网站| 搡老岳熟女国产| 日韩亚洲欧美综合| 国产精品亚洲一级av第二区| 九色成人免费人妻av| 精品久久久久久久久久久久久| 神马国产精品三级电影在线观看| 真人一进一出gif抽搐免费| 色综合婷婷激情| 国产精品一区二区三区四区久久| 狂野欧美白嫩少妇大欣赏| 亚洲一区二区三区色噜噜| 嫩草影院精品99| 赤兔流量卡办理| 黄色女人牲交| 精品久久久久久成人av| 最好的美女福利视频网| 亚洲精品乱码久久久v下载方式| avwww免费| 黄色欧美视频在线观看| 美女xxoo啪啪120秒动态图| 大又大粗又爽又黄少妇毛片口| or卡值多少钱| 国产精品电影一区二区三区| 嫩草影院新地址| 日韩中文字幕欧美一区二区| 中亚洲国语对白在线视频| 91久久精品电影网| 国产精品伦人一区二区| 久久人人精品亚洲av| av黄色大香蕉| 欧美bdsm另类| 国产精品一区二区免费欧美| 日韩强制内射视频| 欧美高清成人免费视频www| 毛片一级片免费看久久久久 | 久久精品人妻少妇| 桃红色精品国产亚洲av| 国产一级毛片七仙女欲春2| 午夜精品在线福利| 日本免费一区二区三区高清不卡| 欧美色欧美亚洲另类二区| 神马国产精品三级电影在线观看| 直男gayav资源| 久久精品综合一区二区三区| 人妻丰满熟妇av一区二区三区| a级毛片a级免费在线| 色综合色国产| 日本 欧美在线| 亚洲成人久久性| 中出人妻视频一区二区| 热99在线观看视频| 看片在线看免费视频| 两个人视频免费观看高清| 熟妇人妻久久中文字幕3abv| 亚洲av免费高清在线观看| 亚洲国产精品合色在线| 久久久久国内视频| 人人妻人人澡欧美一区二区| av黄色大香蕉| 九色成人免费人妻av| 又黄又爽又免费观看的视频| 亚洲国产色片| 午夜福利高清视频| 亚洲精品乱码久久久v下载方式| 国国产精品蜜臀av免费| 国产午夜精品论理片| 一边摸一边抽搐一进一小说| 久久精品人妻少妇| 久久草成人影院| 欧美精品国产亚洲| 黄色一级大片看看| 69av精品久久久久久| 老熟妇仑乱视频hdxx| 精品久久久久久成人av| 精品国产三级普通话版| 亚洲中文日韩欧美视频| 在线观看午夜福利视频| 精品一区二区三区人妻视频| 色av中文字幕| 色综合站精品国产| 在线国产一区二区在线| 久久天躁狠狠躁夜夜2o2o| 日日啪夜夜撸| 99热这里只有是精品在线观看| 我的女老师完整版在线观看| 亚洲无线观看免费| 亚洲精华国产精华精| 91午夜精品亚洲一区二区三区 | 日韩人妻高清精品专区| 免费看日本二区| 1000部很黄的大片| 桃色一区二区三区在线观看| av在线蜜桃| 无人区码免费观看不卡| 久久人人精品亚洲av| 欧美高清性xxxxhd video| 少妇丰满av| 国产精品野战在线观看| videossex国产| 成人国产综合亚洲| 嫩草影院入口| 免费看a级黄色片| 亚洲四区av| 精品人妻1区二区| 99热这里只有是精品50| 女人十人毛片免费观看3o分钟| 99久久久亚洲精品蜜臀av| 热99re8久久精品国产| 我的女老师完整版在线观看| 两性午夜刺激爽爽歪歪视频在线观看| 我要搜黄色片| 91久久精品电影网| 亚洲第一电影网av| 成人国产麻豆网| 赤兔流量卡办理| 桃红色精品国产亚洲av| 三级男女做爰猛烈吃奶摸视频| 在线免费观看不下载黄p国产 | 99在线视频只有这里精品首页| 美女大奶头视频| 麻豆一二三区av精品| 中文字幕熟女人妻在线| 在线天堂最新版资源| 婷婷丁香在线五月| 精华霜和精华液先用哪个| 波多野结衣巨乳人妻| 一本久久中文字幕| 不卡一级毛片| 两人在一起打扑克的视频| 97超视频在线观看视频| 少妇熟女aⅴ在线视频| 国产精品久久视频播放| 亚洲欧美日韩无卡精品| 天堂av国产一区二区熟女人妻| 亚洲最大成人av| 国内精品美女久久久久久| 日本三级黄在线观看| 日日撸夜夜添| 18+在线观看网站| 在现免费观看毛片| 色在线成人网| 亚洲第一电影网av| 不卡一级毛片| 国产精品永久免费网站| 校园人妻丝袜中文字幕| 成人美女网站在线观看视频| 一夜夜www| 日韩欧美国产一区二区入口| 男女那种视频在线观看| 久久久精品欧美日韩精品|