Merge branch 'main' of https://git.jsspisoft.com/ry-das
This commit is contained in:
commit
1922229261
@ -1,5 +1,6 @@
|
|||||||
package com.das.modules.cache.domain;
|
package com.das.modules.cache.domain;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,4 +33,14 @@ public class DeviceInfoCache {
|
|||||||
* 物模型ID
|
* 物模型ID
|
||||||
*/
|
*/
|
||||||
private Long iotModelId;
|
private Long iotModelId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 制造商
|
||||||
|
*/
|
||||||
|
private String madeinFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 型号规格
|
||||||
|
*/
|
||||||
|
private String model;
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,8 @@ public class EquipmentCacheImpl implements EquipmentCache {
|
|||||||
deviceInfoCache.setDeviceCode(equipment.getCode());
|
deviceInfoCache.setDeviceCode(equipment.getCode());
|
||||||
deviceInfoCache.setDeviceName(equipment.getName());
|
deviceInfoCache.setDeviceName(equipment.getName());
|
||||||
deviceInfoCache.setObjectType(equipment.getObjectType());
|
deviceInfoCache.setObjectType(equipment.getObjectType());
|
||||||
|
deviceInfoCache.setModel(equipment.getModel());
|
||||||
|
deviceInfoCache.setMadeinFactory(equipment.getMadeinFactory());
|
||||||
deviceInfoCache.setParentDeviceId(equipment.getParentEquipmentId());
|
deviceInfoCache.setParentDeviceId(equipment.getParentEquipmentId());
|
||||||
deviceInfoCache.setIotModelId(equipment.getIotModelId());
|
deviceInfoCache.setIotModelId(equipment.getIotModelId());
|
||||||
deviceInfoCaches.add(deviceInfoCache);
|
deviceInfoCaches.add(deviceInfoCache);
|
||||||
@ -75,6 +77,8 @@ public class EquipmentCacheImpl implements EquipmentCache {
|
|||||||
if (equipment != null) {
|
if (equipment != null) {
|
||||||
DeviceInfoCache deviceInfoCache = new DeviceInfoCache();
|
DeviceInfoCache deviceInfoCache = new DeviceInfoCache();
|
||||||
deviceInfoCache.setDeviceId(equipment.getId());
|
deviceInfoCache.setDeviceId(equipment.getId());
|
||||||
|
deviceInfoCache.setMadeinFactory(equipment.getMadeinFactory());
|
||||||
|
deviceInfoCache.setModel(equipment.getModel());
|
||||||
deviceInfoCache.setDeviceCode(equipment.getCode());
|
deviceInfoCache.setDeviceCode(equipment.getCode());
|
||||||
deviceInfoCache.setDeviceName(equipment.getName());
|
deviceInfoCache.setDeviceName(equipment.getName());
|
||||||
deviceInfoCache.setObjectType(equipment.getObjectType());
|
deviceInfoCache.setObjectType(equipment.getObjectType());
|
||||||
|
@ -30,4 +30,10 @@ public class DeviceEventInfo {
|
|||||||
private String deviceCode;
|
private String deviceCode;
|
||||||
|
|
||||||
private String deviceName;
|
private String deviceName;
|
||||||
|
|
||||||
|
private String model;
|
||||||
|
|
||||||
|
private String madeinFactory;
|
||||||
|
|
||||||
|
private Integer firstTriggeredCode;
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package com.das.modules.data.service;
|
package com.das.modules.data.service;
|
||||||
|
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.das.common.utils.PageDataInfo;
|
import com.das.common.utils.PageDataInfo;
|
||||||
|
import com.das.modules.cache.domain.DeviceInfoCache;
|
||||||
|
import com.das.modules.cache.service.CacheService;
|
||||||
import com.das.modules.data.domain.DeviceEventInfo;
|
import com.das.modules.data.domain.DeviceEventInfo;
|
||||||
import com.das.modules.data.domain.RTValue;
|
import com.das.modules.data.domain.RTValue;
|
||||||
import com.das.modules.equipment.domain.vo.IotModelFieldVo;
|
import com.das.modules.equipment.domain.vo.IotModelFieldVo;
|
||||||
@ -12,6 +15,7 @@ import com.zaxxer.hikari.HikariConfig;
|
|||||||
import com.zaxxer.hikari.HikariDataSource;
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
import jakarta.annotation.PreDestroy;
|
import jakarta.annotation.PreDestroy;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.scheduling.annotation.EnableAsync;
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
@ -45,6 +49,8 @@ public class TDEngineService {
|
|||||||
@Value("${tdengine.batch-size:10000}")
|
@Value("${tdengine.batch-size:10000}")
|
||||||
private int batchSize;
|
private int batchSize;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CacheService cacheService;
|
||||||
public void init() {
|
public void init() {
|
||||||
if (hikariDataSource == null) {
|
if (hikariDataSource == null) {
|
||||||
HikariConfig config = new HikariConfig();
|
HikariConfig config = new HikariConfig();
|
||||||
@ -256,7 +262,7 @@ public class TDEngineService {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//初始化event_info
|
//初始化event_info
|
||||||
String eventInfo = "create stable IF NOT EXISTS event_info (event_time timestamp,event_id bigint primary key,attributecode varchar(64),event_type tinyint,event_level tinyint,event_text varchar(256),confirmed tinyint,confirm_account varchar(32),confirm_time timestamp) tags (device_id bigint,device_code varchar(64),device_name varchar(192))";
|
String eventInfo = "create stable IF NOT EXISTS event_info (event_time timestamp,event_id bigint primary key,attributecode varchar(64),event_type tinyint,event_level tinyint,event_text varchar(256),confirmed tinyint,confirm_account varchar(32),confirm_time timestamp,first_triggered_code INTEGER) tags (device_id bigint,device_code varchar(64),device_name varchar(192))";
|
||||||
try {
|
try {
|
||||||
pstmt.executeUpdate(eventInfo);
|
pstmt.executeUpdate(eventInfo);
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
@ -414,6 +420,8 @@ public class TDEngineService {
|
|||||||
sb.append(dv.getConfirmAccount());
|
sb.append(dv.getConfirmAccount());
|
||||||
sb.append(",");
|
sb.append(",");
|
||||||
sb.append(dv.getConfirmTime());
|
sb.append(dv.getConfirmTime());
|
||||||
|
sb.append(",");
|
||||||
|
sb.append(dv.getFirstTriggeredCode());
|
||||||
sb.append(")");
|
sb.append(")");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -833,7 +841,7 @@ public class TDEngineService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PageDataInfo<DeviceEventInfo> queryEvent(Integer eventLevel, Long startTime, Long endTime, List<String> deviceCodeList, Integer pageSize, Integer offset, Integer limit) {
|
public PageDataInfo<DeviceEventInfo> queryEvent(Integer eventLevel, Long startTime, Long endTime, List<String> deviceCodeList, Integer pageSize, Integer offset, Integer limit,Integer firstTriggeredCode) {
|
||||||
List<DeviceEventInfo> result = new ArrayList<>();
|
List<DeviceEventInfo> result = new ArrayList<>();
|
||||||
StringBuffer sb = new StringBuffer(2048);
|
StringBuffer sb = new StringBuffer(2048);
|
||||||
Integer total = 0;
|
Integer total = 0;
|
||||||
@ -842,6 +850,9 @@ public class TDEngineService {
|
|||||||
if (eventLevel != null) {
|
if (eventLevel != null) {
|
||||||
sb.append(String.format(" and t.event_level = %d", eventLevel));
|
sb.append(String.format(" and t.event_level = %d", eventLevel));
|
||||||
}
|
}
|
||||||
|
if (firstTriggeredCode != null){
|
||||||
|
sb.append(String.format(" and t.first_triggered_code = %d", firstTriggeredCode));
|
||||||
|
}
|
||||||
if (!CollectionUtils.isEmpty(deviceCodeList)) {
|
if (!CollectionUtils.isEmpty(deviceCodeList)) {
|
||||||
sb.append(" and t.device_code in (");
|
sb.append(" and t.device_code in (");
|
||||||
for (int i = 0; i < deviceCodeList.size(); i++) {
|
for (int i = 0; i < deviceCodeList.size(); i++) {
|
||||||
@ -864,7 +875,7 @@ public class TDEngineService {
|
|||||||
}
|
}
|
||||||
if (pageSize != null) {
|
if (pageSize != null) {
|
||||||
sb.append(" desc limit ").append(offset).append(",").append(pageSize);
|
sb.append(" desc limit ").append(offset).append(",").append(pageSize);
|
||||||
total = getEventCount(eventLevel, startTime, endTime, deviceCodeList);
|
total = getEventCount(eventLevel, startTime, endTime, deviceCodeList,firstTriggeredCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.debug(sb.toString());
|
log.debug(sb.toString());
|
||||||
@ -884,7 +895,11 @@ public class TDEngineService {
|
|||||||
deviceEventInfo.setConfirmTime(rs.getLong("confirm_time"));
|
deviceEventInfo.setConfirmTime(rs.getLong("confirm_time"));
|
||||||
deviceEventInfo.setDeviceCode(rs.getString("device_code"));
|
deviceEventInfo.setDeviceCode(rs.getString("device_code"));
|
||||||
deviceEventInfo.setDeviceId(rs.getString("device_id"));
|
deviceEventInfo.setDeviceId(rs.getString("device_id"));
|
||||||
|
DeviceInfoCache deviceInfoCache = cacheService.getEquipmentCache().getDeviceInfoCacheById(rs.getLong("device_id"));
|
||||||
deviceEventInfo.setDeviceName(rs.getString("device_name"));
|
deviceEventInfo.setDeviceName(rs.getString("device_name"));
|
||||||
|
deviceEventInfo.setFirstTriggeredCode(ObjectUtil.isEmpty(rs.getString("first_triggered_code")) ? null : Integer.valueOf(rs.getString("first_triggered_code")));
|
||||||
|
deviceEventInfo.setMadeinFactory(deviceInfoCache.getMadeinFactory());
|
||||||
|
deviceEventInfo.setModel(deviceInfoCache.getModel());
|
||||||
result.add(deviceEventInfo);
|
result.add(deviceEventInfo);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -894,13 +909,16 @@ public class TDEngineService {
|
|||||||
return PageDataInfo.build(result, total);
|
return PageDataInfo.build(result, total);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Integer getEventCount(Integer eventLevel, Long startTime, Long endTime, List<String> deviceCodeList) {
|
private Integer getEventCount(Integer eventLevel, Long startTime, Long endTime, List<String> deviceCodeList,Integer firstTriggeredCode) {
|
||||||
StringBuffer sb = new StringBuffer(2048);
|
StringBuffer sb = new StringBuffer(2048);
|
||||||
sb.append("select count(t.*) as total from event_info t where ");
|
sb.append("select count(t.*) as total from event_info t where ");
|
||||||
sb.append(String.format(" t.event_time >= %d and t.event_time < %d", startTime, endTime));
|
sb.append(String.format(" t.event_time >= %d and t.event_time < %d", startTime, endTime));
|
||||||
if (eventLevel != null) {
|
if (eventLevel != null) {
|
||||||
sb.append(String.format(" and t.event_level = %d", eventLevel));
|
sb.append(String.format(" and t.event_level = %d", eventLevel));
|
||||||
}
|
}
|
||||||
|
if (firstTriggeredCode != null){
|
||||||
|
sb.append(String.format(" and t.first_triggered_code = %d", firstTriggeredCode));
|
||||||
|
}
|
||||||
if (!CollectionUtils.isEmpty(deviceCodeList)) {
|
if (!CollectionUtils.isEmpty(deviceCodeList)) {
|
||||||
sb.append(" and t.device_code in (");
|
sb.append(" and t.device_code in (");
|
||||||
for (int i = 0; i < deviceCodeList.size(); i++) {
|
for (int i = 0; i < deviceCodeList.size(); i++) {
|
||||||
|
@ -45,4 +45,9 @@ public class EventQueryParam
|
|||||||
* pageSize
|
* pageSize
|
||||||
*/
|
*/
|
||||||
private Integer pageSize;
|
private Integer pageSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首次故障码
|
||||||
|
*/
|
||||||
|
private Integer firstTriggeredCode;
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ public class EventServiceImpl implements EventService {
|
|||||||
if (param.getPageNum() != null) {
|
if (param.getPageNum() != null) {
|
||||||
offset = (param.getPageNum() - 1) * param.getPageSize();
|
offset = (param.getPageNum() - 1) * param.getPageSize();
|
||||||
}
|
}
|
||||||
PageDataInfo<DeviceEventInfo> deviceEventInfos = tdEngineService.queryEvent(param.getEventLevel(), param.getStartTime(), param.getEndTime(), param.getDeviceCode(), param.getPageSize(), offset, param.getLimit());
|
PageDataInfo<DeviceEventInfo> deviceEventInfos = tdEngineService.queryEvent(param.getEventLevel(), param.getStartTime(), param.getEndTime(), param.getDeviceCode(), param.getPageSize(), offset, param.getLimit(),param.getFirstTriggeredCode());
|
||||||
return deviceEventInfos;
|
return deviceEventInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,6 +358,7 @@ public class NodeMessageServiceImpl extends TextWebSocketHandler implements Node
|
|||||||
log.info("消息data转化deviceVo,{}", list);
|
log.info("消息data转化deviceVo,{}", list);
|
||||||
for (DeviceEventVo item : list) {
|
for (DeviceEventVo item : list) {
|
||||||
DeviceInfoCache deviceInfoCache = cacheService.getEquipmentCache().getDeviceInfoCacheById(Long.valueOf(item.getDeviceId()));
|
DeviceInfoCache deviceInfoCache = cacheService.getEquipmentCache().getDeviceInfoCacheById(Long.valueOf(item.getDeviceId()));
|
||||||
|
Integer firstTriggeredCode = adminRedisTemplate.get(String.format("RT:%s:%s", item.getDeviceId(), "FirstTriggeredCode".toLowerCase()));
|
||||||
DeviceEventInfo deviceEventInfo = new DeviceEventInfo();
|
DeviceEventInfo deviceEventInfo = new DeviceEventInfo();
|
||||||
deviceEventInfo.setEventTime(item.getEventTime());
|
deviceEventInfo.setEventTime(item.getEventTime());
|
||||||
deviceEventInfo.setEventId(IdWorker.getId());
|
deviceEventInfo.setEventId(IdWorker.getId());
|
||||||
@ -365,6 +366,7 @@ public class NodeMessageServiceImpl extends TextWebSocketHandler implements Node
|
|||||||
deviceEventInfo.setDeviceId(item.getDeviceId());
|
deviceEventInfo.setDeviceId(item.getDeviceId());
|
||||||
deviceEventInfo.setDeviceName(deviceInfoCache.getDeviceName());
|
deviceEventInfo.setDeviceName(deviceInfoCache.getDeviceName());
|
||||||
deviceEventInfo.setDeviceCode(deviceInfoCache.getDeviceCode());
|
deviceEventInfo.setDeviceCode(deviceInfoCache.getDeviceCode());
|
||||||
|
deviceEventInfo.setFirstTriggeredCode(firstTriggeredCode);
|
||||||
String eventType = getEventType(item.getEventType());
|
String eventType = getEventType(item.getEventType());
|
||||||
String model = dataService.deviceModelMap.get(item.getDeviceId());
|
String model = dataService.deviceModelMap.get(item.getDeviceId());
|
||||||
if (StringUtils.isEmpty(model)) {
|
if (StringUtils.isEmpty(model)) {
|
||||||
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
@ -40,6 +40,11 @@
|
|||||||
<el-table-column prop="eventTimeFormate" :label="AlarmsFieldsEnums['alarmTime']" align="center"> </el-table-column>
|
<el-table-column prop="eventTimeFormate" :label="AlarmsFieldsEnums['alarmTime']" align="center"> </el-table-column>
|
||||||
<el-table-column prop="deviceName" :label="AlarmsFieldsEnums['airBlowerName']" align="center"> </el-table-column>
|
<el-table-column prop="deviceName" :label="AlarmsFieldsEnums['airBlowerName']" align="center"> </el-table-column>
|
||||||
<el-table-column prop="deviceCode" :label="AlarmsFieldsEnums['airBlowerNumber']" align="center"> </el-table-column>
|
<el-table-column prop="deviceCode" :label="AlarmsFieldsEnums['airBlowerNumber']" align="center"> </el-table-column>
|
||||||
|
<el-table-column prop="codeDescriptions" :label="AlarmsFieldsEnums['deflautCode']" align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
<div class="tableColumnClick" @click="openDefalt(scope.row)">{{ scope.row.codeDescriptions }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="eventText" :label="AlarmsFieldsEnums['faultDescription']" align="center">
|
<el-table-column prop="eventText" :label="AlarmsFieldsEnums['faultDescription']" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span v-html="formatText(row.eventText)"></span>
|
<span v-html="formatText(row.eventText)"></span>
|
||||||
@ -81,13 +86,17 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { reactive, ref, onMounted } from 'vue'
|
import { reactive, ref, onMounted, computed } from 'vue'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
import { Search } from '@element-plus/icons-vue'
|
import { Search } from '@element-plus/icons-vue'
|
||||||
import { AlarmsFieldsEnums, AlarmsTableType, GetAlarmsTableParam } from './type'
|
import { AlarmsFieldsEnums, AlarmsTableType, GetAlarmsTableParam } from './type'
|
||||||
import { getAlarmListReq, eventComfirm } from '/@/api/backend/alarms/request'
|
import { getAlarmListReq, eventComfirm } from '/@/api/backend/alarms/request'
|
||||||
|
import { queryfaultCodeDict, theoreticalpowerCurveList } from '/@/api/backend/theoreticalpowerCurve/request'
|
||||||
import { equipList } from '/@/api/backend/realData/request'
|
import { equipList } from '/@/api/backend/realData/request'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
import { useAdminInfo } from '/@/stores/adminInfo'
|
import { useAdminInfo } from '/@/stores/adminInfo'
|
||||||
const adminInfo = useAdminInfo()
|
const adminInfo = useAdminInfo()
|
||||||
@ -194,29 +203,46 @@ const getcurrentPage = () => {
|
|||||||
getalarmsList()
|
getalarmsList()
|
||||||
}
|
}
|
||||||
|
|
||||||
const getalarmsList = () => {
|
const getalarmsList = async () => {
|
||||||
const transparams = searchalarms()
|
const transparams = searchalarms()
|
||||||
getAlarmListReq(transparams)
|
console.log('🚀 ~ getalarmsList ~ transparams:', transparams)
|
||||||
.then((res: any) => {
|
getAlarmListReq(transparams).then((res: any) => {
|
||||||
isLoading.value = false
|
isLoading.value = false
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
paginationOptions.total = res.total
|
paginationOptions.total = res.total
|
||||||
alarmsTableData.value = res.rows.map((item: any) => {
|
alarmsTableData.value = res.rows.map((item: any) => {
|
||||||
return {
|
const descriptions = descriptionMap.value[`${item.madeinfactory}_${item.model}`] || {}
|
||||||
...item,
|
console.log('🚀 ~ alarmsTableData.value=res.rows.map ~ descriptions:', descriptions)
|
||||||
eventTimeFormate: timestampToTime(item.eventTime),
|
|
||||||
}
|
return {
|
||||||
})
|
...item,
|
||||||
} else {
|
eventTimeFormate: timestampToTime(item.eventTime),
|
||||||
ElMessage.error(res.msg ?? '查询失败')
|
codeDescriptions: descriptions['firstTriggeredCode'] || '-',
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
} else {
|
||||||
isLoading.value = false
|
ElMessage.error(res.msg ?? '查询失败')
|
||||||
ElMessage.error(err?.response?.data?.msg ?? '查询失败')
|
}
|
||||||
})
|
})
|
||||||
|
// .catch((err) => {
|
||||||
|
// isLoading.value = false
|
||||||
|
// ElMessage.error(err ?? '查询失败')
|
||||||
|
// })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const descriptionMap = computed(() => {
|
||||||
|
const map: any = {}
|
||||||
|
Object.keys(faultCodeMap).forEach((item: any) => {
|
||||||
|
map[item] = faultCodeMap[item].reduce((acc: any, desc: any) => {
|
||||||
|
acc[desc.code] = desc.description
|
||||||
|
return acc
|
||||||
|
}, {})
|
||||||
|
})
|
||||||
|
console.log('🚀 ~ map[item.key]=item.value.reduce ~ map:', map)
|
||||||
|
|
||||||
|
return map
|
||||||
|
})
|
||||||
|
|
||||||
const formatText = (text: any) => {
|
const formatText = (text: any) => {
|
||||||
text = text.replace(/ 动作/g, '<span style="color:#a03b1d;"> 动作</span>')
|
text = text.replace(/ 动作/g, '<span style="color:#a03b1d;"> 动作</span>')
|
||||||
text = text.replace(/复归/g, '<span style="color:#39baf4;">复归</span>')
|
text = text.replace(/复归/g, '<span style="color:#39baf4;">复归</span>')
|
||||||
@ -295,6 +321,7 @@ const getDateRange = (type: 'week' | 'month') => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const faultCodeMap: any = {}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
equipList({
|
equipList({
|
||||||
// orgId: adminInfo.orgid,
|
// orgId: adminInfo.orgid,
|
||||||
@ -310,7 +337,49 @@ onMounted(() => {
|
|||||||
getalarmsList()
|
getalarmsList()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
theoreticalpowerCurveList()
|
||||||
|
.then((res: any) => {
|
||||||
|
if (res.code == 200) {
|
||||||
|
paginationOptions.total = res.total
|
||||||
|
res.rows.forEach((item: any, index: number) => {
|
||||||
|
getfaultCodeDict(item)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg ?? '查询失败')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
ElMessage.error(err?.response?.data?.msg ?? '查询失败')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const getfaultCodeDict = (data: any) => {
|
||||||
|
queryfaultCodeDict({ madeinfactory: data.madeinfactory, model: data.model }).then((res: any) => {
|
||||||
|
if (res.code == 200) {
|
||||||
|
const deflautList: any = []
|
||||||
|
res.data.forEach((item: any) => {
|
||||||
|
deflautList.push({
|
||||||
|
code: item.code,
|
||||||
|
description: item.description,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
faultCodeMap[`${data.madeinfactory}_${data.model}`] = deflautList
|
||||||
|
} else {
|
||||||
|
ElMessage.warning('查询失败')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const openDefalt = (row: any) => {
|
||||||
|
router.push({
|
||||||
|
name: 'faultRecord',
|
||||||
|
query: {
|
||||||
|
eventTime: row.eventTime,
|
||||||
|
deviceId: row.deviceId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@ -356,6 +425,11 @@ $paginationHeight: 32px;
|
|||||||
.tabsPart {
|
.tabsPart {
|
||||||
height: calc(100% - $paginationHeight);
|
height: calc(100% - $paginationHeight);
|
||||||
padding-bottom: 5px;
|
padding-bottom: 5px;
|
||||||
|
.tableColumnClick {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: #00a4ff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
:deep(.el-tabs__content) {
|
:deep(.el-tabs__content) {
|
||||||
height: calc(100% - 55px);
|
height: calc(100% - 55px);
|
||||||
.el-tab-pane {
|
.el-tab-pane {
|
||||||
|
@ -36,4 +36,5 @@ export enum AlarmsFieldsEnums {
|
|||||||
'faultDescription' = '故障描述',
|
'faultDescription' = '故障描述',
|
||||||
'alarmGrade' = '报警等级',
|
'alarmGrade' = '报警等级',
|
||||||
'alarmType' = '报警类别',
|
'alarmType' = '报警类别',
|
||||||
|
'deflautCode' = '首触故障码',
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<div class="cardLabel">风机矩阵</div>
|
<div class="cardLabel">风机矩阵</div>
|
||||||
<div class="cardBtn">
|
<div class="cardBtn">
|
||||||
<el-radio-group v-model="overviewSlotData">
|
<el-radio-group v-model="overviewSlotData">
|
||||||
<el-radio value=" ">全部</el-radio>
|
<el-radio value="">全部</el-radio>
|
||||||
<el-radio value="一期">一期</el-radio>
|
<el-radio value="一期">一期</el-radio>
|
||||||
<el-radio value="二期">二期</el-radio>
|
<el-radio value="二期">二期</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
@ -69,7 +69,7 @@ let timer: any = null
|
|||||||
let myTable = ref<TableInstance>()
|
let myTable = ref<TableInstance>()
|
||||||
const windList=ref([])
|
const windList=ref([])
|
||||||
|
|
||||||
const overviewSlotData= ref('一期')
|
const overviewSlotData= ref('')
|
||||||
|
|
||||||
const realData = ref({
|
const realData = ref({
|
||||||
windFarmId: '',
|
windFarmId: '',
|
||||||
@ -205,8 +205,7 @@ const StatusListData = () => {
|
|||||||
getWindTurbineMatrixData(
|
getWindTurbineMatrixData(
|
||||||
{
|
{
|
||||||
objectType: 10002,
|
objectType: 10002,
|
||||||
/* belongProject: overviewSlotData.value,*/
|
belongProject: overviewSlotData.value,
|
||||||
belongProject: '',
|
|
||||||
attributesList: [
|
attributesList: [
|
||||||
'iwindspeed',
|
'iwindspeed',
|
||||||
'iturbineoperationmode',
|
'iturbineoperationmode',
|
||||||
@ -239,10 +238,10 @@ const StatusListData = () => {
|
|||||||
if (enumStore.keys.includes('FirstTriggeredCode')) {
|
if (enumStore.keys.includes('FirstTriggeredCode')) {
|
||||||
firsttriggeredcode = enumStore.data['FirstTriggeredCode'][firsttriggeredcode]
|
firsttriggeredcode = enumStore.data['FirstTriggeredCode'][firsttriggeredcode]
|
||||||
}
|
}
|
||||||
if (malFunctionKeys.includes('FirstTriggeredCode')) {
|
/*if (malFunctionKeys.includes('FirstTriggeredCode')) {
|
||||||
firsttriggeredcode = malFunctionEnums?.[firsttriggeredcode] ?? firsttriggeredcode
|
firsttriggeredcode = malFunctionEnums?.[firsttriggeredcode] ?? firsttriggeredcode
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
paramColorData.value.forEach((item, index) => {
|
paramColorData.value.forEach((item, index) => {
|
||||||
if (item.state == state) {
|
if (item.state == state) {
|
||||||
color = item.color
|
color = item.color
|
||||||
@ -360,7 +359,7 @@ const StatusListData = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
let malFunctionEnums: any = {}
|
let malFunctionEnums: any = {}
|
||||||
const getMalfunctionEnums = () => {
|
/*const getMalfunctionEnums = () => {
|
||||||
windList.value.forEach((item)=> {
|
windList.value.forEach((item)=> {
|
||||||
console.log({madeinfactory: item.madeinfactory, model: item.model })
|
console.log({madeinfactory: item.madeinfactory, model: item.model })
|
||||||
queryfaultCodeDict({madeinfactory: item.madeinfactory, model: item.model }).then((res) => {
|
queryfaultCodeDict({madeinfactory: item.madeinfactory, model: item.model }).then((res) => {
|
||||||
@ -376,7 +375,38 @@ const getMalfunctionEnums = () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
/*const requestedParams = new Set<string>();
|
||||||
|
|
||||||
|
const fetchData = async (item: any) => {
|
||||||
|
// 创建一个唯一的键来标识参数组合
|
||||||
|
const key = `${item.madeinFactory}-${item.model}`;
|
||||||
|
|
||||||
|
// 检查这个键是否已经在 Set 中
|
||||||
|
if (requestedParams.has(key)) {
|
||||||
|
console.log('Duplicate request detected, skipping...');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 将键添加到 Set 中
|
||||||
|
requestedParams.add(key);
|
||||||
|
|
||||||
|
try {
|
||||||
|
console.log({ madeinfactory: item.madeinFactory, model: item.model })
|
||||||
|
const response = await queryfaultCodeDict({ madeinfactory: item.madeinFactory, model: item.model });
|
||||||
|
if (response.code === 200) {
|
||||||
|
const data: any = {};
|
||||||
|
response.data.forEach((item: any) => {
|
||||||
|
data[item.code] = item.description;
|
||||||
|
});
|
||||||
|
malFunctionEnums = data;
|
||||||
|
} else {
|
||||||
|
console.warn('查询故障代码字典失败:', response.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('请求出错:', error);
|
||||||
|
}
|
||||||
|
};*/
|
||||||
|
|
||||||
|
|
||||||
let autoUpdateForSecondTimer: any = null
|
let autoUpdateForSecondTimer: any = null
|
||||||
@ -416,12 +446,13 @@ onMounted(() => {
|
|||||||
deviceCode.value.push(item.code)
|
deviceCode.value.push(item.code)
|
||||||
})
|
})
|
||||||
windList.value=res.data.map((item: any) => {
|
windList.value=res.data.map((item: any) => {
|
||||||
|
//fetchData(item)
|
||||||
return {
|
return {
|
||||||
madeinfactory:item.madeinFactory,
|
madeinfactory:item.madeinFactory,
|
||||||
model: item.model ?? '-',
|
model: item.model ?? '-',
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
getMalfunctionEnums()
|
//getMalfunctionEnums()
|
||||||
})
|
})
|
||||||
|
|
||||||
overviewList()
|
overviewList()
|
||||||
|
@ -69,12 +69,12 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
<div class="fanlist-bottom">
|
<div class="fanlist-bottom">
|
||||||
<span :style="item.attributeMap.locked == 1 ? 'max-width:120px;' : 'max-width:150px;'">
|
|
||||||
{{ item.attributeMap.firsttriggeredcode }}
|
|
||||||
</span>
|
|
||||||
<!-- <span :style="item.attributeMap.locked == 1 ? 'max-width:120px;' : 'max-width:150px;'">
|
<!-- <span :style="item.attributeMap.locked == 1 ? 'max-width:120px;' : 'max-width:150px;'">
|
||||||
{{ getFaultDescription(item) }}
|
{{ item.attributeMap.firsttriggeredcode }}
|
||||||
</span>-->
|
</span>-->
|
||||||
|
<span :style="item.attributeMap.locked == 1 ? 'max-width:120px;' : 'max-width:150px;'">
|
||||||
|
{{ getFaultDescription(item) }}
|
||||||
|
</span>
|
||||||
<!-- <el-tag class="tag-panel is-danger">已锁定</el-tag>-->
|
<!-- <el-tag class="tag-panel is-danger">已锁定</el-tag>-->
|
||||||
<el-tag v-if="item.attributeMap.locked === 1" class="tag-panel is-danger">已锁定</el-tag>
|
<el-tag v-if="item.attributeMap.locked === 1" class="tag-panel is-danger">已锁定</el-tag>
|
||||||
</div>
|
</div>
|
||||||
@ -411,8 +411,9 @@ const getSafeImagePath = (item, type) => {
|
|||||||
return imagePath;
|
return imagePath;
|
||||||
|
|
||||||
};
|
};
|
||||||
/*const getFaultDescription=(item)=>{
|
const getFaultDescription=(item)=>{
|
||||||
getMalfunctionEnums(item)
|
//getMalfunctionEnums(item)
|
||||||
|
fetchData(item)
|
||||||
let firsttriggeredcode=item.attributeMap.firsttriggeredcode
|
let firsttriggeredcode=item.attributeMap.firsttriggeredcode
|
||||||
if (malFunctionKeys.includes('FirstTriggeredCode')) {
|
if (malFunctionKeys.includes('FirstTriggeredCode')) {
|
||||||
firsttriggeredcode = malFunctionEnums?.[firsttriggeredcode] ?? firsttriggeredcode
|
firsttriggeredcode = malFunctionEnums?.[firsttriggeredcode] ?? firsttriggeredcode
|
||||||
@ -421,7 +422,7 @@ const getSafeImagePath = (item, type) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let malFunctionEnums: any = {}
|
let malFunctionEnums: any = {}
|
||||||
const getMalfunctionEnums = (item) => {
|
/*const getMalfunctionEnums = (item) => {
|
||||||
/!*queryfaultCodeDict({ madeinfactory: item!.madeinFactory, model: item!.model }).then((res) => {*!/
|
/!*queryfaultCodeDict({ madeinfactory: item!.madeinFactory, model: item!.model }).then((res) => {*!/
|
||||||
queryfaultCodeDict({ madeinfactory: '广东明阳风电', model: 'MY1.5/89' }).then((res) => {
|
queryfaultCodeDict({ madeinfactory: '广东明阳风电', model: 'MY1.5/89' }).then((res) => {
|
||||||
if (res.code == 200) {
|
if (res.code == 200) {
|
||||||
@ -435,6 +436,34 @@ const getMalfunctionEnums = (item) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
const requestedParams = new Set<string>();
|
||||||
|
|
||||||
|
const fetchData = async (item: any) => {
|
||||||
|
const key = `${item.madeinFactory}-${item.model}`;
|
||||||
|
|
||||||
|
if (requestedParams.has(key)) {
|
||||||
|
console.log('Duplicate request detected, skipping...');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
requestedParams.add(key);
|
||||||
|
|
||||||
|
try {
|
||||||
|
malFunctionEnums={}
|
||||||
|
const response = await queryfaultCodeDict({ madeinfactory: item.madeinFactory, model: item.model });
|
||||||
|
if (response.code === 200) {
|
||||||
|
const data: any = {};
|
||||||
|
response.data.forEach((item: any) => {
|
||||||
|
data[item.code] = item.description;
|
||||||
|
});
|
||||||
|
malFunctionEnums = data;
|
||||||
|
} else {
|
||||||
|
console.warn('查询故障代码字典失败:', response.message);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('请求出错:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
@ -194,6 +194,9 @@ import { equipList } from '/@/api/backend/temperature/request'
|
|||||||
import * as echarts from 'echarts'
|
import * as echarts from 'echarts'
|
||||||
import { tableItemData } from './type'
|
import { tableItemData } from './type'
|
||||||
import ContextMenu from '/@/views/backend/auth/model/contextMenu.vue'
|
import ContextMenu from '/@/views/backend/auth/model/contextMenu.vue'
|
||||||
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
children: 'children',
|
children: 'children',
|
||||||
@ -310,11 +313,14 @@ const getTreeDataList = () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const initDatestart = route.query.eventTime ? dayjs(Number(route.query.eventTime)) : dayjs().startOf('month')
|
||||||
|
const initDateend = route.query.eventTime ? dayjs(Number(route.query.eventTime)) : dayjs()
|
||||||
|
|
||||||
const searchData = reactive<{ fileName: ''; date: Date[] }>({
|
const searchData = reactive<{ fileName: ''; date: Date[] }>({
|
||||||
fileName: '',
|
fileName: '',
|
||||||
date: [dayjs().startOf('month').toDate(), dayjs().toDate()],
|
date: [initDatestart.toDate(), initDateend.toDate()],
|
||||||
})
|
})
|
||||||
|
|
||||||
const shortcuts = [
|
const shortcuts = [
|
||||||
{
|
{
|
||||||
text: '本月',
|
text: '本月',
|
||||||
@ -368,6 +374,7 @@ const getListForAirBlower = () => {
|
|||||||
startTime: dayjs(searchData.date[0]).format('YYYY-MM-DD'),
|
startTime: dayjs(searchData.date[0]).format('YYYY-MM-DD'),
|
||||||
endTime: dayjs(searchData.date[1]).format('YYYY-MM-DD'),
|
endTime: dayjs(searchData.date[1]).format('YYYY-MM-DD'),
|
||||||
}
|
}
|
||||||
|
console.log('🚀 ~ getListForAirBlower ~ data:', data)
|
||||||
|
|
||||||
if (activeName.value === 'malFunction') {
|
if (activeName.value === 'malFunction') {
|
||||||
getMalFunctionListReq(data).then((res) => {
|
getMalFunctionListReq(data).then((res) => {
|
||||||
@ -862,8 +869,9 @@ const checkTab = () => {
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getTreeDataList().then((data: any) => {
|
getTreeDataList().then((data: any) => {
|
||||||
treeRef.value && treeRef.value.setCurrentKey(data.id, true)
|
const queryId = route.query.deviceId ?? data.id
|
||||||
curTreeData.value = data
|
treeRef.value && treeRef.value.setCurrentKey(queryId, true)
|
||||||
|
curTreeData.value = treeRef.value?.getCurrentNode()
|
||||||
getListForAirBlower()
|
getListForAirBlower()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<el-table-column label="操作" width="400" align="center">
|
<el-table-column label="操作" width="400" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div class="tableOperate">
|
<div class="tableOperate">
|
||||||
<a @click="viewDetails(scope.row)">查看 </a>
|
<a @click="viewDetails(scope.row)">编辑 </a>
|
||||||
<a @click="deleteDetails(scope.row)">删除</a>
|
<a @click="deleteDetails(scope.row)">删除</a>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -2,5 +2,5 @@ export enum theoreticalEnums {
|
|||||||
'index' = '序号',
|
'index' = '序号',
|
||||||
'madeinfactory' = '生产厂家',
|
'madeinfactory' = '生产厂家',
|
||||||
'model' = '规格型号',
|
'model' = '规格型号',
|
||||||
'nominalCapacity' = '额度容量MW',
|
'nominalCapacity' = '额定容量MW',
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user