Commit 21090174 authored by 张晓彤's avatar 张晓彤

改善group类结构

parent 4b27ce39
...@@ -55,7 +55,7 @@ class Dispatcher: ...@@ -55,7 +55,7 @@ class Dispatcher:
:return: None :return: None
""" """
self.group_list = {} self.group_list = {}
groups = DispatchInfo.get_all_group() groups = DispatchInfo.get_all_groups_id()
for group_id in groups: for group_id in groups:
if group_id not in self.group_list: if group_id not in self.group_list:
group = Group(group_id, self.truck, self.pre_sch, self.excavator, self.dump) group = Group(group_id, self.truck, self.pre_sch, self.excavator, self.dump)
......
...@@ -223,35 +223,13 @@ class Group: ...@@ -223,35 +223,13 @@ class Group:
update group device map. update group device map.
:return: :return:
""" """
# excavator_index = 0 # group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
self.excavator_uuid_index_dict = {}
self.unload_area_uuid_index_dict = {}
self.truck_uuid_index_dict = {}
self.dump_uuid_index_dict = {}
for i in range(len(self.excavator)):
self.excavator_uuid_index_dict[list(self.excavator)[i]] = i
for i in range(len(self.unload_area)):
self.unload_area_uuid_index_dict[list(self.unload_area)[i]] = i
for i in range(len(self.dump)):
self.dump_uuid_index_dict[list(self.dump)[i]] = i
for i in range(len(self.truck_set)):
self.truck_uuid_index_dict[list(self.truck_set)[i]] = i
self.excavator_uuid_index_dict = bidict(DispatchInfo.excavator_uuid_to_index_dict[self.group_id])
self.unload_area_uuid_index_dict = bidict(DispatchInfo.unload_area_uuid_to_index_dict[self.group_id])
self.dump_uuid_index_dict = bidict(DispatchInfo.dump_uuid_to_index_dict[self.group_id])
# self.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict) # update devices(excavators, unload_areas, dumps) bidirectional map within a group
# self.unload_area_uuid_index_dict = bidict(self.unload_area_uuid_index_dict) self.excavator_uuid_index_dict = DispatchInfo.get_group_excavator_dict(self.group_id)
# self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict) self.unload_area_uuid_index_dict = DispatchInfo.get_group_unload_area_dict(self.group_id)
self.dump_uuid_index_dict = bidict(self.dump_uuid_index_dict) self.dump_uuid_index_dict = DispatchInfo.get_group_dump_dict(self.group_id)
# group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
def update_device_material(self): def update_device_material(self):
""" """
......
...@@ -4,12 +4,11 @@ ...@@ -4,12 +4,11 @@
# @Site : # @Site :
# @File : dispatchInfo.py # @File : dispatchInfo.py
# @Software: PyCharm # @Software: PyCharm
import numpy as np
from settings import * from settings import *
import pandas as pd import pandas as pd
from tables import DispatchMatch, DispatchEquipment from tables import DispatchMatch, DispatchEquipment
import bidict from bidict import bidict
logger = get_logger("zxt.dispatchInfo") logger = get_logger("zxt.dispatchInfo")
...@@ -25,15 +24,15 @@ class DispatchInfo: ...@@ -25,15 +24,15 @@ class DispatchInfo:
load_excavator_dict = {} # 装载区id-->>电铲编号的映射 load_excavator_dict = {} # 装载区id-->>电铲编号的映射
excavator_load_dict = {} # 电铲编号->>装载区id的映射 excavator_load_dict = {} # 电铲编号->>装载区id的映射
# excavator <-> group id # group_excavators <-> group id
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值
# unload_area <-> group id # group_unload_areas <-> group id
group_unload_area_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...} group_unload_area_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...}
unload_area_group_dict = {} # unload_area_id -> team_id unload_area_group_dict = {} # unload_area_id -> team_id
# dump <-> group id # group_dumps <-> group id
group_dump_dict = {} group_dump_dict = {}
dump_group_dict = {} dump_group_dict = {}
...@@ -54,7 +53,7 @@ class DispatchInfo: ...@@ -54,7 +53,7 @@ class DispatchInfo:
# truck -> match(excavator_id, unload_area_id) # truck -> match(excavator_id, unload_area_id)
truck_match_dict = {} truck_match_dict = {}
# unload_area <-> dump id # group_unload_areas <-> group_dumps id
dump_unload_area_dict = {} dump_unload_area_dict = {}
unload_area_dump_dict = {} unload_area_dump_dict = {}
...@@ -144,7 +143,7 @@ class DispatchInfo: ...@@ -144,7 +143,7 @@ class DispatchInfo:
logger = get_logger("zxt.update_device_group_structure") logger = get_logger("zxt.update_device_group_structure")
# update excavator_id <-> load_area_id # update excavator_id <-> load_area_id
try: try:
for item in session_mysql.query(DispatchSetting).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).all():
cls.load_excavator_dict[item.load_area_id] = item.exactor_id cls.load_excavator_dict[item.load_area_id] = item.exactor_id
cls.excavator_load_dict[item.exactor_id] = item.load_area_id cls.excavator_load_dict[item.exactor_id] = item.load_area_id
...@@ -157,7 +156,7 @@ class DispatchInfo: ...@@ -157,7 +156,7 @@ class DispatchInfo:
# update dump_id <-> unload_area_id # update dump_id <-> unload_area_id
try: try:
for item in session_mysql.query(DispatchSetting).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).all():
cls.unload_area_dump_dict[item.unload_area_id] = item.dump_id cls.unload_area_dump_dict[item.unload_area_id] = item.dump_id
cls.dump_unload_area_dict[item.dump_id] = item.unload_area_id cls.dump_unload_area_dict[item.dump_id] = item.unload_area_id
...@@ -170,7 +169,7 @@ class DispatchInfo: ...@@ -170,7 +169,7 @@ class DispatchInfo:
# update exactor_id <-> truck_id # update exactor_id <-> truck_id
try: try:
for item in session_mysql.query(DispatchSetting).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).all():
if item.exactor_id not in cls.exactor_truck_dict.keys(): if item.exactor_id not in cls.exactor_truck_dict.keys():
cls.exactor_truck_dict[item.exactor_id] = [item.truck_id] cls.exactor_truck_dict[item.exactor_id] = [item.truck_id]
else: else:
...@@ -183,7 +182,7 @@ class DispatchInfo: ...@@ -183,7 +182,7 @@ class DispatchInfo:
# update exactor_id <-> unload_area_id # update exactor_id <-> unload_area_id
try: try:
for item in session_mysql.query(DispatchSetting).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).all():
if item.exactor_id not in cls.exactor_unload_dict.keys(): if item.exactor_id not in cls.exactor_unload_dict.keys():
cls.exactor_unload_dict[item.exactor_id] = [item.unload_area_id] cls.exactor_unload_dict[item.exactor_id] = [item.unload_area_id]
else: else:
...@@ -195,7 +194,7 @@ class DispatchInfo: ...@@ -195,7 +194,7 @@ class DispatchInfo:
# update unload_area_id -> rate # update unload_area_id -> rate
try: try:
for item in session_mysql.query(DispatchSetting).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).all():
cls.unload_rate_dict[item.unload_area_id] = item.rate cls.unload_rate_dict[item.unload_area_id] = item.rate
except Exception as es: except Exception as es:
logger.error("卸载区和比例值关系更新异常") logger.error("卸载区和比例值关系更新异常")
...@@ -203,8 +202,8 @@ class DispatchInfo: ...@@ -203,8 +202,8 @@ class DispatchInfo:
# update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id # update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id
try: try:
for item in session_mysql.query(DispatchSetting).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all():
# add excavator # add group_excavators
if item.group_id not in cls.group_excavator_dict.keys(): if item.group_id not in cls.group_excavator_dict.keys():
cls.group_excavator_dict[item.group_id] = [item.exactor_id] cls.group_excavator_dict[item.group_id] = [item.exactor_id]
else: else:
...@@ -212,7 +211,7 @@ class DispatchInfo: ...@@ -212,7 +211,7 @@ class DispatchInfo:
cls.group_excavator_dict[item.group_id].append(item.exactor_id) cls.group_excavator_dict[item.group_id].append(item.exactor_id)
cls.excavator_group_dict[item.exactor_id] = item.group_id cls.excavator_group_dict[item.exactor_id] = item.group_id
# add unload_area # add group_unload_areas
if item.group_id not in cls.group_unload_area_dict.keys(): if item.group_id not in cls.group_unload_area_dict.keys():
cls.group_unload_area_dict[item.group_id] = [item.unload_area_id] cls.group_unload_area_dict[item.group_id] = [item.unload_area_id]
else: else:
...@@ -220,7 +219,7 @@ class DispatchInfo: ...@@ -220,7 +219,7 @@ class DispatchInfo:
cls.group_unload_area_dict[item.group_id].append(item.unload_area_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 cls.unload_area_group_dict[item.unload_area_id] = item.group_id
# add dump # add group_dumps
if item.group_id not in cls.group_dump_dict.keys(): if item.group_id not in cls.group_dump_dict.keys():
cls.group_dump_dict[item.group_id] = [item.dump_id] cls.group_dump_dict[item.group_id] = [item.dump_id]
else: else:
...@@ -254,8 +253,8 @@ class DispatchInfo: ...@@ -254,8 +253,8 @@ class DispatchInfo:
try: try:
trucks = cls.truck_group_dict.keys() trucks = cls.truck_group_dict.keys()
for i in trucks: for i in trucks:
match_excavator = session_mysql.query(DispatchSetting).filter_by(truck_id=i).first().exactor_id match_excavator = session_mysql.query(DispatchSetting).filter_by(truck_id=i, isdeleted=0, ).first().exactor_id
match_unload_area = session_mysql.query(DispatchSetting).filter_by(truck_id=i).first().unload_area_id match_unload_area = session_mysql.query(DispatchSetting).filter_by(truck_id=i, isdeleted=0, ).first().unload_area_id
cls.truck_match_dict[i] = [match_excavator, match_unload_area] cls.truck_match_dict[i] = [match_excavator, match_unload_area]
except Exception as es: except Exception as es:
logger.error(es) logger.error(es)
...@@ -349,10 +348,10 @@ class DispatchInfo: ...@@ -349,10 +348,10 @@ class DispatchInfo:
# # unload->load distance # # unload->load distance
# unload_load_distance = np.zeros((len(unload_areas), len(load_areas))) # unload_load_distance = np.zeros((len(unload_areas), len(load_areas)))
# for i in range(len(unload_areas)): # for truck_id in range(len(unload_areas)):
# for j in range(len(load_areas)): # for j in range(len(load_areas)):
# distance = int(session_postgre.query(WalkTime).filter_by(unload_area_id=unload_areas[i], load_area_id=load_areas[j]).first().to_load_distance) # distance = int(session_postgre.query(WalkTime).filter_by(unload_area_id=unload_areas[truck_id], load_area_id=load_areas[j]).first().to_load_distance)
# unload_load_distance[i][j] = distance # unload_load_distance[truck_id][j] = distance
# cls.load_distance[item] = unload_load_distance # cls.load_distance[item] = unload_load_distance
...@@ -387,6 +386,11 @@ class DispatchInfo: ...@@ -387,6 +386,11 @@ class DispatchInfo:
if unload_area_id not in group_unload_area_uuid_to_index: if unload_area_id not in group_unload_area_uuid_to_index:
group_unload_area_uuid_to_index[unload_area_id] = group_unload_area_count group_unload_area_uuid_to_index[unload_area_id] = group_unload_area_count
group_excavator_uuid_to_index = bidict(group_excavator_uuid_to_index)
group_dump_uuid_to_index = bidict(group_dump_uuid_to_index)
group_load_area_uuid_to_index = bidict(group_load_area_uuid_to_index)
group_unload_area_uuid_to_index = bidict(group_unload_area_uuid_to_index)
cls.excavator_uuid_to_index_dict[item] = group_excavator_uuid_to_index cls.excavator_uuid_to_index_dict[item] = group_excavator_uuid_to_index
cls.dump_uuid_to_index_dict[item] = group_dump_uuid_to_index cls.dump_uuid_to_index_dict[item] = group_dump_uuid_to_index
cls.load_area_uuid_to_index_dict[item] = group_load_area_uuid_to_index cls.load_area_uuid_to_index_dict[item] = group_load_area_uuid_to_index
...@@ -428,13 +432,61 @@ class DispatchInfo: ...@@ -428,13 +432,61 @@ class DispatchInfo:
# logger.error("路网距离更新异常-调度部分和路网部分不一致") # logger.error("路网距离更新异常-调度部分和路网部分不一致")
# logger.error(es) # logger.error(es)
# @classmethod
# def update_device_dict(cls):
# cls.excavator_uuid_index_dict = {}
# cls.unload_area_uuid_index_dict = {}
# cls.truck_uuid_index_dict = {}
# cls.dump_uuid_index_dict = {}
# for group_id in cls.group_set:
# cls.excavator_uuid_index_dict = {}
# cls.unload_area_uuid_index_dict = {}
# cls.truck_uuid_index_dict = {}
# cls.dump_uuid_index_dict = {}
#
# for truck_id in range(len(cls.group_excavator_dict[group_id])):
# cls.excavator_uuid_index_dict[group_id][list(cls.group_excavator_dict[group_id])[truck_id]] = truck_id
#
# for truck_id in range(len(cls.group_unload_area_dict[group_id])):
# cls.unload_area_uuid_index_dict[group_id][list(cls.group_unload_area_dict[group_id])[truck_id]] = truck_id
#
# for truck_id in range(len(cls.group_dump_dict[group_id])):
# cls.dump_uuid_index_dict[group_id][list(cls.group_dump_dict[group_id])[truck_id]] = truck_id
#
# for truck_id in range(len(cls.group_truck_dict[group_id])):
# cls.truck_uuid_index_dict[group_id][list(cls.group_truck_dict[group_id])[truck_id]] = truck_id
#
# # self.excavator_uuid_index_dict = bidict(DispatchInfo.excavator_uuid_to_index_dict[self.group_id])
# # self.unload_area_uuid_index_dict = bidict(DispatchInfo.unload_area_uuid_to_index_dict[self.group_id])
# # self.dump_uuid_index_dict = bidict(DispatchInfo.dump_uuid_to_index_dict[self.group_id])
#
# cls.excavator_uuid_index_dict = bidict(cls.excavator_uuid_index_dict)
# cls.unload_area_uuid_index_dict = bidict(cls.unload_area_uuid_index_dict)
# cls.truck_uuid_index_dict = bidict(cls.truck_uuid_index_dict)
# cls.dump_uuid_index_dict = bidict(cls.dump_uuid_index_dict)
@classmethod
def get_group_excavator_dict(cls, group_id):
return cls.excavator_uuid_to_index_dict[group_id]
@classmethod
def get_group_dump_dict(cls, group_id):
return cls.dump_uuid_to_index_dict[group_id]
@classmethod
def get_group_unload_area_dict(cls, group_id):
return cls.unload_area_uuid_to_index_dict[group_id]
@classmethod @classmethod
def get_all_group(cls): def get_all_groups_id(cls):
return set(cls.group_excavator_dict.keys()) return set(cls.group_excavator_dict.keys())
@classmethod @classmethod
def get_group_mode(cls, group_id): def get_group_mode(cls, group_id):
return cls.group_mode[group_id] if group_id in cls.group_mode:
return cls.group_mode[group_id]
else:
return None
@classmethod @classmethod
def get_excavator(cls, group_id): def get_excavator(cls, group_id):
...@@ -628,7 +680,7 @@ class DispatchInfo: ...@@ -628,7 +680,7 @@ class DispatchInfo:
# @classmethod # @classmethod
# def get_group_road_info(cls,group_id, truck_info): # def get_group_road_info(cls,group_id, truck_info):
# if truck_info == 1: # if truck_info == 1:
# for i in group_excavator(): # for truck_id in group_excavator():
# pass # pass
# for j in group_unload_area(): # for j in group_unload_area():
# pass # pass
......
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