This commit is contained in:
高云鹏 2024-12-20 14:11:47 +08:00
commit 1922229261
15 changed files with 237 additions and 48 deletions

View File

@ -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;
} }

View File

@ -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());

View File

@ -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;
} }

View File

@ -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++) {

View File

@ -45,4 +45,9 @@ public class EventQueryParam
* pageSize * pageSize
*/ */
private Integer pageSize; private Integer pageSize;
/**
* 首次故障码
*/
private Integer firstTriggeredCode;
} }

View File

@ -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;
} }

View File

@ -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)) {

View File

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 KiB

View File

@ -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 {

View File

@ -36,4 +36,5 @@ export enum AlarmsFieldsEnums {
'faultDescription' = '故障描述', 'faultDescription' = '故障描述',
'alarmGrade' = '报警等级', 'alarmGrade' = '报警等级',
'alarmType' = '报警类别', 'alarmType' = '报警类别',
'deflautCode' = '首触故障码',
} }

View File

@ -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()

View File

@ -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">

View File

@ -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()
}) })
}) })

View File

@ -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>

View File

@ -2,5 +2,5 @@ export enum theoreticalEnums {
'index' = '序号', 'index' = '序号',
'madeinfactory' = '生产厂家', 'madeinfactory' = '生产厂家',
'model' = '规格型号', 'model' = '规格型号',
'nominalCapacity' = '额容量MW', 'nominalCapacity' = '额容量MW',
} }