diff --git a/das/src/main/java/com/das/modules/equipment/controller/SysEnumController.java b/das/src/main/java/com/das/modules/equipment/controller/SysEnumController.java index 9688a314..01a3c113 100644 --- a/das/src/main/java/com/das/modules/equipment/controller/SysEnumController.java +++ b/das/src/main/java/com/das/modules/equipment/controller/SysEnumController.java @@ -7,6 +7,7 @@ import com.das.common.result.R; import com.das.common.utils.PageDataInfo; import com.das.modules.equipment.domain.dto.SysEnumTypesDto; import com.das.modules.equipment.domain.dto.SysEnumValuesDto; +import com.das.modules.equipment.domain.vo.SysEnumDictVo; import com.das.modules.equipment.domain.vo.SysEnumTypesVo; import com.das.modules.equipment.domain.vo.SysEnumValuesVo; import com.das.modules.equipment.service.SysEnumService; @@ -153,6 +154,17 @@ public class SysEnumController { sysEnumService.deleteEnumTypes(sysEnumTypesDto); return R.success(); } + + /** + * 获取枚举字典 + * @return 枚举值字典 + */ + @PostMapping("/getEnumDict") + public R> getEnumDict() { + + List list = sysEnumService.getEnumDict(); + return R.success(list); + } } diff --git a/das/src/main/java/com/das/modules/equipment/domain/vo/SysEnumDictVo.java b/das/src/main/java/com/das/modules/equipment/domain/vo/SysEnumDictVo.java new file mode 100644 index 00000000..36bf656a --- /dev/null +++ b/das/src/main/java/com/das/modules/equipment/domain/vo/SysEnumDictVo.java @@ -0,0 +1,26 @@ +package com.das.modules.equipment.domain.vo; + +import lombok.Data; + +import java.util.Map; + +/** + * 枚举值值字典 + */ +@Data +public class SysEnumDictVo { + /** + * 枚举类型名称 + */ + private String name; + /** + * 枚举类型描述 + */ + private String description; + /** + * 枚举类型值集合 + * key: 枚举值 + * value: 枚举值描述 + */ + private Map enumValues; +} diff --git a/das/src/main/java/com/das/modules/equipment/domain/vo/SysEnumValuesVo.java b/das/src/main/java/com/das/modules/equipment/domain/vo/SysEnumValuesVo.java index ff847d10..c17675d9 100644 --- a/das/src/main/java/com/das/modules/equipment/domain/vo/SysEnumValuesVo.java +++ b/das/src/main/java/com/das/modules/equipment/domain/vo/SysEnumValuesVo.java @@ -5,9 +5,10 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serial; +import java.io.Serializable; @Data -public class SysEnumValuesVo { +public class SysEnumValuesVo implements Serializable { @Serial private static final long serialVersionUID = 1L; diff --git a/das/src/main/java/com/das/modules/equipment/service/SysEnumService.java b/das/src/main/java/com/das/modules/equipment/service/SysEnumService.java index 4ef225d8..0238b2f5 100644 --- a/das/src/main/java/com/das/modules/equipment/service/SysEnumService.java +++ b/das/src/main/java/com/das/modules/equipment/service/SysEnumService.java @@ -3,6 +3,7 @@ package com.das.modules.equipment.service; import com.das.common.utils.PageDataInfo; import com.das.modules.equipment.domain.dto.SysEnumTypesDto; import com.das.modules.equipment.domain.dto.SysEnumValuesDto; +import com.das.modules.equipment.domain.vo.SysEnumDictVo; import com.das.modules.equipment.domain.vo.SysEnumTypesVo; import com.das.modules.equipment.domain.vo.SysEnumValuesVo; @@ -26,5 +27,9 @@ public interface SysEnumService { void deleteEnumValues(SysEnumValuesDto sysEnumValuesDto); - + /** + * 获取系统枚举字典 + * @return + */ + List getEnumDict(); } diff --git a/das/src/main/java/com/das/modules/equipment/service/impl/SysEnumServiceImpl.java b/das/src/main/java/com/das/modules/equipment/service/impl/SysEnumServiceImpl.java index d77d5c8a..50e1bf81 100644 --- a/das/src/main/java/com/das/modules/equipment/service/impl/SysEnumServiceImpl.java +++ b/das/src/main/java/com/das/modules/equipment/service/impl/SysEnumServiceImpl.java @@ -3,6 +3,7 @@ package com.das.modules.equipment.service.impl; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.das.common.config.SessionUtil; import com.das.common.exceptions.ServiceException; import com.das.common.utils.BeanCopyUtils; @@ -11,6 +12,7 @@ import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.equipment.domain.dto.SysEnumTypesDto; import com.das.modules.equipment.domain.dto.SysEnumValuesDto; +import com.das.modules.equipment.domain.vo.SysEnumDictVo; import com.das.modules.equipment.domain.vo.SysEnumTypesVo; import com.das.modules.equipment.domain.vo.SysEnumValuesVo; import com.das.modules.equipment.entity.SysEnumTypes; @@ -24,6 +26,8 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class SysEnumServiceImpl implements SysEnumService { @@ -177,4 +181,29 @@ public class SysEnumServiceImpl implements SysEnumService { sysEnumValues.setIsActive(0); sysEnumValuesMapper.updateById(sysEnumValues); } + + /** + * 获取系统枚举字典 + * @return 枚举字典 + */ + @Override + public List getEnumDict() { + List dict = new ArrayList<>(); + + List list = queryEnumTypesList(); + for (SysEnumTypesVo sysEnumTypesVo : list) { + SysEnumDictVo sysEnumDictVo = new SysEnumDictVo(); + + sysEnumDictVo.setName(sysEnumTypesVo.getName()); + sysEnumDictVo.setDescription(sysEnumTypesVo.getDescription()); + + List values = sysEnumValuesMapper.selectList(Wrappers.lambdaQuery().eq(SysEnumValues::getEnumTypeId, sysEnumTypesVo.getId())); + Map map = values.stream().collect(Collectors.toMap(SysEnumValues::getValue, SysEnumValues::getDescription)); + sysEnumDictVo.setEnumValues(map); + + dict.add(sysEnumDictVo); + } + + return dict; + } } diff --git a/das/src/main/java/com/das/modules/page/controller/TemperatureDashboardController.java b/das/src/main/java/com/das/modules/page/controller/TemperatureDashboardController.java index d5baa7b9..47cec419 100644 --- a/das/src/main/java/com/das/modules/page/controller/TemperatureDashboardController.java +++ b/das/src/main/java/com/das/modules/page/controller/TemperatureDashboardController.java @@ -6,10 +6,7 @@ import com.das.modules.page.domian.vo.TemperatureLimitVo; import com.das.modules.page.service.TemperatureDashboardService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -25,7 +22,7 @@ public class TemperatureDashboardController { * @param device 设备{id:XXX} 只用到id即可 * @return */ - @GetMapping("/getTemperatureLimitByDeviceId") + @PostMapping("/getTemperatureLimitByDeviceId") public R> getTemperatureLimitByDeviceId(@RequestBody SysEquipmentDto device){ List windTurbinesPageVos = service.getTemperatureLimitByDeviceId(device.getId()); return R.success(windTurbinesPageVos); diff --git a/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java b/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java index a5a5aa34..41e4ef28 100644 --- a/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java +++ b/das/src/main/java/com/das/modules/page/service/impl/TemperatureDashboardServiceImpl.java @@ -29,8 +29,8 @@ public class TemperatureDashboardServiceImpl implements TemperatureDashboardServ String params = mapping.getParams(); if (params != null && !params.isEmpty()) { JSONObject json = JSONObject.parseObject(params); - String code = json.getString("code"); - String name = json.getString("name"); + String code = json.getString("measPointCode"); + String name = json.getString("measPointName"); Double limit1High=0.0; Double limit1Low=0.0; Double limit2High=0.0; diff --git a/docs/_sidebar.md b/docs/_sidebar.md index c69f9092..4e35fc68 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -8,7 +8,8 @@ - [人工操作接口](api/operation.md) - [页面访问接口](api/pages/) - [告警事件接口](api/event.md) - - [首页接口](api/pages/home.md) + - [首页](api/pages/home.md) + - [报表管理](api/pages/report.md) - [数据采集](datacollect/) - [系统部署](deploy/) - [Linux系统部署](deploy/linux.md) diff --git a/docs/api/enumPage.md b/docs/api/enumPage.md index 64213ff5..e589272c 100644 --- a/docs/api/enumPage.md +++ b/docs/api/enumPage.md @@ -12,6 +12,7 @@ | | 2.1.6删除枚举值 | /api/enum/deleteEnumValues | SYS_AUTHORITY_ID_DEVICE_MGR | | | 2.1.7修改枚举类型 | /api/enum/updateEnumTypes | SYS_AUTHORITY_ID_DEVICE_MGR | | | 2.1.8删除枚举类型 | /api/enum/deleteEnumTypes | SYS_AUTHORITY_ID_DEVICE_MGR | +| | 2.1.9获取枚举字典 | /api/enum/getEnumDict | | ### 2.1 枚举类型配置相关接口 @@ -387,4 +388,75 @@ POST 请求接口 "success": true, "msg": "操作成功" } -``` \ No newline at end of file +``` + +#### 2.1.9获取枚举字典 + +POST 请求接口 + +> /api/enum/getEnumDict + + +请求参数 + +无 + + +返回报文 + +```json +{ + "code": 200, + "success": true, + "data": [ + { + "name": "iTurbineOperationMode", + "description": "运行模式", + "enumValues": { + "0": "通讯断开", + "1": "紧急停机", + "2": "安全链停机", + "3": "199刹车停机", + "4": "198刹车停机" + } + }, + { + "name": "iBPLevel", + "description": "刹车等级", + "enumValues": { + "0": "无故障", + "30": "限功率", + "50": "降转速" + } + }, + { + "name": "iYPLevel", + "description": "偏航运行模式", + "enumValues": { + "0": "自动偏航", + "5": "自动解缆时待机", + "10": "自动解缆", + "20": "偏航节能" + } + }, + { + "name": "ActiveStatusCode", + "description": "故障代码", + "enumValues": { + "16842753": "01_01_001风机由于变桨系统安全链断开导致机组急停", + "16973825": "01_03_001风机轮毂温度>60℃", + "16973826": "01_03_002风机轮毂温度<-20℃", + "16973827": "01_03_003风机轮毂温度>50℃,24小时内允许出现3次" + } + } + ], + "msg": "操作成功" +} +``` +返参描述 + +| 参数名 | 参数类型 | 可选 | 描述 | +|-------------|------------------------|-----|--------| +| name | String | 否 | 枚举类型名称 | +| description | String | 否 | 枚举类型描述 | +| enumValues | Map map | 否 | 枚举类型值集合 | diff --git a/ui/dasadmin/src/api/backend/temperature/request.ts b/ui/dasadmin/src/api/backend/temperature/request.ts new file mode 100644 index 00000000..c10a680d --- /dev/null +++ b/ui/dasadmin/src/api/backend/temperature/request.ts @@ -0,0 +1,24 @@ +import createAxios from '/@/utils/axios' + +export function equipList(params: object = {}) { + return createAxios({ + url: '/api/equipment/list', + method: 'POST', + data: params, + }) +} + +export function getTemperatureLimitByDeviceId(params: object = {}) { + return createAxios({ + url: '/api/page/temperature/getTemperatureLimitByDeviceId', + method: 'POST', + data: params, + }) +} +export function getsnapshotData(params: object = {}) { + return createAxios({ + url: '/api/data/snapshot', + method: 'POST', + data: params, + }) +} diff --git a/ui/dasadmin/src/views/backend/dashboard.vue b/ui/dasadmin/src/views/backend/dashboard.vue index 2cd1b398..8b0ac8cb 100644 --- a/ui/dasadmin/src/views/backend/dashboard.vue +++ b/ui/dasadmin/src/views/backend/dashboard.vue @@ -296,12 +296,15 @@ ref="myTable" @mouseover.native="clearScroll" @mouseleave.native="createScroll"> - - - + + + @@ -320,12 +323,15 @@ import * as echarts from 'echarts' import { useTemplateRefsList,useEventListener } from '@vueuse/core' import {useI18n} from "vue-i18n"; import WindContent from '/@/views/backend/home/windMatrix.vue' +import { equipList } from '/@/api/backend/realData/request' import { getWindFarmRealData, getWindTurbineMatrixData, - getHistoryData + getHistoryData, + getAlarmList, + alertComfirm } from "/@/api/backend/dashboard.ts"; -import {dayjs, ElMessage, TableInstance} from "element-plus"; +import {dayjs, ElMessage, ElMessageBox, TableInstance} from "element-plus"; import { getRealTimeState } from '/@/views/backend/equipment/airBlower/utils.ts' import {useRoute} from "vue-router"; const route = useRoute() @@ -403,6 +409,7 @@ const currentDayStatus=ref({ StartCapacityTotal: 0, StarteNum: 0 }) +const deviceCode=ref([]) const FanList = ref([]) const StatusListData = () => { getWindTurbineMatrixData().then((res) => { @@ -489,7 +496,6 @@ const StatusListData = () => { } }); FanList.value=data - }else{ ElMessage.error({ message: res.msg, @@ -500,6 +506,8 @@ const StatusListData = () => { }) } + + const state: { charts: { powerChart: any; trendChart: any } remark: string @@ -668,23 +676,6 @@ const initpowerChart = () => { const trendChartRef = ref() -/*const TrendDataForDay = [ - { - currentPeriod: 86.3, - samePeriod: 63.5, - generationTime: '2024-10-01', - }, - { - currentPeriod: 86.3, - samePeriod: 53.5, - generationTime: '2024-10-02', - }, - { - currentPeriod: 86.3, - samePeriod: 43.5, - generationTime: '2024-10-03', - }, -]*/ const TrendDataForDay: { currentPeriod: { time: string[] @@ -724,28 +715,8 @@ const TrendDataForMonth :{ value: [], }, } -/*const TrendDataForMonth = [ - { - currentPeriod: 26.3, - samePeriod: 53.5, - generationTime: '2024-10-01', - }, - { - currentPeriod: 36.3, - samePeriod: 53.5, - generationTime: '2024-10-02', - }, - { - currentPeriod: 46.3, - samePeriod: 53.5, - generationTime: '2024-10-03', - }, -]*/ const inittrendChart = (type: 'day' | 'month') => { - /* const currentPeriod: number[] = type === 'day' ? TrendDataForDay.currentPeriod.value : TrendDataForMonth.map((item) => item.currentPeriod) - const samePeriod: number[] = type === 'day' ? TrendDataForDay.samePeriod.value : TrendDataForMonth.map((item) => item.samePeriod) - const xAxisdata: string[] = type === 'day' ? TrendDataForDay.currentPeriod.time : TrendDataForMonth.map((item) => item.generationTime)*/ const currentPeriod: number[] = type === 'day' ? TrendDataForDay.currentPeriod.value : TrendDataForMonth.currentPeriod.value const samePeriod: number[] = type === 'day' ? TrendDataForDay.samePeriod.value : TrendDataForMonth.samePeriod.value const xAxisdata: string[] = type === 'day' ? TrendDataForDay.currentPeriod.time : TrendDataForMonth.currentPeriod.time @@ -866,50 +837,86 @@ const echartsResize = () => { onActivated(() => { echartsResize() }) +const timestampToTime = (timestamp: any) => { + timestamp = timestamp ? timestamp : null + let date = new Date(timestamp) + let Y = date.getFullYear() + '-' + let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-' + let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ' + let h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':' + let m = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + return Y + M + D + h + m +} +const tableData= ref() - -const tableData = ref([ - { - time: '2016-05-03', - name: 'SC-01', - alertcontent: '故障', - }, - { - time: '2016-05-02', - name: 'SC-02', - alertcontent: '待机', - }, - { - time: '2016-05-04', - name: 'SC-03', - alertcontent: '停机', - }, - { - time: '2016-05-01', - name: 'SC-04', - alertcontent: '变桨叶1伺服驱动器故障', - }, - { - time: '2016-05-03', - name: 'SC-01', - alertcontent: '故障', - }, - { - time: '2016-05-02', - name: 'SC-02', - alertcontent: '待机', - }, - { - time: '2016-05-04', - name: 'SC-03', - alertcontent: '停机', - }, - { - time: '2016-05-01', - name: 'SC-04', - alertcontent: '变桨叶1伺服驱动器故障', +const getTableData = (deviceCode) => { + const today = new Date(); + const threeDaysAgo = new Date(today); + threeDaysAgo.setDate(today.getDate() - 3); + const startTime = threeDaysAgo.getTime(); + const data:any = { + startTime: startTime, + endTime: Date.now(), + deviceCode:deviceCode, + limit:100 } -]) + console.log(JSON.stringify(data)) + getAlarmList(data).then((res) => { + debugger + if (res.code == 200) { + //tableData.value = res.rows + tableData.value = res.rows.map((item: any) => { + return { + ...item, + eventTimeFormate: timestampToTime(item.eventTime), + } + }) + } else { + ElMessage.error(res.msg ?? '查询失败') + } + }) +} +const open = (val: any) => { + ElMessageBox.confirm('是否确认?', '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning', + }) + .then(() => { + okSubmit(val) + }) + .catch(() => { + ElMessage({ + type: 'info', + message: '取消确认', + }) + }) +} + +const okSubmit = (val: any) => { + const reqData: any = [ + { + eventTime: val.eventTime, + eventId: val.eventId, + confirmed: 1, + deviceId: val.deviceId, + }, + ] + debugger + alertComfirm(reqData) + .then((res: any) => { + debugger + if (res.code == 200) { + ElMessage.success(res.msg ?? '确认成功') + getTableData(deviceCode.value) + } else { + ElMessage.error(res.msg ?? '查询失败') + } + }) + .catch((err) => { + ElMessage.error(err?.response?.data?.msg ?? '查询失败') + }) +} const clearScroll = () => { @@ -947,7 +954,7 @@ const getChartData = (params: { ], interval: params.interval, } - console.log(JSON.stringify(data)) + /* console.log(JSON.stringify(data))*/ getHistoryData(data).then((res) => { if (res.success) { if (typeof res.data === 'object' && res.data !== null && Object.keys(res.data).length === 0) { @@ -1123,13 +1130,17 @@ onMounted(() => { overviewList() StatusListData() autoUpdate() + + equipList({objectType: 10002,}).then((res) => { + res.data.map((item: any) => { + deviceCode.value.push(item.name) + }) + + getTableData(deviceCode.value) + }) useEventListener(window, 'resize', echartsResize) }) -/*onBeforeMount(() => { - for (const key in state.charts) { - state.charts[key].dispose() - } -})*/ + const activeName = ref('first') //let autoUpdateTimer: any = null let autoUpdateForSecondTimer: any = null diff --git a/ui/dasadmin/src/views/backend/temperature/index.vue b/ui/dasadmin/src/views/backend/temperature/index.vue new file mode 100644 index 00000000..f0e0f2c7 --- /dev/null +++ b/ui/dasadmin/src/views/backend/temperature/index.vue @@ -0,0 +1,353 @@ + + + + +