2025-06-20 02:00:10 +08:00
|
|
|
import request from '@/utils/request'
|
|
|
|
|
|
|
|
|
|
//获取单个站点的信息
|
|
|
|
|
export function getDzjkHomeView(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/homeView?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-20 02:00:10 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2026-04-01 14:27:35 +08:00
|
|
|
//获取单个站点总累计运行数据(基于日表)
|
|
|
|
|
export function getDzjkHomeTotalView(siteId) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/homeTotalView?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-12 21:19:23 +08:00
|
|
|
// 单站监控项目点位配置(供单站监控功能查询)
|
|
|
|
|
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
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-11 21:50:38 +08:00
|
|
|
//站点首页 冲放曲线
|
2025-12-08 16:58:43 +08:00
|
|
|
export function getSevenChargeData({siteId, startDate, endDate}) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMap/getSevenChargeData?siteId=${siteId}&startDate=${startDate}&endDate=${endDate}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-08-11 21:50:38 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-10-15 14:26:06 +08:00
|
|
|
// 获取站点包含的设备种类 用来判断单站监控设备监控的菜单栏展示
|
|
|
|
|
export function getSiteAllDeviceCategory(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteConfig/getSiteAllDeviceCategory?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-10-15 14:26:06 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-12-09 18:25:36 +08:00
|
|
|
//EMS
|
|
|
|
|
export function getEmsDataList(siteId) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getEmsDataList?siteId=${siteId}`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-28 14:52:49 +08:00
|
|
|
//获取pcs、实时运行头部的设备信息
|
|
|
|
|
export function getRunningHeadInfo(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/runningHeadInfo?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-28 14:52:49 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-06-28 14:52:49 +08:00
|
|
|
//获取pcs列表
|
|
|
|
|
export function getPcsDetailInfo(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getPcsDetailInfo?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-28 14:52:49 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取BMS总览数据
|
|
|
|
|
export function getBMSOverView(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getBMSOverView?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-28 14:52:49 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取BMS电池簇总览数据
|
|
|
|
|
export function getBMSBatteryCluster(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getBMSBatteryCluster?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-28 14:52:49 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取单体电池 电池堆列表数据
|
|
|
|
|
export function getStackNameList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getStackNameList?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-28 14:52:49 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-06-28 14:52:49 +08:00
|
|
|
//获取单体电池 电池簇列表数据
|
2025-12-08 16:58:43 +08:00
|
|
|
export function getClusterNameList({stackDeviceId, siteId}) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getClusterNameList?stackDeviceId=${stackDeviceId}&siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-28 14:52:49 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-06-30 18:37:37 +08:00
|
|
|
//单体电池表格数据
|
2025-12-08 16:58:43 +08:00
|
|
|
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'
|
|
|
|
|
})
|
2025-06-30 18:37:37 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-17 17:47:18 +08:00
|
|
|
// 单体电池图表
|
|
|
|
|
//http://localhost:8089/ems/siteMonitor/getSingleBatteryData?clusterDeviceId=BMSC01&siteId=021_FXX_01&deviceId=001&startDate=2025-07-11&endDate=2025-07-18
|
2025-12-08 16:58:43 +08:00
|
|
|
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'
|
|
|
|
|
})
|
2025-07-17 17:47:18 +08:00
|
|
|
}
|
|
|
|
|
|
2025-06-30 17:32:04 +08:00
|
|
|
//获取液冷列表数据
|
|
|
|
|
export function getCoolingDataList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getCoolingDataList?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-30 17:32:04 +08:00
|
|
|
}
|
|
|
|
|
|
2025-11-27 15:51:13 +08:00
|
|
|
//获取动环数据
|
|
|
|
|
export function getDhDataList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getDhDataList?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-11-27 15:51:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取消防数据
|
|
|
|
|
export function getXfDataList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getXfDataList?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-11-27 15:51:13 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-06-30 17:32:04 +08:00
|
|
|
//获取电表数据
|
|
|
|
|
export function getAmmeterDataList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getAmmeterDataList?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-06-30 17:32:04 +08:00
|
|
|
}
|
2025-07-01 10:45:13 +08:00
|
|
|
|
|
|
|
|
// 故障告警
|
2025-12-08 16:58:43 +08:00
|
|
|
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'
|
|
|
|
|
})
|
2025-07-01 10:45:13 +08:00
|
|
|
}
|
2025-07-01 22:41:45 +08:00
|
|
|
|
2025-09-28 14:31:24 +08:00
|
|
|
// 告警生成工单
|
|
|
|
|
export function createTicketNo(data) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteAlarm/createTicketNo`,
|
|
|
|
|
method: 'post',
|
2026-02-17 21:44:12 +08:00
|
|
|
data
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 告警确认关闭
|
|
|
|
|
export function closeAlarm(data) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteAlarm/closeAlarm`,
|
|
|
|
|
method: 'post',
|
2025-12-08 16:58:43 +08:00
|
|
|
data
|
|
|
|
|
})
|
2025-09-28 14:31:24 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2026-02-15 16:24:29 +08:00
|
|
|
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
|
|
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
})
|
2026-02-15 16:24:29 +08:00
|
|
|
return map
|
2025-07-01 22:41:45 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2026-02-15 16:24:29 +08:00
|
|
|
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)
|
2025-12-08 16:58:43 +08:00
|
|
|
})
|
2026-02-15 16:24:29 +08:00
|
|
|
return result
|
2025-07-09 00:03:52 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2026-02-15 16:24:29 +08:00
|
|
|
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`
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
2026-02-15 16:24:29 +08:00
|
|
|
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,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
2025-12-08 16:58:43 +08:00
|
|
|
})
|
2025-07-09 00:03:52 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2026-02-15 16:24:29 +08:00
|
|
|
//获取pcs列表
|
|
|
|
|
export function getPcsNameList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
2026-02-15 16:24:29 +08:00
|
|
|
url: `/ems/siteMonitor/getPcsNameList?siteId=${siteId}`,
|
2025-12-08 16:58:43 +08:00
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-09 00:03:52 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2026-02-15 16:24:29 +08:00
|
|
|
// 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}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 电池温度
|
2025-12-08 16:58:43 +08:00
|
|
|
export function getClusterData({siteId, stackId, clusterId, dateTime, pageNum, pageSize}) {
|
2026-02-15 16:24:29 +08:00
|
|
|
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,
|
|
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
})
|
2025-07-09 00:03:52 +08:00
|
|
|
}
|
|
|
|
|
|
2025-07-07 22:10:25 +08:00
|
|
|
|
|
|
|
|
// 实时运行
|
|
|
|
|
//储能
|
2025-12-08 16:58:43 +08:00
|
|
|
export function storagePower(siteId, startTime, endTime) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/runningGraph/storagePower?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-07 22:10:25 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-09-27 14:50:20 +08:00
|
|
|
//poc温度
|
2025-12-08 16:58:43 +08:00
|
|
|
export function pcsMaxTemp(siteId, startTime, endTime) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/runningGraph/pcsMaxTemp?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-07 22:10:25 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-07 22:10:25 +08:00
|
|
|
// 电池平均soc
|
2025-12-08 16:58:43 +08:00
|
|
|
export function batteryAveSoc(siteId, startTime, endTime) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/runningGraph/batteryAveSoc?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-07 22:10:25 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-07 22:10:25 +08:00
|
|
|
// 电池平均温度
|
2025-12-08 16:58:43 +08:00
|
|
|
export function batteryAveTemp(siteId, startTime, endTime) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/runningGraph/batteryAveTemp?siteId=${siteId}&startDate=${startTime}&endDate=${endTime}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-07 22:10:25 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-09 23:52:19 +08:00
|
|
|
// 功率曲线
|
2025-12-08 16:58:43 +08:00
|
|
|
export function getPowerData({siteId, startDate, endDate}) {
|
2026-02-15 16:24:29 +08:00
|
|
|
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))}
|
2025-12-08 16:58:43 +08:00
|
|
|
})
|
2025-07-09 23:52:19 +08:00
|
|
|
}
|
2025-07-09 00:03:52 +08:00
|
|
|
|
2025-07-09 21:16:54 +08:00
|
|
|
//电表列表
|
|
|
|
|
export function getLoadNameList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/statsReport/getLoadNameList?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-09 21:16:54 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-09 21:16:54 +08:00
|
|
|
// 电表报表
|
2025-12-08 16:58:43 +08:00
|
|
|
export function getAmmeterData({siteId, startTime, endTime, pageSize, pageNum}) {
|
2026-04-01 14:27:35 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/statsReport/getAmmeterDataFromDaily`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
params: {
|
|
|
|
|
siteId,
|
|
|
|
|
startTime,
|
|
|
|
|
endTime,
|
|
|
|
|
pageSize,
|
|
|
|
|
pageNum,
|
2026-02-15 16:24:29 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
})
|
2025-07-09 21:16:54 +08:00
|
|
|
}
|
2025-07-09 23:52:19 +08:00
|
|
|
|
2025-12-08 16:58:43 +08:00
|
|
|
// 电价报表
|
|
|
|
|
export function getAmmeterRevenueData(data) {
|
2026-04-01 14:27:35 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/ems/statsReport/getAmmeterRevenueData`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
params: data
|
2025-12-08 16:58:43 +08:00
|
|
|
})
|
|
|
|
|
}
|
2025-07-12 15:55:05 +08:00
|
|
|
|
|
|
|
|
//策略列表
|
|
|
|
|
export function strategyRunningList(siteId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/system/strategyRunning/list?siteId=${siteId}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-12 15:55:05 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-12 15:55:05 +08:00
|
|
|
//停止策略
|
2025-07-13 00:29:19 +08:00
|
|
|
export function stopStrategyRunning(id) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/system/strategyRunning/stop?id=${id}`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-12 15:55:05 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-12 15:55:05 +08:00
|
|
|
// 获取所有主策略
|
2025-07-13 00:29:19 +08:00
|
|
|
export function getMainStrategyList() {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/system/strategyRunning/getMainStrategyList`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-12 15:55:05 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-12 15:55:05 +08:00
|
|
|
//获取所有辅助策略
|
|
|
|
|
export function getAuxStrategyList() {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/system/strategyRunning/getAuxStrategyList`,
|
|
|
|
|
method: 'get'
|
|
|
|
|
})
|
2025-07-12 15:55:05 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-12 15:55:05 +08:00
|
|
|
//配置策略
|
|
|
|
|
export function configStrategy(data) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/system/strategyRunning/configStrategy`,
|
|
|
|
|
method: 'post',
|
|
|
|
|
data
|
|
|
|
|
})
|
2025-07-12 15:55:05 +08:00
|
|
|
}
|
2025-07-13 00:29:19 +08:00
|
|
|
|
2026-02-13 21:46:12 +08:00
|
|
|
// 获取策略运行参数配置(按站点)
|
|
|
|
|
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
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-13 16:13:45 +08:00
|
|
|
//http://localhost:8089/strategy/temp/getTempNameList?strategyId=1&siteId=021_FXX_01
|
|
|
|
|
//获取策略下的所有模板列表
|
2025-12-08 16:58:43 +08:00
|
|
|
export function getTempNameList({siteId, strategyId}) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/strategy/temp/getTempNameList?siteId=${siteId}&strategyId=${strategyId}`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-13 16:13:45 +08:00
|
|
|
//获取模板详情
|
|
|
|
|
///strategy/temp/list?templateId=1
|
|
|
|
|
export function getStrategyTempDetail(templateId) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/strategy/temp/list?templateId=${templateId}`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-13 16:13:45 +08:00
|
|
|
//新增模板
|
|
|
|
|
export function addStrategyTemp(data) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/strategy/temp`,
|
|
|
|
|
method: 'post',
|
|
|
|
|
data
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-13 16:13:45 +08:00
|
|
|
export function editStrategyTemp(data) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/strategy/temp`,
|
|
|
|
|
method: 'put',
|
|
|
|
|
data
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-13 16:13:45 +08:00
|
|
|
//http://localhost:8089/strategy/temp/{id}
|
|
|
|
|
export function deleteStrategyTemp(id) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/strategy/temp/` + id,
|
|
|
|
|
method: 'delete',
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//http://localhost:8089/strategy/timeConfig/list?strategyId=1&siteId=021_FXX_01
|
2025-12-08 16:58:43 +08:00
|
|
|
export function timeConfigList({siteId, strategyId}) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/strategy/timeConfig/list?siteId=${siteId}&strategyId=${strategyId}`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-13 16:13:45 +08:00
|
|
|
//保存时间配置
|
|
|
|
|
// http://localhost:8089/strategy/timeConfig
|
|
|
|
|
export function setTimeConfigList(data) {
|
2025-12-08 16:58:43 +08:00
|
|
|
return request({
|
|
|
|
|
url: `/strategy/timeConfig`,
|
|
|
|
|
method: 'post',
|
|
|
|
|
data
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
2025-12-08 16:58:43 +08:00
|
|
|
|
2025-07-13 16:13:45 +08:00
|
|
|
// 策略曲线图
|
2025-07-23 21:22:21 +08:00
|
|
|
//http://localhost:8089/strategy/curve/curveList?strategyId=1&siteId=021_FXX_01
|
2025-12-08 16:58:43 +08:00
|
|
|
export function curveList({siteId, strategyId}) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/strategy/curve/curveList?siteId=${siteId}&strategyId=${strategyId}`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
})
|
2025-07-13 16:13:45 +08:00
|
|
|
}
|
2025-09-17 11:15:54 +08:00
|
|
|
|
|
|
|
|
//单站监控 首页 当日功率曲线
|
2025-12-08 16:58:43 +08:00
|
|
|
export function getPointData({siteId, startDate, endDate}) {
|
|
|
|
|
return request({
|
|
|
|
|
url: `/ems/siteMonitor/getPointData?siteId=${siteId}&startDate=${startDate}&endDate=${endDate}`,
|
|
|
|
|
method: 'get',
|
|
|
|
|
})
|
2025-11-25 17:56:12 +08:00
|
|
|
}
|