Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
U
unify_api2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chaonan
unify_api2
Commits
2bd87ca5
You need to sign in or sign up before continuing.
Commit
2bd87ca5
authored
Jul 19, 2023
by
ZZH
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
longgang data 2023-7-19
parent
4100febc
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
306 additions
and
194 deletions
+306
-194
select_company_cps.py
unify_api/modules/common/components/select_company_cps.py
+1
-1
common_dao.py
unify_api/modules/common/dao/common_dao.py
+12
-12
open_data_cps.py
unify_api/modules/shidianu/components/open_data_cps.py
+59
-3
open_data_dao.py
unify_api/modules/shidianu/dao/open_data_dao.py
+26
-45
open_data_service.py
unify_api/modules/shidianu/service/open_data_service.py
+80
-117
open_data.py
unify_api/modules/shidianu/views/open_data.py
+128
-16
No files found.
unify_api/modules/common/components/select_company_cps.py
View file @
2bd87ca5
...
...
@@ -29,7 +29,7 @@ class CompanyResponse(Model, DbErr):
@
dataclass
class
CmReq
(
Model
):
cid
:
int
=
Int
(
"公司id"
)
.
eg
(
66
)
cid
:
int
=
Opt
(
Int
(
"公司id"
)
.
eg
(
66
)
)
@
dataclass
...
...
unify_api/modules/common/dao/common_dao.py
View file @
2bd87ca5
...
...
@@ -103,19 +103,19 @@ async def item_by_mitd_dao(mtids):
return
datas
async
def
monitor_point_storey_join_in
(
cid
,
page_num
,
page
_size
):
async
def
load_compy_storey_points
(
cid
,
pg_num
,
pg
_size
):
"""monitor和point和storey联合查询, 分页"""
sql
=
"SELECT monitor.cid,
c.address,point.name,
point.create_time, "
\
"monitor.sid,
srm.room_name, srm.storey_name, monitor.longitud
e, "
\
"
point.mtid,monitor.latitude,point.pid FROM monitor
"
\
"
inner join point on monitor.mtid = point.mtid inner join
"
\
"
storey_room_map srm on point.pid = srm.point_id left join
"
\
"
company c on c.cid = monitor.cid WHERE monitor.cid in
%
s
"
\
"
and monitor.demolished = 0 order by point.pid limit
%
s,
%
s"
async
with
MysqlUtil
()
as
conn
:
monitor_point_storey_list
=
await
conn
.
fetchall
(
sql
,
args
=
(
cid
,
(
page_num
-
1
)
*
page_size
,
page_size
))
return
monitor_point_storey_list
sql
=
"SELECT monitor.cid,
c.address, point.name,
point.create_time, "
\
"monitor.sid,
monitor.meter_no, srm.room_name, srm.storey_nam
e, "
\
"
monitor.longitude, point.mtid, monitor.latitude, point.pid
"
\
"
FROM monitor
"
\
"
inner join point on monitor.mtid = point.mtid
"
\
"
inner join storey_room_map srm on point.pid = srm.point_id
"
\
"
left join company c on c.cid = monitor.cid "
\
"WHERE monitor.cid in
%
s and monitor.demolished = 0 "
\
"order by point.pid limit
%
s,
%
s"
async
with
MysqlUtil
()
as
conn
:
return
await
conn
.
fetchall
(
sql
,
(
cid
,
(
pg_num
-
1
)
*
pg_size
,
pg_size
))
async
def
meter_param_by_mid
(
mtid
):
...
...
unify_api/modules/shidianu/components/open_data_cps.py
View file @
2bd87ca5
from
dataclasses
import
dataclass
from
pot_libs.sanic_api
import
Model
from
pot_libs.sanic_api.column
import
Float
,
Str
,
List
,
Int
,
Dict
,
Opt
from
pot_libs.common.components.fields
import
Cid
@
dataclass
class
BasicInfoReq
(
Model
):
# cid: int = Int("工厂id").eg(78)
# cid: int = Opt(Int("工厂id").eg(78))
page_size
:
int
=
Opt
(
Int
(
"页面大小"
)
.
eg
(
10
))
page_num
:
int
=
Opt
(
Int
(
"当前页面"
)
.
eg
(
1
))
...
...
@@ -46,3 +44,61 @@ class SupplementReq(Model):
start
:
str
=
Str
(
"开始时间"
)
.
eg
(
"2021-12-29 00:00:00"
)
end
:
str
=
Str
(
"开始时间"
)
.
eg
(
"2021-12-29 06:00:00"
)
type
:
str
=
Str
(
"类型"
)
.
eg
(
"appliance or electric"
)
@
dataclass
class
RiskCount
(
Model
):
security_user
:
int
=
Opt
(
Int
(
"安全用户"
)
.
eg
(
10
))
risk_user
:
int
=
Opt
(
Int
(
"风险用户"
)
.
eg
(
2
))
@
dataclass
class
ContentName
(
Model
):
ele_overload
:
int
=
Opt
(
Int
(
"用电超载"
)
.
eg
(
10
))
high_power_app
:
int
=
Opt
(
Int
(
"大功率电器"
)
.
eg
(
2
))
illegal_ele_app
:
int
=
Opt
(
Int
(
"违规电器"
)
.
eg
(
2
))
power_quality
:
int
=
Opt
(
Int
(
"电能质量"
)
.
eg
(
2
))
ele_car_battery
:
int
=
Opt
(
Int
(
"电能质量"
)
.
eg
(
2
))
@
dataclass
class
HomeDataResp
(
Model
):
risk_distribution
:
RiskCount
=
Opt
(
RiskCount
)
content_distribution
:
ContentName
=
Opt
(
ContentName
)
electric_use_score
:
float
=
Opt
(
Float
(
"用电安全指数"
)
.
eg
(
90.3
))
total_tenant
:
int
=
Opt
(
Int
(
"接入住户"
)
.
eg
(
20
))
online_rate
:
float
=
Opt
(
Float
(
"在线率"
)
.
eg
(
0.8
))
safe_day
:
float
=
Opt
(
Float
(
"平均安全运行"
)
.
eg
(
11.1
))
total_power
:
float
=
Opt
(
Float
(
"累计监测用电"
)
.
eg
(
96000
))
total_alarm
:
int
=
Opt
(
Int
(
"累计报警次数"
)
.
eg
(
5
))
@
dataclass
class
HomeLstAlarmReq
(
Model
):
cid
:
Opt
(
Cid
)
importance
:
list
=
Opt
(
List
(
"报警等级,默认:[1, 2, 3]"
)
.
eg
([
1
,
2
,
3
]))
page_size
:
int
=
Opt
(
Int
(
"每页记录数"
)
.
eg
(
10
))
page_num
:
int
=
Opt
(
Int
(
"当前页码"
)
.
eg
(
1
))
start
:
str
=
Opt
(
Str
(
"开始时间"
)
.
eg
(
"2021-02-01 00:00:00"
))
end
:
str
=
Opt
(
Str
(
"结束时间"
)
.
eg
(
"2021-02-28 23:59:59"
))
@
dataclass
class
HomeAlarmStatsReq
(
Model
):
cid
:
Opt
(
Cid
)
importance
:
list
=
Opt
(
List
(
"报警等级,默认:[1, 2, 3]"
)
.
eg
([
1
,
2
,
3
]))
page_size
:
int
=
Opt
(
Int
(
"每页记录数"
)
.
eg
(
10
))
page_num
:
int
=
Opt
(
Int
(
"当前页码"
)
.
eg
(
1
))
start
:
str
=
Opt
(
Str
(
"开始时间"
)
.
eg
(
"2021-02-01 00:00:00"
))
end
:
str
=
Opt
(
Str
(
"结束时间"
)
.
eg
(
"2021-02-28 23:59:59"
))
@
dataclass
class
HomeAlarmStatsResp
(
Model
):
ele_overload
:
dict
=
Dict
(
"线路过载"
)
.
eg
(
{
"slots"
:
[
"00-01"
,
"00-02"
,
"00-03"
],
"value"
:
[
1
,
2
,
3
]})
illegal_ele_app
:
dict
=
Dict
(
"违规电器"
)
.
eg
(
{
"slots"
:
[
"00-01"
,
"00-02"
,
"00-03"
],
"value"
:
[
1
,
2
,
3
]})
power_quality
:
dict
=
Dict
(
"电能质量"
)
.
eg
(
{
"slots"
:
[
"00-01"
,
"00-02"
,
"00-03"
],
"value"
:
[
1
,
2
,
3
]})
unify_api/modules/shidianu/dao/open_data_dao.py
View file @
2bd87ca5
from
pot_libs.mysql_util.mysql_util
import
MysqlUtil
from
pot_libs.es_util.es_utils
import
EsUtil
from
unify_api.constants
import
POINT_1MIN_EVENT
,
SDU_ALARM_LIST
from
unify_api.constants
import
SDU_ALARM_LIST
import
pendulum
from
unify_api.utils.time_format
import
CST
async
def
get_user_product_auth
(
user_id
):
sql
=
"SELECT * from user_product_auth where user_id=
%
s and product=4"
async
with
MysqlUtil
()
as
conn
:
user_info
=
await
conn
.
fetchone
(
sql
,
args
=
(
user_id
,))
return
user_info
return
await
conn
.
fetchone
(
sql
,
args
=
(
user_id
,))
async
def
get_basic_info_by_mtid
(
mtid
,
cid
):
...
...
@@ -16,8 +16,7 @@ async def get_basic_info_by_mtid(mtid, cid):
"on p.pid=s.point_id LEFT JOIN monitor m on m.mtid=p.mtid "
\
"where m.mtid=
%
s and m.demolished=0 and s.cid =
%
s"
async
with
MysqlUtil
()
as
conn
:
info
=
await
conn
.
fetchone
(
sql
,
args
=
(
mtid
,
cid
))
return
info
return
await
conn
.
fetchone
(
sql
,
args
=
(
mtid
,
cid
))
async
def
monitor_point_company
(
cids
):
...
...
@@ -26,45 +25,27 @@ async def monitor_point_company(cids):
"on c.cid=m.cid INNER JOIN point p on m.mtid=p.mtid "
\
"INNER JOIN storey_room_map s on s.point_id=p.pid where c.cid in
%
s"
async
with
MysqlUtil
()
as
conn
:
datas
=
await
conn
.
fetchall
(
sql
,
args
=
(
cids
,
))
return
datas
return
await
conn
.
fetchall
(
sql
,
args
=
(
cids
,))
async
def
result_longgang_by_cid
(
cids
,
page_num
,
page_size
,
importance
):
alarm_list
=
SDU_ALARM_LIST
async
def
load_lg_sdu_events
(
cid
,
pg_num
,
pg_size
,
importance
):
cond_lst
=
[
f
"cid={cid}"
,
f
"event_type in {tuple(SDU_ALARM_LIST)}"
]
if
len
(
importance
)
>
0
:
importance
=
str
(
tuple
(
importance
))
.
replace
(
',)'
,
')'
)
cond_lst
.
append
(
f
"importance in {importance}"
)
query_body
=
{
"from"
:
(
page_num
-
1
)
*
page_size
,
"size"
:
page_size
,
"query"
:
{
"bool"
:
{
"must"
:
[
{
"terms"
:
{
"cid"
:
cids
}
},
{
"terms"
:
{
"type.keyword"
:
alarm_list
}
},
{
"terms"
:
{
"importance"
:
importance
}
}
]
}
},
"sort"
:
[
{
"datetime"
:
{
"order"
:
"desc"
}
}
]
}
async
with
EsUtil
()
as
es
:
es_re
=
await
es
.
search_origin
(
body
=
query_body
,
index
=
POINT_1MIN_EVENT
)
return
es_re
time_format
=
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
end_date
=
str
(
pendulum
.
now
(
tz
=
CST
)
.
strftime
(
time_format
))
cond_lst
.
append
(
f
"event_datetime < '{end_date}'"
)
cond_str
=
" AND "
.
join
(
cond_lst
)
async
with
MysqlUtil
()
as
conn
:
sql
=
f
"select count(*) cnt from point_1min_event WHERE {cond_str};"
total
=
await
conn
.
fetchone
(
sql
)
total_count
=
total
.
get
(
"cnt"
,
0
)
if
total_count
<=
0
:
return
0
,
[]
sql
=
f
"select * from point_1min_event WHERE {cond_str} "
\
f
"order by event_datetime desc limit
%
s,
%
s;"
data
=
await
conn
.
fetchall
(
sql
,
args
=
((
pg_num
-
1
)
*
pg_size
,
pg_size
))
return
total_count
,
data
unify_api/modules/shidianu/service/open_data_service.py
View file @
2bd87ca5
This diff is collapsed.
Click to expand it.
unify_api/modules/shidianu/views/open_data.py
View file @
2bd87ca5
import
random
from
pot_libs.sanic_api
import
summary
from
unify_api.modules.shidianu.components.open_data_cps
import
(
BasicInfoReq
,
BasicInfoResp
,
StbDataReq
,
StbDataResp
,
SupplementReq
BasicInfoReq
,
BasicInfoResp
,
StbDataReq
,
StbDataResp
,
SupplementReq
,
HomeDataResp
,
HomeLstAlarmReq
,
HomeAlarmStatsReq
,
HomeAlarmStatsResp
)
from
unify_api.modules.alarm_manager.components.list_alarm
import
\
ListAlarmResponse
from
unify_api.modules.shidianu.service.open_data_service
import
\
basic_info_longgang_service
,
stb_data_longgang_service
,
\
from
unify_api.modules.shidianu.service.open_data_service
import
(
basic_info_longgang_service
,
stb_data_longgang_service
,
supplement_data_service
,
result_longgang_service
)
from
pot_libs.settings
import
SETTING
from
unify_api.utils.time_format
import
last30_day_range
from
unify_api.modules.common.dao.common_dao
import
monitor_by_cid
from
unify_api.modules.home_page.service.count_info_service
import
safe_run_sdu
from
unify_api.modules.common.procedures.power_cps
import
power_use_count
from
unify_api.modules.common.procedures.alarm_cps
import
alarm_count_sdu_new
from
unify_api.modules.shidianu.service.open_data_service
import
get_power
from
unify_api.modules.common.components.select_company_cps
import
CmReq
from
pot_libs.common.components.responses
import
success_res
from
unify_api.modules.alarm_manager.service.alarm_static_service
import
(
sdu_alarm_statistics_service
)
from
unify_api.modules.home_page.procedures.count_info_pds
import
(
electric_use_info_sdu
)
from
unify_api.modules.common.dao.common_dao
import
storey_by_cid
from
unify_api.modules.alarm_manager.service.list_alarm_service
import
\
new_list_alarm_service
# 数据对外开放接口
@
summary
(
"获取装置列表"
)
async
def
post_basic_info_longgang
2
(
req
,
body
:
BasicInfoReq
)
->
BasicInfoResp
:
async
def
post_basic_info_longgang
(
req
,
body
:
BasicInfoReq
)
->
BasicInfoResp
:
user_id
=
req
.
ctx
.
user_id
# user_id = 10086
page_size
=
body
.
page_size
or
10
...
...
@@ -20,7 +41,7 @@ async def post_basic_info_longgang2(req, body: BasicInfoReq) -> BasicInfoResp:
@
summary
(
"查询数据"
)
async
def
post_stb_data_longgang
2
(
req
,
body
:
StbDataReq
)
->
StbDataResp
:
async
def
post_stb_data_longgang
(
req
,
body
:
StbDataReq
)
->
StbDataResp
:
user_id
=
req
.
ctx
.
user_id
# user_id = 10086
# cid = body.cid
...
...
@@ -29,27 +50,25 @@ async def post_stb_data_longgang2(req, body: StbDataReq) -> StbDataResp:
@
summary
(
"获取告警结果"
)
async
def
post_alarm_result_longgang
2
(
req
,
body
:
BasicInfoReq
)
->
\
async
def
post_alarm_result_longgang
(
req
,
body
:
BasicInfoReq
)
->
\
ListAlarmResponse
:
user_id
=
req
.
ctx
.
user_id
# user_id = 10086
p
age
_size
=
body
.
page_size
or
10
p
age
_num
=
body
.
page_num
or
1
p
g
_size
=
body
.
page_size
or
10
p
g
_num
=
body
.
page_num
or
1
importance
=
[
2
,
3
]
return
await
result_longgang_service
(
user_id
,
importance
,
page_size
,
page_num
)
return
await
result_longgang_service
(
user_id
,
importance
,
pg_size
,
pg_num
)
@
summary
(
"获取分析结果"
)
async
def
post_analyse_result_longgang
2
(
req
,
body
:
BasicInfoReq
)
->
\
async
def
post_analyse_result_longgang
(
req
,
body
:
BasicInfoReq
)
->
\
ListAlarmResponse
:
user_id
=
req
.
ctx
.
user_id
# user_id = 10086
p
age
_size
=
body
.
page_size
or
10
p
age
_num
=
body
.
page_num
or
1
p
g
_size
=
body
.
page_size
or
10
p
g
_num
=
body
.
page_num
or
1
importance
=
[
1
]
return
await
result_longgang_service
(
user_id
,
importance
,
page_size
,
page_num
)
return
await
result_longgang_service
(
user_id
,
importance
,
pg_size
,
pg_num
)
@
summary
(
"补充数据"
)
...
...
@@ -61,3 +80,96 @@ async def post_supplement_data(req, body: SupplementReq) -> StbDataResp:
end
=
body
.
end
type
=
body
.
type
return
await
supplement_data_service
(
user_id
,
cid
,
start
,
end
,
type
)
@
summary
(
"首页信息"
)
async
def
post_home_page_data
(
req
,
body
:
CmReq
)
->
HomeDataResp
:
user_id
=
req
.
ctx
.
user_id
cid
=
223
cids
=
[
223
]
is_auth
=
await
get_power
(
user_id
,
cids
)
if
not
is_auth
and
not
SETTING
.
debug_mode
:
return
success_res
(
code
=
4001
,
msg
=
"您没有权限访问"
)
start
,
end
=
last30_day_range
()
product
=
4
# 安全和报警统计
res
=
await
sdu_alarm_statistics_service
([
cid
],
start
,
end
,
product
)
# 安全指数
alarm_res
=
await
electric_use_info_sdu
(
cid
)
electric_use_score
=
round
(
alarm_res
.
electric_use_score
)
# 1. 接入住户,从monitor表取,解决拆除逻辑
monitor_list
=
await
monitor_by_cid
(
cid
)
total_tenant
=
len
(
monitor_list
)
# 2. 安全运行天数: 以天计,当工厂某天I级、II级报警总数小于总户数*5%时,即为安全运行,
# 展示自接入累加安全运行天数
safe_day
=
await
safe_run_sdu
(
cid
,
total_tenant
)
# 3. 在线率
online_rate
=
88
+
random
.
choice
([
1
,
1.5
,
2
,
2.5
,
3
,
3.5
,
4
])
# 4.累计用电
total_power
=
await
power_use_count
(
cids
)
# 5. 累计报警
total_alarm
=
await
alarm_count_sdu_new
(
cids
)
return
HomeDataResp
(
risk_distribution
=
res
.
risk_distribution
,
content_distribution
=
res
.
content_distribution
,
electric_use_score
=
electric_use_score
,
total_tenant
=
total_tenant
,
online_rate
=
online_rate
,
safe_day
=
safe_day
,
total_power
=
total_power
,
total_alarm
=
total_alarm
,
)
@
summary
(
"首页-最近报警"
)
async
def
post_home_page_lst_alarm
(
req
,
body
:
HomeLstAlarmReq
)
->
\
ListAlarmResponse
:
user_id
=
req
.
ctx
.
user_id
# cid = body.cid
cid
=
223
is_auth
=
await
get_power
(
user_id
,
[
cid
])
if
not
is_auth
and
not
SETTING
.
debug_mode
:
return
success_res
(
code
=
4001
,
msg
=
"您没有权限访问"
)
importance
=
body
.
importance
page_size
=
body
.
page_size
page_num
=
body
.
page_num
start
=
body
.
start
end
=
body
.
end
product
=
4
point_ids
=
None
storeys
=
await
storey_by_cid
(
cid
)
storey_ids
=
[
item
[
"storey_id"
]
for
item
in
storeys
]
return
await
new_list_alarm_service
(
cid
,
storey_ids
,
page_num
,
page_size
,
start
,
end
,
product
,
importance
,
point_ids
)
@
summary
(
"首页-运行趋势"
)
async
def
post_home_page_alarm_stats
(
req
,
body
:
HomeAlarmStatsReq
)
->
\
HomeAlarmStatsResp
:
user_id
=
req
.
ctx
.
user_id
# cid = body.cid
cid
=
223
is_auth
=
await
get_power
(
user_id
,
[
cid
])
if
not
is_auth
and
not
SETTING
.
debug_mode
:
return
success_res
(
code
=
4001
,
msg
=
"您没有权限访问"
)
# 1. 获取参数
start
=
body
.
start
end
=
body
.
end
product
=
4
sr
=
await
sdu_alarm_statistics_service
([
cid
],
start
,
end
,
product
)
return
HomeAlarmStatsResp
(
ele_overload
=
sr
.
ele_overload
,
illegal_ele_app
=
sr
.
illegal_ele_app
,
power_quality
=
sr
.
power_quality
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment