Commit 777a0b16 authored by z5335534 Ao Guo's avatar z5335534 Ao Guo

info层再次修改

parent 93958978
...@@ -36,8 +36,8 @@ class DispatchInfo: ...@@ -36,8 +36,8 @@ class DispatchInfo:
group_mode = {} # 数据格式: {team_id:mode_code} group_mode = {} # 数据格式: {team_id:mode_code}
# route_distance(路网距离) # route_distance(路网距离)
load_distance = {} # 装载区-挖机(电铲)的距离 数据格式 -->>{team_id:np.array} load_distance = {}
unload_distance = {} # 卸载区-挖机(电铲)的距离 数据格式 -->>{team_id:np.array} unload_distance = {}
@classmethod @classmethod
def renew_set(cls): def renew_set(cls):
...@@ -85,9 +85,11 @@ class DispatchInfo: ...@@ -85,9 +85,11 @@ class DispatchInfo:
# build excavator group map # build excavator group map
logger = get_logger("mqc.update_device_group_structure") logger = get_logger("mqc.update_device_group_structure")
try: try:
for value in session_postgre.query(DiggingWorkArea).all(): for item in session_postgre.query(DiggingWorkArea).all():
cls.load_excavator_dict[value.Id] = value.ExactorId
cls.excavator_load_dict[value.ExactorId] = value.Id if item.ExactorUuid is not None:
cls.load_excavator_dict[str(item.Id)] = item.ExactorUuid
cls.excavator_load_dict[item.ExactorUuid] = str(item.Id)
except Exception as es: except Exception as es:
logger.error("挖机和装载区映射更新异常") logger.error("挖机和装载区映射更新异常")
logger.error(es) logger.error(es)
...@@ -96,17 +98,23 @@ class DispatchInfo: ...@@ -96,17 +98,23 @@ class DispatchInfo:
try: try:
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():
# 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(): if item.group_code not in cls.group_excavator_dict.keys():
cls.group_excavator_dict[item.group_code] = item.excavator_id cls.group_excavator_dict[item.group_code] = [item.exactor_id]
else: else:
cls.group_excavator_dict[item.group_code].append(item.excavator_id) cls.group_excavator_dict[item.group_code].append(item.exactor_id)
cls.excavator_group_dict[item.excavator_id] = item.group_code cls.excavator_group_dict[item.exactor_id] = item.group_code
if item.group_code not in cls.group_dump_dict.keys(): if item.group_code not in cls.group_dump_dict.keys():
cls.group_dump_dict[item.group_code] = item.dump_area_id cls.group_dump_dict[item.group_code] = [item.unload_area_id]
else: else:
cls.group_dump_dict[item.group_code].append(item.dump_area_id) cls.group_dump_dict[item.group_code].append(item.unload_area_id)
cls.dump_group_dict[item.dump_area_id] = item.group_code cls.dump_group_dict[item.unload_area_id] = item.group_code
except Exception as es: except Exception as es:
logger.error("挖机/卸载区与group_id映射更新异常") logger.error("挖机/卸载区与group_id映射更新异常")
logger.error(es) logger.error(es)
...@@ -115,14 +123,14 @@ class DispatchInfo: ...@@ -115,14 +123,14 @@ class DispatchInfo:
try: try:
for item in session_mysql.query(DispatchEquipment).filter_by(group_type=1).all(): for item in session_mysql.query(DispatchEquipment).filter_by(group_type=1).all():
if item.group_code not in cls.group_truck_dict.keys(): if item.group_code not in cls.group_truck_dict.keys():
cls.group_truck_dict[item.group_code] = item.truck_id cls.group_truck_dict[item.group_code] = [item.equipment_id]
else: else:
cls.group_truck_dict[item.group_code].append(item.truck_id) cls.group_truck_dict[item.group_code].append(item.equipment_id)
cls.truck_group_dict[item.truck_id] = item.group_code cls.truck_group_dict[item.equipment_id] = item.group_code
except Exception as es: except Exception as es:
logger.error("矿卡与group_id映射更新异常") logger.error("矿卡与group_id映射更新异常")
logger.error(es) logger.error(es)
#
# try: # try:
# # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...} # # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...}
# # dump_group_dict = {} # unload_area_id -> team_id # # dump_group_dict = {} # unload_area_id -> team_id
...@@ -151,7 +159,7 @@ class DispatchInfo: ...@@ -151,7 +159,7 @@ class DispatchInfo:
# else: # else:
# cls.group_truck_dict[key.group_code].append(key.equipment_id) # cls.group_truck_dict[key.group_code].append(key.equipment_id)
# cls.truck_group_dict[key.equipment_id] = group_code_dict[key.group_code] # cls.truck_group_dict[key.equipment_id] = group_code_dict[key.group_code]
#
# except Exception as es: # except Exception as es:
# logger.error("分组到卸载区的数据更新异常") # logger.error("分组到卸载区的数据更新异常")
# logger.error(es) # logger.error(es)
...@@ -215,50 +223,83 @@ class DispatchInfo: ...@@ -215,50 +223,83 @@ class DispatchInfo:
""" """
logger = get_logger("mqc.update_route_distance") logger = get_logger("mqc.update_route_distance")
try: try:
try: groups = cls.group_excavator_dict.keys()
df = pd.DataFrame() # 记录装载区与卸载区之间的距离 for item in groups:
for item in session_postgre.query(WalkTime).all(): # 每个组的 excavator_id
temp = str(item.load_area_id), str(item.unload_area_id), item.to_load_distance, item.to_unload_distance excavator_ids = cls.group_excavator_dict[item]
df = pd.concat([df, pd.DataFrame([temp])], axis=0, ignore_index=True) # 每个组的load_areas
load_areas = []
for excavator_id in excavator_ids:
load_areas.append(cls.excavator_load_dict[excavator_id])
# 每个组的unload_areas
unload_areas = cls.group_dump_dict[item]
# unload->load 路网
unload_load_distance = np.zeros((len(unload_areas), len(load_areas)))
for i in unload_areas:
for j in load_areas:
distance = int(session_postgre.query(WalkTime).filter_by(unload_area_id=i, load_area_id=j).first().to_load_distance)
unload_load_distance[i][j] = distance
cls.load_distance[item] = unload_load_distance
# load->unload 路网
load_unload_distance = np.zeros((len(load_areas), len(unload_areas)))
for i in load_areas:
for j in unload_areas:
distance = session_postgre.query(WalkTime).filter_by(load_area_id=i, unload_area_id=j).first().to_unload_distance
load_unload_distance[i][j] = distance
cls.unload_distance[item] = load_unload_distance
except Exception as es: except Exception as es:
logger.error("路网距离数据更新异常1") logger.error("路网距离更新异常")
logger.error(es) 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: # try:
for i in range(len(unload_nums)): # df = pd.DataFrame() # 记录装载区与卸载区之间的距离
for j in range(len(exactor_nums)): # for item in session_postgre.query(WalkTime).all():
id = set(df.loc[df[1] == str(unload_nums[i])].index.to_list()) & set( # temp = str(item.load_area_id), str(item.unload_area_id), item.to_load_distance, item.to_unload_distance
df.loc[df[0] == str(cls.excavator_load_dict[j])].index.to_list()) # 集合属性 # df = pd.concat([df, pd.DataFrame([temp])], axis=0, ignore_index=True)
unload_exactor_matrix[i][j] = df.iloc[list(id)[0]][2] # except Exception as es:
except Exception as es: # logger.error("路网距离数据更新异常1")
logger.error("路网距离数据更新异常2") # logger.error(es)
logger.error(es) #
# # 距离矩阵
try: # for team_id in list(cls.group_dump_dict.keys()):
for m in range(len(exactor_nums)): # unload_nums = list(set(cls.group_dump_dict[team_id])) # 获取同一个team_id对应的卸载区列表
for n in range(len(unload_nums)): # exactor_nums = list(set(cls.group_excavator_dict[team_id])) # 获取同一个team_id对应的电铲列表
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()) # unload_exactor_matrix = np.zeros(
load_exactor_matrix[m][n] = df.iloc[list(id)[0]][3] # (len(unload_nums), len(exactor_nums))) # 初始化距离矩阵,记录从卸载区-->>电铲的距离,即to_load_distance,空车模式
except Exception as es: # load_exactor_matrix = np.array(
logger.error("路网距离数据更新异常3") # unload_exactor_matrix).T # 初始化距离矩阵,记录从装载区-->>电铲的距离,即to_unload_distance,重车模式
logger.error(es) #
cls.load_distance[team_id] = unload_exactor_matrix # try:
cls.unload_distance[team_id] = load_exactor_matrix # for i in range(len(unload_nums)):
# for j in range(len(exactor_nums)):
except Exception as es: # id = set(df.loc[df[1] == str(unload_nums[i])].index.to_list()) & set(
logger.error("路网距离数据更新异常4") # df.loc[df[0] == str(cls.excavator_load_dict[j])].index.to_list()) # 集合属性
logger.error(es) # 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):
...@@ -284,9 +325,9 @@ class DispatchInfo: ...@@ -284,9 +325,9 @@ class DispatchInfo:
def get_to_dump_distance(cls, group_id): def get_to_dump_distance(cls, group_id):
return cls.unload_distance[group_id] return cls.unload_distance[group_id]
# @classmethod @classmethod
# def get_park_to_excavator_distance(cls, group_id): def get_load_area(cls, excavator_id):
# return cls.park_distance[group_id] return cls.excavator_load_dict[excavator_id]
@classmethod @classmethod
def get_park_to_excavator_distance(cls, group_id): def get_park_to_excavator_distance(cls, group_id):
...@@ -298,6 +339,7 @@ class DispatchInfo: ...@@ -298,6 +339,7 @@ class DispatchInfo:
park_matrix[0][i] = distance park_matrix[0][i] = distance
return park_matrix return park_matrix
# #!E:\Pycharm Projects\Waytous # #!E:\Pycharm Projects\Waytous
# # -*- coding: utf-8 -*- # # -*- coding: utf-8 -*-
# # @Time : 2022/5/30 14:45 # # @Time : 2022/5/30 14:45
......
...@@ -490,11 +490,13 @@ class DiggingWorkArea(Base): ...@@ -490,11 +490,13 @@ class DiggingWorkArea(Base):
Id = Column(VARCHAR(50), primary_key=True) Id = Column(VARCHAR(50), primary_key=True)
Material = Column(VARCHAR(36)) Material = Column(VARCHAR(36))
ExactorId = Column(VARCHAR(36)) ExactorId = Column(VARCHAR(36))
ExactorUuid = Column(VARCHAR(50))
def __init__(self, Id, Material, ExactorId): def __init__(self, Id, Material, ExactorId, ExactorUuid):
self.Id = Id self.Id = Id
self.Material = Material self.Material = Material
self.ExactorId = ExactorId self.ExactorId = ExactorId
self.ExactorUuid = ExactorUuid
class DispatchRule(Base): class DispatchRule(Base):
...@@ -558,18 +560,22 @@ class DispatchMatch(Base): ...@@ -558,18 +560,22 @@ class DispatchMatch(Base):
group_code = Column(VARCHAR(36)) group_code = Column(VARCHAR(36))
match_code = Column(VARCHAR(36)) match_code = Column(VARCHAR(36))
team_id = Column(VARCHAR(36)) team_id = Column(VARCHAR(36))
load_area_id = Column(VARCHAR(36))
# excavator_id = Column(VARCHAR(36))
dump_id = Column(VARCHAR(36))
exactor_id = Column(VARCHAR(36))
unload_area_id = Column(VARCHAR(36)) unload_area_id = Column(VARCHAR(36))
excavator_id = Column(VARCHAR(36))
def __init__(self, id, group_type, group_code, match_code, team_id, unload_area_id, excavator_id): def __init__(self, id, group_type, group_code, match_code, team_id, load_area_id, dump_id, exactor_id, unload_area_id):
self.id = id self.id = id
self.group_type = group_type self.group_type = group_type
self.group_code = group_code self.group_code = group_code
self.match_code = match_code self.match_code = match_code
self.team_id = team_id self.team_id = team_id
self.load_area_id = load_area_id
self.dump_id = dump_id
self.exactor_id = exactor_id
self.unload_area_id = unload_area_id self.unload_area_id = unload_area_id
self.excavator_id = excavator_id
class DispatchEquipment(Base): class DispatchEquipment(Base):
__tablename__ = 'sys_dispatch_equipment' __tablename__ = 'sys_dispatch_equipment'
......
from static_data_process import *
from settings import *
import numpy as np
from data.dispatchInfo import DispatchInfo
from bidict import bidict
from alg.algorithm import AlgorithmBase
if __name__ == '__main__':
# dynamic_excavator_set = set(update_autodisp_excavator())
# dynamic_excavator_num = len(dynamic_excavator_set)
#
# dynamic_dump_set = set(update_autodisp_dump())
# dynamic_dump_num = len(dynamic_dump_set)
# dynamic_excavator_list = []
# for item in (
# session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all()
# ):
# dynamic_excavator_list.append(item.exactor_id)
# if len(dynamic_excavator_list) < 1:
# raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
# 更新数据库缓存
DispatchInfo.renew_set()
DispatchInfo.update_device_group_structure()
DispatchInfo.update_route_distance()
#
DispatchInfo.update_group_mode()
a = DispatchInfo.get_group_mode('9bb14655-4fd5-49da-a31a-13f6ced88d6c')
a_excavator = DispatchInfo.get_excavator_dict('9bb14655-4fd5-49da-a31a-13f6ced88d6c')
a_dump = DispatchInfo.get_dump_dict('9bb14655-4fd5-49da-a31a-13f6ced88d6c')
a_truck = DispatchInfo.get_truck_set('9bb14655-4fd5-49da-a31a-13f6ced88d6c')
bb = DispatchInfo.excavator_load_dict
cc = DispatchInfo.load_excavator_dict
# print(bb)
# print(cc)
hh = DispatchInfo.group_excavator_dict
print(hh)
# print(a)
# print(a_excavator)
# print(a_dump)
# print(a_truck)
# for i in a_excavator:
# load = DispatchInfo.get_load_area(i)
# print(load)
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