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

分组调度数据层更新

parent 2ed48496
......@@ -49,15 +49,21 @@ class Congestion(AlgorithmBase):
:return: congestion_value
"""
truck_index = truck.truck_uuid_to_index_dict[truck_id]
try:
trip = truck.get_truck_current_trip()[truck_index]
truck_index = truck.truck_uuid_to_index_dict[truck_id]
task = truck.get_truck_current_task()[truck_id]
trip = truck.get_truck_current_trip()[truck_index]
group_dynamic_excavator_num = len(self.group.dump_dict)
task = truck.get_truck_current_task()[truck_id]
group_dynamic_dump_num = len(self.group.excavator_dict)
group_dynamic_excavator_num = len(self.group.dump_dict)
group_dynamic_dump_num = len(self.group.excavator_dict)
except Exception as es:
self.logger.error("车辆调度信息读取异常")
self.logger.error(es)
if task == -2:
################################################ 矿卡启动 ###############################################
......@@ -85,17 +91,18 @@ class Congestion(AlgorithmBase):
self.logger.error(f"矿卡{truck_id}状态不匹配")
self.logger.error(es)
# 车辆所在挖机 uuid
excavator_id = DeviceMap.excavator_index_to_uuid_dict[int(trip[1])]
try:
# 车辆所在挖机 uuid
excavator_id = DeviceMap.excavator_index_to_uuid_dict[int(trip[1])]
# 挖机所在分组序号 index
excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id]
# 挖机所在分组序号 index
excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id]
try:
transport_value = self.group.to_dump_congestion[excavator_group_index, :]
except Exception as es:
transport_value = np.zeros(group_dynamic_dump_num)
self.logger.error("矿卡空载调度异常")
self.logger.error(es)
transport_value = np.zeros(group_dynamic_dump_num)
elif task in [3, 4, 5]:
################################################ 矿卡重载 ###############################################
......@@ -116,8 +123,9 @@ class Congestion(AlgorithmBase):
transport_value = self.group.to_excavator_congestion[dump_group_index, :]
except Exception as es:
self.logger.error("矿卡重载调度异常")
self.logger.error(es)
transport_value = np.zeros(group_dynamic_excavator_num)
self.logger.info(es)
return transport_value
......@@ -140,17 +148,23 @@ class ExpectedTime(AlgorithmBase):
:return: travel_time_value
"""
truck_index = truck.truck_uuid_to_index_dict[truck_id]
try:
truck_index = truck.truck_uuid_to_index_dict[truck_id]
trip = truck.get_truck_current_trip()[truck_index]
trip = truck.get_truck_current_trip()[truck_index]
task = truck.get_truck_current_task()[truck_id]
task = truck.get_truck_current_task()[truck_id]
truck_avl_time = pre_sch.get_truck_avl_time(truck_id=truck_id)
truck_avl_time = pre_sch.get_truck_avl_time(truck_id=truck_id)
group_dynamic_excavator_num = len(self.group.dump_dict)
group_dynamic_excavator_num = len(self.group.dump_dict)
group_dynamic_dump_num = len(self.group.excavator_dict)
group_dynamic_dump_num = len(self.group.excavator_dict)
except Exception as es:
self.logger.error("车辆调度信息读取异常")
self.logger.error(es)
if task == -2:
################################################ 矿卡启动 ###############################################
......@@ -194,8 +208,9 @@ class ExpectedTime(AlgorithmBase):
self.logger.info(excavator_val_time)
except Exception as es:
self.logger.error("矿卡启动调度异常")
self.logger.error(es)
transport_value = np.zeros(group_dynamic_excavator_num)
self.logger.info(es)
if task in [0, 1, 2]:
################################################ 矿卡空载 ###############################################
......@@ -245,8 +260,9 @@ class ExpectedTime(AlgorithmBase):
self.logger.info(dump_val_time)
except Exception as es:
transport_value = np.zeros(group_dynamic_dump_num)
self.logger.error("矿卡空载调度异常")
self.logger.error(es)
transport_value = np.zeros(group_dynamic_dump_num)
elif task in [3, 4, 5]:
################################################ 矿卡重载 ###############################################
......@@ -284,8 +300,9 @@ class ExpectedTime(AlgorithmBase):
transport_value = truck_service_time - truck_avl_time
except Exception as es:
transport_value = np.zeros(group_dynamic_dump_num)
self.logger.error("矿卡重载调度异常")
self.logger.error(es)
transport_value = np.zeros(group_dynamic_dump_num)
return transport_value
......@@ -5,6 +5,9 @@
# @Site :
# @File : dispatchInfo.py
# @Software: PyCharm
from settings import *
logger = get_logger("mqc.dispatchInfo")
class DispatchInfo:
......@@ -13,28 +16,98 @@ class DispatchInfo:
"""
# dispatch groups
group_num = 1
group_set = set()
# device group structure
group_dump_dict = {} # team_id -> dict {[dump_id, unload_area_id], [dump_id, unload_area_id], ...}
group_dump_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...}
# {group_id:unload_area_id,...}
group_excavator_dict = {} # team_id -> dict {[excavator_id, load_area_id], ...}
# {group_id: [excavator_id, unload_area_id], ...}
group_truck_dict = {} # team_id -> dict {truck_id, ...}
# {group_id:[truck_id,truck_id],...}
dump_group_dict = {} # dump_id -> team_id
dump_group_dict = {} # unload_area_id -> team_id
excavator_group_dict = {} # excavator_id -> team_id
truck_group_dict = {} # truck_id -> team_id
# group feature
group_mode = {}
group_mode = {} # 四种模式:全智能、空车智能、定铲定铲和分流配比模式
# {mode_name:mode_code}
# route_distance(路网距离)
load_excavator_distance = {} # 装载区-挖机(电铲)的距离 数据格式 -->> {load_area_id:[exactor_uuid:to_load_distance],}
unload_excavator_distance = {} # 卸载区-挖机(电铲)的距离 数据格式 -->> {unload_area_id:[exactor_uuid:to_unload_distance],}
@classmethod
def renew_set(cls):
"""
@date:2022/6/2 19:50
@author:maqc
@desc:实例化对象,可直接访问
"""
cls.group_dump_dict = {}
cls.dump_group_dict = {}
cls.group_excavator_dict = {}
cls.excavator_group_dict = {}
cls.excavator_group_dict = {}
cls.group_truck_dict = {}
cls.truck_group_dict = {}
cls.group_mode = {}
cls.load_excavator_distance = {}
cls.unload_excavator_distance = {}
@classmethod
def update_device_group_structure(cls):
pass
"""
@date:2022/6/2 19:49
@author:maqc
@desc:分组与卸载区、挖机、矿卡的映射和反映射
"""
logger = get_logger("mqc.update_device_group_structure")
try:
# group_dump_dict = {} -->> {group_id:unload_area_id,...}
# dump_group_dict = {} # unload_area_id -> team_id
group_code_dict = {} # group_code-->>team_id的映射
for valve in session_mysql.query(DispatchMatch).filter_by(group_type=1).all():
group_code_dict[valve.group_code] = valve.team_id
if valve.team_id not in cls.group_dump_dict:
cls.group_dump_dict[valve.team_id] = [valve.unload_area_id] # 注意:一个team_id可能对应多个unload_area_id
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 = {} -->> {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
for item in session_mysql.query(DispatchMatch).filter_by(group_type=1).all():
cls.group_excavator_dict[item.team_id] = [item.exactor_id, item.unload_area_id]
cls.excavator_group_dict[item.exactor_id] = item.team_id
# group_truck_dict = {} -->> {group_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
def update_group_mode(cls):
pass
"""
@date:2022/6/2 19:49
@author:maqc
@desc:处理其它类型的数据
"""
logger = get_logger("mqc.update_group_mode")
try:
for value in session_mysql.query(DispatchMode).all():
cls.group_mode[value.mode_name] = value.mode_code
except Exception as es:
logger.error("派车模式数据更新异常")
logger.error(es)
@classmethod
def dispatch_group_init(cls):
......@@ -43,3 +116,26 @@ class DispatchInfo:
:return:
"""
pass
@classmethod
# 距离-->>数据格式:矩阵-->>to_load_distance
def update_route_distance(cls):
"""
@date:2022/6/2 19:50
@author:maqc
@desc:更新路网距离,返回矩阵格式数据
"""
load_exactor_dict = {} # 装载区id-->>电铲编号的映射
logger = get_logger("mqc.update_route_distance")
try:
for value in session_postgre.query(DiggingWorkArea).all():
load_exactor_dict[value.Id] = value.Exactorld
for value in session_postgre.query(WalkTime).all():
if value.load_area_id in load_exactor_dict:
cls.load_excavator_distance[value.load_area_id] = [load_exactor_dict[value.load_area_id],
value.to_load_distance]
cls.unload_excavator_distance[value.unload_area_id] = [load_exactor_dict[value.load_area_id],
value.to_unload_distance]
except Exception as es:
logger.error("路网数据更新异常")
logger.error(es)
......@@ -207,6 +207,7 @@ class WalkTime(Base):
# self.walktime_load = walktime_load
# self.walktime_unload = walktime_unload
# class Truck(Base):
# __tablename__ = 'truck_status'
#
......@@ -262,7 +263,8 @@ class EquipmentPair(Base):
isdeleted = Column(BOOLEAN)
createtime = Column(DateTime)
def __init__(self, id, truck_id, exactor_id, dump_id, load_area_id, unload_area_id, dispatch_id, isdeleted, createtime):
def __init__(self, id, truck_id, exactor_id, dump_id, load_area_id, unload_area_id, dispatch_id, isdeleted,
createtime):
self.id = id
self.truck_id = truck_id
self.exactor_id = exactor_id
......@@ -273,6 +275,7 @@ class EquipmentPair(Base):
self.isdeleted = isdeleted
self.createtime = createtime
# class Lane(Base):
# # 表的名字
# __tablename__ = 'Geo_Node'
......@@ -295,6 +298,7 @@ class Lane(Base):
self.Length = Length
self.MaxSpeed = MaxSpeed
class Dispatch(Base):
# 表的名字:
__tablename__ = 'sys_dispatch_setting'
......@@ -317,7 +321,8 @@ class Dispatch(Base):
deletor = Column(VARCHAR(36))
deletetime = Column(DateTime)
def __init__(self, id, load_area_id, exactor_id, unload_area_id, dump_id, isauto, truck_id, group_id, remark, proportion_id,
def __init__(self, id, load_area_id, exactor_id, unload_area_id, dump_id, isauto, truck_id, group_id, remark,
proportion_id,
isdeleted, creator, createtime, updator, updatetime, deletor, deletetime):
self.id = id
self.load_area_id = load_area_id
......@@ -337,6 +342,7 @@ class Dispatch(Base):
self.deletor = deletor
self.deletetime = deletetime
class WalkTimePark(Base):
__tablename__ = 'park_load_distance'
......@@ -355,6 +361,7 @@ class WalkTimePark(Base):
self.park_load_distance = park_load_distance
self.park_load_lanes = park_load_lanes
class Equipment(Base):
__tablename__ = 'sys_equipment'
......@@ -384,6 +391,7 @@ class Equipment(Base):
self.only_allowed = only_allowed
self.priority = priority
class EquipmentSpec(Base):
__tablename__ = 'sys_equipment_spec'
......@@ -402,6 +410,7 @@ class EquipmentSpec(Base):
self.width = width
self.max_speed = max_speed
class LoadInfo(Base):
__tablename__ = 'sys_loadinfo'
......@@ -414,6 +423,7 @@ class LoadInfo(Base):
self.dump_id = dump_id
self.load_weght = load_weight
class JobRecord(Base):
__tablename__ = 'statistic_job_record'
......@@ -430,6 +440,7 @@ class JobRecord(Base):
self.end_time = end_time
self.work_type = work_type
class WorkRecord(Base):
__tablename__ = 'statistic_work_record'
......@@ -440,7 +451,8 @@ class WorkRecord(Base):
load_exit_time = Column(DateTime)
load_exit_count = Column(Integer)
def __init__(self, equipment_id, work_day, load_entrance_time, load_entrance_count, load_exit_time, load_exit_count):
def __init__(self, equipment_id, work_day, load_entrance_time, load_entrance_count, load_exit_time,
load_exit_count):
self.equipment_id = equipment_id
self.work_day = work_day
self.load_entrance_time = load_entrance_time
......@@ -456,16 +468,18 @@ class DumpArea(Base):
BindList = Column(VARCHAR(1000))
UnloadAbililty = Column(Float)
Disabled = Column(Integer)
Material = Column(VARCHAR(36))
Materials = Column(VARCHAR(36))
Priority = Column(Integer)
DumpEquipmentld = Column(VARCHAR(36))
def __init__(self, Id, BindList, UnloadAbililty, Disabled, Material, Priority):
def __init__(self, Id, BindList, UnloadAbililty, Disabled, Materials, Priority, DumpEquipmentld):
self.Id = Id
self.BindList = BindList
self.UnloadAbililty = UnloadAbililty
self.Disabled = Disabled
self.Material = Material
self.Materials = Materials
self.Priority = Priority
self.DumpEquipmentld = DumpEquipmentld
class DiggingWorkArea(Base):
......@@ -473,10 +487,12 @@ class DiggingWorkArea(Base):
Id = Column(VARCHAR(50), primary_key=True)
Material = Column(VARCHAR(36))
Exactorld = Column(VARCHAR(36))
def __init__(self, Id, Material):
def __init__(self, Id, Material, Exactorld):
self.Id = Id
self.Material = Material
self.Exactorld = Exactorld
class DispatchRule(Base):
......@@ -501,3 +517,66 @@ class Material(Base):
self.id = id
self.name = name
class DispatchMode(Base):
__tabelname__ = 'sys_dispatch_mode'
id = Column(VARCHAR(36), primary_key=True)
mode_name = Column(VARCHAR(30))
mode_desc = Column(VARCHAR(50))
mode_code = Column(Integer)
def __init__(self, id, mode_name, mode_desc, mode_code):
self.id = id
self.mode_name = mode_name
self.mode_desc = mode_desc
self.mode_code = mode_code
class DispatchGroup(Base):
__tabelname__ = 'sys_dispatch_group'
group_type = Column(Integer)
group_code = Column(VARCHAR(36))
mode_id = Column(VARCHAR(36))
def __init__(self, group_type, group_code, mode_id):
self.group_type = group_type
self.group_code = group_code
self.mode_id = mode_id
class DispatchMatch(Base):
__tabelname__ = 'sys_dispatch_match'
group_type = Column(Integer)
group_code = Column(VARCHAR(36))
match_code = Column(VARCHAR(36))
team_id = Column(VARCHAR(36))
unload_area_id = Column(VARCHAR(36))
exactor_id = Column(VARCHAR(36))
def __init__(self, group_type, group_code, match_code, team_id, unload_area_id, exactor_id):
self.group_type = group_type
self.group_code = group_code
self.match_code = match_code
self.team_id = team_id
self.unload_area_id = unload_area_id
self.exactor_id = exactor_id
class DispatchEquipment(Base):
__tabelname__ = 'sys_dispatch_equipment'
group_type = Column(Integer)
group_code = Column(VARCHAR(36))
match_code = Column(VARCHAR(36))
isdeleted = Column(Integer)
equipment_id = Column(VARCHAR(36))
def __init__(self, group_type, group_code, match_code, isdeleted, equipment_id):
self.group_type = group_type
self.group_code = group_code
self.match_code = match_code
self.isdeleted = isdeleted
self.equipment_id = equipment_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