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
3cf7fbbf
Commit
3cf7fbbf
authored
Aug 28, 2023
by
Allvey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
注释优化
parent
1f0fe212
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
126 additions
and
180 deletions
+126
-180
algorithm.py
alg/algorithm.py
+1
-1
group.py
core/group.py
+10
-4
schedule.py
core/schedule.py
+10
-4
submit.py
core/submit.py
+17
-44
excavator.py
equipment/excavator.py
+3
-5
truck.py
equipment/truck.py
+64
-106
realtime_dispatch_test.py
realtime_dispatch_test.py
+21
-16
No files found.
alg/algorithm.py
View file @
3cf7fbbf
...
@@ -166,7 +166,7 @@ class ExpectedTime(AlgorithmBase):
...
@@ -166,7 +166,7 @@ class ExpectedTime(AlgorithmBase):
# self.logger.error("车辆调度信息读取异常")
# self.logger.error("车辆调度信息读取异常")
# self.logger.error(es)
# self.logger.error(es)
self
.
logger
.
info
(
"-----------------------------------Alg. Module-----------------------------------"
)
self
.
logger
.
info
(
f
'======================================= 期望行程计算 ======================================='
)
if
task
==
-
2
:
if
task
==
-
2
:
################################################ 矿卡启动 ###############################################
################################################ 矿卡启动 ###############################################
...
...
core/group.py
View file @
3cf7fbbf
...
@@ -412,6 +412,9 @@ class GroupDispatcher:
...
@@ -412,6 +412,9 @@ class GroupDispatcher:
assert
issubclass
(
Solver
,
AlgorithmBase
)
assert
issubclass
(
Solver
,
AlgorithmBase
)
solver
=
Solver
(
self
.
group
,
self
.
group
.
truck
,
self
.
group
.
pre_sch
)
# solver algorithm init
solver
=
Solver
(
self
.
group
,
self
.
group
.
truck
,
self
.
group
.
pre_sch
)
# solver algorithm init
self
.
logger
.
info
(
f
'================================== 分组调度开始 {self.group.group_name} =================================='
)
self
.
logger
.
info
(
f
'分组 {self.group.group_name} 调度计算-调度模式 {self.group.group_mode}'
)
self
.
logger
.
info
(
f
'分组 {self.group.group_name} 调度计算-调度模式 {self.group.group_mode}'
)
for
truck_id
in
list
(
self
.
group
.
group_trucks
):
for
truck_id
in
list
(
self
.
group
.
group_trucks
):
...
@@ -419,7 +422,8 @@ class GroupDispatcher:
...
@@ -419,7 +422,8 @@ class GroupDispatcher:
# construct CurrentTruck obj.
# construct CurrentTruck obj.
current_truck
=
self
.
truck_construct
(
truck_id
)
current_truck
=
self
.
truck_construct
(
truck_id
)
self
.
logger
.
info
(
f
'======================= 开始处理调度车辆 {current_truck.get_name()} ======================='
)
self
.
logger
.
info
(
f
'============================= 车辆调度开始 {current_truck.get_name()} ============================='
)
try
:
try
:
# 全智能模式
# 全智能模式
...
@@ -449,7 +453,11 @@ class GroupDispatcher:
...
@@ -449,7 +453,11 @@ class GroupDispatcher:
self
.
logger
.
error
(
"调度调用异常"
)
self
.
logger
.
error
(
"调度调用异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
)
self
.
logger
.
info
(
f
'======================= 派车计划计算结束 {current_truck.get_name()} ======================='
)
self
.
logger
.
info
(
f
'============================= 车辆调度结束 {current_truck.get_name()} ============================='
)
self
.
logger
.
info
(
f
'================================== 分组调度结束 {self.group.group_name} =================================='
)
return
truck_dispatch
return
truck_dispatch
...
@@ -713,8 +721,6 @@ class GroupDispatcher:
...
@@ -713,8 +721,6 @@ class GroupDispatcher:
and store them in a dictionary.
and store them in a dictionary.
"""
"""
self
.
logger
.
info
(
f
'调度车辆 {truck_id}'
)
# try:
# try:
# get truck index from mapping
# get truck index from mapping
if
truck_id
not
in
self
.
group
.
truck
.
truck_uuid_to_index_dict
:
if
truck_id
not
in
self
.
group
.
truck
.
truck_uuid_to_index_dict
:
...
...
core/schedule.py
View file @
3cf7fbbf
...
@@ -131,6 +131,8 @@ class PreSchedule:
...
@@ -131,6 +131,8 @@ class PreSchedule:
loading_task_time
=
self
.
excavator
.
get_loading_task_time
()
loading_task_time
=
self
.
excavator
.
get_loading_task_time
()
excavator_uuid_to_name_dict
=
get_value
(
"excavator_uuid_to_name_dict"
)
try
:
try
:
now
=
float
(
now
=
float
(
...
@@ -189,9 +191,10 @@ class PreSchedule:
...
@@ -189,9 +191,10 @@ class PreSchedule:
# self.excavator_avl_time[excavator_index] = now
# self.excavator_avl_time[excavator_index] = now
count
=
0
count
=
0
self
.
logger
.
info
(
"
update_excavator_avl_time-
excavator_avl_ls"
)
self
.
logger
.
info
(
"excavator_avl_ls"
)
for
excavator_id
in
self
.
excavator
.
excavator_uuid_to_index_dict
.
keys
():
for
excavator_id
in
self
.
excavator
.
excavator_uuid_to_index_dict
.
keys
():
self
.
logger
.
info
(
f
'{excavator_id} {excavator_avl_ls[count]}'
)
excavator_name
=
excavator_uuid_to_name_dict
[
excavator_id
]
self
.
logger
.
info
(
f
'{excavator_name} {excavator_avl_ls[count]}'
)
count
+=
1
count
+=
1
# self.logger.info(get_value("dynamic_excavator_set"))
# self.logger.info(get_value("dynamic_excavator_set"))
# self.logger.info(excavator_avl_ls)
# self.logger.info(excavator_avl_ls)
...
@@ -227,6 +230,8 @@ class PreSchedule:
...
@@ -227,6 +230,8 @@ class PreSchedule:
unloading_task_time
=
self
.
dump
.
get_unloading_task_time
()
unloading_task_time
=
self
.
dump
.
get_unloading_task_time
()
dump_uuid_to_name_dict
=
get_value
(
"dump_uuid_to_name_dict"
)
# try:
# try:
now
=
float
(
now
=
float
(
...
@@ -260,9 +265,10 @@ class PreSchedule:
...
@@ -260,9 +265,10 @@ class PreSchedule:
# self.truck_avl_time[int(tmp[truck_id][1])] = now
# self.truck_avl_time[int(tmp[truck_id][1])] = now
count
=
0
count
=
0
self
.
logger
.
info
(
"
update_dump_avl_time-
dump_avl_ls"
)
self
.
logger
.
info
(
"dump_avl_ls"
)
for
dump_id
in
get_value
(
"dynamic_dump_set"
):
for
dump_id
in
get_value
(
"dynamic_dump_set"
):
self
.
logger
.
info
(
f
'{dump_id} {dump_avl_ls[count]}'
)
dump_name
=
dump_uuid_to_name_dict
[
dump_id
]
self
.
logger
.
info
(
f
'{dump_name} {dump_avl_ls[count]}'
)
count
+=
1
count
+=
1
# self.logger.info(get_value("dynamic_dump_set"))
# self.logger.info(get_value("dynamic_dump_set"))
# self.logger.info(dump_avl_ls)
# self.logger.info(dump_avl_ls)
...
...
core/submit.py
View file @
3cf7fbbf
...
@@ -62,12 +62,6 @@ class DispatchSubmission:
...
@@ -62,12 +62,6 @@ class DispatchSubmission:
record
=
{
"truckId"
:
truck_id
}
record
=
{
"truckId"
:
truck_id
}
# if group_id is None or DispatchInfo.get_group_mode(group_id) is None:
# group_mode = 3
# self.logger.error("调度模式读取异常-设置为固定派车模式")
# else:
# group_mode = DispatchInfo.get_group_mode(group_id)
self
.
logger
.
info
(
f
'调度模式 {group_mode}'
)
self
.
logger
.
info
(
f
'调度模式 {group_mode}'
)
if
group_mode
==
3
:
if
group_mode
==
3
:
...
@@ -97,10 +91,10 @@ class DispatchSubmission:
...
@@ -97,10 +91,10 @@ class DispatchSubmission:
"""
"""
if
(
task
in
[
1
,
2
])
or
(
task
==
3
and
state
==
2
):
# 车辆位于装载区,或车辆重载等待
if
(
task
in
[
1
,
2
])
or
(
task
==
3
and
state
==
2
):
# 车辆位于装载区,或车辆重载等待
if
task
in
[
1
,
2
]:
#
if task in [1, 2]:
self
.
logger
.
info
(
f
'车辆 {truck_id} 装载区调度'
)
#
self.logger.info(f'车辆 {truck_id} 装载区调度')
else
:
#
else:
self
.
logger
.
info
(
f
'车辆 {truck_id} 重载二次调度'
)
#
self.logger.info(f'车辆 {truck_id} 重载二次调度')
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if
dispatch_seq
[
1
]
is
None
or
(
dispatch_seq
[
1
]
not
in
DispatchInfo
.
unload_area_dump_dict
):
if
dispatch_seq
[
1
]
is
None
or
(
dispatch_seq
[
1
]
not
in
DispatchInfo
.
unload_area_dump_dict
):
...
@@ -126,12 +120,6 @@ class DispatchSubmission:
...
@@ -126,12 +120,6 @@ class DispatchSubmission:
# TODO: 判断了两次是否拥堵,需要改善
# TODO: 判断了两次是否拥堵,需要改善
# # 车辆重载等待,且前方道路阻塞
# if self.topo is not None \
# and task == 3 \
# and truck_id in self.truck.get_truck_lane_locate_dict() \
# and self.truck.get_truck_lane_locate_dict()[truck_id] in self.topo.cross_bf_lanes:
# 车辆重载等待,且前方道路阻塞
# 车辆重载等待,且前方道路阻塞
if
self
.
topo
is
not
None
and
redispatch
:
if
self
.
topo
is
not
None
and
redispatch
:
# try:
# try:
...
@@ -143,14 +131,7 @@ class DispatchSubmission:
...
@@ -143,14 +131,7 @@ class DispatchSubmission:
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
POST
(
truck_id
)
POST
(
truck_id
)
# else:
# self.logger.info("车辆已完成二次调度-无需更改派车计划")
# except Exception as es:
# self.logger.error(es)
# self.logger.error("二次调度失败")
# record["isTemp"] = False
# redis5.set(truck_id, str(json.dumps(record)))
else
:
else
:
self
.
logger
.
info
(
"正常调度前往卸载区"
)
self
.
logger
.
info
(
"正常调度前往卸载区"
)
record
[
"isTemp"
]
=
False
record
[
"isTemp"
]
=
False
...
@@ -161,12 +142,12 @@ class DispatchSubmission:
...
@@ -161,12 +142,12 @@ class DispatchSubmission:
elif
(
task
in
[
-
2
,
4
,
5
])
or
(
task
==
0
and
state
==
2
):
# 车辆位于备停区或位于卸载区,或车辆空载等待
elif
(
task
in
[
-
2
,
4
,
5
])
or
(
task
==
0
and
state
==
2
):
# 车辆位于备停区或位于卸载区,或车辆空载等待
if
task
==
-
2
:
#
if task == -2:
self
.
logger
.
info
(
f
'车辆 {truck_id} 备停区调度'
)
#
self.logger.info(f'车辆 {truck_id} 备停区调度')
elif
task
in
[
4
,
5
]:
#
elif task in [4, 5]:
self
.
logger
.
info
(
f
'车辆 {truck_id} 卸载区调度'
)
#
self.logger.info(f'车辆 {truck_id} 卸载区调度')
else
:
#
else:
self
.
logger
.
info
(
f
'车辆 {truck_id} 空载二次调度'
)
#
self.logger.info(f'车辆 {truck_id} 空载二次调度')
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if
dispatch_seq
[
0
]
is
None
:
if
dispatch_seq
[
0
]
is
None
:
...
@@ -192,12 +173,6 @@ class DispatchSubmission:
...
@@ -192,12 +173,6 @@ class DispatchSubmission:
if
self
.
topo
is
not
None
:
if
self
.
topo
is
not
None
:
# # 车辆重载等待,且前方道路阻塞
# if self.topo is not None \
# and task == 0 \
# and truck_id in self.truck.get_truck_lane_locate_dict() \
# and self.truck.get_truck_lane_locate_dict()[truck_id] in self.topo.cross_bf_lanes:
# 车辆重载等待,且前方道路阻塞
# 车辆重载等待,且前方道路阻塞
if
self
.
topo
is
not
None
and
redispatch
:
if
self
.
topo
is
not
None
and
redispatch
:
# 车辆停车等待
# 车辆停车等待
...
@@ -210,13 +185,6 @@ class DispatchSubmission:
...
@@ -210,13 +185,6 @@ class DispatchSubmission:
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
POST
(
truck_id
)
POST
(
truck_id
)
# else:
# self.logger.info("车辆已完成二次调度-无需更改派车计划")
# except Exception as es:
# self.logger.error(es)
# self.logger.error("二次调度失败")
# record["isTemp"] = False
# redis5.set(truck_id, str(json.dumps(record)))
else
:
else
:
self
.
logger
.
info
(
"正常调度前往装载区"
)
self
.
logger
.
info
(
"正常调度前往装载区"
)
...
@@ -224,7 +192,12 @@ class DispatchSubmission:
...
@@ -224,7 +192,12 @@ 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
)))
# self.logger.error("调度结果写入异常-矿卡重载")
else
:
self
.
logger
.
info
(
"正常调度前往装载区"
)
record
[
"isTemp"
]
=
False
self
.
logger
.
info
(
f
'redis 注入 {record}'
)
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
else
:
else
:
pass
pass
...
...
equipment/excavator.py
View file @
3cf7fbbf
...
@@ -149,9 +149,9 @@ class ExcavatorInfo(WalkManage):
...
@@ -149,9 +149,9 @@ class ExcavatorInfo(WalkManage):
for
excavator_id
in
get_value
(
"dynamic_excavator_set"
):
for
excavator_id
in
get_value
(
"dynamic_excavator_set"
):
try
:
try
:
item
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
excavator_id
)
.
first
()
item
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
excavator_id
)
.
first
()
self
.
logger
.
info
(
"excavator_priority_coefficient"
)
#
self.logger.info("excavator_priority_coefficient")
self
.
logger
.
info
(
self
.
excavator_priority_coefficient
)
#
self.logger.info(self.excavator_priority_coefficient)
self
.
excavator_priority_coefficient
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
item
.
priority
+
1
#
self.excavator_priority_coefficient[self.excavator_uuid_to_index_dict[excavator_id]] = item.priority + 1
# 物料优先级控制
# 物料优先级控制
rule
=
2
rule
=
2
...
@@ -236,8 +236,6 @@ class ExcavatorInfo(WalkManage):
...
@@ -236,8 +236,6 @@ class ExcavatorInfo(WalkManage):
self
.
logger
.
info
(
"物料优先级规则"
)
self
.
logger
.
info
(
"物料优先级规则"
)
self
.
logger
.
info
(
rule7
)
self
.
logger
.
info
(
rule7
)
print
(
"truck.excavator_uuid_index_dict"
)
print
(
self
.
excavator_uuid_to_index_dict
)
# # 用于动态调度的挖机设备
# # 用于动态调度的挖机设备
# self.dynamic_excavator_set = set(update_autodisp_excavator())
# self.dynamic_excavator_set = set(update_autodisp_excavator())
#
#
...
...
equipment/truck.py
View file @
3cf7fbbf
...
@@ -135,8 +135,6 @@ class TruckInfo(WalkManage):
...
@@ -135,8 +135,6 @@ class TruckInfo(WalkManage):
def
get_truck_lane_locate_dict
(
self
):
def
get_truck_lane_locate_dict
(
self
):
return
self
.
truck_lane_locate_dict
return
self
.
truck_lane_locate_dict
################################################ short term update ################################################
# TODO: 应该一次读取形成一个对象,然后分配各属性
# TODO: 应该一次读取形成一个对象,然后分配各属性
# 更新矿卡当前任务
# 更新矿卡当前任务
def
update_truck_current_task
(
self
):
def
update_truck_current_task
(
self
):
...
@@ -172,31 +170,9 @@ class TruckInfo(WalkManage):
...
@@ -172,31 +170,9 @@ class TruckInfo(WalkManage):
self
.
logger
.
warning
(
"读取矿卡任务异常-reids读取异常"
)
self
.
logger
.
warning
(
"读取矿卡任务异常-reids读取异常"
)
self
.
logger
.
warning
(
es
)
self
.
logger
.
warning
(
es
)
self
.
logger
.
info
(
"矿卡
当前任务:
"
)
self
.
logger
.
info
(
"矿卡
任务信息
"
)
self
.
logger
.
info
(
self
.
truck_current_task
)
self
.
logger
.
info
(
self
.
truck_current_task
)
# logger.info("device_name_set,大小")
# logger.info(len(device_name_set))
# logger.info("device_name_set")
# logger.info(device_name_set)
# self.truck_current_task = {}
#
# dynamic_truck_set = get_value("dynamic_truck_set")
#
# for item in dynamic_truck_set:
# # try:
# # item = item.decode(encoding="utf-8")
# key_value_dict = redis2.hgetall(item) # reids str可以自动转为bytes
# currentTask = int(key_value_dict[str_to_byte("currentTask")])
# self.truck_current_task[item] = currentTask
# # except Exception as es:
# # logger.error("读取矿卡任务异常-reids读取异常")
# # logger.error(es)
#
# logger.info("矿卡当前任务:")
# logger.info(self.truck_current_task)
def
update_truck_is_temp
(
self
):
def
update_truck_is_temp
(
self
):
"""
"""
...
@@ -220,7 +196,7 @@ class TruckInfo(WalkManage):
...
@@ -220,7 +196,7 @@ class TruckInfo(WalkManage):
if
key_value_dict
is
None
:
if
key_value_dict
is
None
:
# raise CoreException(108, f'车辆{item}不存在于redis5')
# raise CoreException(108, f'车辆{item}不存在于redis5')
self
.
logger
.
warning
(
f
'车辆{item}不存在于redis5'
)
self
.
logger
.
warning
(
f
'车辆{item}不存在于redis5
, 无法读取 temp 信息
'
)
isTemp
=
True
isTemp
=
True
else
:
else
:
key_value_dict
=
json
.
loads
(
byte_to_str
(
key_value_dict
))
key_value_dict
=
json
.
loads
(
byte_to_str
(
key_value_dict
))
...
@@ -234,12 +210,11 @@ class TruckInfo(WalkManage):
...
@@ -234,12 +210,11 @@ class TruckInfo(WalkManage):
else
:
else
:
continue
continue
# print(f'here3 {item} {bool(isTemp)}')
except
Exception
as
es
:
except
Exception
as
es
:
self
.
logger
.
warning
(
"读取矿卡任务异常-reids读取异常"
)
self
.
logger
.
warning
(
"读取矿卡任务异常-reids读取异常"
)
self
.
logger
.
warning
(
es
)
self
.
logger
.
warning
(
es
)
self
.
logger
.
info
(
"
isTemp
"
)
self
.
logger
.
info
(
"
矿卡临时状态信息
"
)
self
.
logger
.
info
(
self
.
truck_is_temp
)
self
.
logger
.
info
(
self
.
truck_is_temp
)
# 更新矿卡最后装载/卸载时间
# 更新矿卡最后装载/卸载时间
...
@@ -253,6 +228,7 @@ class TruckInfo(WalkManage):
...
@@ -253,6 +228,7 @@ class TruckInfo(WalkManage):
try
:
try
:
truck_uuid_to_name_dict
=
get_value
(
"truck_uuid_to_name_dict"
)
truck_uuid_to_name_dict
=
get_value
(
"truck_uuid_to_name_dict"
)
for
item
in
self
.
dynamic_truck_set
:
for
item
in
self
.
dynamic_truck_set
:
truck_name
=
truck_uuid_to_name_dict
[
item
]
key_value_dict
=
redis2
.
hgetall
(
truck_uuid_to_name_dict
[
item
])
key_value_dict
=
redis2
.
hgetall
(
truck_uuid_to_name_dict
[
item
])
device_type
=
int
(
key_value_dict
[
str_to_byte
(
"type"
)])
device_type
=
int
(
key_value_dict
[
str_to_byte
(
"type"
)])
# 判断是否为矿卡
# 判断是否为矿卡
...
@@ -262,65 +238,56 @@ class TruckInfo(WalkManage):
...
@@ -262,65 +238,56 @@ class TruckInfo(WalkManage):
if
str_to_byte
(
"lastLoadTime"
)
in
key_value_dict
.
keys
():
# 若最后装载时间存在
if
str_to_byte
(
"lastLoadTime"
)
in
key_value_dict
.
keys
():
# 若最后装载时间存在
last_load_time_tmp
=
eval
(
byte_to_str
(
key_value_dict
[
str_to_byte
(
"lastLoadTime"
)]))
last_load_time_tmp
=
eval
(
byte_to_str
(
key_value_dict
[
str_to_byte
(
"lastLoadTime"
)]))
tmp_time
=
datetime
.
strptime
(
last_load_time_tmp
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
tmp_time
=
datetime
.
strptime
(
last_load_time_tmp
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
tmp_time
>
datetime
.
strptime
(
"20
0
0-01-01 01:01:01"
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
):
# 若最后装载时间异常
if
tmp_time
>
datetime
.
strptime
(
"20
2
0-01-01 01:01:01"
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
):
# 若最后装载时间异常
self
.
last_load_time
[
item
]
=
tmp_time
self
.
last_load_time
[
item
]
=
tmp_time
else
:
else
:
self
.
last_load_time
[
item
]
=
datetime
.
now
()
self
.
last_load_time
[
item
]
=
datetime
.
now
()
# redis2.hsetnx(truck_uuid_to_name_dict[item], str_to_byte("lastLoadTime"),
# "\"" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\"")
self
.
logger
.
warning
(
"lastLoadTime is Error"
)
self
.
logger
.
info
(
"lastLoadTime is Error"
)
else
:
else
:
self
.
last_load_time
[
item
]
=
datetime
.
now
()
self
.
last_load_time
[
item
]
=
datetime
.
now
()
# redis2.hsetnx(truck_uuid_to_name_dict[item], str_to_byte("lastLoadTime"),
# "\"" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\"")
self
.
logger
.
warning
(
"lastLoadTime is None"
)
self
.
logger
.
info
(
"lastLoadTime is None"
)
self
.
relative_last_load_time
[
item
]
=
max
(
float
(
self
.
relative_last_load_time
[
item
]
=
float
(
(
self
.
last_load_time
[
item
]
-
self
.
start_time
)
(
self
.
last_load_time
[
item
]
-
self
.
start_time
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
)
)
)
,
0.0
)
# print("相对last_load_time", self.relative_last_load_time[item])
self
.
logger
.
info
(
"相对last_load_time"
)
# self.logger.info(f'{truck_name} 相对last_load_time'
)
self
.
logger
.
info
(
self
.
relative_last_load_time
[
item
])
#
self.logger.info(self.relative_last_load_time[item])
if
task
in
[
0
,
1
,
2
]:
# 矿卡空载行驶或仍未出场
if
task
in
[
0
,
1
,
2
]:
# 矿卡空载行驶或仍未出场
if
str_to_byte
(
"lastUnloadTime"
)
in
key_value_dict
.
keys
():
if
str_to_byte
(
"lastUnloadTime"
)
in
key_value_dict
.
keys
():
last_unload_time_tmp
=
eval
(
key_value_dict
[
str_to_byte
(
"lastUnloadTime"
)])
last_unload_time_tmp
=
eval
(
key_value_dict
[
str_to_byte
(
"lastUnloadTime"
)])
tmp_time
=
datetime
.
strptime
(
last_unload_time_tmp
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
tmp_time
=
datetime
.
strptime
(
last_unload_time_tmp
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
tmp_time
>
datetime
.
strptime
(
"20
0
0-01-01 01:01:01"
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
):
if
tmp_time
>
datetime
.
strptime
(
"20
2
0-01-01 01:01:01"
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
):
self
.
last_unload_time
[
item
]
=
tmp_time
self
.
last_unload_time
[
item
]
=
tmp_time
else
:
else
:
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
# redis2.hsetnx(truck_uuid_to_name_dict[item], str_to_byte("lastUnloadTime"),
# "\"" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\"")
self
.
logger
.
warning
(
"lastUnloadTime is Error"
)
self
.
logger
.
info
(
"lastUnloadTime is Error"
)
else
:
else
:
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
# key_value_dict[str_to_byte("lastUnloadTime")] = datetime.now().strftime(
# "%b %d, %Y %I:%M:%S %p"
self
.
logger
.
warning
(
"lastUnloadTime is None"
)
# )
self
.
relative_last_unload_time
[
item
]
=
max
(
float
(
# redis2.hsetnx(truck_uuid_to_name_dict[item], str_to_byte("lastUnloadTime"),
# "\"" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\"")
self
.
logger
.
info
(
"lastUnloadTime is None"
)
self
.
relative_last_unload_time
[
item
]
=
float
(
(
self
.
last_unload_time
[
item
]
-
self
.
start_time
)
(
self
.
last_unload_time
[
item
]
-
self
.
start_time
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
)
)
)
,
0.0
)
# print("相对last_unload_time", self.relative_last_unload_time[item])
self
.
logger
.
info
(
"相对last_unload_time"
)
# self.logger.info(f'{truck_name} 相对last_unload_time'
)
self
.
logger
.
info
(
self
.
relative_last_unload_time
[
item
])
#
self.logger.info(self.relative_last_unload_time[item])
elif
task
==
-
2
:
elif
task
==
-
2
:
# print(datetime.now())
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
# key_value_dict["lastUnloadTime"] = datetime.now().strftime(
# "%b %d, %Y %I:%M:%S %p")
# self.logger.info(f'{truck_name} 相对last_unload_time')
# if str_to_byte("lastUnloadTime") in key_value_dict.keys():
# self.logger.info(self.relative_last_unload_time[item])
# # redis2.hset(truck_uuid_to_name_dict[item], str_to_byte("lastUnloadTime"),
# # datetime.now().strftime("%b %d, %Y %I:%M:%S %p"))
self
.
logger
.
info
(
f
'上次装载时间信息'
)
# redis2.hset(truck_uuid_to_name_dict[item], str_to_byte("lastUnloadTime"),
self
.
logger
.
info
(
self
.
relative_last_unload_time
)
# "\"" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\"")
# else:
self
.
logger
.
info
(
f
'上次卸载时间信息'
)
# redis2.hsetnx(truck_uuid_to_name_dict[item], str_to_byte("lastUnloadTime"),
self
.
logger
.
info
(
self
.
relative_last_load_time
)
# "\"" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\"")
# # redis2.hsetnx(truck_uuid_to_name_dict[item], str(json.dumps(key_value_dict)))
except
Exception
as
es
:
except
Exception
as
es
:
self
.
logger
.
error
(
"读取矿卡可用时间异常-redis读取异常"
)
self
.
logger
.
error
(
"读取矿卡可用时间异常-redis读取异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
)
...
@@ -330,15 +297,18 @@ class TruckInfo(WalkManage):
...
@@ -330,15 +297,18 @@ class TruckInfo(WalkManage):
walk_time_to_load_area
=
WalkManage
.
walk_time_to_load_area
walk_time_to_load_area
=
WalkManage
.
walk_time_to_load_area
walk_time_to_unload_area
=
WalkManage
.
walk_time_to_unload_area
walk_time_to_unload_area
=
WalkManage
.
walk_time_to_unload_area
truck_uuid_to_name_dict
=
get_value
(
"truck_uuid_to_name_dict"
)
# 初始化矿卡行程, -1代表备停区
# 初始化矿卡行程, -1代表备停区
self
.
truck_current_trip
=
np
.
full
((
self
.
dynamic_truck_num
,
2
),
-
1
)
self
.
truck_current_trip
=
np
.
full
((
self
.
dynamic_truck_num
,
2
),
-
1
)
ab
=
self
.
dynamic_truck_num
for
i
in
range
(
self
.
dynamic_truck_num
):
for
i
in
range
(
self
.
dynamic_truck_num
):
try
:
try
:
session_mysql
.
commit
()
session_mysql
.
commit
()
truck_id
=
self
.
truck_index_to_uuid_dict
[
i
]
truck_id
=
self
.
truck_index_to_uuid_dict
[
i
]
truck_name
=
truck_uuid_to_name_dict
[
truck_id
]
task
=
self
.
truck_current_task
[
self
.
truck_index_to_uuid_dict
[
i
]]
task
=
self
.
truck_current_task
[
self
.
truck_index_to_uuid_dict
[
i
]]
# print("truck_task:", truck_id, task)
item
=
(
item
=
(
session_mysql
.
query
(
EquipmentPair
)
session_mysql
.
query
(
EquipmentPair
)
.
filter_by
(
truck_id
=
truck_id
,
isdeleted
=
0
)
.
filter_by
(
truck_id
=
truck_id
,
isdeleted
=
0
)
...
@@ -384,10 +354,12 @@ class TruckInfo(WalkManage):
...
@@ -384,10 +354,12 @@ class TruckInfo(WalkManage):
+
walk_time_to_load_area
[
start_area_index
][
end_area_index
]
+
walk_time_to_load_area
[
start_area_index
][
end_area_index
]
)
)
self
.
logger
.
info
(
f
'update_truck_trip-{truck_id}-last_unload_time'
)
# self.logger.info(f'{truck_name}-last_unload_time')
self
.
logger
.
info
(
last_unload_time
)
# self.logger.info(last_unload_time)
self
.
logger
.
info
(
f
'update_truck_trip-walk_time_to_load_area'
)
# self.logger.info(f'{truck_name}-walk_time_to_load_area')
self
.
logger
.
info
(
walk_time_to_load_area
[
start_area_index
][
end_area_index
])
# self.logger.info(walk_time_to_load_area[start_area_index][end_area_index])
# self.logger.info(f'{truck_name}-truck_reach_excavator')
# self.logger.info(self.cur_truck_reach_excavator[i])
# # 目的地矿卡数加一
# # 目的地矿卡数加一
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
...
@@ -420,22 +392,17 @@ class TruckInfo(WalkManage):
...
@@ -420,22 +392,17 @@ class TruckInfo(WalkManage):
self
.
truck_current_trip
[
i
]
=
[
start_eq_index
,
end_eq_index
]
self
.
truck_current_trip
[
i
]
=
[
start_eq_index
,
end_eq_index
]
self
.
logger
.
info
(
"walk_time_to_unload_area"
)
self
.
logger
.
info
(
walk_time_to_unload_area
)
self
.
logger
.
info
(
"end_area_index"
)
self
.
logger
.
info
(
end_area_index
)
self
.
logger
.
info
(
"start_area_index"
)
self
.
logger
.
info
(
start_area_index
)
self
.
cur_truck_reach_dump
[
i
]
=
(
self
.
cur_truck_reach_dump
[
i
]
=
(
last_load_time
last_load_time
+
walk_time_to_unload_area
[
end_area_index
][
start_area_index
]
+
walk_time_to_unload_area
[
end_area_index
][
start_area_index
]
)
)
self
.
logger
.
info
(
f
'update_truck_trip-{truck_id}-last_load_time'
)
# self.logger.info(f'{truck_name}-last_load_time')
self
.
logger
.
info
(
last_load_time
)
# self.logger.info(last_load_time)
self
.
logger
.
info
(
f
'update_truck_trip-walk_time_to_unload_area'
)
# self.logger.info(f'{truck_name}-walk_time_to_unload_area')
self
.
logger
.
info
(
walk_time_to_unload_area
[
end_area_index
][
start_area_index
])
# self.logger.info(walk_time_to_unload_area[end_area_index][start_area_index])
# self.logger.info(f'{truck_name}-truck_reach_dump')
# self.logger.info(self.cur_truck_reach_dump[i])
# 目的地矿卡数加一
# 目的地矿卡数加一
# self.dump_hold_truck_num[end_eqp_index] = self.dump_hold_truck_num[end_eqp_index] + 1
# self.dump_hold_truck_num[end_eqp_index] = self.dump_hold_truck_num[end_eqp_index] + 1
...
@@ -448,14 +415,12 @@ class TruckInfo(WalkManage):
...
@@ -448,14 +415,12 @@ class TruckInfo(WalkManage):
self
.
logger
.
error
(
"矿卡行程读取异常"
)
self
.
logger
.
error
(
"矿卡行程读取异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
)
# print("self.dump_hold_truck_num")
self
.
logger
.
info
(
f
'车辆预期抵达挖机时间信息'
)
# print(self.dump_hold_truck_num)
self
.
logger
.
info
(
self
.
cur_truck_reach_excavator
)
#
self
.
logger
.
info
(
f
'车辆预期抵达电铲时间信息'
)
# print("self.excavator_hold_truck_num")
self
.
logger
.
info
(
self
.
cur_truck_reach_dump
)
# print(self.excavator_hold_truck_num)
self
.
truck_current_trip
.
flatten
()
self
.
truck_current_trip
.
flatten
()
self
.
logger
.
info
(
"
当前矿卡行程:
"
)
self
.
logger
.
info
(
"
矿卡行程信息
"
)
self
.
logger
.
info
(
self
.
truck_current_trip
)
self
.
logger
.
info
(
self
.
truck_current_trip
)
def
update_eqp_hold_truck
(
self
):
def
update_eqp_hold_truck
(
self
):
...
@@ -464,14 +429,9 @@ class TruckInfo(WalkManage):
...
@@ -464,14 +429,9 @@ class TruckInfo(WalkManage):
try
:
try
:
session_mysql
.
commit
()
session_mysql
.
commit
()
truck_id
=
self
.
truck_index_to_uuid_dict
[
i
]
truck_id
=
self
.
truck_index_to_uuid_dict
[
i
]
aa
=
self
.
truck_index_to_uuid_dict
bb
=
self
.
truck_current_task
task
=
self
.
truck_current_task
[
self
.
truck_index_to_uuid_dict
[
i
]]
task
=
self
.
truck_current_task
[
self
.
truck_index_to_uuid_dict
[
i
]]
# item = (
# session_mysql.query(EquipmentPair)
# .filter_by(truck_id=truck_id, isdeleted=0)
# .first()
# )
item
=
(
item
=
(
session_mysql
.
query
(
DispatchSetting
)
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
truck_id
=
truck_id
,
isdeleted
=
0
)
.
filter_by
(
truck_id
=
truck_id
,
isdeleted
=
0
)
...
@@ -521,12 +481,6 @@ class TruckInfo(WalkManage):
...
@@ -521,12 +481,6 @@ class TruckInfo(WalkManage):
self
.
logger
.
error
(
"驶往设备矿卡数量统计异常"
)
self
.
logger
.
error
(
"驶往设备矿卡数量统计异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
)
print
(
"self.dump_hold_truck_num"
)
print
(
self
.
dump_hold_truck_num
)
print
(
"self.excavator_hold_truck_num"
)
print
(
self
.
excavator_hold_truck_num
)
def
update_trucks_lane_locate
(
self
):
def
update_trucks_lane_locate
(
self
):
"""
"""
get trucks locates.
get trucks locates.
...
@@ -555,6 +509,9 @@ class TruckInfo(WalkManage):
...
@@ -555,6 +509,9 @@ class TruckInfo(WalkManage):
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
f
'车辆 {truck_id} 位置信息丢失'
)
self
.
logger
.
error
(
f
'车辆 {truck_id} 位置信息丢失'
)
self
.
logger
.
info
(
f
'矿卡位置信息'
)
self
.
logger
.
info
(
self
.
truck_lane_locate_dict
)
################################################ long term update ################################################
################################################ long term update ################################################
# 更新矿卡实际容量
# 更新矿卡实际容量
...
@@ -597,6 +554,7 @@ class TruckInfo(WalkManage):
...
@@ -597,6 +554,7 @@ class TruckInfo(WalkManage):
except
Exception
as
es
:
except
Exception
as
es
:
session_postgre
.
rollback
()
session_postgre
.
rollback
()
session_mysql
.
rollback
()
session_mysql
.
rollback
()
self
.
logger
.
error
(
es
)
truck_index
=
self
.
truck_uuid_to_index_dict
[
truck_id
]
truck_index
=
self
.
truck_uuid_to_index_dict
[
truck_id
]
if
item
.
priority
==
0
:
if
item
.
priority
==
0
:
self
.
truck_priority
[
truck_index
]
=
0
self
.
truck_priority
[
truck_index
]
=
0
...
@@ -641,7 +599,7 @@ class TruckInfo(WalkManage):
...
@@ -641,7 +599,7 @@ class TruckInfo(WalkManage):
if
item
.
bind_list
is
not
None
:
if
item
.
bind_list
is
not
None
:
for
truck_name
in
json
.
loads
(
item
.
bind_list
):
for
truck_name
in
json
.
loads
(
item
.
bind_list
):
if
truck_name
not
in
truck_name_to_uuid_dict
:
if
truck_name
not
in
truck_name_to_uuid_dict
:
self
.
logger
.
error
(
f
'truck_name_to_uuid_dict 不存在 {truck_name}'
)
self
.
logger
.
error
(
f
'truck_name_to_uuid_dict
(db2)
不存在 {truck_name}'
)
continue
continue
self
.
truck_excavator_bind
[
self
.
truck_excavator_bind
[
truck_name_to_uuid_dict
[
truck_name
]
truck_name_to_uuid_dict
[
truck_name
]
...
@@ -894,7 +852,7 @@ class TruckInfo(WalkManage):
...
@@ -894,7 +852,7 @@ class TruckInfo(WalkManage):
session_postgre
.
rollback
()
session_postgre
.
rollback
()
session_mysql
.
rollback
()
session_mysql
.
rollback
()
self
.
logger
.
info
(
"Para truck update!"
)
self
.
logger
.
info
(
f
'======================================= 矿卡信息读取 ======================================='
)
# 更新有效载重
# 更新有效载重
self
.
update_truck_payload
()
self
.
update_truck_payload
()
...
...
realtime_dispatch_test.py
View file @
3cf7fbbf
...
@@ -64,6 +64,8 @@ def process(dispatcher):
...
@@ -64,6 +64,8 @@ def process(dispatcher):
# 更新周期参数
# 更新周期参数
logger
.
info
(
"#####################################周期更新开始#####################################"
)
logger
.
info
(
"#####################################周期更新开始#####################################"
)
logger
.
info
(
f
'================================== 全局信息读取 =================================='
)
# 清空数据库缓存
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
commit
()
session_mysql
.
flush
()
session_mysql
.
flush
()
...
@@ -75,6 +77,9 @@ def process(dispatcher):
...
@@ -75,6 +77,9 @@ def process(dispatcher):
# 更新全局参数信息
# 更新全局参数信息
global_period_para_update
()
global_period_para_update
()
logger
.
info
(
f
'================================== 调度信息读取 =================================='
)
# 更新调度信息
# 更新调度信息
DispatchInfo
.
reset
()
DispatchInfo
.
reset
()
...
@@ -86,22 +91,22 @@ def process(dispatcher):
...
@@ -86,22 +91,22 @@ def process(dispatcher):
DispatchInfo
.
update_group_name
()
DispatchInfo
.
update_group_name
()
# 打印日志信息
#
#
打印日志信息
logger
.
info
(
"Dispatchinfo,更新后信息"
)
#
logger.info("Dispatchinfo,更新后信息")
logger
.
info
(
"group_set"
)
#
logger.info("group_set")
logger
.
info
(
DispatchInfo
.
group_set
)
#
logger.info(DispatchInfo.group_set)
logger
.
info
(
"group_excavator_dict"
)
#
logger.info("group_excavator_dict")
logger
.
info
(
DispatchInfo
.
group_excavator_dict
)
#
logger.info(DispatchInfo.group_excavator_dict)
logger
.
info
(
"group_unload_area_dict"
)
#
logger.info("group_unload_area_dict")
logger
.
info
(
DispatchInfo
.
group_unload_area_dict
)
#
logger.info(DispatchInfo.group_unload_area_dict)
logger
.
info
(
"group_truck_dict"
)
#
logger.info("group_truck_dict")
logger
.
info
(
DispatchInfo
.
group_truck_dict
)
#
logger.info(DispatchInfo.group_truck_dict)
logger
.
info
(
"group_mode"
)
#
logger.info("group_mode")
logger
.
info
(
DispatchInfo
.
group_mode
)
#
logger.info(DispatchInfo.group_mode)
logger
.
info
(
"load_distance"
)
#
logger.info("load_distance")
logger
.
info
(
DispatchInfo
.
load_distance
)
#
logger.info(DispatchInfo.load_distance)
logger
.
info
(
"unload_distance"
)
#
logger.info("unload_distance")
logger
.
info
(
DispatchInfo
.
unload_distance
)
#
logger.info(DispatchInfo.unload_distance)
# logger.info("load_excavator_dict")
# logger.info("load_excavator_dict")
# logger.info(DispatchInfo.load_excavator_dict)
# logger.info(DispatchInfo.load_excavator_dict)
...
...
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