• 某预约系统分析 > 某区公共自行车租车卡在线预约,关于如何提高成功概率


    概诉

    网上提交预约申请单,线下面交完成实体卡的交付和办理。

    本文主要从技术角度分析预约页面,仅供初学者技术交流使用。

    表单输入和校验

    系统通过2步的确认点击到达信息输入页面。

    地址:/bjggzxc/TzYybk_third_1.html

    验证规则:

    字段名 字段ID 校验规则1 验证规则2 验证规则3 验证规则4
    姓名 U_NAME 非空验证 只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符  
    性别 U_SEX 非空验证 性别与身份证不匹配    
    出生日期 U_BIRTHDAY 非空验证 日期格式不正确,输入类似2011-01-01的日期! 出生日期与身份证不匹配 18-60岁之间才能预约!
    户口所在地 U_BIRTHPLACE 非空验证 户口所在地只能输入中文,填写省市区(县)即可,最少两个汉字!  
    证件类型 U_ZJTYPE 非空验证      
    证件号 U_ZJNUM 非空验证 身份证号码校验失败,IdentityCodeValid 此证件号码已经预约过,请不要重复预约! 校验出生日期 和 性别

    居住地址

    U_TXPLACE 非空验证 居住地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符  

    工作居住证号

    U_ZZZNUM   非北京户口用户必须输入工作居住证号码,且只能输入12位数字,北京户口请在户口所在地中包含“北京”两个字。  
    手机号 U_PHONE 非空验证 手机号只能是11位数字!    

    电子邮箱

    U_EMAIL 非空验证 电子邮箱格式不正确!    

    联系人姓名

    U_U_NAME 非空验证 只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符  

    性别

    U_U_SEX 非空验证      

    与联系人的关系

    U_U_RELATION 非空验证 与联系人的关系只能输入汉字,最少两个字符!    
    联系电话 U_U_TELEPHONE 非空验证 联系电话只能是数字或横杠,最少8位!    

    通讯地址

    U_U_TXPLACE 非空验证 联系人通讯地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符  
    选择办卡地点 U_CARD_ADDRESS 非空验证      
      Y_PC        
      PC_ID        

    验证代码:

      1 $(function() {
      2     $('#U_BIRTHDAY').datetimepicker({
      3          language: 'zh-CN',
      4          minView: '2',  //只选择日期,不选择时间
      5          format: 'yyyy-mm-dd',
      6          startDate: '${yypc.ksrq}',
      7           endDate: new Date(), 
      8          autoclose: true ,
      9         todayBtn: true 
     10      }).on("changeDate", function(e){
     11 //         console.log($("#applyForm").data('formValidation'));
     12          $("#applyForm").bootstrapValidator('revalidateField', 'U_BIRTHDAY');
     13     });
     14     
     15     var validForm = $('#applyForm').bootstrapValidator({
     16         fields: {
     17             "U_NAME": {
     18                 validators: {
     19                     notEmpty: {  //非空验证
     20                         message: '姓名不能为空!'
     21                     },
     22                     regexp: {
     23                         regexp: /^[a-zA-zu4e00-u9fa5,.-_]{2,}$/,
     24                         message: '只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符'
     25                     }
     26                 }
     27             },
     28             "U_SEX": {
     29                 validators: {
     30                     notEmpty: {  //非空验证
     31                         message: '性别不能为空,请选择!'
     32                     },
     33                     callback: {
     34                         message: '性别与身份证不匹配!',
     35                         callback: function(value, validator, $field) {
     36                             var zjlx = $('select[name=U_ZJTYPE]').val();
     37                             var sfzh = $('input[name=U_ZJNUM]').val();
     38                             var sex=$("input[name='U_SEX']:checked").val();
     39 
     40                             if (sex != "" && zjlx == "身份证" && (sfzh.length == 18 || sfzh.length == 15)) {
     41                                 var sexFromSfzh = "";
     42                                 if(sfzh.length == 18) {
     43                                     sexFromSfzh = sfzh.substring(16, 17);
     44                                 } else if(sfzh.length == 15) {
     45                                     sexFromSfzh = sfzh.substring(14);
     46                                 }
     47                                 console.log(sexFromSfzh);
     48                                 var sexCode = parseInt(sexFromSfzh);
     49                                 
     50                                 if(sexCode % 2 == 0)
     51                                     sexFromSfzh = "女";
     52                                 else
     53                                     sexFromSfzh = "男";
     54 
     55                                 if(sex != sexFromSfzh)
     56                                     return false;    // or false
     57                             } 
     58                             return true;
     59                         }
     60                     }
     61                 }
     62             },
     63             "U_BIRTHDAY": {
     64                 validators: {
     65                     notEmpty: {  //非空验证
     66                         message: '出生日期不能为空!'
     67                     },
     68                     date: {
     69                         message: '日期格式不正确,输入类似2011-01-01的日期!',
     70                         format: 'YYYY-MM-DD'
     71                     },
     72                     callback: {
     73                         message: '出生日期与身份证不匹配!',
     74                         callback: function(value, validator, $field) {
     75                             var zjlx = $('select[name=U_ZJTYPE]').val();
     76                             var sfzh = $('input[name=U_ZJNUM]').val();
     77                             if (zjlx == "身份证" && (sfzh.length == 18 || sfzh.length == 15)) {
     78                                 var birthdayFromSfzh = "";
     79                                 if(sfzh.length == 18) {
     80                                     birthdayFromSfzh = sfzh.substring(6, 14);
     81                                 } else if(sfzh.length == 15) {
     82                                     birthdayFromSfzh = "19" + sfzh.substring(6, 12);
     83                                 }
     84                                 if(value.replace(/-/g,'') != birthdayFromSfzh)
     85                                     return false;    // or false
     86                             } 
     87                             return true;
     88                         }
     89                     },
     90                     callback: {
     91                         message: '18-60岁之间才能预约!',
     92                         callback: function(value, validator, $field) {
     93                             var d = Date.parse(value.replace(/-/g,'/'));
     94                             var date = new Date();
     95                             var now = date.format("yyyyMMdd");
     96                             date.setTime(d);
     97                             date.addYears(18);
     98                             var date1 = date.format("yyyyMMdd");  //18岁是哪天
     99                             date.addYears(42);
    100                             var date2 = date.format("yyyyMMdd");  //60岁是哪天
    101                             console.log(date1);
    102                             console.log(date2);
    103                             console.log(now);
    104                             return (now >= date1 && now <= date2);
    105                         }
    106                     }
    107                 }
    108             },
    109             "U_BIRTHPLACE": {
    110                 validators: {
    111                     notEmpty: {  //非空验证
    112                         message: '户口所在地不能为空!'
    113                     },
    114                     regexp: {
    115                         regexp: /^[u4e00-u9fa5]{2,}$/,
    116                         message: '户口所在地只能输入中文,填写省市区(县)即可,最少两个汉字!'
    117                     }
    118                 },
    119                 onSuccess: function(e, data) {
    120                     data.bv.revalidateField('U_ZZZNUM');
    121                 }
    122             },
    123             "U_ZJTYPE": {
    124                 validators: {
    125                     notEmpty: {  //非空验证
    126                         message: '证件类型不能为空,请选择!'
    127                     }
    128                 }
    129             },
    130             "U_ZJNUM": {
    131                 validators: {
    132                     notEmpty: {  //非空验证
    133                         message: '证件号码不能为空!'
    134                     },
    135                     callback: {
    136                         message: '身份证号码校验失败!',
    137                         callback: function(value, validator, $field) {
    138                             var zjlx = $('select[name=U_ZJTYPE]').val();
    139                             if (zjlx == "身份证")
    140                                 return IdentityCodeValid(value);
    141                             else
    142                                 return true;
    143                         }
    144                     },
    145                     remote: {
    146                         message: '此证件号码已经预约过,请不要重复预约!',
    147                         url: 'TzYybk_checkZjhm_1.html',
    148                         type: 'POST',
    149 //                        delay: 1000,
    150                         data: {
    151                             Y_PC: $('input[name=Y_PC]').val(),
    152                             PC_ID: $('input[name=PC_ID]').val()
    153                         }
    154                     }
    155                 },
    156                 onSuccess: function(e, data) {
    157                     data.bv.revalidateField('U_BIRTHDAY');
    158                     data.bv.revalidateField('U_SEX');
    159                 }
    160             },
    161             "U_TXPLACE": {
    162                 validators: {
    163                     notEmpty: {  //非空验证
    164                         message: '居住地址不能为空!'
    165                     },
    166                     regexp: {
    167                         regexp: /^[a-zA-z0-9u4e00-u9fa5,,  .-_]{5,}$/,
    168                         message: '居住地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符'
    169                     }
    170                     
    171                 }
    172             },
    173             "U_ZZZNUM": {
    174                 validators: {
    175                      callback: {
    176                         message: '非北京户口用户必须输入工作居住证号码,且只能输入12位数字,北京户口请在户口所在地中包含“北京”两个字。',
    177                         callback: function(value, validator, $field) {
    178                             var hk = $('input[name=U_BIRTHPLACE]').val();
    179                             if (hk != "" && hk.indexOf("北京") < 0 && value == "") {
    180                                    return false;    // or false
    181                             } else {
    182                                 if(value != "") {
    183                                     if(/^[0-9]{12}$/m.test(value))
    184                                         return true;
    185                                     else 
    186                                         return false;
    187                                 } else 
    188                                     return true;
    189                             }
    190                         }
    191                     }
    192                 }
    193             },
    194             "U_PHONE": {
    195                 validators: {
    196                     notEmpty: {  //非空验证
    197                         message: '手机号不能为空!'
    198                     },
    199                     regexp: {
    200                         regexp: /^[0-9]{11}$/,
    201                         message: '手机号只能是11位数字!'
    202                     }
    203                 }
    204             },
    205             "U_EMAIL": {
    206                 validators: {
    207                     notEmpty: {  //非空验证
    208                         message: '电子邮箱不能为空!'
    209                     },
    210                     regexp: {
    211                         regexp: /^[a-zA-Z0-9_-.]+@([a-zA-Z0-9-]+.)+[a-zA-Z]{2,}$/,
    212                         message: '电子邮箱格式不正确!'
    213                     }
    214                 }
    215             },
    216             "U_ZJTYPE": {
    217                 validators: {
    218                     notEmpty: {  //非空验证
    219                         message: '证件类型不能为空!'
    220                     }
    221                 }
    222             },
    223             "U_U_NAME": {
    224                 validators: {
    225                     notEmpty: {  //非空验证
    226                         message: '联系人姓名不能为空!'
    227                     },
    228                     regexp: {
    229                         regexp: /^[a-zA-zu4e00-u9fa5,.-_]{2,}$/,
    230                         message: '只能输入中英文字符以及逗号、点、减号、下划线,且至少两个字符'
    231                     }
    232                 }
    233             },
    234             "U_U_SEX": {
    235                 validators: {
    236                     notEmpty: {  //非空验证
    237                         message: '性别不能为空!'
    238                     }
    239                 }
    240             },
    241             "U_U_RELATION": {
    242                 validators: {
    243                     notEmpty: {  //非空验证
    244                         message: '与联系人的关系不能为空!'
    245                     },
    246                     regexp: {
    247                         regexp: /^[u4e00-u9fa5]{2,}$/,
    248                         message: '与联系人的关系只能输入汉字,最少两个字符!'
    249                     }
    250                 }
    251             },
    252             "U_U_TELEPHONE": {
    253                 validators: {
    254                     notEmpty: {  //非空验证
    255                         message: '联系电话为空!'
    256                     },
    257                     regexp: {
    258                         regexp: /^[0-9()-]{8,}$/,
    259                         message: '联系电话只能是数字或横杠,最少8位!'
    260                     }
    261                 }
    262             },
    263             "U_U_TXPLACE": {
    264                 validators: {
    265                     notEmpty: {  //非空验证
    266                         message: '联系人通讯地址不能为空!'
    267                     },
    268                     regexp: {
    269                         regexp: /^[a-zA-z0-9u4e00-u9fa5,,  .-_]{5,}$/,
    270                         message: '联系人通讯地址只能输入中英文字符、数字以及逗号、点、减号、下划线,且至少五个字符'
    271                     }
    272                 }
    273             }
    274         }
    275     })
    276     .on('success.form.bv', function(e) {
    277         e.preventDefault();
    278         editPcSave();
    279     });
    280 })
    View Code

    提前准备好合格的注册/预约信息是件很重要的事情,通过代码提取然后进行自动的填写。

    用一个本地库去保存合格的注册信息。

    循环:提取信息,然后提交服务器。

    确认提交优化

    提前判断信息都通过验证以后(合格),除了用editPcSave中的ajaxSubmit来提交信息以外,如下:

    function submitToSrv(){
    $('#applyForm').ajaxSubmit({
                type : "post",
                url : "TzYybk_save_1.html",
                beforeSubmit : function() {
                    $("button").attr("disabled", true);
                },
                success : function(responseText, statusText, xhr, $form) {
                    var response = $.parseJSON(responseText);
                    if(response.status=="ok") {
                        console.log(response.uid);
                        document.location="TzYybk_success_1.html?uid=" + response.uid;
                    } else {
                        alert(response.message);
                    }
                },
                error : function(request, textStatus, e) {
                    $("button").attr("disabled", false);
                }
            });
    };
    
    setInterval("submitToSrv()", 5000);
    View Code

    另外:提高成功概率的主要影响因素

    1. 对网页资源的本地化,优化;给服务器减轻压力
      1. 对资源进行缓存jquery-1.11.2.min.js
      2. 对资源进行映射。
    2. 服务器测速(多服务器情况下)
    3. 定义测速机制,根据数据包路由信息确定最优服务器IP地址,直接缓存到本地hosts文件中
    4. 智能DNS切换
    5. 多服务器情况下,切换选择基于本机的最优服务器
    6. CDN返回缓存
    7. CDN判断
       

    结语

    这个1.0版本的分析还有些技术细节有待优化.

    欢迎探讨,如果您想找人帮忙:点击这里给我发消息

  • 相关阅读:
    Appium的三种启动方式(转载)
    select单选框和多选框设置默认值
    JavaScript获取到ModelAndView的对象
    Selenium+PageObject+Java实现测试用例
    2017ACM-ICPC 青岛 K.Our Journey of Xian Ends
    Django简单数据库交互演示
    简单树刨+线段树模板 877E
    ACM 二维离散化模板 hdu5925
    code::blocks配置头文件#include<bits/stdc++.h>
    百度之星初赛b
  • 原文地址:https://www.cnblogs.com/backuper/p/5337411.html
Copyright © 2020-2023  润新知