Commit 336211d2 authored by 张晓彤's avatar 张晓彤

电铲及车辆故障情况处理

parent db6ebc5f
...@@ -36,14 +36,45 @@ class DispatchSubmission: ...@@ -36,14 +36,45 @@ class DispatchSubmission:
self.truck = truck self.truck = truck
self.topo = topo self.topo = topo
def group_dispatch_to_redis(self, group: Group, dispatch_plan_dict):
"""
Update the dispatch plan in the group to redis
:param group: (Group)
:param dispatch_plan_dict: (Dict)
:return: None
"""
self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}')
self.logger.info(f'组内车辆 {group.group_trucks}')
self.logger.info(f'组内挖机 {group.group_excavators}')
self.logger.info(f'组内卸点 {group.group_dumps}')
self.logger.info(f'调度模式 {group.group_mode}')
self.logger.info("dispatch_plan_dict")
self.logger.info(dispatch_plan_dict)
for truck_id, dispatch_plan in dispatch_plan_dict.items():
try:
if truck_id in group.truck_info_list:
self.logger.info(
f'======================================= 派车计划写入 =======================================')
self.truck_dispatch_to_redis(truck_id, group.truck_info_list[truck_id], dispatch_plan, group.group_mode)
self.logger.info(
"======================================== 计划完成写入 =======================================")
else:
raise Exception("车辆对象信息不存在 group.truck_info_list")
except Exception as es:
# self.logger.error("group_dispatch_to_redis_error")
self.logger.error(es)
truck_direct2redis(truck_id)
def truck_dispatch_to_redis(self, truck_id: str, truck_info: CurrentTruck, dispatch_seq: List[int], def truck_dispatch_to_redis(self, truck_id: str, truck_info: CurrentTruck, dispatch_seq: List[int],
group_mode: int): group_mode: int):
""" """
将truck_id对应矿卡派车计划写入redis Update the dispatch plan of one truck to redis
:param group_mode: (int) :param group_mode: (int)
:param truck_id: (uuid) 矿卡uuid :param truck_id: (uuid)
:param truck_info: (object) :param truck_info: (object)
:param dispatch_seq: (List[int]) 矿卡派车计划 :param dispatch_seq: (List[int]) truck dispatch plan
:return: None :return: None
""" """
...@@ -246,37 +277,6 @@ class DispatchSubmission: ...@@ -246,37 +277,6 @@ class DispatchSubmission:
self.logger.info(f'redis 注入 {record}') self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record))) redis5.set(truck_id, str(json.dumps(record)))
def group_dispatch_to_redis(self, group: Group, dispatch_plan_dict):
"""
Update the dispatch plan in the group to redis
:param group: (Group)
:param dispatch_plan_dict: (Dict)
:return: None
"""
self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}')
self.logger.info(f'组内车辆 {group.group_trucks}')
self.logger.info(f'组内挖机 {group.group_excavators}')
self.logger.info(f'组内卸点 {group.group_dumps}')
self.logger.info(f'调度模式 {group.group_mode}')
self.logger.info("dispatch_plan_dict")
self.logger.info(dispatch_plan_dict)
for truck_id, dispatch_plan in dispatch_plan_dict.items():
try:
if truck_id in group.truck_info_list:
self.logger.info(
f'======================================= 派车计划写入 =======================================')
self.truck_dispatch_to_redis(truck_id, group.truck_info_list[truck_id], dispatch_plan, group.group_mode)
self.logger.info(
"======================================== 计划完成写入 =======================================")
else:
raise Exception("车辆对象信息不存在 group.truck_info_list")
except Exception as es:
# self.logger.error("group_dispatch_to_redis_error")
self.logger.error(es)
truck_direct2redis(truck_id)
def redis_format(truck_id, group_id, dispatch_id, item): def redis_format(truck_id, group_id, dispatch_id, item):
record = {"truckId": truck_id, "dispatchId": dispatch_id, "exactorId": item.exactor_id, "dumpId": item.dump_id, record = {"truckId": truck_id, "dispatchId": dispatch_id, "exactorId": item.exactor_id, "dumpId": item.dump_id,
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
from data.para_config import * from data.para_config import *
from bidict import bidict from bidict import bidict
from settings import get_logger from settings import get_logger
from equipment.excavator import ExcavatorInfo
from equipment.truck import TruckInfo
logger = get_logger("zxt.dispatchInfo") logger = get_logger("zxt.dispatchInfo")
...@@ -156,7 +158,7 @@ class DispatchInfo: ...@@ -156,7 +158,7 @@ class DispatchInfo:
session_postgre.rollback() session_postgre.rollback()
session_mysql.rollback() session_mysql.rollback()
# update exactor_id <-> truck_id # update exactor_id <-> truck_id
try: try:
for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).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():
...@@ -169,7 +171,7 @@ class DispatchInfo: ...@@ -169,7 +171,7 @@ class DispatchInfo:
logger.error("电铲和卡车的映射关系更新异常") logger.error("电铲和卡车的映射关系更新异常")
logger.error(es) logger.error(es)
# update exactor_id <-> unload_area_id # update exactor_id <-> unload_area_id
try: try:
for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).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():
...@@ -181,7 +183,7 @@ class DispatchInfo: ...@@ -181,7 +183,7 @@ class DispatchInfo:
logger.error("电铲和卸载区的映射关系更新异常") logger.error("电铲和卸载区的映射关系更新异常")
logger.error(es) logger.error(es)
# update unload_area_id -> rate # update unload_area_id -> rate
try: try:
for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0, ).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
...@@ -190,17 +192,25 @@ class DispatchInfo: ...@@ -190,17 +192,25 @@ class DispatchInfo:
logger.error(es) logger.error(es)
# 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
excavator = ExcavatorInfo()
excavator.update_excavator_current_state()
truck = TruckInfo()
truck.update_truck_current_task()
try: try:
for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all():
# add group_excavators # add group_excavators
excavator_state = session_mysql.query(Equipment).filter_by(id=item.exactor_id).first() excavator_state = excavator.excavator_current_state[item.excavator_id]
# if excavator_state is not None and excavator_state.disabled == 1: if excavator_state is None or excavator_state not in [6, 7]:
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:
if item.exactor_id not in cls.group_excavator_dict[item.group_id]: 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
# add group_unload_areas # 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():
...@@ -211,9 +221,6 @@ class DispatchInfo: ...@@ -211,9 +221,6 @@ class DispatchInfo:
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 dump
dump_state = session_mysql.query(Equipment).filter_by(id=item.dump_id).first()
# if dump_state is not None and dump_state.disabled == 1:
# 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:
...@@ -222,14 +229,14 @@ class DispatchInfo: ...@@ -222,14 +229,14 @@ class DispatchInfo:
cls.dump_group_dict[item.dump_id] = item.group_id cls.dump_group_dict[item.dump_id] = item.group_id
# add truck # add truck
truck_state = session_mysql.query(Equipment).filter_by(id=item.truck_id).first() truck_state = truck.truck_current_state[item.truck_id]
# if truck_state is not None and truck_state.disabled == 1: if truck_state is None or truck_state not in [6, 7]:
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]: 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
logger.info("存在的分组") logger.info("存在的分组")
logger.info(cls.group_excavator_dict.keys()) logger.info(cls.group_excavator_dict.keys())
......
...@@ -277,13 +277,15 @@ def global_period_para_update(): ...@@ -277,13 +277,15 @@ def global_period_para_update():
truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map() truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
excavator_uuid_to_name_dict = build_excavator_uuid_name_map() excavator_uuid_to_name_dict, excavator_name_to_uuid_dict = build_excavator_uuid_name_map()
dump_uuid_to_name_dict = build_dump_uuid_name_map() dump_uuid_to_name_dict = build_dump_uuid_name_map()
global_dict = {"park_num": park_num, "load_area_num": load_area_num, "unload_area_num": unload_area_num, global_dict = {"park_num": park_num, "load_area_num": load_area_num, "unload_area_num": unload_area_num,
"truck_uuid_to_name_dict": truck_uuid_to_name_dict, "truck_uuid_to_name_dict": truck_uuid_to_name_dict,
"truck_name_to_uuid_dict": truck_name_to_uuid_dict, "truck_name_to_uuid_dict": truck_name_to_uuid_dict,
"excavator_uuid_to_name_dict": excavator_uuid_to_name_dict, "excavator_uuid_to_name_dict": excavator_uuid_to_name_dict,
"excavator_name_to_uuid_dict": excavator_name_to_uuid_dict,
"dump_uuid_to_name_dict": dump_uuid_to_name_dict, "dump_uuid_to_name_dict": dump_uuid_to_name_dict,
"unload_area_uuid_to_index_dict": unload_area_uuid_to_index_dict, "unload_area_uuid_to_index_dict": unload_area_uuid_to_index_dict,
"load_area_uuid_to_index_dict": load_area_uuid_to_index_dict, "load_area_uuid_to_index_dict": load_area_uuid_to_index_dict,
......
...@@ -113,20 +113,22 @@ def build_truck_uuid_name_map(): ...@@ -113,20 +113,22 @@ def build_truck_uuid_name_map():
def build_excavator_uuid_name_map(): def build_excavator_uuid_name_map():
# excavator_id <-> excavator_name # excavator_id <-> excavator_name
excavator_uuid_to_name_dict = {} excavator_uuid_to_name_dict = {}
excavator_name_to_uuid_dict = {}
try: try:
for item in session_mysql.query(Equipment).filter_by(device_type=2).all(): for item in session_mysql.query(Equipment).filter_by(device_type=2).all():
truck_id = item.id excavator_id = item.id
truck_name = item.equipment_id excavator_name = item.equipment_id
excavator_uuid_to_name_dict[truck_id] = truck_name excavator_name_to_uuid_dict[excavator_name] = excavator_id
excavator_uuid_to_name_dict[excavator_id] = excavator_name
if len(excavator_uuid_to_name_dict) < 1: if len(excavator_uuid_to_name_dict) < 1:
raise Exception("无挖机设备可用") raise Exception("无挖机设备可用")
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
session_postgre.rollback() session_postgre.rollback()
session_mysql.rollback() session_mysql.rollback()
return excavator_uuid_to_name_dict return excavator_uuid_to_name_dict, excavator_name_to_uuid_dict
def build_dump_uuid_name_map(): def build_dump_uuid_name_map():
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
from data.para_config import * from data.para_config import *
from settings import * from settings import *
from tables import * from tables import *
from util.core_exception import CoreException
# 挖机设备类 # 挖机设备类
...@@ -43,6 +44,9 @@ class ExcavatorInfo(WalkManage): ...@@ -43,6 +44,9 @@ class ExcavatorInfo(WalkManage):
# # 参数初始化 # # 参数初始化
# self.excavator_para_period_update() # self.excavator_para_period_update()
# 挖机状态列表
self.excavator_current_state = {}
def get_loading_time(self): def get_loading_time(self):
return self.loading_time return self.loading_time
...@@ -200,6 +204,38 @@ class ExcavatorInfo(WalkManage): ...@@ -200,6 +204,38 @@ class ExcavatorInfo(WalkManage):
self.logger.error(es) self.logger.error(es)
self.logger.error("挖机装载信息信息读取异常") self.logger.error("挖机装载信息信息读取异常")
# 更新挖机当前任务
def update_excavator_current_state(self):
self.excavator_current_state = {}
device_name_set = redis2.keys()
excavator_name_to_uuid_dict = get_value("excavator_name_to_uuid_dict")
for item in device_name_set:
try:
item = item.decode(encoding="utf-8")
key_value_dict = redis2.hgetall(item) # reids str可以自动转为bytes
if str_to_byte("type") in key_value_dict:
device_type = int(key_value_dict[str_to_byte("type")])
else:
continue
if device_type == 2:
if item not in excavator_name_to_uuid_dict:
raise CoreException(107, f'挖机 {item} 不存在于excavator_name_to_uuid_dict')
if excavator_name_to_uuid_dict[item] in self.dynamic_excavator_set:
currentState = int(float(byte_to_str(key_value_dict[str_to_byte("state")])))
self.excavator_current_state[
excavator_name_to_uuid_dict[item]
] = currentState
except Exception as es:
self.logger.warning("读取矿卡任务异常-reids读取异常")
self.logger.warning(es)
self.logger.info("矿卡当前任务:")
self.logger.info(self.excavator_current_state)
def reset(self): def reset(self):
# 装载设备数量 # 装载设备数量
......
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