Files
emsfront/src/api/ems/dzjk.js
2026-04-01 14:27:35 +08:00

906 lines
30 KiB
JavaScript

import request from '@/utils/request'
//获取单个站点的信息
export function getDzjkHomeView(siteId) {
return request({
url: `/ems/siteMonitor/homeView?siteId=${siteId}`,
method: 'get'
})
}
//获取单个站点总累计运行数据(基于日表)
export function getDzjkHomeTotalView(siteId) {
return request({
url: `/ems/siteMonitor/homeTotalView?siteId=${siteId}`,
method: 'get'
})
}
// 单站监控项目点位配置(供单站监控功能查询)
export function getProjectPointMapping(siteId) {
return request({
url: `/ems/siteMonitor/getProjectPointMapping?siteId=${siteId}`,
method: 'get'
})
}
// 单站监控项目展示数据(字段配置 + 最新值)
export function getProjectDisplayData(siteId) {
return request({
url: `/ems/siteMonitor/getProjectDisplayData?siteId=${siteId}`,
method: 'get'
})
}
// 单站监控项目展示数据写入(批量)
export function saveProjectDisplayData(data) {
return request({
url: `/ems/siteMonitor/saveProjectDisplayData`,
method: 'post',
data
})
}
//站点首页 冲放曲线
export function getSevenChargeData({siteId, startDate, endDate}) {
return request({
url: `/ems/siteMap/getSevenChargeData?siteId=${siteId}&startDate=${startDate}&endDate=${endDate}`,
method: 'get'
})
}
// 获取站点包含的设备种类 用来判断单站监控设备监控的菜单栏展示
export function getSiteAllDeviceCategory(siteId) {
return request({
url: `/ems/siteConfig/getSiteAllDeviceCategory?siteId=${siteId}`,
method: 'get'
})
}
//EMS
export function getEmsDataList(siteId) {
return request({
url: `/ems/siteMonitor/getEmsDataList?siteId=${siteId}`,
method: 'get',
})
}
//获取pcs、实时运行头部的设备信息
export function getRunningHeadInfo(siteId) {
return request({
url: `/ems/siteMonitor/runningHeadInfo?siteId=${siteId}`,
method: 'get'
})
}
//获取pcs列表
export function getPcsDetailInfo(siteId) {
return request({
url: `/ems/siteMonitor/getPcsDetailInfo?siteId=${siteId}`,
method: 'get'
})
}
//获取BMS总览数据
export function getBMSOverView(siteId) {
return request({
url: `/ems/siteMonitor/getBMSOverView?siteId=${siteId}`,
method: 'get'
})
}
//获取BMS电池簇总览数据
export function getBMSBatteryCluster(siteId) {
return request({
url: `/ems/siteMonitor/getBMSBatteryCluster?siteId=${siteId}`,
method: 'get'
})
}
//获取单体电池 电池堆列表数据
export function getStackNameList(siteId) {
return request({
url: `/ems/siteMonitor/getStackNameList?siteId=${siteId}`,
method: 'get'
})
}
//获取单体电池 电池簇列表数据
export function getClusterNameList({stackDeviceId, siteId}) {
return request({
url: `/ems/siteMonitor/getClusterNameList?stackDeviceId=${stackDeviceId}&siteId=${siteId}`,
method: 'get'
})
}
//单体电池表格数据
export function getClusterDataInfoList({siteId, stackDeviceId, clusterDeviceId, batteryId, pageSize, pageNum}) {
return request({
url: `/ems/siteMonitor/getClusterDataInfoList?clusterDeviceId=${clusterDeviceId}&siteId=${siteId}&stackDeviceId=${stackDeviceId}&batteryId=${batteryId}&pageSize=${pageSize}&pageNum=${pageNum}`,
method: 'get'
})
}
// 单体电池图表
//http://localhost:8089/ems/siteMonitor/getSingleBatteryData?clusterDeviceId=BMSC01&siteId=021_FXX_01&deviceId=001&startDate=2025-07-11&endDate=2025-07-18
export function getSingleBatteryData({siteId, deviceId, clusterDeviceId, startDate, endDate}) {
return request({
url: `/ems/siteMonitor/getSingleBatteryData?siteId=${siteId}&deviceId=${deviceId}&startDate=${startDate}&endDate=${endDate}&clusterDeviceId=${clusterDeviceId}`,
method: 'get'
})
}
//获取液冷列表数据
export function getCoolingDataList(siteId) {
return request({
url: `/ems/siteMonitor/getCoolingDataList?siteId=${siteId}`,
method: 'get'
})
}
//获取动环数据
export function getDhDataList(siteId) {
return request({
url: `/ems/siteMonitor/getDhDataList?siteId=${siteId}`,
method: 'get'
})
}
//获取消防数据
export function getXfDataList(siteId) {
return request({
url: `/ems/siteMonitor/getXfDataList?siteId=${siteId}`,
method: 'get'
})
}
//获取电表数据
export function getAmmeterDataList(siteId) {
return request({
url: `/ems/siteMonitor/getAmmeterDataList?siteId=${siteId}`,
method: 'get'
})
}
// 故障告警
export function getAlarmDetailList({
status,
siteId,
deviceId,
alarmLevel,
alarmStartTime,
alarmEndTime,
pageSize,
pageNum
}) {
return request({
url: `/ems/siteAlarm/getAlarmDetailList?siteId=${siteId}&status=${status}&deviceId=${deviceId}&alarmLevel=${alarmLevel}&alarmStartTime=${alarmStartTime}&alarmEndTime=${alarmEndTime}&pageSize=${pageSize}&pageNum=${pageNum}`,
method: 'get'
})
}
// 告警生成工单
export function createTicketNo(data) {
return request({
url: `/ems/siteAlarm/createTicketNo`,
method: 'post',
data
})
}
// 告警确认关闭
export function closeAlarm(data) {
return request({
url: `/ems/siteAlarm/closeAlarm`,
method: 'post',
data
})
}
function getFieldNameByCode(fieldCode) {
const raw = String(fieldCode || '').trim()
if (!raw) return ''
const idx = raw.lastIndexOf('__')
return idx >= 0 ? raw.slice(idx + 2) : raw
}
function normalizeRows(displayResponse) {
const rows = displayResponse?.data || []
return Array.isArray(rows) ? rows : []
}
function filterByMenu(rows, menuCode) {
return (rows || []).filter(item => item && item.menuCode === menuCode)
}
function toDateLabel(valueTime) {
if (!valueTime) return ''
const date = new Date(valueTime)
if (isNaN(date.getTime())) return ''
const p = (n) => String(n).padStart(2, '0')
return `${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())}`
}
function toDateTimeLabel(valueTime) {
if (!valueTime) return ''
const date = new Date(valueTime)
if (isNaN(date.getTime())) return ''
const p = (n) => String(n).padStart(2, '0')
return `${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())} ${p(date.getHours())}:${p(date.getMinutes())}`
}
function toValueMap(rows) {
const map = {}
;(rows || []).forEach(item => {
const fieldName = getFieldNameByCode(item?.fieldCode)
if (fieldName) {
map[fieldName] = item?.fieldValue
}
})
return map
}
function groupRowsByDevice(rows) {
const map = new Map()
;(rows || []).forEach(item => {
const deviceId = String(item?.deviceId || '').trim() || 'DEFAULT'
if (!map.has(deviceId)) {
map.set(deviceId, [])
}
map.get(deviceId).push(item)
})
return map
}
function paginateRows(rows, pageNum = 1, pageSize = 10) {
const safePageNum = Number(pageNum) > 0 ? Number(pageNum) : 1
const safePageSize = Number(pageSize) > 0 ? Number(pageSize) : 10
const start = (safePageNum - 1) * safePageSize
return (rows || []).slice(start, start + safePageSize)
}
function toNumber(value) {
const num = Number(value)
return Number.isFinite(num) ? num : null
}
function normalizeDateInput(dateStr) {
if (dateStr) return dateStr
return toDateLabel(new Date())
}
function resolveElectricUnit(startDate, endDate) {
const start = new Date(`${normalizeDateInput(startDate)} 00:00:00`)
const end = new Date(`${normalizeDateInput(endDate)} 00:00:00`)
if (isNaN(start.getTime()) || isNaN(end.getTime())) return '日'
const diffDays = Math.floor((end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000))
if (diffDays <= 0) return '时'
if (diffDays < 30) return '日'
return '月'
}
function formatByUnit(date, unit) {
const p = (n) => String(n).padStart(2, '0')
if (unit === '时') return `${p(date.getHours())}:${p(date.getMinutes())}`
if (unit === '月') return `${date.getFullYear()}-${p(date.getMonth() + 1)}`
return `${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())}`
}
function aggregateCurveByUnit(curveRows, unit) {
const result = new Map()
;(curveRows || []).forEach(item => {
const time = item?.dataTime ? new Date(item.dataTime) : null
if (!time || isNaN(time.getTime())) return
const value = toNumber(item?.pointValue)
if (value == null) return
const label = formatByUnit(time, unit)
result.set(label, value)
})
return result
}
function getLatestCurveValue(curveRows) {
let latestTime = null
let latestValue = null
;(curveRows || []).forEach(item => {
const time = item?.dataTime ? new Date(item.dataTime) : null
if (!time || isNaN(time.getTime())) return
const value = toNumber(item?.pointValue)
if (value == null) return
if (latestTime == null || time.getTime() > latestTime) {
latestTime = time.getTime()
latestValue = value
}
})
return latestValue
}
function findMappingByField(rows, fieldNames = []) {
const targetSet = new Set((fieldNames || []).map(name => String(name || '').trim()))
return (rows || []).find(item => targetSet.has(getFieldNameByCode(item?.fieldCode)))
}
function getDataPointFromMapping(mapping) {
if (!mapping) return ''
const useFixedDisplay = Number(mapping?.useFixedDisplay) === 1
const fixedDataPoint = String(mapping?.fixedDataPoint || '').trim()
const dataPoint = String(mapping?.dataPoint || '').trim()
if (useFixedDisplay && fixedDataPoint) return fixedDataPoint
return dataPoint || fixedDataPoint
}
function queryPointCurveByPointId({siteId, pointId, startDate, endDate}) {
if (!siteId || !pointId) return Promise.resolve([])
const start = `${normalizeDateInput(startDate)} 00:00:00`
const end = `${normalizeDateInput(endDate)} 23:59:59`
return request({
url: `/ems/pointConfig/curve`,
method: 'post',
headers: {
repeatSubmit: false
},
data: {
siteId,
pointId,
rangeType: 'custom',
startTime: start,
endTime: end
}
}).then(resp => (Array.isArray(resp?.data) ? resp.data : []))
}
function sortCurveRows(curveRows = []) {
return [...(curveRows || [])].sort((a, b) => {
const ta = new Date(a?.dataTime).getTime()
const tb = new Date(b?.dataTime).getTime()
return (isNaN(ta) ? 0 : ta) - (isNaN(tb) ? 0 : tb)
})
}
function resolveRangeKind(startDate, endDate) {
const start = new Date(`${normalizeDateInput(startDate)} 00:00:00`)
const end = new Date(`${normalizeDateInput(endDate || startDate)} 00:00:00`)
if (isNaN(start.getTime()) || isNaN(end.getTime())) return 'day'
const diffDays = Math.floor((end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000))
if (diffDays <= 0) return 'minute'
if (diffDays < 30) return 'day'
return 'month'
}
function formatTimeLabelByKind(date, kind = 'day') {
const p = (n) => String(n).padStart(2, '0')
if (kind === 'minute') return `${p(date.getHours())}:${p(date.getMinutes())}`
if (kind === 'month') return `${date.getFullYear()}-${p(date.getMonth() + 1)}`
return `${date.getFullYear()}-${p(date.getMonth() + 1)}-${p(date.getDate())}`
}
function buildSortedLabels(labelSet, kind = 'day') {
const labels = Array.from(labelSet || [])
if (kind === 'minute') {
return labels.sort((a, b) => {
const [ah = 0, am = 0] = String(a || '').split(':').map(v => Number(v) || 0)
const [bh = 0, bm = 0] = String(b || '').split(':').map(v => Number(v) || 0)
return ah * 60 + am - (bh * 60 + bm)
})
}
return labels.sort()
}
function normalizePointValue(raw) {
const num = toNumber(raw)
if (num != null) return num
return raw == null ? '' : raw
}
function resolveAliasByField(aliasMap, fieldName) {
const raw = String(fieldName || '').trim()
if (!raw) return ''
if (aliasMap[raw]) return aliasMap[raw]
const withoutStat = raw.replace(/_stat$/, '')
return aliasMap[withoutStat] || ''
}
function queryMenuPointCurves({siteId, menuCode, startDate, endDate, mappingFilter}) {
return getProjectPointMapping(siteId).then((mappingResp) => {
const allMappings = Array.isArray(mappingResp?.data) ? mappingResp.data : []
let menuMappings = allMappings.filter(item => item?.menuCode === menuCode)
if (typeof mappingFilter === 'function') {
menuMappings = menuMappings.filter(mappingFilter)
}
const tasks = menuMappings.map((mapping) => {
const pointId = getDataPointFromMapping(mapping)
if (!pointId) return Promise.resolve(null)
return queryPointCurveByPointId({siteId, pointId, startDate, endDate})
.then(curve => ({
deviceId: String(mapping?.deviceId || '').trim(),
fieldName: getFieldNameByCode(mapping?.fieldCode),
curve: sortCurveRows(curve || []),
}))
.catch(() => ({
deviceId: String(mapping?.deviceId || '').trim(),
fieldName: getFieldNameByCode(mapping?.fieldCode),
curve: [],
}))
})
return Promise.all(tasks).then(rows => rows.filter(Boolean))
})
}
// 电量指标
export function getElectricData({siteId, startDate, endDate}) {
return getProjectPointMapping(siteId).then((mappingResp) => {
const allMappings = Array.isArray(mappingResp?.data) ? mappingResp.data : []
const gltjMappings = allMappings.filter(item => item?.menuCode === 'TJBB_GLTJ')
const chargedMap = findMappingByField(gltjMappings, ['chargedCap_stat', 'chargedCap'])
const disChargedMap = findMappingByField(gltjMappings, ['disChargedCap_stat', 'disChargedCap'])
const dailyEfficiencyMap = findMappingByField(gltjMappings, ['dailyEfficiency'])
const totalChargedMap = findMappingByField(gltjMappings, ['totalChargedCap_stat', 'totalChargedCap'])
const totalDisChargedMap = findMappingByField(gltjMappings, ['totalDisChargedCap_stat', 'totalDisChargedCap'])
const totalEfficiencyMap = findMappingByField(gltjMappings, ['efficiency'])
const pointMap = {
charged: getDataPointFromMapping(chargedMap),
disCharged: getDataPointFromMapping(disChargedMap),
dailyEfficiency: getDataPointFromMapping(dailyEfficiencyMap),
totalCharged: getDataPointFromMapping(totalChargedMap),
totalDisCharged: getDataPointFromMapping(totalDisChargedMap),
totalEfficiency: getDataPointFromMapping(totalEfficiencyMap),
}
const queryTasks = Object.keys(pointMap).map((key) => {
const pointId = pointMap[key]
return queryPointCurveByPointId({siteId, pointId, startDate, endDate})
.then(curve => ({key, curve}))
.catch(() => ({key, curve: []}))
})
return Promise.all(queryTasks).then((queryResult) => {
const curveMap = {}
queryResult.forEach(item => {
curveMap[item.key] = item.curve || []
})
const unit = resolveElectricUnit(startDate, endDate)
const chargedSeries = aggregateCurveByUnit(curveMap.charged, unit)
const disChargedSeries = aggregateCurveByUnit(curveMap.disCharged, unit)
const efficiencySeries = aggregateCurveByUnit(curveMap.dailyEfficiency, unit)
const labels = Array.from(new Set([
...chargedSeries.keys(),
...disChargedSeries.keys(),
...efficiencySeries.keys(),
])).sort()
const sevenDayDisChargeStats = labels.map((label) => {
const chargedCap = chargedSeries.get(label)
const disChargedCap = disChargedSeries.get(label)
let dailyEfficiency = efficiencySeries.get(label)
if (dailyEfficiency == null && chargedCap != null && chargedCap !== 0 && disChargedCap != null) {
dailyEfficiency = Number(((disChargedCap / chargedCap) * 100).toFixed(2))
}
return {
ammeterDate: label,
chargedCap: chargedCap == null ? '' : chargedCap,
disChargedCap: disChargedCap == null ? '' : disChargedCap,
dailyEfficiency: dailyEfficiency == null ? '' : dailyEfficiency,
}
})
const fallbackTotalCharged = sevenDayDisChargeStats.reduce((acc, item) => acc + (toNumber(item.chargedCap) || 0), 0)
const fallbackTotalDisCharged = sevenDayDisChargeStats.reduce((acc, item) => acc + (toNumber(item.disChargedCap) || 0), 0)
const totalChargedCap = getLatestCurveValue(curveMap.totalCharged)
const totalDisChargedCap = getLatestCurveValue(curveMap.totalDisCharged)
const totalEfficiency = getLatestCurveValue(curveMap.totalEfficiency)
const resultTotalCharged = totalChargedCap == null ? fallbackTotalCharged : totalChargedCap
const resultTotalDisCharged = totalDisChargedCap == null ? fallbackTotalDisCharged : totalDisChargedCap
const resultEfficiency = totalEfficiency == null
? (resultTotalCharged > 0 ? Number(((resultTotalDisCharged / resultTotalCharged) * 100).toFixed(2)) : 0)
: totalEfficiency
return {
data: {
totalChargedCap: resultTotalCharged,
totalDisChargedCap: resultTotalDisCharged,
efficiency: resultEfficiency,
unit,
sevenDayDisChargeStats,
}
}
})
})
}
//获取pcs列表
export function getPcsNameList(siteId) {
return request({
url: `/ems/siteMonitor/getPcsNameList?siteId=${siteId}`,
method: 'get'
})
}
// pcs曲线
export function getPCSData({siteId, startTime, endTime}) {
const kind = resolveRangeKind(startTime, endTime)
const aliasMap = {
activePower_stat: 'activePower',
activePower: 'activePower',
reactivePower_stat: 'reactivePower',
reactivePower: 'reactivePower',
uCurrent: 'uCurrent',
vCurrent: 'vCurrent',
wCurrent: 'wCurrent',
}
return queryMenuPointCurves({
siteId,
menuCode: 'TJBB_PCSQX',
startDate: startTime,
endDate: endTime,
}).then((records) => {
const byDevice = new Map()
records.forEach((record) => {
const alias = resolveAliasByField(aliasMap, record.fieldName)
if (!alias) return
const deviceId = record.deviceId || ''
if (!byDevice.has(deviceId)) byDevice.set(deviceId, new Map())
const rowMap = byDevice.get(deviceId)
;(record.curve || []).forEach((point) => {
const time = point?.dataTime ? new Date(point.dataTime) : null
if (!time || isNaN(time.getTime())) return
const label = formatTimeLabelByKind(time, kind)
if (!rowMap.has(label)) rowMap.set(label, {statisDate: label})
rowMap.get(label)[alias] = normalizePointValue(point?.pointValue)
})
})
const data = []
byDevice.forEach((rowMap, deviceId) => {
const labels = buildSortedLabels(new Set(Array.from(rowMap.keys())), kind)
data.push({
deviceId,
dataList: labels.map(label => rowMap.get(label)),
})
})
return {data}
})
}
// 电池堆曲线
export function getStackData({siteId, startTime, endTime}) {
const kind = resolveRangeKind(startTime, endTime)
const aliasMap = {
temp: 'temp',
voltage_stat: 'voltage',
voltage: 'voltage',
current: 'current',
soc_stat: 'soc',
soc: 'soc',
}
return queryMenuPointCurves({
siteId,
menuCode: 'TJBB_DCDQX',
startDate: startTime,
endDate: endTime,
}).then((records) => {
const byDevice = new Map()
records.forEach((record) => {
const alias = resolveAliasByField(aliasMap, record.fieldName)
if (!alias) return
const deviceId = record.deviceId || ''
if (!byDevice.has(deviceId)) byDevice.set(deviceId, new Map())
const rowMap = byDevice.get(deviceId)
;(record.curve || []).forEach((point) => {
const time = point?.dataTime ? new Date(point.dataTime) : null
if (!time || isNaN(time.getTime())) return
const label = formatTimeLabelByKind(time, kind)
if (!rowMap.has(label)) rowMap.set(label, {statisDate: label})
rowMap.get(label)[alias] = normalizePointValue(point?.pointValue)
})
})
const data = []
byDevice.forEach((rowMap, deviceId) => {
const labels = buildSortedLabels(new Set(Array.from(rowMap.keys())), kind)
data.push({
deviceId,
dataList: labels.map(label => rowMap.get(label)),
})
})
return {data}
})
}
// 电池温度
export function getClusterData({siteId, stackId, clusterId, dateTime, pageNum, pageSize}) {
const startDate = dateTime || normalizeDateInput('')
const endDate = dateTime || normalizeDateInput('')
const kind = 'minute'
const aliasMap = {
maxTemp: 'maxTemp',
maxTempId: 'maxTempId',
minTemp: 'minTemp',
minTempId: 'minTempId',
maxVoltage: 'maxVoltage',
maxVoltageId: 'maxVoltageId',
minVoltage: 'minVoltage',
minVoltageId: 'minVoltageId',
}
const queryClusterCurves = (withClusterFilter) => queryMenuPointCurves({
siteId,
menuCode: 'TJBB_DCWD',
startDate,
endDate,
mappingFilter: withClusterFilter
? (item) => {
if (!clusterId) return true
return String(item?.deviceId || '').trim() === String(clusterId || '').trim()
}
: undefined
})
return queryClusterCurves(true).then((records) => {
if (clusterId && (!records || records.length === 0)) {
return queryClusterCurves(false)
}
return records
}).then((records) => {
const rowMap = new Map()
records.forEach((record) => {
const alias = resolveAliasByField(aliasMap, record.fieldName)
if (!alias) return
;(record.curve || []).forEach((point) => {
const time = point?.dataTime ? new Date(point.dataTime) : null
if (!time || isNaN(time.getTime())) return
const label = formatTimeLabelByKind(time, kind)
if (!rowMap.has(label)) rowMap.set(label, {statisDate: label})
rowMap.get(label)[alias] = normalizePointValue(point?.pointValue)
})
})
const labels = buildSortedLabels(new Set(Array.from(rowMap.keys())), kind)
const fullRows = labels.map(label => rowMap.get(label))
return {
rows: paginateRows(fullRows, pageNum, pageSize),
total: fullRows.length,
}
})
}
// 实时运行
//储能
export function storagePower(siteId, startTime, endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/storagePower?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
method: 'get'
})
}
//poc温度
export function pcsMaxTemp(siteId, startTime, endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/pcsMaxTemp?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
method: 'get'
})
}
// 电池平均soc
export function batteryAveSoc(siteId, startTime, endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/batteryAveSoc?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
method: 'get'
})
}
// 电池平均温度
export function batteryAveTemp(siteId, startTime, endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/batteryAveTemp?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
method: 'get'
})
}
// 功率曲线
export function getPowerData({siteId, startDate, endDate}) {
const kind = resolveRangeKind(startDate, endDate)
const aliasMap = {
gridPower_stat: 'gridPower',
gridPower: 'gridPower',
loadPower_stat: 'loadPower',
loadPower: 'loadPower',
storagePower_stat: 'storagePower',
storagePower: 'storagePower',
pvPower_stat: 'pvPower',
pvPower: 'pvPower',
}
return queryMenuPointCurves({
siteId,
menuCode: 'TJBB_GLQX',
startDate,
endDate,
}).then((records) => {
const rowMap = new Map()
records.forEach((record) => {
const alias = resolveAliasByField(aliasMap, record.fieldName)
if (!alias) return
;(record.curve || []).forEach((point) => {
const time = point?.dataTime ? new Date(point.dataTime) : null
if (!time || isNaN(time.getTime())) return
const label = formatTimeLabelByKind(time, kind)
if (!rowMap.has(label)) rowMap.set(label, {statisDate: label})
rowMap.get(label)[alias] = normalizePointValue(point?.pointValue)
})
})
const labels = buildSortedLabels(new Set(Array.from(rowMap.keys())), kind)
return {data: labels.map(label => rowMap.get(label))}
})
}
//电表列表
export function getLoadNameList(siteId) {
return request({
url: `/ems/statsReport/getLoadNameList?siteId=${siteId}`,
method: 'get'
})
}
// 电表报表
export function getAmmeterData({siteId, startTime, endTime, pageSize, pageNum}) {
return request({
url: `/ems/statsReport/getAmmeterDataFromDaily`,
method: 'get',
params: {
siteId,
startTime,
endTime,
pageSize,
pageNum,
}
})
}
// 电价报表
export function getAmmeterRevenueData(data) {
return request({
url: `/ems/statsReport/getAmmeterRevenueData`,
method: 'get',
params: data
})
}
//策略列表
export function strategyRunningList(siteId) {
return request({
url: `/system/strategyRunning/list?siteId=${siteId}`,
method: 'get'
})
}
//停止策略
export function stopStrategyRunning(id) {
return request({
url: `/system/strategyRunning/stop?id=${id}`,
method: 'get'
})
}
// 获取所有主策略
export function getMainStrategyList() {
return request({
url: `/system/strategyRunning/getMainStrategyList`,
method: 'get'
})
}
//获取所有辅助策略
export function getAuxStrategyList() {
return request({
url: `/system/strategyRunning/getAuxStrategyList`,
method: 'get'
})
}
//配置策略
export function configStrategy(data) {
return request({
url: `/system/strategyRunning/configStrategy`,
method: 'post',
data
})
}
// 获取策略运行参数配置(按站点)
export function getStrategyRuntimeConfig(siteId) {
return request({
url: `/system/strategyRuntimeConfig/getBySiteId?siteId=${siteId}`,
method: 'get'
})
}
// 保存策略运行参数配置(按站点)
export function saveStrategyRuntimeConfig(data) {
return request({
url: `/system/strategyRuntimeConfig/save`,
method: 'post',
data
})
}
//http://localhost:8089/strategy/temp/getTempNameList?strategyId=1&siteId=021_FXX_01
//获取策略下的所有模板列表
export function getTempNameList({siteId, strategyId}) {
return request({
url: `/strategy/temp/getTempNameList?siteId=${siteId}&strategyId=${strategyId}`,
method: 'get',
})
}
//获取模板详情
///strategy/temp/list?templateId=1
export function getStrategyTempDetail(templateId) {
return request({
url: `/strategy/temp/list?templateId=${templateId}`,
method: 'get',
})
}
//新增模板
export function addStrategyTemp(data) {
return request({
url: `/strategy/temp`,
method: 'post',
data
})
}
export function editStrategyTemp(data) {
return request({
url: `/strategy/temp`,
method: 'put',
data
})
}
//http://localhost:8089/strategy/temp/{id}
export function deleteStrategyTemp(id) {
return request({
url: `/strategy/temp/` + id,
method: 'delete',
})
}
//http://localhost:8089/strategy/timeConfig/list?strategyId=1&siteId=021_FXX_01
export function timeConfigList({siteId, strategyId}) {
return request({
url: `/strategy/timeConfig/list?siteId=${siteId}&strategyId=${strategyId}`,
method: 'get',
})
}
//保存时间配置
// http://localhost:8089/strategy/timeConfig
export function setTimeConfigList(data) {
return request({
url: `/strategy/timeConfig`,
method: 'post',
data
})
}
// 策略曲线图
//http://localhost:8089/strategy/curve/curveList?strategyId=1&siteId=021_FXX_01
export function curveList({siteId, strategyId}) {
return request({
url: `/strategy/curve/curveList?siteId=${siteId}&strategyId=${strategyId}`,
method: 'get',
})
}
//单站监控 首页 当日功率曲线
export function getPointData({siteId, startDate, endDate}) {
return request({
url: `/ems/siteMonitor/getPointData?siteId=${siteId}&startDate=${startDate}&endDate=${endDate}`,
method: 'get',
})
}