Commit db860cc7 authored by z5335534 Ao Guo's avatar z5335534 Ao Guo

空车智能,定铲派车,bug修复

parent 39d4f4f7
No preview for this file type
...@@ -157,9 +157,9 @@ class ExpectedTime(AlgorithmBase): ...@@ -157,9 +157,9 @@ class ExpectedTime(AlgorithmBase):
truck_avl_time = self.pre_sch.get_truck_avl_time(truck_id=truck_id) truck_avl_time = self.pre_sch.get_truck_avl_time(truck_id=truck_id)
group_dynamic_excavator_num = len(self.group.dump) group_dynamic_excavator_num = len(self.group.excavator)
group_dynamic_dump_num = len(self.group.excavator) group_dynamic_unload_area_num = len(self.group.unload_area)
except Exception as es: except Exception as es:
self.logger.error("车辆调度信息读取异常") self.logger.error("车辆调度信息读取异常")
...@@ -237,7 +237,7 @@ class ExpectedTime(AlgorithmBase): ...@@ -237,7 +237,7 @@ class ExpectedTime(AlgorithmBase):
excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id] excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id]
# 车辆驶往各目的地时间 # 车辆驶往各目的地时间
truck_reach_time = 60 * self.group.to_dump_distance[excavator_group_index, :] \ truck_reach_time = 60 * self.group.to_unload_area_distance[excavator_group_index, :] \
/ 1000 / self.truck.heavy_speed[truck_id] + truck_avl_time / 1000 / self.truck.heavy_speed[truck_id] + truck_avl_time
# 车辆得到服务时间 # 车辆得到服务时间
...@@ -261,7 +261,7 @@ class ExpectedTime(AlgorithmBase): ...@@ -261,7 +261,7 @@ class ExpectedTime(AlgorithmBase):
except Exception as es: except Exception as es:
self.logger.error("矿卡空载调度异常") self.logger.error("矿卡空载调度异常")
self.logger.error(es) self.logger.error(es)
transport_value = np.zeros(group_dynamic_dump_num) transport_value = np.zeros(group_dynamic_unload_area_num)
elif task in [3, 4, 5]: elif task in [3, 4, 5]:
################################################ 矿卡重载 ############################################### ################################################ 矿卡重载 ###############################################
...@@ -286,10 +286,10 @@ class ExpectedTime(AlgorithmBase): ...@@ -286,10 +286,10 @@ class ExpectedTime(AlgorithmBase):
dump_id = DeviceMap.dump_index_to_uuid_dict[int(trip[1])] dump_id = DeviceMap.dump_index_to_uuid_dict[int(trip[1])]
# 卸点对应分组编号 # 卸点对应分组编号
dump_group_index = self.group.dump_uuid_index_dict[dump_id] unload_area_group_index = self.group.unload_area_uuid_index_dict[unload_area_id]
# 车辆驶往各目的地时间 # 车辆驶往各目的地时间
truck_reach_time = 60 * self.group.to_excavator_distance[dump_group_index, :] \ truck_reach_time = 60 * self.group.to_excavator_distance[unload_area_group_index, :] \
/ 1000 / self.truck.empty_speed[truck_id] + truck_avl_time / 1000 / self.truck.empty_speed[truck_id] + truck_avl_time
# 计算车辆得到服务时间 # 计算车辆得到服务时间
...@@ -301,7 +301,7 @@ class ExpectedTime(AlgorithmBase): ...@@ -301,7 +301,7 @@ class ExpectedTime(AlgorithmBase):
except Exception as es: except Exception as es:
self.logger.error("矿卡重载调度异常") self.logger.error("矿卡重载调度异常")
self.logger.error(es) self.logger.error(es)
transport_value = np.zeros(group_dynamic_dump_num) transport_value = np.zeros(group_dynamic_unload_area_num)
return transport_value return transport_value
{ {
"para": { "para": {
"log_path": "/usr/local/fleet-log/dispatch", "log_path": "/Users/guoao/Desktop/work_log/wek46/code_1/integrated-scheduling-v4/Logs",
"empty_speed": 17, "empty_speed": 17,
"heavy_speed": 17, "heavy_speed": 17,
"dump_target_mass": 5000, "dump_target_mass": 5000,
...@@ -27,4 +27,4 @@ ...@@ -27,4 +27,4 @@
"host": "192.168.9.152", "host": "192.168.9.152",
"password": "Huituo@123" "password": "Huituo@123"
} }
} }
\ No newline at end of file
...@@ -51,7 +51,7 @@ class Dispatcher: ...@@ -51,7 +51,7 @@ class Dispatcher:
Generate and initialize dispatch groups. Generate and initialize dispatch groups.
:return: None :return: None
""" """
for group_id in DispatchInfo.group_dump_dict.keys(): for group_id in DispatchInfo.group_excavator_dict.keys():
group = Group(group_id, self.truck, self.pre_sch) group = Group(group_id, self.truck, self.pre_sch)
self.group_list.append(group) self.group_list.append(group)
...@@ -69,6 +69,7 @@ class Dispatcher: ...@@ -69,6 +69,7 @@ class Dispatcher:
:return: :return:
""" """
for group in self.group_list: for group in self.group_list:
truck_dispatch_plan_dict = group.group_dispatch(ExpectedTime) truck_dispatch_plan_dict = group.group_dispatch(ExpectedTime)
self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}') self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}')
self.submission.group_dispatch_to_redis(group, truck_dispatch_plan_dict) self.submission.group_dispatch_to_redis(group, truck_dispatch_plan_dict)
...@@ -112,10 +113,10 @@ class DispatchSubmission: ...@@ -112,10 +113,10 @@ class DispatchSubmission:
session_mysql.query(DispatchSetting) session_mysql.query(DispatchSetting)
.filter_by( .filter_by(
# exactor_id=dispatch_seq[0], # exactor_id=dispatch_seq[0],
dump_id=dispatch_seq[1], # dump_id=dispatch_seq[1],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
...@@ -125,7 +126,7 @@ class DispatchSubmission: ...@@ -125,7 +126,7 @@ class DispatchSubmission:
session_mysql.query(DispatchSetting) session_mysql.query(DispatchSetting)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
try: try:
record["id"] = item.id record["id"] = item.id
...@@ -148,11 +149,11 @@ class DispatchSubmission: ...@@ -148,11 +149,11 @@ class DispatchSubmission:
item = ( item = (
session_mysql.query(DispatchSetting) session_mysql.query(DispatchSetting)
.filter_by( .filter_by(
exactor_id=dispatch_seq[0], # exactor_id=dispatch_seq[0],
# dump_id=dispatch_seq[1], # dump_id=dispatch_seq[1],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
except Exception as es: except Exception as es:
...@@ -161,7 +162,7 @@ class DispatchSubmission: ...@@ -161,7 +162,7 @@ class DispatchSubmission:
session_mysql.query(DispatchSetting) session_mysql.query(DispatchSetting)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
try: try:
record["id"] = item.id record["id"] = item.id
record["exactorId"] = dispatch_seq[0] record["exactorId"] = dispatch_seq[0]
...@@ -183,10 +184,10 @@ class DispatchSubmission: ...@@ -183,10 +184,10 @@ class DispatchSubmission:
item = ( item = (
session_mysql.query(DispatchSetting) session_mysql.query(DispatchSetting)
.filter_by( .filter_by(
exactor_id=dispatch_seq[0], # exactor_id=dispatch_seq[0],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0).first()) isdeleted=0).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
...@@ -202,7 +203,7 @@ class DispatchSubmission: ...@@ -202,7 +203,7 @@ class DispatchSubmission:
session_mysql.query(DispatchSetting) session_mysql.query(DispatchSetting)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0).first()) isdeleted=0).first())
try: try:
......
...@@ -29,7 +29,7 @@ class Group: ...@@ -29,7 +29,7 @@ class Group:
""" Generate a group obj. """ Generate a group obj.
:param group_id: (uuid) group_id :param group_id: (uuid) group_id
""" """
self.to_dump_congestion = None self.to_unload_area_congestion = None
self.group_id = group_id self.group_id = group_id
self.group_mode = 1 self.group_mode = 1
self.truck = truck self.truck = truck
...@@ -37,23 +37,23 @@ class Group: ...@@ -37,23 +37,23 @@ class Group:
# group devices # group devices
self.excavator = {} # excavator_id -> unload_area_id self.excavator = {} # excavator_id -> unload_area_id
self.dump = {} # dump_id -> load_area_id self.unload_area = {} # unload_area_id -> load_area_id
self.truck_set = set() # truck_id self.truck_set = set() # truck_id
# road network info. # road network info.
self.to_excavator_distance = None self.to_excavator_distance = None
self.to_dump_distance = None self.to_unload_area_distance = None
self.park_to_excavator_distance = None self.park_to_excavator_distance = None
# self.to_excavator_congestion = None # self.to_excavator_congestion = None
# self.to_dump_congestion = None # self.to_unload_area_congestion = None
# self.park_to_excavator_congestion = None # self.park_to_excavator_congestion = None
# device map # device map
self.truck_uuid_index_dict = bidict() self.truck_uuid_index_dict = bidict()
self.excavator_uuid_index_dict = bidict() self.excavator_uuid_index_dict = bidict()
self.dump_uuid_index_dict = bidict() self.unload_area_uuid_index_dict = bidict()
def update_group_mode(self): def update_group_mode(self):
""" """
...@@ -72,7 +72,7 @@ class Group: ...@@ -72,7 +72,7 @@ class Group:
# update group devices # update group devices
# DispatchInfo.update_device_group_structure() # DispatchInfo.update_device_group_structure()
self.excavator = DispatchInfo.get_excavator(self.group_id) self.excavator = DispatchInfo.get_excavator(self.group_id)
self.dump = DispatchInfo.get_dump(self.group_id) self.unload_area = DispatchInfo.get_unload_area(self.group_id)
self.truck_set = DispatchInfo.get_truck_set(self.group_id) self.truck_set = DispatchInfo.get_truck_set(self.group_id)
def update_group_road_network(self): def update_group_road_network(self):
...@@ -83,7 +83,7 @@ class Group: ...@@ -83,7 +83,7 @@ class Group:
# update group road network # update group road network
# DispatchInfo.update_route_distance() # DispatchInfo.update_route_distance()
self.to_excavator_distance = DispatchInfo.get_to_excavator_distance(self.group_id) self.to_excavator_distance = DispatchInfo.get_to_excavator_distance(self.group_id)
self.to_dump_distance = DispatchInfo.get_to_dump_distance(self.group_id) self.to_unload_area_distance = DispatchInfo.get_to_unload_area_distance(self.group_id)
self.park_to_excavator_distance = DispatchInfo.get_park_to_excavator_distance(self.group_id) self.park_to_excavator_distance = DispatchInfo.get_park_to_excavator_distance(self.group_id)
def update_group_device_map(self): def update_group_device_map(self):
...@@ -96,15 +96,15 @@ class Group: ...@@ -96,15 +96,15 @@ class Group:
for i in range(len(self.excavator)): for i in range(len(self.excavator)):
self.excavator_uuid_index_dict[list(self.excavator)[i]] = i self.excavator_uuid_index_dict[list(self.excavator)[i]] = i
for i in range(len(self.dump)): for i in range(len(self.unload_area)):
self.dump_uuid_index_dict[list(self.dump)[i]] = i self.unload_area_uuid_index_dict[list(self.unload_area)[i]] = i
for i in range(len(self.truck_set)): for i in range(len(self.truck_set)):
self.truck_uuid_index_dict[list(self.truck_set)[i]] = i self.truck_uuid_index_dict[list(self.truck_set)[i]] = i
self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict) self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict)
self.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict) self.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict)
self.dump_uuid_index_dict = bidict(self.dump_uuid_index_dict) self.unload_area_uuid_index_dict = bidict(self.unload_area_uuid_index_dict)
# group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}} # group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
...@@ -127,31 +127,57 @@ class Group: ...@@ -127,31 +127,57 @@ class Group:
""" """
truck_dispatch = {} truck_dispatch = {}
assert issubclass(solver, AlgorithmBase) if self.group_mode == 1:
s = solver(self, self.truck, self.pre_sch) # algorithm init assert issubclass(solver, AlgorithmBase)
s = solver(self, self.truck, self.pre_sch) # algorithm init
tt = self.truck_set
for i in list(self.truck_set): for i in list(self.truck_set):
truck_trip = self.truck.get_truck_current_trip()[self.truck_uuid_index_dict[i]] truck_trip = self.truck.get_truck_current_trip()[self.truck_uuid_index_dict[i]]
truck_task = self.truck.get_truck_current_task()[i] truck_task = self.truck.get_truck_current_task()[i]
if truck_task in [-2, 3, 4]: if truck_task in [-2, 3, 4]:
next_excavator_value = s.solve(i) next_excavator_value = s.solve(i)
# min_index = next_excavator_list.index(min(next_excavator_list)) # min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value) min_index = np.argmin(next_excavator_value)
bb = self.excavator_uuid_index_dict next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index] if truck_task == -2:
if truck_task == -2: next_unload_area_id = "Park"
next_dump_id = "Park" else:
else: next_unload_area_id = self.unload_area_uuid_index_dict.inverse[truck_trip[-1]]
next_dump_id = self.dump_uuid_index_dict.inverse[truck_trip[-1]] truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
truck_dispatch[i] = [next_excavator_id, next_dump_id]
if truck_task in [0, 1]:
if truck_task in [0, 1]: next_unload_area_value = s.solve(i)
next_dump_value = s.solve(i) min_index = np.argmin(next_unload_area_value)
min_index = np.argmin(next_dump_value) next_unload_area_id = self.unload_area_uuid_index_dict.inverse[min_index]
next_dump_id = self.dump_uuid_index_dict.inverse[min_index] next_excavator_id = self.excavator_uuid_index_dict.inverse[truck_trip[-1]]
next_excavator_id = self.excavator_uuid_index_dict.inverse[truck_trip[-1]] truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
truck_dispatch[i] = [next_excavator_id, next_dump_id] # 空车智能模式
if self.group_mode == 2:
assert issubclass(solver, AlgorithmBase)
s = solver(self, self.truck, self.pre_sch) # algorithm init
for i in list(self.truck_set):
truck_trip = self.truck.get_truck_current_trip()[self.truck_uuid_index_dict[i]]
truck_task = self.truck.get_truck_current_task()[i]
if truck_task in [-2, 3, 4]:
next_excavator_value = s.solve(i)
# min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value)
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
if truck_task == -2:
next_unload_area_id = "Park"
else:
next_unload_area_id = self.unload_area_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
if truck_task in [0, 1]:
truck_dispatch[i] = DispatchInfo.get_truck_team_trip(i)
if self.group_mode == 3:
for i in list(self.truck_set):
truck_dispatch[i] = DispatchInfo.get_truck_team_trip(i)
if self.group_mode == 4:
pass
# return dispatch plan # return dispatch plan
return truck_dispatch return truck_dispatch
...@@ -177,22 +203,22 @@ class Group: ...@@ -177,22 +203,22 @@ class Group:
# #
# # group devices # # group devices
# self.excavator_dict = {} # excavator_id -> unload_area_id # self.excavator_dict = {} # excavator_id -> unload_area_id
# self.dump = {} # dump_id -> load_area_id # self.unload_area = {} # unload_area_id -> load_area_id
# self.truck_set = set() # truck_id # self.truck_set = set() # truck_id
# #
# # road network info. # # road network info.
# self.to_excavator_distance = None # self.to_excavator_distance = None
# self.to_dump_distance = None # self.to_unload_area_distance = None
# self.park_to_excavator_distance = None # self.park_to_excavator_distance = None
# #
# self.to_excavator_congestion = None # self.to_excavator_congestion = None
# self.to_dump_congestion = None # self.to_unload_area_congestion = None
# self.park_to_excavator_congestion = None # self.park_to_excavator_congestion = None
# #
# # device map # # device map
# self.truck_uuid_index_dict = bidict() # self.truck_uuid_index_dict = bidict()
# self.excavator_uuid_index_dict = bidict() # self.excavator_uuid_index_dict = bidict()
# self.dump_uuid_index_dict = bidict() # self.unload_area_uuid_index_dict = bidict()
# #
# def update_xx_(self): # def update_xx_(self):
# """ # """
......
This diff is collapsed.
...@@ -569,7 +569,7 @@ class DispatchSubmission: ...@@ -569,7 +569,7 @@ class DispatchSubmission:
exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][0]], exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][0]],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
except Exception as es: except Exception as es:
...@@ -578,7 +578,7 @@ class DispatchSubmission: ...@@ -578,7 +578,7 @@ class DispatchSubmission:
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
try: try:
record["exactorId"] = item.exactor_id record["exactorId"] = item.exactor_id
...@@ -598,11 +598,12 @@ class DispatchSubmission: ...@@ -598,11 +598,12 @@ class DispatchSubmission:
try: try:
item = ( item = (
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]], .filter_by(
exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]],
dump_id=DeviceMap.dump_index_to_uuid_dict[Seq[i][0]], dump_id=DeviceMap.dump_index_to_uuid_dict[Seq[i][0]],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
except Exception as es: except Exception as es:
...@@ -611,7 +612,7 @@ class DispatchSubmission: ...@@ -611,7 +612,7 @@ class DispatchSubmission:
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
try: try:
record["exactorId"] = self.excavator.excavator_index_to_uuid_dict[Seq[i][1]] record["exactorId"] = self.excavator.excavator_index_to_uuid_dict[Seq[i][1]]
record["dumpId"] = item.dump_id record["dumpId"] = item.dump_id
...@@ -634,7 +635,7 @@ class DispatchSubmission: ...@@ -634,7 +635,7 @@ class DispatchSubmission:
.filter_by(exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]], .filter_by(exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0).first()) isdeleted=0).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
...@@ -651,7 +652,7 @@ class DispatchSubmission: ...@@ -651,7 +652,7 @@ class DispatchSubmission:
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0).first()) isdeleted=0).first())
try: try:
record["exactorId"] = item.exactor_id record["exactorId"] = item.exactor_id
...@@ -713,7 +714,7 @@ class DispatchSubmission: ...@@ -713,7 +714,7 @@ class DispatchSubmission:
exactor_id=DeviceMap.excavator_index_to_uuid_dict[dispatch_seq[0]], exactor_id=DeviceMap.excavator_index_to_uuid_dict[dispatch_seq[0]],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
except Exception as es: except Exception as es:
...@@ -722,7 +723,7 @@ class DispatchSubmission: ...@@ -722,7 +723,7 @@ class DispatchSubmission:
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
try: try:
record["exactorId"] = item.exactor_id record["exactorId"] = item.exactor_id
...@@ -746,7 +747,7 @@ class DispatchSubmission: ...@@ -746,7 +747,7 @@ class DispatchSubmission:
dump_id=DeviceMap.dump_index_to_uuid_dict[dispatch_seq[0]], dump_id=DeviceMap.dump_index_to_uuid_dict[dispatch_seq[0]],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
except Exception as es: except Exception as es:
...@@ -755,7 +756,7 @@ class DispatchSubmission: ...@@ -755,7 +756,7 @@ class DispatchSubmission:
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0, ).first()) isdeleted=0, ).first())
try: try:
record["exactorId"] = self.excavator.excavator_index_to_uuid_dict[dispatch_seq[1]] record["exactorId"] = self.excavator.excavator_index_to_uuid_dict[dispatch_seq[1]]
record["dumpId"] = item.dump_id record["dumpId"] = item.dump_id
...@@ -778,7 +779,7 @@ class DispatchSubmission: ...@@ -778,7 +779,7 @@ class DispatchSubmission:
.filter_by(exactor_id=DeviceMap.excavator_index_to_uuid_dict[dispatch_seq[1]], .filter_by(exactor_id=DeviceMap.excavator_index_to_uuid_dict[dispatch_seq[1]],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0).first()) isdeleted=0).first())
if item is None: if item is None:
raise Exception("调度计划表与实时监控不匹配") raise Exception("调度计划表与实时监控不匹配")
...@@ -795,7 +796,7 @@ class DispatchSubmission: ...@@ -795,7 +796,7 @@ class DispatchSubmission:
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(truck_id=truck_id, .filter_by(truck_id=truck_id,
# group_id=group_id, # group_id=group_id,
isauto=1, isdeleted=0).first()) isdeleted=0).first())
try: try:
record["exactorId"] = item.exactor_id record["exactorId"] = item.exactor_id
......
...@@ -118,8 +118,9 @@ class DumpInfo(WalkManage): ...@@ -118,8 +118,9 @@ class DumpInfo(WalkManage):
self.dump_material = {} self.dump_material = {}
for dump_id in get_value("dynamic_dump_set"): for dump_id in get_value("dynamic_dump_set"):
try: try:
unload_area_id = session_mysql.query(DispatchSetting).filter_by(dump_id=dump_id, isauto=1, isdeleted=0).first().unload_area_id # unload_area_id = session_mysql.query(DispatchSetting).filter_by(dump_id=dump_id, isauto=1, isdeleted=0).first().unload_area_id
dump_material_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Materials unload_area_id = session_mysql.query(DispatchSetting).filter_by(dump_id=dump_id, isdeleted=0).first().unload_area_id
dump_material_id = list(session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Materials)
self.dump_material[dump_id] = dump_material_id self.dump_material[dump_id] = dump_material_id
except Exception as es: except Exception as es:
self.logger.error("卸点物料更新异常") self.logger.error("卸点物料更新异常")
......
...@@ -131,7 +131,8 @@ class ExcavatorInfo(WalkManage): ...@@ -131,7 +131,8 @@ class ExcavatorInfo(WalkManage):
self.logger.info(self.dynamic_excavator_set) self.logger.info(self.dynamic_excavator_set)
for excavator_id in self.dynamic_excavator_set: for excavator_id in self.dynamic_excavator_set:
try: try:
load_area_id = session_mysql.query(DispatchSetting).filter_by(exactor_id=excavator_id, isdeleted=0, isauto=1).first().load_area_id # load_area_id = session_mysql.query(DispatchSetting).filter_by(exactor_id=excavator_id, isdeleted=0, isauto=1).first().load_area_id
load_area_id = session_mysql.query(DispatchSetting).filter_by(exactor_id=excavator_id, isdeleted=0).first().load_area_id
excavator_material_id = session_postgre.query(DiggingWorkArea).filter_by(Id=load_area_id).first().Material excavator_material_id = session_postgre.query(DiggingWorkArea).filter_by(Id=load_area_id).first().Material
self.excavator_material[excavator_id] = excavator_material_id self.excavator_material[excavator_id] = excavator_material_id
except Exception as es: except Exception as es:
......
...@@ -570,7 +570,6 @@ class TruckInfo(WalkManage): ...@@ -570,7 +570,6 @@ class TruckInfo(WalkManage):
def update_truck_material(self): def update_truck_material(self):
try: try:
self.truck_material_bind = {} self.truck_material_bind = {}
self.update_truck_excavator_bind() self.update_truck_excavator_bind()
self.update_truck_dump_area_bind() self.update_truck_dump_area_bind()
...@@ -579,7 +578,6 @@ class TruckInfo(WalkManage): ...@@ -579,7 +578,6 @@ class TruckInfo(WalkManage):
self.dump_material_bind_modify = np.full((self.dynamic_truck_num, get_value("dynamic_dump_num")), 0) self.dump_material_bind_modify = np.full((self.dynamic_truck_num, get_value("dynamic_dump_num")), 0)
for truck_id in self.dynamic_truck_set: for truck_id in self.dynamic_truck_set:
if truck_id in self.truck_dump_bind: if truck_id in self.truck_dump_bind:
unload_area_id = self.truck_dump_bind[truck_id] unload_area_id = self.truck_dump_bind[truck_id]
try: try:
......
...@@ -357,22 +357,19 @@ class WalkManage(DeviceMap): ...@@ -357,22 +357,19 @@ class WalkManage(DeviceMap):
# 计算设备路网距离及行走时间 # 计算设备路网距离及行走时间
try: try:
n = dynamic_dump_num
m = dynamic_excavator_num
for i in range(dynamic_dump_num): for i in range(dynamic_dump_num):
for j in range(dynamic_excavator_num): for j in range(dynamic_excavator_num):
cls.distance_to_excavator[i][j] = cls.distance_to_load_area[ cls.distance_to_excavator[i][j] = cls.distance_to_load_area[cls.dump_index_to_unload_area_index_dict[i]][cls.excavator_index_to_load_area_index_dict[j]]
cls.dump_index_to_unload_area_index_dict[i]
][cls.excavator_index_to_load_area_index_dict[j]] cls.walk_time_to_excavator[i][j] = cls.walk_time_to_load_area[cls.dump_index_to_unload_area_index_dict[i]][cls.excavator_index_to_load_area_index_dict[j]]
cls.walk_time_to_excavator[i][j] = cls.walk_time_to_load_area[
cls.dump_index_to_unload_area_index_dict[i] cls.distance_to_dump[i][j] = cls.distance_to_unload_area[cls.dump_index_to_unload_area_index_dict[i]][cls.excavator_index_to_load_area_index_dict[j]]
][cls.excavator_index_to_load_area_index_dict[j]]
cls.distance_to_dump[i][j] = cls.distance_to_unload_area[ cls.walk_time_to_dump[i][j] = cls.walk_time_to_unload_area[cls.dump_index_to_unload_area_index_dict[i]][cls.excavator_index_to_load_area_index_dict[j]]
cls.dump_index_to_unload_area_index_dict[i]
][cls.excavator_index_to_load_area_index_dict[j]]
cls.walk_time_to_dump[i][j] = cls.walk_time_to_unload_area[
cls.dump_index_to_unload_area_index_dict[i]
][cls.excavator_index_to_load_area_index_dict[j]]
except Exception as es: except Exception as es:
logger.error("设备路网信息异常异常") logger.error("设备路网信息异常")
logger.error(es) logger.error(es)
try: try:
......
...@@ -119,20 +119,29 @@ def process(dispatcher): ...@@ -119,20 +119,29 @@ def process(dispatcher):
# load_distance = {} # load_distance = {}
# unload_distance = {} # unload_distance = {}
logger.info("Dispatchinfo,更新后信息") logger.info("Dispatchinfo,更新后信息")
logger.info("group_set")
logger.info(DispatchInfo.group_set) logger.info(DispatchInfo.group_set)
logger.info("group_excavator_dict")
logger.info(DispatchInfo.group_excavator_dict) logger.info(DispatchInfo.group_excavator_dict)
logger.info(DispatchInfo.group_dump_dict) logger.info("group_unload_area_dict")
logger.info(DispatchInfo.group_unload_area_dict)
logger.info("group_truck_dict")
logger.info(DispatchInfo.group_truck_dict) logger.info(DispatchInfo.group_truck_dict)
logger.info("group_mode")
logger.info(DispatchInfo.group_mode) logger.info(DispatchInfo.group_mode)
logger.info("load_distance")
logger.info(DispatchInfo.load_distance) logger.info(DispatchInfo.load_distance)
logger.info("unload_distance")
logger.info(DispatchInfo.unload_distance) logger.info(DispatchInfo.unload_distance)
logger.info(DispatchInfo.load_excavator_dict) # logger.info("load_excavator_dict")
logger.info(DispatchInfo.excavator_load_dict) # logger.info(DispatchInfo.load_excavator_dict)
logger.info(DispatchInfo.excavator_group_dict) # logger.info("excavator_load_dict")
logger.info(DispatchInfo.dump_group_dict) # logger.info(DispatchInfo.excavator_load_dict)
logger.info(DispatchInfo.truck_group_dict) # logger.info(DispatchInfo.excavator_group_dict)
# logger.info(DispatchInfo.dump_group_dict)
# logger.info(DispatchInfo.truck_group_dict)
# 调度生成 # 调度生成
dispatcher.period_update() dispatcher.period_update()
......
...@@ -152,7 +152,8 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_ ...@@ -152,7 +152,8 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_
excavator_num = 0 excavator_num = 0
dump_num = 0 dump_num = 0
for item in ( for item in (
session_mysql.query(DispatchSetting).filter_by(isdeleted=0, isauto=1).all() # session_mysql.query(DispatchSetting).filter_by(isdeleted=0, isauto=1).all()
session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all()
): ):
# excavator_id <-> excavator_index # excavator_id <-> excavator_index
# dump_id <-> dump_index # dump_id <-> dump_index
...@@ -227,7 +228,6 @@ def update_truck_uuid_index_map(dynamic_truck_set): ...@@ -227,7 +228,6 @@ def update_truck_uuid_index_map(dynamic_truck_set):
"truck_index_to_uuid_dict": truck_index_to_uuid_dict, "truck_index_to_uuid_dict": truck_index_to_uuid_dict,
} }
def update_total_truck(): def update_total_truck():
# 矿卡集合 # 矿卡集合
truck_list = [] truck_list = []
...@@ -238,13 +238,11 @@ def update_total_truck(): ...@@ -238,13 +238,11 @@ def update_total_truck():
.filter_by(device_type=1, isdeleted=0) .filter_by(device_type=1, isdeleted=0)
.all() .all()
) )
# for item in query: # for item in query:
# json_value = json.loads(redis2.get(item.equipment_id)) # json_value = json.loads(redis2.get(item.equipment_id))
# is_online = json_value.get('isOnline') # is_online = json_value.get('isOnline')
# if is_online: # if is_online:
# truck_list.append(item.id) # truck_list.append(item.id)
for item in query: for item in query:
truck_list.append(item.id) truck_list.append(item.id)
...@@ -281,9 +279,8 @@ def update_dynamic_truck(): ...@@ -281,9 +279,8 @@ def update_dynamic_truck():
query = np.array( query = np.array(
session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all() session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all()
) )
for item in query: for item in query:
if item.truck_id is not None: if item.truck_id is not None and item.truck_id not in dynamic_truck_list:
dynamic_truck_list.append(item.truck_id) dynamic_truck_list.append(item.truck_id)
except Exception as es: except Exception as es:
...@@ -337,10 +334,9 @@ def update_autodisp_excavator(): ...@@ -337,10 +334,9 @@ def update_autodisp_excavator():
# 用于动态派车的挖机集合 # 用于动态派车的挖机集合
dynamic_excavator_list = [] dynamic_excavator_list = []
try: try:
for item in ( for item in (session_mysql.query(DispatchSetting).filter_by().all()):
session_mysql.query(DispatchSetting).filter_by().all() if item.exactor_id not in dynamic_excavator_list:
): dynamic_excavator_list.append(item.exactor_id)
dynamic_excavator_list.append(item.exactor_id)
if len(dynamic_excavator_list) < 1: if len(dynamic_excavator_list) < 1:
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常") raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
except Exception as es: except Exception as es:
...@@ -355,10 +351,9 @@ def update_autodisp_dump(): ...@@ -355,10 +351,9 @@ def update_autodisp_dump():
# 用于动态调度的卸载点集合 # 用于动态调度的卸载点集合
dynamic_dump_list = [] dynamic_dump_list = []
try: try:
for item in ( for item in (session_mysql.query(DispatchSetting).filter_by().all()):
session_mysql.query(DispatchSetting).filter_by().all() if item.dump_id not in dynamic_dump_list:
): dynamic_dump_list.append(item.dump_id)
dynamic_dump_list.append(item.dump_id)
if len(dynamic_dump_list) < 1: if len(dynamic_dump_list) < 1:
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常") raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
except Exception as es: except Exception as es:
......
...@@ -17,11 +17,11 @@ class DispatchInfo: ...@@ -17,11 +17,11 @@ class DispatchInfo:
group_set = set() group_set = set()
# device group structure # device group structure
group_dump_dict = {} # team_id -> dict {[dump_id, unload_area_id], [dump_id, unload_area_id], ...} group_unload_area_dict = {} # team_id -> dict {[unload_area_id, unload_area_id], [unload_area_id, unload_area_id], ...}
group_excavator_dict = {} # team_id -> dict {[excavator_id, load_area_id], ...} group_excavator_dict = {} # team_id -> dict {[excavator_id, load_area_id], ...}
group_truck_dict = {} # team_id -> dict {truck_id, ...} group_truck_dict = {} # team_id -> dict {truck_id, ...}
dump_group_dict = {} # dump_id -> team_id unload_area_group_dict = {} # unload_area_id -> team_id
excavator_group_dict = {} # excavator_id -> team_id excavator_group_dict = {} # excavator_id -> team_id
truck_group_dict = {} # truck_id -> team_id truck_group_dict = {} # truck_id -> team_id
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment