D:/workspace/chenjingjing/git/gx_tieta/gx_tieta/.gitignore
2019-01-18 2fe250ece8de95b3f70172fe5b45793ab6a3084a
gx_tieta/WebRoot/batt-station-update1.jsp
@@ -15,7 +15,7 @@
      <meta http-equiv="expires" content="0">    
      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
      <meta http-equiv="description" content="This is my page">
       <title>机房站点升级功能</title>
       <title>BTS设备升级</title>
      <link rel="stylesheet" type="text/css" href="pages/css/base.css">
      <link rel="stylesheet" type="text/css" href="jqueryui/jquery-ui.css">
       <link rel="stylesheet" type="text/css" href="src/css/layui.css">
@@ -130,7 +130,14 @@
        <!-- 整体灰色遮罩层 -->
       <div id="allShade"></div>
       <script type="text/html" id="barDemo">
         <a class="layui-btn layui-btn-xs" lay-event="update">升级</a>
         {{# if(d.updatestatusnum != 1){ }}
            <a class="layui-btn layui-btn-xs" lay-event="update">升级</a>
         {{# } }}
      </script>
      <script type="text/html" id="upProgress">
         <div class="layui-progress layui-progress-big" lay-showpercent="true" lay-filter="upload{{d.fbsid}}" style="margin-top:6px">
              <div class="layui-progress-bar" lay-percent="0%"></div>
         </div>
      </script>
       <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
       <script type="text/javascript" src="js/echarts.js"></script>
@@ -143,6 +150,28 @@
              var table = layui.table;      // 获取表格模块
              var form = layui.form;         // 获取表单模块
              var layer = layui.layer;      // 获取弹出框模块
              var element = layui.element;   // 获取元素操作模块
              // 设置检测文件名弹出框的content
              var cFilenameContent = '<div style="width:300px; height: 110px;"><div style="margin-top: 20px;margin-left: 8px; margin-right: 8px; text-algin: center;">'+
                              '<span>选择文件名:</span>'+
                              '<select id="equipeTypeSel" style="width: 200px;height: 26px; border: 1px solid #ccc">'+
                                 '<option value="avr_dfu.uc3">avr_dfu.uc3</option>'+
                                 '<option value="E51_DFU.SM5">E51_DFU.SM5</option>'+
                              '</select><br><br>'+
                              '<span>系&nbsp;统&nbsp;类&nbsp;型:</span>'+
                              '<select id="sysType" style="width: 200px;height: 26px; border: 1px solid #ccc">'+
                                 '<option value="12">1U</option>'+
                                 '<option value="2">2U</option>'+
                              '</select><br><br>'+
                              '<span>输入版本号:</span>'+
                              '<input type="text" id="newestVer" style="width: 200px;height: 24px; border: 1px solid #ccc">'+
                           '</div></div>';
            var cVerContent = '<div style="width:300px; height: 50px;"><div style="margin-top: 20px;margin-left: 8px; margin-right: 8px; text-algin: center;">'+
                              '<span>输入版本号:</span>'+
                              '<input type="text" id="newestVer" style="width: 200px;height: 24px; border: 1px solid #ccc">'+
                           '</div></div>';
              
            var isNewLoad = true;
            var pre_province = getQueryString('province');
@@ -372,9 +401,11 @@
                  ,{field:'stationid', title:'机房ID', align:'center'}
                  ,{field:'stationname', title:'机房名称', align:'center', width: 400}
                  ,{field:'fbsid', title:'设备ID', align:'center'}
                  ,{field:'fbsname', title:'设备名称', align:'center'}
                  ,{field:'updatestatus', title:'升级状态', align:'center'}
                  ,{field: 'version', title: '版本号', align: 'center'}
                  ,{field:'filename', title:'升级文件名', align:'center'}
                  ,{field:'status', title:'读写状态', align:'center'}
                  ,{field:'progress', title:'读/写进度', align: 'center', templet:'#upProgress'}
                  ,{field:'datapackage', title:'当前数据包', align:'center'}
                  ,{fixed: 'right', title:'操作', align:'center', toolbar: '#barDemo', width:100}
                ]]
@@ -404,8 +435,26 @@
                  updateList.push(data[i].fbsid);
               }
               
               // 打开面板设置升级设别的类型
               layer.open({
                  type: 1
                  ,title: '升级文件名/版本号'
                  ,content: cFilenameContent
                  ,fixed: true
                  ,resize: false
                  ,btn:['设置', '取消']
                  ,yes: function(index) {
                     var filename = $('#equipeTypeSel').val();
                     var newestVer = $('#newestVer').val();
                     var sysType = $('#sysType').val();
                     // 校验要更新的设备
                     checkStationState(updateList, data, filename, newestVer, sysType);
                     layer.close(index);
                  }
               });
               // 校验要更新的设备
               checkStationState(updateList, data);
               // checkStationState(updateList, data);
            });
            
            // 点击表格的toolbar
