hdw
2019-01-08 535709f818914fcadade908675968425698ba6de
电池参数批量设置 修改
2个文件已修改
379 ■■■■■ 已修改文件
gx_tieta/WebRoot/bat-set-test.jsp 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gx_tieta/WebRoot/pages/js/mylayui.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gx_tieta/WebRoot/bat-set-test.jsp
@@ -68,7 +68,6 @@
                             <td>区/县</td>                        <!-- 市 -->
                            <td><s:text name="Computer_name"/></td>                            <!-- 机房名称 -->
                            <td>系统类型</td>
                        </tr>
                        <tr>
                            <td>
@@ -163,7 +162,7 @@
                        </div>
                        <button class="layui-btn layui-btn-sm mrl8" id="batchAdd"><i class="fa fa-plus mrr8"></i>添加设备</button>
                        <button class="layui-btn layui-btn-sm" id="sysSet">批量设置电池参数</button>
                        <button class="layui-btn layui-btn-sm" id="batchRead">批量读取电池参数</button>
                    </div>
                </div>
                <!-- 表格内容 -->
@@ -195,15 +194,6 @@
                {{d.signalNum}}
            {{# }else{ }}
                ???
            {{# } }}
        </script>
        <script type="text/html" id="setStatus">
            {{# if(d.setCurr == 1){ }}
                <button class="layui-btn layui-btn-sm">设置成功</button>
            {{# }else if(d.setCurr == 2){ }}
                <button class="layui-btn layui-btn-sm layui-btn-danger">设置失败</button>
            {{# }else { }}
                <button class="layui-btn layui-btn-sm layui-btn-normal">未设置</button>
            {{# } }}
        </script>
        <!-- STD_CAP -->
@@ -286,7 +276,28 @@
                <span style="color: #FF0000;">{{ d.OnlineVolLow }}</span>
            {{# } }}
        </script>
        <!-- 操作栏 -->
        <script type="text/html" id="doThings">
            <button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="read">读取</button>
        </script>
        <!-- 读取状态 -->
        <script type="text/html" id="readStatus">
            {{# if(d.readStatus == 1){ }}
                <button class="layui-btn layui-btn-sm layui-btn-normal">读取成功</button>
            {{# }else { }}
                <button class="layui-btn layui-btn-sm layui-btn-danger">读取失败</button>
            {{# } }}
        </script>
        <!-- 设置状态 -->
        <script type="text/html" id="setStatus">
            {{# if(d.setStatus == 1){ }}
                <button class="layui-btn layui-btn-sm layui-btn-normal">设置成功</button>
            {{# }else if(d.setStatus == 2) { }}
                <button class="layui-btn layui-btn-sm layui-btn-danger">设置失败</button>
            {{# }else { }}
                <button class="layui-btn layui-btn-sm layui-btn-disabled">未设置</button>
            {{# } }}
        </script>
        <script type="text/javascript" src="js/jquery-1.8.3.js"></script>
        <script type="text/javascript" src="js/echarts.js"></script>
        <script type="text/javascript" src="jqueryui/jquery-ui.min.js"></script>
@@ -549,20 +560,21 @@
                        {type:'checkbox',fixed: 'left'}
                        ,{field:'dev_id', title:'设备ID', align:'center', width: 160}
                        ,{field:'StationName', title:'机房名称', align:'center', width: 470}
                        ,{field:'readStatus', title:'读取状态', templet: '#readStatus', align:'center', width: 120}
                        ,{field:'setStatus', title:'设置状态', templet: '#setStatus', align:'center', width: 120}
                        ,{field:'STD_CAP', title:'电池标称容量(AH)<i class="fa fa-refresh" title="同步电池标称容量参数"></i>', templet: '#STD_CAP', align:'center', width: 220}
                        ,{field:'STD_RES', title:'电池标称内阻(uΩ)<i class="fa fa-refresh" title="同步电池标称内阻参数"></i>', templet: '#STD_RES', align:'center', width: 220}
                        ,{field:'BattGroupCount', title:'电池组组数 <i class="fa fa-refresh" title="同步电池组组数参数"></i>', templet: '#BattGroupCount', align:'center', width: 180}
                        ,{field:'EachGroupBattCount', title:'每组电池单体数量 <i class="fa fa-refresh" title="同步每组电池单体数量参数"></i>', templet: '#EachGroupBattCount', align:'center', width: 220}
                        ,{field:'MonomerVol', title:'单体标称电压(V) <i class="fa fa-refresh" title="同步单体标称电压参数"></i>', templet: '#MonomerVol', align:'center', width: 220}
                        ,{field:'StationName9', title:'设备版本号', align:'center', width: 180}
                        ,{field:'GroupVol', title:'电池组端标称电压(V) <i class="fa fa-refresh" title="同步电池组端标称电压参数"></i>', templet: '#GroupVol', align:'center', width: 220}
                        ,{field:'GroupVol', title:'电池组端标称电压(V)', align:'center', width: 220}
                        ,{field:'BattTemp', title:'电池标称温度(℃) <i class="fa fa-refresh" title="同步电池标称温度参数"></i>', templet: '#BattTemp', align:'center', width: 220}
                        ,{field:'FloatChargeVol', title:'电池浮充电压阀值(V) <i class="fa fa-refresh" title="同步电池浮充电压阀值参数"></i>', templet: '#FloatChargeVol', align:'center', width: 220}
                        ,{field:'FloatChargeCurr', title:'电池浮充电流阀值(A) <i class="fa fa-refresh" title="同步电池浮充电流阀值参数"></i>', templet: '#FloatChargeCurr', align:'center', width: 220}
                        ,{field:'OnlineVolLow', title:'在线电压低阀值(V) <i class="fa fa-refresh" title="同步在线电压低阀值参数"></i>', templet: '#OnlineVolLow', align:'center', width: 220}
                        ,{field:'GroupConnType', title:'电池组连接类型', templet: '#GroupConnType', align:'center', width: 220}
                        ,{field:'doThings', fixed: 'right', title: '设置状态', toolbar: '#setStatus', align: 'center', width: 160}
                        ,{field:'doThings', fixed: 'right', title: '操作', toolbar: '#doThings', align: 'center', width: 120}
                    ]]
                    ,data:[]
                    ,limit: 10000
@@ -619,6 +631,250 @@
                    
                }
                
                // 表格工具栏操作
                table.on('tool(pageTbl)', function(obj){
                    var event = obj.event;
                    switch(event) {
                        case 'read':        // 读取参数
                            readBattParams(obj);
                        break;
                        case 'del':         // 删除
                            delItem(obj);
                        break;
                    }
                });
                // 电池参数的命名
                var battParam = GLOBAL.CMD.batt;
                // 读取单行放电参数
                function readBattParams(obj) {
                    var data = getCheckedData([obj.data]);
                    var keyIds= getKeyId([obj.data]);
                    // 构造查询条件
                    var tmp = {
                        num: 0                    // 默认为0
                        ,dev_id: data[0].dev_id    // 设备id
                        ,op_cmd: battParam.get    // 电池参数获取命令
                    };
                    // 请求读取参数
                    ajaxReadBattParams([tmp], keyIds);
                }
                // 点击批量读取按钮
                $('#batchRead').click(function() {
                    var checkStatus = table.checkStatus('pageTbl'); //idTest 即为基础参数 id 对应的值
                    var cData = checkStatus.data;
                    if(cData.length == 0) {
                        layer.msg('请选择要读取的机房!');
                        return;
                    }
                    // 请求后台
                    batchReadBattParams(cData);
                });
                //  批量读取参数
                function batchReadBattParams(cData) {
                    var data = getCheckedData(cData);
                    var keyIds= getKeyId(cData);
                    var tmps = [];
                    // 遍历data的值,构造查询条件
                    for(var i=0; i<data.length; i++) {
                        var _data = data[i];
                        var tmp = {
                            num: 0                    // 默认为0
                            ,dev_id: _data.dev_id    // 设备id
                            ,op_cmd: battParam.get    // 电池参数获取命令
                        };
                        tmps.push(tmp);
                    }
                    // 请求读取参数
                    ajaxReadBattParams(tmps, keyIds);
                }
                // 向后台发送请求读取参数
                function ajaxReadBattParams(params, keys) {
                    var loading = layer.load(1);
                    // 请求后台
                    $.ajax({
                        type: 'post'
                        ,async: true
                        ,url: 'Fbs9100_battparamAction_action_readPL'
                        ,data: 'json='+JSON.stringify(params)
                        ,dataType: 'json'
                        ,success: function(res) {
                            var rs = JSON.parse(res.result);
                            // 判断是否有数据
                            if(rs.code == 1) {
                                var data = rs.data;
                                formaterReadDatas(data, keys);
                            }else {
                                layer.msg('读取失败!请重新请求');
                            }
                        }
                        ,error: function() {
                            layer.msg('读取失败,请检查网络是否正常!')
                        }
                        ,complete: function() {
                            layer.close(loading);
                        }
                    });
                }
                // 处理读取结果集并返回指定结果集
                function formaterReadDatas(data, keys) {
                    var rs = [];
                    // 遍历data的值
                    for(var i=0; i<data.length; i++) {
                        var _data = data[i];
                        var _key_id = keys[i].key_id;        // 获取标识位
                        var _tmp = {};
                        _tmp.key_id = _key_id;                // 添加标识位
                        // 获取对应的tr的值
                        var layuiData = layuiTbl.getTr('key_id', _key_id);
                        // 判断是否存在对应的表格数据
                        if(layuiData.code == 1) {
                            // 判断是否读取成功
                            if(_data.num==1) {
                                var obj = _data.obj[0];
                                _tmp = contrastData(layuiData.data, _data.obj[0]);
                                _tmp.setStatus = 0;        // 设置参数状态初始化
                            }else {
                                _tmp.num = 0;
                                _tmp.readStatus = 0;
                                _tmp.setStatus = 0;        // 设置参数状态初始化
                            }
                        }else {
                            console.log(layuiData.msg);        // 输出读取失败原因
                            _tmp.num = 0;
                            _tmp.readStatus = 0;            // 读取失败
                            _tmp.setStatus = 0;        // 设置参数状态初始化
                        }
                        // 将数据添加到结果集中
                        rs.push(_tmp);
                    }
                    // 更新表格
                    layuiTbl.update('key_id', rs);
                }
                // 对比表格数据和读取到的数据
                function contrastData(tData, rData) {
                    var rs = {};
                    // 遍历rData的值
                    Object.keys(rData).forEach(function(key) {
                        // 判断是否为num
                        var _data = rData[key];
                        rs.key_id = tData.key_id;
                        if(key != 'num') {
                            rs[key] = _data;
                            // 获取其他辅助值
                            var bKey = key+'_b';
                            var boolKey = key+'_bool';
                            var bVal = tData[bKey];
                            if(bVal != undefined && bVal != _data) {
                                rs[boolKey] = false;
                            }
                        }
                    });
                    return rs;
                }
                // 删除表格的行
                function delItem(obj) {
                    // 弹出是否删除面板
                    layer.confirm('是否删除当前行', {icon: 2, title: '删除提示'}, function(index) {
                        layer.close(index);
                        layuiTbl.delTr(table.cache.pageTbl, obj);        // 删除指定的行
                    });
                }
                // 批量设置电池参数的按钮
                $('#sysSet').click(function() {
                    var checkStatus = table.checkStatus('pageTbl'); //idTest 即为基础参数 id 对应的值
                    var cData = checkStatus.data;
                    if(cData.length == 0) {
                        layer.msg('请选择要批量设置的机房!');
                        return;
                    }
                    var data = getCheckedData(cData);        // 格式化被选中行数据
                    var keyIds= getKeyId(cData);            // 获取标识符
                    var rsData = [];
                    for(var i=0; i<data.length; i++) {
                        var _data = data[i];
                        _data.op_cmd = battParam.set;
                        _data.num = 0;
                        rsData.push(_data);
                    }
                    // 批量设置
                    batchSetBattParams(rsData, keyIds);
                });
                // 批量设置放电参数
                function batchSetBattParams(params, keys) {
                    // 判断data的值是否为空
                    if(params.length == 0) {
                        layer.msg('请选择要批量设置的机房!');
                    }
                    // 判断是否批量设置
                    layer.confirm('是否确认批量设置电池参数', {icon: 3, title: '批量设置提醒'}, function(index) {
                        layer.close(index);
                        var loading = layer.load(1);
                        // 请求后台
                        $.ajax({
                            type: 'post'
                            ,async: true
                            ,url: 'Fbs9100_battparamAction_action_updatePro'
                            ,data: 'json='+JSON.stringify(params)
                            ,dataType: 'json'
                            ,success: function(res) {
                                var rs = JSON.parse(res.result);
                                var rsData= [];
                                if(rs.code == 1) {
                                    var data = rs.data;
                                    for(var i=0; i<data.length; i++) {
                                        var _data = data[i];
                                        var _key = keys[i];
                                        var _tmp = {
                                            key_id: _key.key_id
                                        };
                                        // 判断是否设置成功
                                        if(_data.num == 1) {
                                            _tmp.setStatus = 1;        // 设置成功
                                        }else {
                                            _tmp.setStatus = 2;        // 设置失败
                                        }
                                        rsData.push(_tmp);
                                    }
                                }else {
                                    for(var i=0; i<keys.length; i++) {
                                        var _key = keys[i];
                                        var _tmp = {
                                            key_id: _key.key_id
                                            ,setStatus: 2
                                        };
                                        rsData.push(_tmp);
                                    }
                                }
                                // 更新表格
                                layuiTbl.update('key_id', rsData);
                            }
                            ,complete: function() {
                                layer.close(loading);
                            }
                        });
                    });
                }
                
                
                // 点击添加电池组
@@ -647,7 +903,7 @@
                        ,dataType: 'json'
                        ,success: function(res) {
                            var rs = JSON.parse(res.result);
                            console.log(rs);
                            //console.log(rs);
                            var data = [];
                            if(rs.code == 1) {
                                data = rs.data;
@@ -656,9 +912,10 @@
                                layer.msg('没有可设置的电池组!');
                            }
                            tOptions.data = data;
                            console.log(data);
                            //console.log(data);
                               // 生成表格数据
                            table.render(tOptions);
                            layuiTbl.setCache(table.cache.pageTbl);
                        }
                        ,complete:function() {
                            layer.close(load);
@@ -707,7 +964,6 @@
                
                // 处理添加机房信息的结果
                function formatSearchData(data) {
                    console.log(data);
                    var rs = [];
                    // 遍历data的
                    for(var i=0; i<data.length; i++) {
@@ -716,12 +972,14 @@
                        var obj = _data.obj[0];
                        var tmp = {};
                        tmp.num = _data.num;                        // 判断是否读取成功
                        tmp.readStatus = _data.num;
                        tmp.key_id = i;
                        tmp.dev_id = obj.dev_id;                    // 设备ID
                        tmp.dev_ip = obj.dev_ip;                    // 设备IP
                        tmp.StationName = obj.StationName;            // 机房名称
                        tmp.GroupConnType = 0;                        // 电池组连接类型
                        tmp.StationName9 = _data.StationName9;        // 设备版本号
                        tmp.GroupVol = obj.GroupVol;                // 电池组端标称电压(V)
                        
                        tmp.STD_CAP = obj.STD_CAP;                    // 电池标称容量(AH)
@@ -770,6 +1028,49 @@
                function isNumEqual(num1, num2) {
                    return num1==num2;
                }
                // 获取被选中行的标识位
                function getKeyId(data) {
                    var rs = [];
                    // 遍历data的值
                    for(var i=0; i<data.length; i++) {
                        var _data = data[i];
                        var tmp = {};
                        tmp.key_id = _data.key_id;
                        rs.push(tmp);
                    }
                    return rs;
                }
                // 获取被选中的行的数据并处理返回指定的对象数组
                function getCheckedData(data) {
                    var rs = [];
                    // 处理数据
                    for(var i=0; i<data.length; i++) {
                        var _data = data[i];
                        var tmp = {};
                        tmp.num = _data.num;                                // 判断是否读取成功
                        tmp.dev_id = _data.dev_id;                            // 设备ID
                        tmp.dev_ip = _data.dev_ip;                            // 设备IP
                        tmp.StationName = _data.StationName;                // 机房名称
                        tmp.GroupConnType = 0;                                // 电池组连接类型
                        tmp.StationName9 = _data.StationName9;                // 设备版本号
                        tmp.GroupVol = _data.GroupVol;                        // 电池组端标称电压(V)
                        tmp.STD_CAP = _data.STD_CAP;                        // 电池标称容量(AH)
                        tmp.STD_RES = _data.STD_RES;                        // 电池标称内阻(uΩ)
                        tmp.BattGroupCount = _data.BattGroupCount;            // 电池组组数
                        tmp.EachGroupBattCount = _data.EachGroupBattCount;    // 每组电池单体数量
                        tmp.MonomerVol = _data.MonomerVol;                    // 单体标称电压(V)
                        tmp.BattTemp = _data.BattTemp;                        // 电池标称温度(℃)
                        tmp.FloatChargeVol = _data.FloatChargeVol;            // 电池浮充电压阀值(V)
                        tmp.FloatChargeCurr = _data.FloatChargeCurr;        // 电池浮充电流阀值(A)
                        tmp.OnlineVolLow = _data.OnlineVolLow;                // 在线电压低阀值(V)
                        // 将数据放到返回的结果集中
                        rs.push(tmp);
                    }
                    return rs;
                }
            });
        </script>
    </body>
gx_tieta/WebRoot/pages/js/mylayui.js
@@ -445,6 +445,23 @@
        }
        
    }
    ,update: function(field, data) {
        for(var i=0; i<data.length; i++) {
            var _data = data[i];
            if(field in _data) {                                // 判断对象中是否存在标识位
                var _field = _data[field];                        // 获取标识位的值
                var index = this.getIndex(field, _field);        // 获取对象所在的行
                if(index != undefined) {                        // 判断是否获取到了行号
                    this.updateTr(index, _data);                // 更新指定的行
                }else {
                    console.log(' 第'+i+'个对象没有对象的表格行');
                    console.log(_data);
                }
            }else {
                console.log(' 第'+i+'个对象的'+field+'主键标识不存在');
            }
        }
    }
    ,_getBodyTds: function(index) {
        var layuiTableView = $(this.ele).next('.layui-table-view');
        var layuiTableBody = layuiTableView.find('.layui-table-body .layui-table tbody');
@@ -485,13 +502,13 @@
        return false;
    }
    ,getIndex: function(field, value) {
    ,getIndex: function(field, value) {        // 获取tr的下标
        // 遍历cache的值
        var cache = this.cache;
        var index = undefined;
        for(var i=0; i<cache.length; i++) {
            var _cache = cache[i];
            console.log(_cache)
            // console.log(_cache)
            if(field in _cache && _cache[field] == value) {
                index = i;
                break;
@@ -500,6 +517,27 @@
        
        return index;
    }
    ,getTr: function(field, value) {        // 获取Tr的数据
        // 遍历cache的值
        var cache = this.cache;
        var rs = {
            code: 0
            ,data: {}
            ,msg: '获取标识位'+field+',值为'+value+'对应的tr的数据失败'
        };
        // 遍历cache的值
        for(var i=0; i<cache.length; i++) {
            var _cache = cache[i];
            if(field in _cache && _cache[field] == value) {
                rs.code = 1;
                rs.data = _cache;
                rs.msg = '获取标识位'+field+',值为'+value+'对应的tr的数据成功'
                break;
            }
        }
        return rs;
    }
    ,setCache: function(cache) {
        this.cache = cache;
    }