Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
I
integrated-scheduling-v3
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
1
Merge Requests
1
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
张晓彤
integrated-scheduling-v3
Commits
336211d2
Commit
336211d2
authored
Jul 07, 2023
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
电铲及车辆故障情况处理
parent
db6ebc5f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
108 additions
and
61 deletions
+108
-61
submit.py
core/submit.py
+34
-34
dispatchInfo.py
data/dispatchInfo.py
+29
-22
para_config.py
data/para_config.py
+3
-1
static_data_process.py
data/static_data_process.py
+6
-4
excavator.py
equipment/excavator.py
+36
-0
No files found.
core/submit.py
View file @
336211d2
...
@@ -36,14 +36,45 @@ class DispatchSubmission:
...
@@ -36,14 +36,45 @@ class DispatchSubmission:
self
.
truck
=
truck
self
.
truck
=
truck
self
.
topo
=
topo
self
.
topo
=
topo
def
group_dispatch_to_redis
(
self
,
group
:
Group
,
dispatch_plan_dict
):
"""
Update the dispatch plan in the group to redis
:param group: (Group)
:param dispatch_plan_dict: (Dict)
:return: None
"""
self
.
logger
.
info
(
f
'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}'
)
self
.
logger
.
info
(
f
'组内车辆 {group.group_trucks}'
)
self
.
logger
.
info
(
f
'组内挖机 {group.group_excavators}'
)
self
.
logger
.
info
(
f
'组内卸点 {group.group_dumps}'
)
self
.
logger
.
info
(
f
'调度模式 {group.group_mode}'
)
self
.
logger
.
info
(
"dispatch_plan_dict"
)
self
.
logger
.
info
(
dispatch_plan_dict
)
for
truck_id
,
dispatch_plan
in
dispatch_plan_dict
.
items
():
try
:
if
truck_id
in
group
.
truck_info_list
:
self
.
logger
.
info
(
f
'======================================= 派车计划写入 ======================================='
)
self
.
truck_dispatch_to_redis
(
truck_id
,
group
.
truck_info_list
[
truck_id
],
dispatch_plan
,
group
.
group_mode
)
self
.
logger
.
info
(
"======================================== 计划完成写入 ======================================="
)
else
:
raise
Exception
(
"车辆对象信息不存在 group.truck_info_list"
)
except
Exception
as
es
:
# self.logger.error("group_dispatch_to_redis_error")
self
.
logger
.
error
(
es
)
truck_direct2redis
(
truck_id
)
def
truck_dispatch_to_redis
(
self
,
truck_id
:
str
,
truck_info
:
CurrentTruck
,
dispatch_seq
:
List
[
int
],
def
truck_dispatch_to_redis
(
self
,
truck_id
:
str
,
truck_info
:
CurrentTruck
,
dispatch_seq
:
List
[
int
],
group_mode
:
int
):
group_mode
:
int
):
"""
"""
将truck_id对应矿卡派车计划写入
redis
Update the dispatch plan of one truck to
redis
:param group_mode: (int)
:param group_mode: (int)
:param truck_id: (uuid)
矿卡uuid
:param truck_id: (uuid)
:param truck_info: (object)
:param truck_info: (object)
:param dispatch_seq: (List[int])
矿卡派车计划
:param dispatch_seq: (List[int])
truck dispatch plan
:return: None
:return: None
"""
"""
...
@@ -246,37 +277,6 @@ class DispatchSubmission:
...
@@ -246,37 +277,6 @@ class DispatchSubmission:
self
.
logger
.
info
(
f
'redis 注入 {record}'
)
self
.
logger
.
info
(
f
'redis 注入 {record}'
)
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
def
group_dispatch_to_redis
(
self
,
group
:
Group
,
dispatch_plan_dict
):
"""
Update the dispatch plan in the group to redis
:param group: (Group)
:param dispatch_plan_dict: (Dict)
:return: None
"""
self
.
logger
.
info
(
f
'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}'
)
self
.
logger
.
info
(
f
'组内车辆 {group.group_trucks}'
)
self
.
logger
.
info
(
f
'组内挖机 {group.group_excavators}'
)
self
.
logger
.
info
(
f
'组内卸点 {group.group_dumps}'
)
self
.
logger
.
info
(
f
'调度模式 {group.group_mode}'
)
self
.
logger
.
info
(
"dispatch_plan_dict"
)
self
.
logger
.
info
(
dispatch_plan_dict
)
for
truck_id
,
dispatch_plan
in
dispatch_plan_dict
.
items
():
try
:
if
truck_id
in
group
.
truck_info_list
:
self
.
logger
.
info
(
f
'======================================= 派车计划写入 ======================================='
)
self
.
truck_dispatch_to_redis
(
truck_id
,
group
.
truck_info_list
[
truck_id
],
dispatch_plan
,
group
.
group_mode
)
self
.
logger
.
info
(
"======================================== 计划完成写入 ======================================="
)
else
:
raise
Exception
(
"车辆对象信息不存在 group.truck_info_list"
)
except
Exception
as
es
:
# self.logger.error("group_dispatch_to_redis_error")
self
.
logger
.
error
(
es
)
truck_direct2redis
(
truck_id
)
def
redis_format
(
truck_id
,
group_id
,
dispatch_id
,
item
):
def
redis_format
(
truck_id
,
group_id
,
dispatch_id
,
item
):
record
=
{
"truckId"
:
truck_id
,
"dispatchId"
:
dispatch_id
,
"exactorId"
:
item
.
exactor_id
,
"dumpId"
:
item
.
dump_id
,
record
=
{
"truckId"
:
truck_id
,
"dispatchId"
:
dispatch_id
,
"exactorId"
:
item
.
exactor_id
,
"dumpId"
:
item
.
dump_id
,
...
...
data/dispatchInfo.py
View file @
336211d2
...
@@ -10,6 +10,8 @@
...
@@ -10,6 +10,8 @@
from
data.para_config
import
*
from
data.para_config
import
*
from
bidict
import
bidict
from
bidict
import
bidict
from
settings
import
get_logger
from
settings
import
get_logger
from
equipment.excavator
import
ExcavatorInfo
from
equipment.truck
import
TruckInfo
logger
=
get_logger
(
"zxt.dispatchInfo"
)
logger
=
get_logger
(
"zxt.dispatchInfo"
)
...
@@ -156,7 +158,7 @@ class DispatchInfo:
...
@@ -156,7 +158,7 @@ class DispatchInfo:
session_postgre
.
rollback
()
session_postgre
.
rollback
()
session_mysql
.
rollback
()
session_mysql
.
rollback
()
# update
exactor_id <-> truck_id
# update exactor_id <-> truck_id
try
:
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
,
)
.
all
():
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
,
)
.
all
():
if
item
.
exactor_id
not
in
cls
.
exactor_truck_dict
.
keys
():
if
item
.
exactor_id
not
in
cls
.
exactor_truck_dict
.
keys
():
...
@@ -169,7 +171,7 @@ class DispatchInfo:
...
@@ -169,7 +171,7 @@ class DispatchInfo:
logger
.
error
(
"电铲和卡车的映射关系更新异常"
)
logger
.
error
(
"电铲和卡车的映射关系更新异常"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
# update
exactor_id <-> unload_area_id
# update exactor_id <-> unload_area_id
try
:
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
,
)
.
all
():
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
,
)
.
all
():
if
item
.
exactor_id
not
in
cls
.
exactor_unload_dict
.
keys
():
if
item
.
exactor_id
not
in
cls
.
exactor_unload_dict
.
keys
():
...
@@ -181,7 +183,7 @@ class DispatchInfo:
...
@@ -181,7 +183,7 @@ class DispatchInfo:
logger
.
error
(
"电铲和卸载区的映射关系更新异常"
)
logger
.
error
(
"电铲和卸载区的映射关系更新异常"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
# update
unload_area_id -> rate
# update unload_area_id -> rate
try
:
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
,
)
.
all
():
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
,
)
.
all
():
cls
.
unload_rate_dict
[
item
.
unload_area_id
]
=
item
.
rate
cls
.
unload_rate_dict
[
item
.
unload_area_id
]
=
item
.
rate
...
@@ -190,17 +192,25 @@ class DispatchInfo:
...
@@ -190,17 +192,25 @@ class DispatchInfo:
logger
.
error
(
es
)
logger
.
error
(
es
)
# update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id
# update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id
excavator
=
ExcavatorInfo
()
excavator
.
update_excavator_current_state
()
truck
=
TruckInfo
()
truck
.
update_truck_current_task
()
try
:
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
)
.
all
():
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
)
.
all
():
# add group_excavators
# add group_excavators
excavator_state
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
item
.
exactor_id
)
.
first
()
excavator_state
=
excavator
.
excavator_current_state
[
item
.
excavator_id
]
# if excavator_state is not None and excavator_state.disabled == 1
:
if
excavator_state
is
None
or
excavator_state
not
in
[
6
,
7
]
:
if
item
.
group_id
not
in
cls
.
group_excavator_dict
.
keys
():
if
item
.
group_id
not
in
cls
.
group_excavator_dict
.
keys
():
cls
.
group_excavator_dict
[
item
.
group_id
]
=
[
item
.
exactor_id
]
cls
.
group_excavator_dict
[
item
.
group_id
]
=
[
item
.
exactor_id
]
else
:
else
:
if
item
.
exactor_id
not
in
cls
.
group_excavator_dict
[
item
.
group_id
]:
if
item
.
exactor_id
not
in
cls
.
group_excavator_dict
[
item
.
group_id
]:
cls
.
group_excavator_dict
[
item
.
group_id
]
.
append
(
item
.
exactor_id
)
cls
.
group_excavator_dict
[
item
.
group_id
]
.
append
(
item
.
exactor_id
)
cls
.
excavator_group_dict
[
item
.
exactor_id
]
=
item
.
group_id
cls
.
excavator_group_dict
[
item
.
exactor_id
]
=
item
.
group_id
# add group_unload_areas
# add group_unload_areas
if
item
.
group_id
not
in
cls
.
group_unload_area_dict
.
keys
():
if
item
.
group_id
not
in
cls
.
group_unload_area_dict
.
keys
():
...
@@ -211,9 +221,6 @@ class DispatchInfo:
...
@@ -211,9 +221,6 @@ class DispatchInfo:
cls
.
unload_area_group_dict
[
item
.
unload_area_id
]
=
item
.
group_id
cls
.
unload_area_group_dict
[
item
.
unload_area_id
]
=
item
.
group_id
# add dump
# add dump
dump_state
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
item
.
dump_id
)
.
first
()
# if dump_state is not None and dump_state.disabled == 1:
# add group_dumps
if
item
.
group_id
not
in
cls
.
group_dump_dict
.
keys
():
if
item
.
group_id
not
in
cls
.
group_dump_dict
.
keys
():
cls
.
group_dump_dict
[
item
.
group_id
]
=
[
item
.
dump_id
]
cls
.
group_dump_dict
[
item
.
group_id
]
=
[
item
.
dump_id
]
else
:
else
:
...
@@ -222,14 +229,14 @@ class DispatchInfo:
...
@@ -222,14 +229,14 @@ class DispatchInfo:
cls
.
dump_group_dict
[
item
.
dump_id
]
=
item
.
group_id
cls
.
dump_group_dict
[
item
.
dump_id
]
=
item
.
group_id
# add truck
# add truck
truck_state
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
item
.
truck_id
)
.
first
()
truck_state
=
truck
.
truck_current_state
[
item
.
truck_id
]
# if truck_state is not None and truck_state.disabled == 1
:
if
truck_state
is
None
or
truck_state
not
in
[
6
,
7
]
:
if
item
.
group_id
not
in
cls
.
group_truck_dict
.
keys
():
if
item
.
group_id
not
in
cls
.
group_truck_dict
.
keys
():
cls
.
group_truck_dict
[
item
.
group_id
]
=
[
item
.
truck_id
]
cls
.
group_truck_dict
[
item
.
group_id
]
=
[
item
.
truck_id
]
else
:
else
:
if
item
.
truck_id
not
in
cls
.
group_truck_dict
[
item
.
group_id
]:
if
item
.
truck_id
not
in
cls
.
group_truck_dict
[
item
.
group_id
]:
cls
.
group_truck_dict
[
item
.
group_id
]
.
append
(
item
.
truck_id
)
cls
.
group_truck_dict
[
item
.
group_id
]
.
append
(
item
.
truck_id
)
cls
.
truck_group_dict
[
item
.
truck_id
]
=
item
.
group_id
cls
.
truck_group_dict
[
item
.
truck_id
]
=
item
.
group_id
logger
.
info
(
"存在的分组"
)
logger
.
info
(
"存在的分组"
)
logger
.
info
(
cls
.
group_excavator_dict
.
keys
())
logger
.
info
(
cls
.
group_excavator_dict
.
keys
())
...
...
data/para_config.py
View file @
336211d2
...
@@ -277,13 +277,15 @@ def global_period_para_update():
...
@@ -277,13 +277,15 @@ def global_period_para_update():
truck_uuid_to_name_dict
,
truck_name_to_uuid_dict
=
build_truck_uuid_name_map
()
truck_uuid_to_name_dict
,
truck_name_to_uuid_dict
=
build_truck_uuid_name_map
()
excavator_uuid_to_name_dict
=
build_excavator_uuid_name_map
()
excavator_uuid_to_name_dict
,
excavator_name_to_uuid_dict
=
build_excavator_uuid_name_map
()
dump_uuid_to_name_dict
=
build_dump_uuid_name_map
()
dump_uuid_to_name_dict
=
build_dump_uuid_name_map
()
global_dict
=
{
"park_num"
:
park_num
,
"load_area_num"
:
load_area_num
,
"unload_area_num"
:
unload_area_num
,
global_dict
=
{
"park_num"
:
park_num
,
"load_area_num"
:
load_area_num
,
"unload_area_num"
:
unload_area_num
,
"truck_uuid_to_name_dict"
:
truck_uuid_to_name_dict
,
"truck_uuid_to_name_dict"
:
truck_uuid_to_name_dict
,
"truck_name_to_uuid_dict"
:
truck_name_to_uuid_dict
,
"truck_name_to_uuid_dict"
:
truck_name_to_uuid_dict
,
"excavator_uuid_to_name_dict"
:
excavator_uuid_to_name_dict
,
"excavator_uuid_to_name_dict"
:
excavator_uuid_to_name_dict
,
"excavator_name_to_uuid_dict"
:
excavator_name_to_uuid_dict
,
"dump_uuid_to_name_dict"
:
dump_uuid_to_name_dict
,
"dump_uuid_to_name_dict"
:
dump_uuid_to_name_dict
,
"unload_area_uuid_to_index_dict"
:
unload_area_uuid_to_index_dict
,
"unload_area_uuid_to_index_dict"
:
unload_area_uuid_to_index_dict
,
"load_area_uuid_to_index_dict"
:
load_area_uuid_to_index_dict
,
"load_area_uuid_to_index_dict"
:
load_area_uuid_to_index_dict
,
...
...
data/static_data_process.py
View file @
336211d2
...
@@ -113,20 +113,22 @@ def build_truck_uuid_name_map():
...
@@ -113,20 +113,22 @@ def build_truck_uuid_name_map():
def
build_excavator_uuid_name_map
():
def
build_excavator_uuid_name_map
():
# excavator_id <-> excavator_name
# excavator_id <-> excavator_name
excavator_uuid_to_name_dict
=
{}
excavator_uuid_to_name_dict
=
{}
excavator_name_to_uuid_dict
=
{}
try
:
try
:
for
item
in
session_mysql
.
query
(
Equipment
)
.
filter_by
(
device_type
=
2
)
.
all
():
for
item
in
session_mysql
.
query
(
Equipment
)
.
filter_by
(
device_type
=
2
)
.
all
():
truck
_id
=
item
.
id
excavator
_id
=
item
.
id
truck
_name
=
item
.
equipment_id
excavator
_name
=
item
.
equipment_id
excavator_uuid_to_name_dict
[
truck_id
]
=
truck_name
excavator_name_to_uuid_dict
[
excavator_name
]
=
excavator_id
excavator_uuid_to_name_dict
[
excavator_id
]
=
excavator_name
if
len
(
excavator_uuid_to_name_dict
)
<
1
:
if
len
(
excavator_uuid_to_name_dict
)
<
1
:
raise
Exception
(
"无挖机设备可用"
)
raise
Exception
(
"无挖机设备可用"
)
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
warning
(
es
)
logger
.
warning
(
es
)
session_postgre
.
rollback
()
session_postgre
.
rollback
()
session_mysql
.
rollback
()
session_mysql
.
rollback
()
return
excavator_uuid_to_name_dict
return
excavator_uuid_to_name_dict
,
excavator_name_to_uuid_dict
def
build_dump_uuid_name_map
():
def
build_dump_uuid_name_map
():
...
...
equipment/excavator.py
View file @
336211d2
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
from
data.para_config
import
*
from
data.para_config
import
*
from
settings
import
*
from
settings
import
*
from
tables
import
*
from
tables
import
*
from
util.core_exception
import
CoreException
# 挖机设备类
# 挖机设备类
...
@@ -43,6 +44,9 @@ class ExcavatorInfo(WalkManage):
...
@@ -43,6 +44,9 @@ class ExcavatorInfo(WalkManage):
# # 参数初始化
# # 参数初始化
# self.excavator_para_period_update()
# self.excavator_para_period_update()
# 挖机状态列表
self
.
excavator_current_state
=
{}
def
get_loading_time
(
self
):
def
get_loading_time
(
self
):
return
self
.
loading_time
return
self
.
loading_time
...
@@ -200,6 +204,38 @@ class ExcavatorInfo(WalkManage):
...
@@ -200,6 +204,38 @@ class ExcavatorInfo(WalkManage):
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
"挖机装载信息信息读取异常"
)
self
.
logger
.
error
(
"挖机装载信息信息读取异常"
)
# 更新挖机当前任务
def
update_excavator_current_state
(
self
):
self
.
excavator_current_state
=
{}
device_name_set
=
redis2
.
keys
()
excavator_name_to_uuid_dict
=
get_value
(
"excavator_name_to_uuid_dict"
)
for
item
in
device_name_set
:
try
:
item
=
item
.
decode
(
encoding
=
"utf-8"
)
key_value_dict
=
redis2
.
hgetall
(
item
)
# reids str可以自动转为bytes
if
str_to_byte
(
"type"
)
in
key_value_dict
:
device_type
=
int
(
key_value_dict
[
str_to_byte
(
"type"
)])
else
:
continue
if
device_type
==
2
:
if
item
not
in
excavator_name_to_uuid_dict
:
raise
CoreException
(
107
,
f
'挖机 {item} 不存在于excavator_name_to_uuid_dict'
)
if
excavator_name_to_uuid_dict
[
item
]
in
self
.
dynamic_excavator_set
:
currentState
=
int
(
float
(
byte_to_str
(
key_value_dict
[
str_to_byte
(
"state"
)])))
self
.
excavator_current_state
[
excavator_name_to_uuid_dict
[
item
]
]
=
currentState
except
Exception
as
es
:
self
.
logger
.
warning
(
"读取矿卡任务异常-reids读取异常"
)
self
.
logger
.
warning
(
es
)
self
.
logger
.
info
(
"矿卡当前任务:"
)
self
.
logger
.
info
(
self
.
excavator_current_state
)
def
reset
(
self
):
def
reset
(
self
):
# 装载设备数量
# 装载设备数量
...
...
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