| | |
| | | <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">
|
| | |
| | | <!-- 整体灰色遮罩层 -->
|
| | | <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>
|
| | |
| | | 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>系 统 类 型:</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');
|
| | |
| | | ,{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}
|
| | | ]]
|
| | |
| | | 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
|
| | |
| | | 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);
|
| | | }
|
| | | });
|
| | | |
| | | |
| | | }
|
| | |
|
| | | // 点击添加生成表格
|
| | |
| | | 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);
|
| | |
| | |
|
| | | // 生成表格数据
|
| | | table.render(tOptions);
|
| | | renderTblPorgess(allData);
|
| | | }else {
|
| | | layer.msg('没有要添加的内容!');
|
| | | }
|
| | |
| | | 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) {
|
| | |
| | | tmp.datapackage[num] = dfuData;
|
| | | }
|
| | | var pageTbl = $('#pageTbl');
|
| | | |
| | | //console.log(tmp);
|
| | | // 更新表格内容
|
| | | Object.keys(tmp).forEach(function(key) {
|
| | | updateLayuiTblCol(pageTbl, key, tmp[key]);
|
| | |
| | | }
|
| | |
|
| | |
|
| | | //验证设备是否允许设备进行远程升级
|
| | | function checkStationState(temp, all){
|
| | | // 验证设备是否允许设备进行远程升级
|
| | | function checkStationState(temp, all, filename, newestVer, sysType){
|
| | | $.ajax({
|
| | | type: "post",
|
| | | url: "Fbs9100s_dfu_stateAction_action_judgeStation",
|
| | |
| | | //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 {
|
| | |
| | | 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);
|
| | |
| | |
|
| | | }
|
| | |
|
| | | // 从返回的可升级的设备中剔除正在升级的设备
|
| | | 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];
|
| | |
| | |
|
| | | // 判断当前设备是否正在升级
|
| | | 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);
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | 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;
|
| | |
| | |
|
| | | // 更新表格
|
| | | 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>
|