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,
......
...@@ -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,10 +127,10 @@ class Group: ...@@ -127,10 +127,10 @@ class Group:
""" """
truck_dispatch = {} truck_dispatch = {}
if self.group_mode == 1:
assert issubclass(solver, AlgorithmBase) assert issubclass(solver, AlgorithmBase)
s = solver(self, self.truck, self.pre_sch) # algorithm init 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]
...@@ -138,20 +138,46 @@ class Group: ...@@ -138,20 +138,46 @@ class Group:
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_dump_id = "Park" next_unload_area_id = "Park"
else: else:
next_dump_id = self.dump_uuid_index_dict.inverse[truck_trip[-1]] next_unload_area_id = self.unload_area_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_dump_id] truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
if truck_task in [0, 1]: if truck_task in [0, 1]:
next_dump_value = s.solve(i) next_unload_area_value = s.solve(i)
min_index = np.argmin(next_dump_value) min_index = np.argmin(next_unload_area_value)
next_dump_id = self.dump_uuid_index_dict.inverse[min_index] next_unload_area_id = self.unload_area_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_dump_id] truck_dispatch[i] = [next_excavator_id, next_unload_area_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):
# """ # """
......
...@@ -27,8 +27,8 @@ class DispatchInfo: ...@@ -27,8 +27,8 @@ class DispatchInfo:
group_excavator_dict = {} # team_id -> dict {[excavator_id, excavator_id], ...} group_excavator_dict = {} # team_id -> dict {[excavator_id, excavator_id], ...}
excavator_group_dict = {} # excavator_id -> team_id 问题:多个key值对应一个value值 excavator_group_dict = {} # excavator_id -> team_id 问题:多个key值对应一个value值
group_dump_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...} group_unload_area_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...}
dump_group_dict = {} # unload_area_id -> team_id unload_area_group_dict = {} # unload_area_id -> team_id
group_truck_dict = {} # team_id -> dict # {group_id:[truck_id,truck_id],...} group_truck_dict = {} # team_id -> dict # {group_id:[truck_id,truck_id],...}
truck_group_dict = {} # truck_id -> team_id truck_group_dict = {} # truck_id -> team_id
...@@ -43,6 +43,8 @@ class DispatchInfo: ...@@ -43,6 +43,8 @@ class DispatchInfo:
# group_name <-> group_id # group_name <-> group_id
group_name = {} group_name = {}
truck_team_trip_dict = {}
@classmethod @classmethod
def renew_set(cls): def renew_set(cls):
""" """
...@@ -58,8 +60,8 @@ class DispatchInfo: ...@@ -58,8 +60,8 @@ class DispatchInfo:
cls.group_excavator_dict = {} cls.group_excavator_dict = {}
cls.excavator_group_dict = {} cls.excavator_group_dict = {}
cls.group_dump_dict = {} cls.group_unload_area_dict = {}
cls.dump_group_dict = {} cls.unload_area_group_dict = {}
cls.group_truck_dict = {} cls.group_truck_dict = {}
cls.truck_group_dict = {} cls.truck_group_dict = {}
...@@ -69,8 +71,10 @@ class DispatchInfo: ...@@ -69,8 +71,10 @@ class DispatchInfo:
cls.load_distance = {} cls.load_distance = {}
cls.unload_distance = {} cls.unload_distance = {}
# cls.group_dump_dict = {} # cls.group_dump_dict.keys() 相当于所有的team_id cls.truck_team_trip_dict = {}
# cls.dump_group_dict = {} # cls.dump_group_dict.keys() 相当于所有的卸载区 unload_area_id
# cls.group_unload_area_dict = {} # cls.group_unload_area_dict.keys() 相当于所有的team_id
# cls.unload_area_group_dict = {} # cls.unload_area_group_dict.keys() 相当于所有的卸载区 unload_area_id
# cls.group_excavator_dict = {} # cls.group_excavator_dict = {}
# cls.excavator_group_dict = {} # cls.excavator_group_dict = {}
# cls.load_excavator_dict = {} # cls.load_excavator_dict.keys() 相当于所有的装载区 load_area_id # cls.load_excavator_dict = {} # cls.load_excavator_dict.keys() 相当于所有的装载区 load_area_id
...@@ -89,19 +93,7 @@ class DispatchInfo: ...@@ -89,19 +93,7 @@ class DispatchInfo:
@desc:分组与卸载区、挖机、矿卡的映射和反映射 @desc:分组与卸载区、挖机、矿卡的映射和反映射
""" """
logger = get_logger("mqc.update_device_group_structure") logger = get_logger("mqc.update_device_group_structure")
# build excavator group map # build excavator group map
# try:
# for item in session_postgre.query(DiggingWorkArea).all():
#
# if item.ExactorUuid is not None:
# cls.load_excavator_dict[str(item.Id)] = item.ExactorUuid
# cls.excavator_load_dict[item.ExactorUuid] = str(item.Id)
# aa = cls.load_excavator_dict
# except Exception as es:
# logger.error("挖机和装载区映射更新异常")
# logger.error(es)
try: try:
for item in session_mysql.query(DispatchSetting).all(): for item in session_mysql.query(DispatchSetting).all():
...@@ -112,116 +104,53 @@ class DispatchInfo: ...@@ -112,116 +104,53 @@ class DispatchInfo:
logger.error("挖机和装载区映射更新异常") logger.error("挖机和装载区映射更新异常")
logger.error(es) logger.error(es)
# update excavator<->group and dump<->group map # update excavator<->group and unload_area<->group map
try: try:
for item in session_mysql.query(DispatchSetting).filter_by(group_type=1).all(): for item in session_mysql.query(DispatchSetting).filter_by(group_type=1).all():
# if item.group_code not in cls.group_excavator_dict.keys(): # add excavator
# cls.group_excavator_dict[item.group_code] = item.excavator_id if item.group_id not in cls.group_excavator_dict.keys():
# else:
# cls.group_excavator_dict[item.group_code].append(item.excavator_id)
# cls.excavator_group_dict[item.excavator_id] = item.group_code
# if item.load_area_id is not None and item.dump_id is not None:
if item.group_code 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]:
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
if item.group_id not in cls.group_dump_dict.keys(): # add unload_area
cls.group_dump_dict[item.group_id] = [item.unload_area_id] if item.group_id not in cls.group_unload_area_dict.keys():
cls.group_unload_area_dict[item.group_id] = [item.unload_area_id]
else: else:
cls.group_dump_dict[item.group_id].append(item.unload_area_id) if item.unload_area_id not in cls.group_unload_area_dict[item.group_id]:
cls.dump_group_dict[item.unload_area_id] = item.group_id cls.group_unload_area_dict[item.group_id].append(item.unload_area_id)
cls.unload_area_group_dict[item.unload_area_id] = item.group_id
# add truck
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]:
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
# hh = cls.group_excavator_dict
# hhhh = cls.group_truck_dict
except Exception as es: except Exception as es:
logger.error("挖机/卸载区/矿卡与group_id映射更新异常") logger.error("挖机/卸载区/矿卡与group_id映射更新异常")
logger.error(es) logger.error(es)
# update group set
try: try:
cls.group_set = set(cls.group_excavator_dict.keys()) cls.group_set = set(cls.group_excavator_dict.keys())
except Exception as es: except Exception as es:
logger.error(es) logger.error(es)
# try:
# for item in session_mysql.query(DispatchMatch).filter_by(group_type=1).all():
#
# # if item.group_code not in cls.group_excavator_dict.keys():
# # cls.group_excavator_dict[item.group_code] = item.excavator_id
# # else:
# # cls.group_excavator_dict[item.group_code].append(item.excavator_id)
# # cls.excavator_group_dict[item.excavator_id] = item.group_code
# if item.load_area_id is not None and item.dump_id is not None:
# if item.group_code not in cls.group_excavator_dict.keys():
# cls.group_excavator_dict[item.group_code] = [item.exactor_id]
# else:
# cls.group_excavator_dict[item.group_code].append(item.exactor_id)
# cls.excavator_group_dict[item.exactor_id] = item.group_code
#
# if item.group_code not in cls.group_dump_dict.keys():
# cls.group_dump_dict[item.group_code] = [item.unload_area_id]
# else:
# cls.group_dump_dict[item.group_code].append(item.unload_area_id)
# cls.dump_group_dict[item.unload_area_id] = item.group_code
# except Exception as es:
# logger.error("挖机/卸载区与group_id映射更新异常")
# logger.error(es)
# update truck<->group map
# try:
# for item in session_mysql.query(DispatchEquipment).filter_by(group_type=1).all():
# if item.group_code not in cls.group_truck_dict.keys():
# cls.group_truck_dict[item.group_code] = [item.equipment_id]
# else:
# cls.group_truck_dict[item.group_code].append(item.equipment_id)
# cls.truck_group_dict[item.equipment_id] = item.group_code
# except Exception as es:
# logger.error("矿卡与group_id映射更新异常")
# logger.error(es)
# update group set
# update truck->team id dict
# try: try:
# # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...} trucks = cls.truck_group_dict.keys()
# # dump_group_dict = {} # unload_area_id -> team_id for i in trucks:
# group_code_dict = {} # group_code-->>team_id的映射 trip_excavator = session_mysql.query(DispatchSetting).filter_by(truck_id=i).first().exactor_id
# for valve in session_mysql.query(DispatchMatch).filter_by(group_type=1).all(): trip_unload_area = session_mysql.query(DispatchSetting).filter_by(truck_id=i).first().unload_area_id
# group_code_dict[valve.group_code] = valve.team_id cls.truck_team_trip_dict[i] = [trip_excavator, trip_unload_area]
# if valve.team_id not in cls.group_dump_dict: except Exception as es:
# cls.group_dump_dict[valve.team_id] = [valve.unload_area_id] # 注意:一个team_id可能对应多个unload_area_id logger.error(es)
# else:
# cls.group_dump_dict[valve.team_id].append(valve.unload_area_id)
# cls.dump_group_dict[valve.unload_area_id] = valve.team_id # 一个unload_area_id只对应一个team_id
# # group_excavator_dict = {} -->> {team_id: [excavator_id, excavator_id], ...} # 一个team_id对应一组excavator_id, unload_area_id
# # excavator_group_dict = {} -->> excavator_id -> team_id 一个excavator_id只对应一个team_id
# for item in session_mysql.query(DispatchMatch).filter_by(group_type=1).all():
# if item.team_id in cls.group_excavator_dict:
# cls.group_excavator_dict[item.team_id].append(item.excavator_id)
# else:
# cls.group_excavator_dict[item.team_id] = [item.excavator_id]
# cls.excavator_group_dict[item.excavator_id] = item.team_id
# # group_truck_dict = {} -->> {team_id:[truck_id,truck_id],...}
# # truck_group_dict = {} -->> truck_id -> team_id
# for key in session_mysql.query(DispatchEquipment).filter_by(group_type=1).all():
# if key.group_code in group_code_dict:
# if key.group_code not in cls.group_truck_dict:
# cls.group_truck_dict[key.group_code] = [key.equipment_id]
# else:
# cls.group_truck_dict[key.group_code].append(key.equipment_id)
# cls.truck_group_dict[key.equipment_id] = group_code_dict[key.group_code]
# except Exception as es:
# logger.error("分组到卸载区的数据更新异常")
# logger.error(es)
@classmethod @classmethod
def update_group_mode(cls): def update_group_mode(cls):
...@@ -243,21 +172,6 @@ class DispatchInfo: ...@@ -243,21 +172,6 @@ class DispatchInfo:
logger.error("group_id->mode_code更新异常") logger.error("group_id->mode_code更新异常")
logger.error(es) logger.error(es)
# 新增:team_id-->>group_code;group_code-->>mode_code.结果:team_id-->>mode_code
# team_group_dict = {} # team_id-->>group_code的一个映射,格式:{team_id:group_code}
# group_mode_dict = {} # group-->>mode_code的一个映射,格式:{group_code:mode_code}
# try:
# for pos in session_mysql.query(DispatchMatch).filter_by(group_type=1).all():
# team_group_dict[pos.team_id] = pos.group_code
# for item in session_mysql.query(DispatchGroup).filter_by(group_type=1).all():
# group_mode_dict[item.group_code] = item.mode_code
# for key, value in team_group_dict.items():
# if value in group_mode_dict:
# cls.group_mode[key] = group_mode_dict[value]
# except Exception as es:
# logger.error("派车模式数据更新异常")
# logger.error(es)
@classmethod @classmethod
def update_group_name(cls): def update_group_name(cls):
""" """
...@@ -276,19 +190,6 @@ class DispatchInfo: ...@@ -276,19 +190,6 @@ class DispatchInfo:
logger.error("group_id->name更新异常") logger.error("group_id->name更新异常")
logger.error(es) logger.error(es)
# @classmethod
# def dispatch_group_init(cls):
# """
# update basic paras (group_set, dict, num ...)
# :return:
# """
# try:
# for value in session_postgre.query(DiggingWorkArea).all():
# cls.load_excavator_dict[value.Id] = value.ExactorId
# cls.excavator_load_dict[value.ExactorId] = value.Id
# except Exception as es:
# logger.error("初始化数据更新异常")
# logger.error(es)
@classmethod @classmethod
# 距离-->>数据格式:矩阵-->>to_load_distance # 距离-->>数据格式:矩阵-->>to_load_distance
def update_route_distance(cls): def update_route_distance(cls):
...@@ -308,7 +209,7 @@ class DispatchInfo: ...@@ -308,7 +209,7 @@ class DispatchInfo:
for excavator_id in excavator_ids: for excavator_id in excavator_ids:
load_areas.append(cls.excavator_load_dict[excavator_id]) load_areas.append(cls.excavator_load_dict[excavator_id])
# 每个组的unload_areas # 每个组的unload_areas
unload_areas = cls.group_dump_dict[item] unload_areas = cls.group_unload_area_dict[item]
# unload->load 路网 # unload->load 路网
unload_load_distance = np.zeros((len(unload_areas), len(load_areas))) unload_load_distance = np.zeros((len(unload_areas), len(load_areas)))
...@@ -331,51 +232,6 @@ class DispatchInfo: ...@@ -331,51 +232,6 @@ class DispatchInfo:
logger.error(es) logger.error(es)
# try:
# df = pd.DataFrame() # 记录装载区与卸载区之间的距离
# for item in session_postgre.query(WalkTime).all():
# temp = str(item.load_area_id), str(item.unload_area_id), item.to_load_distance, item.to_unload_distance
# df = pd.concat([df, pd.DataFrame([temp])], axis=0, ignore_index=True)
# except Exception as es:
# logger.error("路网距离数据更新异常1")
# logger.error(es)
#
# # 距离矩阵
# for team_id in list(cls.group_dump_dict.keys()):
# unload_nums = list(set(cls.group_dump_dict[team_id])) # 获取同一个team_id对应的卸载区列表
# exactor_nums = list(set(cls.group_excavator_dict[team_id])) # 获取同一个team_id对应的电铲列表
#
# unload_exactor_matrix = np.zeros(
# (len(unload_nums), len(exactor_nums))) # 初始化距离矩阵,记录从卸载区-->>电铲的距离,即to_load_distance,空车模式
# load_exactor_matrix = np.array(
# unload_exactor_matrix).T # 初始化距离矩阵,记录从装载区-->>电铲的距离,即to_unload_distance,重车模式
#
# try:
# for i in range(len(unload_nums)):
# for j in range(len(exactor_nums)):
# id = set(df.loc[df[1] == str(unload_nums[i])].index.to_list()) & set(
# df.loc[df[0] == str(cls.excavator_load_dict[j])].index.to_list()) # 集合属性
# unload_exactor_matrix[i][j] = df.iloc[list(id)[0]][2]
# except Exception as es:
# logger.error("路网距离数据更新异常2")
# logger.error(es)
#
# try:
# for m in range(len(exactor_nums)):
# for n in range(len(unload_nums)):
# id = set(df.loc[df[0] == str(cls.excavator_load_dict[m])].index.to_list()) & set(
# df.loc[df[1] == str(unload_nums[n])].index.to_list())
# load_exactor_matrix[m][n] = df.iloc[list(id)[0]][3]
# except Exception as es:
# logger.error("路网距离数据更新异常3")
# logger.error(es)
# cls.load_distance[team_id] = unload_exactor_matrix
# cls.unload_distance[team_id] = load_exactor_matrix
#
# except Exception as es:
# logger.error("路网距离数据更新异常4")
# logger.error(es)
@classmethod @classmethod
def get_group_mode(cls, group_id): def get_group_mode(cls, group_id):
return cls.group_mode[group_id] return cls.group_mode[group_id]
...@@ -385,8 +241,8 @@ class DispatchInfo: ...@@ -385,8 +241,8 @@ class DispatchInfo:
return set(cls.group_excavator_dict[group_id]) return set(cls.group_excavator_dict[group_id])
@classmethod @classmethod
def get_dump(cls, group_id): def get_unload_area(cls, group_id):
return set(cls.group_dump_dict[group_id]) return set(cls.group_unload_area_dict[group_id])
@classmethod @classmethod
def get_truck_set(cls, group_id): def get_truck_set(cls, group_id):
...@@ -401,9 +257,13 @@ class DispatchInfo: ...@@ -401,9 +257,13 @@ class DispatchInfo:
return cls.load_distance[group_id] return cls.load_distance[group_id]
@classmethod @classmethod
def get_to_dump_distance(cls, group_id): def get_to_unload_area_distance(cls, group_id):
return cls.unload_distance[group_id] return cls.unload_distance[group_id]
@classmethod
def get_truck_team_trip(cls, truck_id):
return cls.truck_team_trip_dict[truck_id]
@classmethod @classmethod
def get_park_to_excavator_distance(cls, group_id): def get_park_to_excavator_distance(cls, group_id):
...@@ -446,14 +306,14 @@ class DispatchInfo: ...@@ -446,14 +306,14 @@ class DispatchInfo:
# group_set = set() # group_set = set()
# #
# # device group structure # # device group structure
# group_dump_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...} # group_unload_area_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...}
# # {group_id:unload_area_id,...} # # {group_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_id: [excavator_id, unload_area_id], ...} # # {group_id: [excavator_id, unload_area_id], ...}
# group_truck_dict = {} # team_id -> dict {truck_id, ...} # group_truck_dict = {} # team_id -> dict {truck_id, ...}
# # {group_id:[truck_id,truck_id],...} # # {group_id:[truck_id,truck_id],...}
# #
# dump_group_dict = {} # unload_area_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
# #
...@@ -472,8 +332,8 @@ class DispatchInfo: ...@@ -472,8 +332,8 @@ class DispatchInfo:
# @author:maqc # @author:maqc
# @desc:实例化对象,可直接访问 # @desc:实例化对象,可直接访问
# """ # """
# cls.group_dump_dict = {} # cls.group_unload_area_dict = {}
# cls.dump_group_dict = {} # cls.unload_area_group_dict = {}
# #
# cls.group_excavator_dict = {} # cls.group_excavator_dict = {}
# cls.excavator_group_dict = {} # cls.excavator_group_dict = {}
...@@ -494,16 +354,16 @@ class DispatchInfo: ...@@ -494,16 +354,16 @@ class DispatchInfo:
# """ # """
# logger = get_logger("mqc.update_device_group_structure") # logger = get_logger("mqc.update_device_group_structure")
# try: # try:
# # group_dump_dict = {} -->> {group_id:unload_area_id,...} # # group_unload_area_dict = {} -->> {group_id:unload_area_id,...}
# # dump_group_dict = {} # unload_area_id -> team_id # # unload_area_group_dict = {} # unload_area_id -> team_id
# group_code_dict = {} # group_code-->>team_id的映射 # group_code_dict = {} # group_code-->>team_id的映射
# for valve in session_mysql.query(DispatchMatch).filter_by(group_type=1).all(): # for valve in session_mysql.query(DispatchMatch).filter_by(group_type=1).all():
# group_code_dict[valve.group_code] = valve.team_id # group_code_dict[valve.group_code] = valve.team_id
# if valve.team_id not in cls.group_dump_dict: # if valve.team_id not in cls.group_unload_area_dict:
# cls.group_dump_dict[valve.team_id] = [valve.unload_area_id] # 注意:一个team_id可能对应多个unload_area_id # cls.group_unload_area_dict[valve.team_id] = [valve.unload_area_id] # 注意:一个team_id可能对应多个unload_area_id
# else: # else:
# cls.group_dump_dict[valve.team_id].append(valve.unload_area_id) # cls.group_unload_area_dict[valve.team_id].append(valve.unload_area_id)
# cls.dump_group_dict[valve.unload_area_id] = valve.team_id # 一个unload_area_id只对应一个team_id # cls.unload_area_group_dict[valve.unload_area_id] = valve.team_id # 一个unload_area_id只对应一个team_id
# # group_excavator_dict = {} -->> {group_id: [excavator_id, unload_area_id], ...} # 一个team_id对应一组excavator_id, unload_area_id # # group_excavator_dict = {} -->> {group_id: [excavator_id, unload_area_id], ...} # 一个team_id对应一组excavator_id, unload_area_id
# # excavator_group_dict = {} -->> excavator_id -> team_id 一个excavator_id只对应一个team_id # # excavator_group_dict = {} -->> excavator_id -> team_id 一个excavator_id只对应一个team_id
# for item in session_mysql.query(DispatchMatch).filter_by(group_type=1).all(): # for item in session_mysql.query(DispatchMatch).filter_by(group_type=1).all():
...@@ -552,7 +412,7 @@ class DispatchInfo: ...@@ -552,7 +412,7 @@ class DispatchInfo:
# if truck_info == 1: # if truck_info == 1:
# for i in group_excavator(): # for i in group_excavator():
# pass # pass
# for j in group_dump(): # for j in group_unload_area():
# pass # pass
# if truck_info == 2: # if truck_info == 2:
# pass # pass
......
...@@ -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,9 +334,8 @@ def update_autodisp_excavator(): ...@@ -337,9 +334,8 @@ 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("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
...@@ -355,9 +351,8 @@ def update_autodisp_dump(): ...@@ -355,9 +351,8 @@ 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("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
......
...@@ -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