Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MyEMS
MyEMS能源管理系统
提交
53d41492
M
MyEMS能源管理系统
项目概览
MyEMS
/
MyEMS能源管理系统
通知
46
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
MyEMS能源管理系统
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
53d41492
编写于
4月 28, 2024
作者:
nengyuangzhang
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop'
上级
f1463c93
10eb4f8b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
149 addition
and
120 deletion
+149
-120
myems-api/reports/energystoragepowerstationdashboard.py
myems-api/reports/energystoragepowerstationdashboard.py
+21
-1
myems-api/reports/microgriddashboard.py
myems-api/reports/microgriddashboard.py
+3
-2
myems-web/src/components/MyEMS/EnergyStoragePowerStation/EnergyStoragePowerStationTable.js
...ergyStoragePowerStation/EnergyStoragePowerStationTable.js
+125
-117
未找到文件。
myems-api/reports/energystoragepowerstationdashboard.py
浏览文件 @
53d41492
...
...
@@ -184,6 +184,25 @@ class Reporting:
energy_storage_power_station_list
=
list
()
if
rows_energy_storage_power_stations
is
not
None
and
len
(
rows_energy_storage_power_stations
)
>
0
:
for
row
in
rows_energy_storage_power_stations
:
# get gateway latest seen datetime to determine if it is online
query
=
(
" SELECT tds.last_seen_datetime_utc "
" FROM tbl_energy_storage_power_stations_containers tespsc, "
" tbl_energy_storage_containers_batteries tescb, "
" tbl_points p, tbl_data_sources tds, tbl_gateways tg "
" WHERE tespsc.energy_storage_power_station_id = %s "
" AND tescb.energy_storage_container_id = tespsc.energy_storage_container_id "
" AND tescb.soc_point_id = p.id "
" AND p.data_source_id = tds.id "
" ORDER BY tds.last_seen_datetime_utc DESC "
" LIMIT 1 "
)
cursor_system_db
.
execute
(
query
,
(
row
[
0
],))
row_datetime
=
cursor_system_db
.
fetchone
()
is_online
=
False
if
row_datetime
is
not
None
and
len
(
row_datetime
)
>
0
:
if
isinstance
(
row_datetime
[
0
],
datetime
):
if
row_datetime
[
0
]
+
timedelta
(
minutes
=
10
)
>
datetime
.
utcnow
():
is_online
=
True
meta_result
=
{
"id"
:
row
[
0
],
"name"
:
row
[
1
],
"uuid"
:
row
[
2
],
...
...
@@ -194,7 +213,8 @@ class Reporting:
"longitude"
:
row
[
6
],
"rated_capacity"
:
row
[
7
],
"rated_power"
:
row
[
8
],
"description"
:
row
[
9
]}
"description"
:
row
[
9
],
"status"
:
'online'
if
is_online
else
'offline'
}
energy_storage_power_station_list
.
append
(
meta_result
)
charge_ranking
=
list
()
if
rows_energy_storage_power_stations
is
not
None
and
len
(
rows_energy_storage_power_stations
)
>
0
:
...
...
myems-api/reports/microgriddashboard.py
浏览文件 @
53d41492
...
...
@@ -173,12 +173,13 @@ class Reporting:
if
rows_microgrids
is
not
None
and
len
(
rows_microgrids
)
>
0
:
for
row
in
rows_microgrids
:
# get gateway latest seen datetime to determine if it is online
query
=
(
" SELECT t
g
.last_seen_datetime_utc "
query
=
(
" SELECT t
ds
.last_seen_datetime_utc "
" FROM tbl_microgrids_batteries mb, tbl_points p, tbl_data_sources tds, tbl_gateways tg "
" WHERE microgrid_id = %s "
" AND mb.soc_point_id = p.id "
" AND p.data_source_id = tds.id "
" AND tds.gateway_id = tg.id "
)
" ORDER BY tds.last_seen_datetime_utc DESC "
" LIMIT 1 "
)
cursor_system_db
.
execute
(
query
,
(
row
[
0
],))
row_datetime
=
cursor_system_db
.
fetchone
()
is_online
=
False
...
...
myems-web/src/components/MyEMS/EnergyStoragePowerStation/EnergyStoragePowerStationTable.js
浏览文件 @
53d41492
...
...
@@ -6,6 +6,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import
{
Button
,
Col
,
Row
}
from
'
reactstrap
'
;
import
ButtonIcon
from
'
../../common/ButtonIcon
'
;
import
{
Link
}
from
'
react-router-dom
'
;
import
{
withTranslation
}
from
'
react-i18next
'
;
const
CustomTotal
=
({
sizePerPage
,
totalSize
,
page
,
lastIndex
})
=>
(
<
span
>
...
...
@@ -19,38 +20,6 @@ const nameFormatter = (nameuuid) => (
<
/Link
>
);
const
badgeFormatter
=
status
=>
{
let
color
=
''
;
let
icon
=
''
;
let
text
=
''
;
switch
(
status
)
{
case
'
charging
'
:
color
=
'
success
'
;
icon
=
'
check
'
;
text
=
'
Charging
'
;
break
;
case
'
discharging
'
:
color
=
'
success
'
;
icon
=
'
check
'
;
text
=
'
Discharging
'
;
break
;
case
'
offline
'
:
color
=
'
secondary
'
;
icon
=
'
ban
'
;
text
=
'
Offline
'
;
break
;
default
:
color
=
'
warning
'
;
icon
=
'
stream
'
;
text
=
'
Idling
'
;
}
return
(
<
Badge
color
=
{
`soft-
${
color
}
`
}
className
=
"
rounded-capsule
"
>
{
text
}
<
FontAwesomeIcon
icon
=
{
icon
}
transform
=
"
shrink-2
"
className
=
"
ml-1
"
/>
<
/Badge
>
);
};
const
energyFormatter
=
amount
=>
<
Fragment
>
{
amount
}
kWh
<
/Fragment>
;
...
...
@@ -58,86 +27,6 @@ const capacityFormatter = amount => <Fragment>{amount} kWh</Fragment>;
const
powerFormatter
=
amount
=>
<
Fragment
>
{
amount
}
kW
<
/Fragment>
;
const
currencyFormatter
=
amount
=>
<
Fragment
>
{
amount
}
<
/Fragment>
;
const
columns
=
[
{
dataField
:
'
nameuuid
'
,
text
:
'
名称
'
,
formatter
:
nameFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
},
{
dataField
:
'
address
'
,
text
:
'
地址
'
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
},
{
dataField
:
'
space_name
'
,
text
:
'
空间
'
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
},
{
dataField
:
'
total_charge
'
,
text
:
'
总充电量
'
,
formatter
:
energyFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
total_discharge
'
,
text
:
'
总放电量
'
,
formatter
:
energyFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
total_revenue
'
,
text
:
'
总收益
'
,
formatter
:
currencyFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
rated_capacity
'
,
text
:
'
额定容量
'
,
formatter
:
capacityFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
rated_power
'
,
text
:
'
额定功率
'
,
formatter
:
powerFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
status
'
,
text
:
'
状态
'
,
formatter
:
badgeFormatter
,
classes
:
'
border-0 align-middle fs-0
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
align
:
'
right
'
,
headerAlign
:
'
right
'
},
{
dataField
:
'
action
'
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
text
:
''
}
];
const
SelectRowInput
=
({
indeterminate
,
rowIndex
,
...
rest
})
=>
(
<
div
className
=
"
custom-control custom-checkbox
"
>
...
...
@@ -165,7 +54,7 @@ const selectRow = onSelect => ({
});
const
EnergyStoragePowerStationTable
=
({
setIsSelected
,
energyStoragePowerStationList
})
=>
{
const
EnergyStoragePowerStationTable
=
({
setIsSelected
,
energyStoragePowerStationList
,
t
})
=>
{
let
table
=
createRef
();
const
handleNextPage
=
({
page
,
onPageChange
})
=>
()
=>
{
...
...
@@ -192,6 +81,125 @@ const EnergyStoragePowerStationTable = ({ setIsSelected, energyStoragePowerStati
totalSize
:
energyStoragePowerStationList
.
length
};
const
statusFormatter
=
status
=>
{
let
color
=
''
;
let
icon
=
''
;
let
text
=
''
;
switch
(
status
)
{
case
'
online
'
:
color
=
'
success
'
;
icon
=
'
check
'
;
text
=
t
(
'
Communication Online
'
);
break
;
case
'
charging
'
:
color
=
'
success
'
;
icon
=
'
check
'
;
text
=
'
Charging
'
;
break
;
case
'
discharging
'
:
color
=
'
success
'
;
icon
=
'
check
'
;
text
=
'
Discharging
'
;
break
;
case
'
offline
'
:
color
=
'
secondary
'
;
icon
=
'
ban
'
;
text
=
t
(
'
Communication Offline
'
);
break
;
default
:
color
=
'
warning
'
;
icon
=
'
stream
'
;
text
=
'
Idling
'
;
}
return
(
<
Badge
color
=
{
`soft-
${
color
}
`
}
className
=
"
rounded-capsule
"
>
{
text
}
<
FontAwesomeIcon
icon
=
{
icon
}
transform
=
"
shrink-2
"
className
=
"
ml-1
"
/>
<
/Badge
>
);
};
const
columns
=
[
{
dataField
:
'
nameuuid
'
,
text
:
t
(
'
Name
'
),
formatter
:
nameFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
},
{
dataField
:
'
address
'
,
text
:
t
(
'
Address
'
),
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
},
{
dataField
:
'
space_name
'
,
text
:
t
(
'
Space
'
),
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
},
{
dataField
:
'
total_charge
'
,
text
:
t
(
'
Total Charge
'
),
formatter
:
energyFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
total_discharge
'
,
text
:
t
(
'
Total Discharge
'
),
formatter
:
energyFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
total_revenue
'
,
text
:
t
(
'
Total Revenue
'
),
formatter
:
currencyFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
rated_capacity
'
,
text
:
t
(
'
Rated Capacity
'
),
formatter
:
capacityFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
rated_power
'
,
text
:
t
(
'
Rated Power
'
),
formatter
:
powerFormatter
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
},
{
dataField
:
'
status
'
,
text
:
t
(
'
Communication Status
'
),
formatter
:
statusFormatter
,
classes
:
'
border-0 align-middle fs-0
'
,
headerClasses
:
'
border-0
'
,
sort
:
true
,
align
:
'
right
'
,
headerAlign
:
'
right
'
},
{
dataField
:
'
action
'
,
classes
:
'
border-0 align-middle
'
,
headerClasses
:
'
border-0
'
,
text
:
''
}
];
return
(
<
PaginationProvider
pagination
=
{
paginationFactory
(
options
)}
>
{({
paginationProps
,
paginationTableProps
})
=>
{
...
...
@@ -226,7 +234,7 @@ const EnergyStoragePowerStationTable = ({ setIsSelected, energyStoragePowerStati
className
=
"
px-0 font-weight-semi-bold
"
onClick
=
{()
=>
handleViewAll
(
paginationProps
,
energyStoragePowerStationList
.
length
)}
>
全部
{
t
(
'
View all
'
)}
<
/ButtonIcon
>
<
/Col
>
<
Col
xs
=
"
auto
"
className
=
"
pr-3
"
>
...
...
@@ -237,7 +245,7 @@ const EnergyStoragePowerStationTable = ({ setIsSelected, energyStoragePowerStati
disabled
=
{
paginationProps
.
page
===
1
}
className
=
"
px-4
"
>
前一页
{
t
(
'
Previous Page
'
)}
<
/Button
>
<
Button
color
=
{
lastIndex
>=
paginationProps
.
totalSize
?
'
light
'
:
'
primary
'
}
...
...
@@ -246,7 +254,7 @@ const EnergyStoragePowerStationTable = ({ setIsSelected, energyStoragePowerStati
disabled
=
{
lastIndex
>=
paginationProps
.
totalSize
}
className
=
"
px-4 ml-2
"
>
下一页
{
t
(
'
Next Page
'
)}
<
/Button
>
<
/Col
>
<
/Row
>
...
...
@@ -257,4 +265,4 @@ const EnergyStoragePowerStationTable = ({ setIsSelected, energyStoragePowerStati
);
};
export
default
EnergyStoragePowerStationTable
;
export
default
withTranslation
()(
EnergyStoragePowerStationTable
)
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录