@@ -428,8 +477,24 @@
               var updateList = [data.fbsid];
               var allData = [data];
               
               // 校验要更新的设备
               checkStationState(updateList, allData);
               // 打开面板设置升级设别的类型
               layer.open({
                  type: 1
                  ,title: '升级文件名/版本号'
                  ,content: cFilenameContent
                  ,fixed: true
                  ,resize: false
                  ,btn:['设置', '取消']
                  ,yes: function(index) {
                     var newestVer = $('#newestVer').val();
                     var sysType = $('#sysType').val();
                     // 校验要更新的设备
                     checkStationState(updateList, allData, data.filename, newestVer, sysType);
                     layer.close(index);
                  }
               });
            }
            
            // 点击添加生成表格
@@ -486,17 +551,19 @@
                          var formaterData = formaterAddData(rs.data, allData);      //解析数据
                          if(formaterData.length) {
                             // 遍历formaterData
                             //console.log(formaterData);
                             for(var i=0; i<formaterData.length; i++) {
                                var _formaterData = formaterData[i];
                                var tmp = {};
                                tmp.stationid = _formaterData.StationId;      // 机房id
                                tmp.stationname = _formaterData.StationName;   // 机房名称
                                tmp.fbsid = _formaterData.FBSDeviceId;         // 设备id
                                tmp.fbsname = _formaterData.FBSDeviceName;      // 设备名称
                                tmp.filename = getFnameByVer(_formaterData.StationIp);      // 升级文件名称
                                tmp.updatestatusnum = 0;                  // 0 等待升级
                                tmp.updatestatus = '等待升级';                  // 升级状态
                                tmp.status = '写';                        // 读写状态
                                tmp.datapackage = 1;                     // 当前数据包
                                tmp.version = _formaterData.StationIp;         // 版本号
                                tmp.isNewAdd = true;
                                //console.log(tmp);
                                allData.push(tmp);
@@ -504,6 +571,7 @@
                             
                             // 生成表格数据
                           table.render(tOptions);
                           renderTblPorgess(allData);
                          }else {
                             layer.msg('没有要添加的内容!');
                          }
@@ -618,14 +686,17 @@
                          for(var i=0; i<rs.data.length; i++) {
                             var _data = rs.data[i];
                             var num = -1;
                             // 遍历现有的tblData
                             // 计算进度
                             var currentPer = getStrPercent(_data.dfu_data_blocknum, _data.dfu_data_blocklen, _data.dfu_file_len, _data.dfu_wr_stat);
                             updateTblPorgress(_data.dev_id, currentPer);
                             //console.log(currentPer);
                             // 遍历现有的tblData/根据表格的设别id对获取到值进行排序以便对应表格内容
                             for(var k=0; k<tblData.length;k++) {
                                var _tblData = tblData[k];
                                if(_tblData.fbsid == _data.dev_id) {
                                   num = k;
                                   break;
                                }
                             }
                             
                             if(num == -1) {
@@ -650,7 +721,7 @@
                             tmp.datapackage[num] = dfuData;
                          }
                          var pageTbl = $('#pageTbl');
                          //console.log(tmp);
                          // 更新表格内容
                          Object.keys(tmp).forEach(function(key) {
                             updateLayuiTblCol(pageTbl, key, tmp[key]);
@@ -687,8 +758,8 @@
            }
            
            
            //验证设备是否允许设备进行远程升级
            function checkStationState(temp, all){
            // 验证设备是否允许设备进行远程升级
            function checkStationState(temp, all, filename, newestVer, sysType){
               $.ajax({    
                    type: "post",             
                    url: "Fbs9100s_dfu_stateAction_action_judgeStation",            
@@ -700,13 +771,13 @@
                       //console.log(rs);
                       if(rs.code == 1) {
                          var data = rs.data;
                          var updateData = checkUpdating(data, all);
                          var errorUpdate = checkErrorUpdate(data, all);
                          $('#updateIframeData').data('update', updateData);            // 可更新的设备信息
                          $('#updateIframeData').data('errorUpdate', errorUpdate);   // 无法更新的设备信息
                          var updateData = checkUpdating(data, all, filename, newestVer, sysType);
                          $('#updateIframeData').data('update', updateData.good);            // 可更新的设备信息
                          $('#updateIframeData').data('errorUpdate', updateData.bad);   // 无法更新的设备信息
                          
                          //console.log(updateData);
                          // 判断是否有升级的设备
                          if(updateData.length == 0) {
                          if(updateData.good.length == 0) {
                             if(temp.length == 1) {
                                layer.msg('当前设备无法升级!');
                             }else {
@@ -720,27 +791,34 @@
                        layer.open({
                           type: 2,
                           title: '更新设备',
                           area: ['700px', '524px'],
                           area: ['960px', '524px'],
                           fixed: false, //不固定
                           maxmin: true,
                           content: 'iframe/batt-station-update.html',
                           btn: ['确认升级', '取消'],
                           yes: function(index, layero) {
                              var updateData = $('#updateIframeData').data('update');   // 获取可升级设备的信息
                              var goodUpdateData = $('#updateIframeData').data('update');   // 获取可升级设备的信息
                              // 根据可升级设备的信息构造查询条件
                              var updateList = [];
                              for(var i=0; i<updateData.length; i++) {
                              for(var i=0; i<goodUpdateData.length; i++) {
                                 var _data  = goodUpdateData[i];
                                 //var filename = getFnameByVer(_data.version);
                                 var _tmp = {
                                    dev_id: updateData[i].fbsid
                                    dev_id: _data.fbsid
                                    ,dfu_file: _data.filename
                                 };
                                 console.log(_data);
                                 // 添加到设备升级列表中
                                 updateList.push(_tmp);
                                 if(_data.filename && _data.filename.length != 0) {
                                    updateList.push(_tmp);
                                 }
                              }
                              //console.log(updateList);
                              //return;
                              // 关闭弹出面板
                              layer.close(index);
                              // console.log(updateList);
                              // 升级设备
                              updateBTSDevice(updateList);
                              //console.log(updateList);
@@ -762,34 +840,12 @@
            
            }
            
            // 从返回的可升级的设备中剔除正在升级的设备
            function checkUpdating(rsData, all) {
               var rs = [];
               // 遍历all
               for(var i=0; i<all.length; i++) {
                  var _all = all[i];
                  var isError = true;
                  for(var k=0; k<rsData.length; k++) {
                     var _rsData = rsData[k];
                     // 判断当前设备是否正在升级
                     if(_all.updatestatusnum == 1) {
                        isError = false;
                     }
                  }
                  // 根据isError判读是否是不可添加的机房
                  if(isError) {
                     rs.push(_all);
                  }
               }
               return rs;
            }
            // 获取无法升级的设备
            function checkErrorUpdate(rsData, all) {
               var rs = [];
            // 格式话升级的设备
            function checkUpdating(rsData, all, filename, newestVer, sysType) {
               var rs = {
                  good: []
                  ,bad: []
               };
               // 遍历all
               for(var i=0; i<all.length; i++) {
                  var _all = all[i];
@@ -799,15 +855,22 @@
                     
                     // 判断当前设备是否正在升级
                     if(_all.updatestatusnum != 1) {
                        if(_all.fbsid == _rsData.FBSDeviceId) {
                           isError = false;
                        if(_all.fbsid == _rsData.FBSDeviceId && _all.filename == filename) {
                           // 检测当前版本号是否为最新
                           var isNewstVer = checkNewestVer(newestVer, _all.version);
                           var isSysType = checkSysType(sysType, _all.version);
                           if(!isNewstVer && isSysType) {
                              isError = false;
                           }
                        }
                     }
                  }
                  
                  // 根据isError判读是否是不可添加的机房
                  if(isError) {
                     rs.push(_all);
                     rs.bad.push(_all);
                  }else {
                     rs.good.push(_all);
                  }
               }
               
@@ -859,7 +922,9 @@
                             tmp.fbsid = _data.dev_id;               // 设备id
                             tmp.fbsname = _data.fBSDeviceName;         // 设备名称
                             tmp.updatestatusnum = 1;               // 0 等待升级 1正在升级
                             tmp.updatestatus = '正在升级';               // 升级状态
                             tmp.version = _data.note;               // 版本号
                             tmp.filename = _data.dfu_file;            // 升级文件名称
                             tmp.updatestatus = '升级中';               // 升级状态
                             tmp.status = _data.dfu_wr_stat == 1?'写':_data.dfu_wr_stat == 2?'读':_data.dfu_wr_stat == 3?'完成':'';                     // 读写状态
                             tmp.datapackage = _data.dfu_data_blocknum;                  // 当前数据包
                             tmp.isNewAdd = false;
@@ -869,11 +934,100 @@
                          
                          // 更新表格
                          table.render(tOptions);
                          renderTblPorgess(allData);
                       }
                    }
                });
            }
            
            // 渲染进度条
            function renderTblPorgess(tblData) {
               // 遍历tblData根据fbsid渲染进度条
               for(var i=0; i<tblData.length; i++) {
                  var fbsid = tblData[i].fbsid;
                  // 渲染进度条
                  element.render('progress', 'upload'+fbsid);
               }
            }
            // 更新进度条
            function updateTblPorgress(fbsid, percent) {
               // 更新进度条
               element.progress('upload'+fbsid, percent);
            }
            // 计算进度
            function getStrPercent(current, blocklen, all, status) {
               var rs = '0%';
               if(all != 0) {
                  var num = Math.ceil(current*blocklen*100/all);
                  if(num>=100) {
                     num = status == 1?'写完成':'升级完成';
                  }
                  rs = num+'%';
               }
               return rs;
            }
            //console.log(getFnameByVer('D:8,V2.53.40'));
            // 根据版本号获取文件的名称
            function getFnameByVer(version) {
               var fileList = [
                  {
                     filename: 'avr_dfu.uc3'
                     ,pattern: /^.*\.24\.[0-9]*$/
                  }
                  ,{
                     filename: 'E51_DFU.SM5'
                     ,pattern: /^.*\.53\.[0-9]*$/
                  }
               ];
               // 遍历并获取filename
               var filename = undefined;
               for(var i=0; i<fileList.length; i++) {
                  var _fileList = fileList[i];
                  if(_fileList.pattern.test(version)) {
                     filename = _fileList.filename;
                  }
               }
               return filename;
            }
            //console.log(checkNewestVer('42', 'D:8,V2.53.44'));
            // 验证版本
            function checkNewestVer(ver ,version) {
               var pattern = '^.*\\.[0-9]*\\.([0-9]*)$';
               var reg = new RegExp(pattern);
               reg.test(version);
               // 判断当前版本是否为最新版本
               var isNewest = false;
               if(ver == RegExp.$1) {
                  isNewest = true;
               }
               return isNewest;
            }
            //checkSysType('12', 'D:8,V12.53.44');
            // 验证当前版本2v/12v
            function checkSysType(sys ,version) {
               var pattern = '^.*V([0-9]*)\\.[0-9]*\\.[0-9]*$';
               var reg = new RegExp(pattern);
               reg.test(version);
               //console.log(RegExp.$1);
               var rs = false;
               if(sys == RegExp.$1) {
                  rs = true;
               }
               // console.log(rs);
               return rs;
            }
           });
        </script>
    </body>