节能减排
This commit is contained in:
parent
d496cb81b4
commit
0097c0dc9f
|
|
@ -442,89 +442,90 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function deviceChartFn(data) {
|
function deviceChartFn(data) {
|
||||||
let deviceName = [];
|
let pieData = data.map(item => ({
|
||||||
let consumptionKwh = []
|
name: item.deviceName,
|
||||||
data.map(item => {
|
value: Number(parseFloat(item.consumptionKwh).toFixed(2))
|
||||||
deviceName.push(item.deviceName);
|
}));
|
||||||
consumptionKwh.push(Number(parseFloat(item.consumptionKwh).toFixed(2)));
|
|
||||||
})
|
|
||||||
deviceChart.setOption({
|
deviceChart.setOption({
|
||||||
animation: false,
|
animation: false,
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'item',
|
||||||
axisPointer: {type: 'shadow'}
|
formatter: '{b}: {c} kWh ({d}%)'
|
||||||
},
|
},
|
||||||
textStyle: {color: '#FFFFFF'},
|
textStyle: { color: '#FFFFFF' },
|
||||||
grid: {
|
legend: {
|
||||||
left: 30, // 增大左边距,给长标签留出空间
|
orient: 'vertical',
|
||||||
right: 30,
|
left: 'left',
|
||||||
top: 20,
|
textStyle: { color: '#FFFFFF' }
|
||||||
bottom: 30,
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
xAxis: {type: 'value'},
|
|
||||||
yAxis: {
|
|
||||||
type: 'category',
|
|
||||||
data: deviceName
|
|
||||||
},
|
},
|
||||||
series: [{
|
series: [{
|
||||||
type: 'bar',
|
name: '能耗占比',
|
||||||
data: consumptionKwh,
|
type: 'pie',
|
||||||
itemStyle: {color: '#008781'},
|
radius: '55%',
|
||||||
|
center: ['50%', '50%'],
|
||||||
|
data: pieData,
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
position: 'right',
|
formatter: '{b}: {d}%',
|
||||||
color: '#FFFFFF',
|
color: '#FFFFFF',
|
||||||
fontSize: 12,
|
fontSize: 12
|
||||||
formatter: '{c}'
|
},
|
||||||
|
emphasis: {
|
||||||
|
itemStyle: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function renewableUsedKwhFn(data) {
|
function renewableUsedKwhFn(data) {
|
||||||
let deviceName = [];
|
let pieData = data.map(item => ({
|
||||||
let renewableUsedKwh = []
|
name: item.deviceName,
|
||||||
data.map(item => {
|
value: Number(parseFloat(item.renewableUsedKwh).toFixed(2))
|
||||||
deviceName.push(item.deviceName);
|
}));
|
||||||
renewableUsedKwh.push(Number(parseFloat(item.renewableUsedKwh).toFixed(2)));
|
|
||||||
})
|
|
||||||
renewableUsedKwhChart.setOption({
|
renewableUsedKwhChart.setOption({
|
||||||
animation: false,
|
animation: false,
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'item',
|
||||||
axisPointer: {type: 'shadow'}
|
formatter: '{b}: {c} kWh ({d}%)'
|
||||||
},
|
},
|
||||||
textStyle: {color: '#FFFFFF'},
|
textStyle: { color: '#FFFFFF' },
|
||||||
grid: {
|
legend: {
|
||||||
left: 30, // 增大左边距,给长标签留出空间
|
orient: 'vertical',
|
||||||
right: 30,
|
left: 'left',
|
||||||
top: 20,
|
textStyle: { color: '#FFFFFF' }
|
||||||
bottom: 30,
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
xAxis: {type: 'value'},
|
|
||||||
yAxis: {
|
|
||||||
type: 'category',
|
|
||||||
data: deviceName
|
|
||||||
},
|
},
|
||||||
series: [{
|
series: [{
|
||||||
type: 'bar',
|
name: '可再生能源使用占比',
|
||||||
data: renewableUsedKwh,
|
type: 'pie',
|
||||||
itemStyle: {color: '#008781'},
|
radius: '55%',
|
||||||
|
center: ['50%', '50%'],
|
||||||
|
data: pieData,
|
||||||
label: {
|
label: {
|
||||||
show: true,
|
show: true,
|
||||||
position: 'right',
|
formatter: '{b}: {d}%',
|
||||||
color: '#FFFFFF',
|
color: '#FFFFFF',
|
||||||
fontSize: 12,
|
fontSize: 12
|
||||||
formatter: '{c}'
|
},
|
||||||
|
emphasis: {
|
||||||
|
itemStyle: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
window.addEventListener('resize', function () {
|
window.addEventListener('resize', function () {
|
||||||
trendChart.resize();
|
trendChart.resize();
|
||||||
deviceChart.resize();
|
deviceChart.resize();
|
||||||
|
|
|
||||||
|
|
@ -77,17 +77,124 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
const adviceMap = {
|
const device_anomaly_dict = {
|
||||||
'设备过载能耗': '检查设备运行负荷,适当分配工作任务,避免长时间高负荷运行。',
|
'塔吊': {
|
||||||
'能耗异常': '立即核查相关设备运行状态,排查是否存在故障或人为干预因素。',
|
'info': [
|
||||||
'轻微异常': '持续观察能耗变化,记录趋势并安排定期巡检。',
|
'使用频率略高,建议优化排班',
|
||||||
};
|
'短时间内作业密集,能耗轻微升高'
|
||||||
|
],
|
||||||
// 从 URL 获取参数
|
'warning': [
|
||||||
function getQueryParam(param) {
|
'高频率起吊任务持续 2 小时以上,能耗偏高',
|
||||||
const urlParams = new URLSearchParams(window.location.search);
|
'塔吊运转间隔过短,存在低效能耗'
|
||||||
return urlParams.get(param);
|
],
|
||||||
|
'danger': [
|
||||||
|
'连续运行超 6 小时,疑似空转或控制异常',
|
||||||
|
'起重电机功率突增,可能存在电控系统故障'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'照明系统': {
|
||||||
|
'info': [
|
||||||
|
'白天开启部分照明区域',
|
||||||
|
'光照充足时未自动关闭灯具'
|
||||||
|
],
|
||||||
|
'warning': [
|
||||||
|
'夜间全部区域照明常开,未启用感应控制',
|
||||||
|
'楼道、空置区域照明长时间亮灯'
|
||||||
|
],
|
||||||
|
'danger': [
|
||||||
|
'多区域电流突升,疑似电路故障',
|
||||||
|
'照明系统异常重启,功率波动剧烈'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'办公区': {
|
||||||
|
'info': [
|
||||||
|
'空调温度设置偏低,能耗轻微升高',
|
||||||
|
'部分办公设备下班后未关闭'
|
||||||
|
],
|
||||||
|
'warning': [
|
||||||
|
'下班后空调/电脑/灯具未关闭,持续耗电',
|
||||||
|
'节假日期间未检测到办公人员但设备照常运行'
|
||||||
|
],
|
||||||
|
'danger': [
|
||||||
|
'空调系统异常自启动,持续运行超 12 小时',
|
||||||
|
'存在非办公类大功率设备接入,能耗异常'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'其他': {
|
||||||
|
'info': [
|
||||||
|
'监控与通信设备正常运行,功耗平稳',
|
||||||
|
'传感器网络轻微功耗波动'
|
||||||
|
],
|
||||||
|
'warning': [
|
||||||
|
'通信模块频繁重连,导致功率上升',
|
||||||
|
'部分感知终端异常活跃,数据回传功耗偏高'
|
||||||
|
],
|
||||||
|
'danger': [
|
||||||
|
'关键设备死机重启,功耗异常升高',
|
||||||
|
'系统故障导致数据上传异常,持续过载运行'
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const device_energy_saving_suggestions = {
|
||||||
|
'塔吊': {
|
||||||
|
'info': [
|
||||||
|
'建议合理安排作业时间,避免频繁作业导致能耗升高。',
|
||||||
|
'调整作业密集时间,避免短时高负荷运转。'
|
||||||
|
],
|
||||||
|
'warning': [
|
||||||
|
'优化起吊任务调度,避免长时间高频运行。',
|
||||||
|
'增加运转间隔,减少低效能耗。'
|
||||||
|
],
|
||||||
|
'danger': [
|
||||||
|
'排查设备空转,及时修复控制异常。',
|
||||||
|
'检修起重电机电控系统,防止功率异常升高。'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'照明系统': {
|
||||||
|
'info': [
|
||||||
|
'根据自然光调整照明开启,避免白天浪费电力。',
|
||||||
|
'安装自动关灯装置,避免光照充足时灯具未关闭。'
|
||||||
|
],
|
||||||
|
'warning': [
|
||||||
|
'启用感应照明控制,避免夜间长期开灯。',
|
||||||
|
'关闭楼道及空置区域照明,减少无效耗电。'
|
||||||
|
],
|
||||||
|
'danger': [
|
||||||
|
'尽快检修电路,防止电流异常导致安全隐患。',
|
||||||
|
'升级控制系统,减少功率波动带来的损耗。'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'办公区': {
|
||||||
|
'info': [
|
||||||
|
'适当调节空调温度,减少不必要的能耗。',
|
||||||
|
'加强节能意识,下班关闭所有办公设备。'
|
||||||
|
],
|
||||||
|
'warning': [
|
||||||
|
'落实下班关闭设备制度,杜绝持续耗电。',
|
||||||
|
'节假日期间关闭空调及灯具,降低闲置能耗。'
|
||||||
|
],
|
||||||
|
'danger': [
|
||||||
|
'检修空调异常启动问题,防止长时间运行浪费。',
|
||||||
|
'禁止非办公大功率设备接入办公区。'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'其他': {
|
||||||
|
'info': [
|
||||||
|
'定期维护监控及通信设备,保持稳定功耗。',
|
||||||
|
'监控传感器网络,避免异常功耗波动。'
|
||||||
|
],
|
||||||
|
'warning': [
|
||||||
|
'修复通信模块故障,降低重连带来的能耗。',
|
||||||
|
'优化感知终端数据上传频率,减少功耗。'
|
||||||
|
],
|
||||||
|
'danger': [
|
||||||
|
'及时处理设备死机重启问题,避免异常功耗。',
|
||||||
|
'排查系统故障,防止持续过载运行。'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function setParams(data) {
|
function setParams(data) {
|
||||||
let item = JSON.parse(data);
|
let item = JSON.parse(data);
|
||||||
|
|
@ -96,18 +203,29 @@
|
||||||
document.getElementById('anomalyDesc').innerText = item.anomalyDesc;
|
document.getElementById('anomalyDesc').innerText = item.anomalyDesc;
|
||||||
document.getElementById('time-range').innerText = `${item.lastRecordDate.split(' ')[1]} - ${item.statDate.split(' ')[1]}`;
|
document.getElementById('time-range').innerText = `${item.lastRecordDate.split(' ')[1]} - ${item.statDate.split(' ')[1]}`;
|
||||||
|
|
||||||
|
// 先默认提示
|
||||||
|
let adviceText = '建议进一步检查设备状态或联系技术人员。';
|
||||||
|
|
||||||
// 根据异常类型填充建议措施
|
// 取设备、等级、描述
|
||||||
const advice = adviceMap[item.anomalyDesc] || '建议进一步检查设备状态或联系技术人员。';
|
let device = item.deviceName;
|
||||||
document.getElementById('advice').innerText = advice;
|
let level = item.anomalyLevel; // 必须是 info/warning/danger
|
||||||
|
let desc = item.anomalyDesc;
|
||||||
|
|
||||||
|
// 判断设备和等级是否存在对应数据
|
||||||
|
if (device_energy_saving_suggestions[device] && device_energy_saving_suggestions[device][level]) {
|
||||||
|
// 找到当前等级所有异常描述列表
|
||||||
|
let descList = device_anomaly_dict[device][level];
|
||||||
|
// 找到当前描述的索引
|
||||||
|
let idx = descList.indexOf(desc);
|
||||||
|
if (idx !== -1) {
|
||||||
|
// 根据索引取对应建议
|
||||||
|
adviceText = device_energy_saving_suggestions[device][level][idx];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('advice').innerText = adviceText;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 示例调用(正式使用时替换 data 参数)
|
|
||||||
// setParams(JSON.stringify({
|
|
||||||
// deviceName: "空调1号",
|
|
||||||
// statDate: "2025-07-24",
|
|
||||||
// anomalyDesc: "设备过载能耗"
|
|
||||||
// }));
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue