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

电铲及车辆故障情况处理

parent db6ebc5f
......@@ -36,14 +36,45 @@ class DispatchSubmission:
self.truck = truck
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],
group_mode: int):
"""
将truck_id对应矿卡派车计划写入redis
Update the dispatch plan of one truck to redis
:param group_mode: (int)
:param truck_id: (uuid) 矿卡uuid
:param truck_id: (uuid)
:param truck_info: (object)
:param dispatch_seq: (List[int]) 矿卡派车计划
:param dispatch_seq: (List[int]) truck dispatch plan
:return: None
"""
......@@ -246,37 +277,6 @@ class DispatchSubmission:
self.logger.info(f'redis 注入 {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):
record = {"truckId": truck_id, "dispatchId": dispatch_id, "exactorId": item.exactor_id, "dumpId": item.dump_id,
......
......@@ -10,6 +10,8 @@
from data.para_config import *
from bidict import bidict
from settings import get_logger
from equipment.excavator import ExcavatorInfo
from equipment.truck import TruckInfo
logger = get_logger("zxt.dispatchInfo")
......@@ -190,11 +192,19 @@ class DispatchInfo:
logger.error(es)
# 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:
for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all():
# add group_excavators
excavator_state = session_mysql.query(Equipment).filter_by(id=item.exactor_id).first()
# if excavator_state is not None and excavator_state.disabled == 1:
excavator_state = excavator.excavator_current_state[item.excavator_id]
if excavator_state is None or excavator_state not in [6, 7]:
if item.group_id not in cls.group_excavator_dict.keys():
cls.group_excavator_dict[item.group_id] = [item.exactor_id]
else:
......@@ -211,9 +221,6 @@ class DispatchInfo:
cls.unload_area_group_dict[item.unload_area_id] = item.group_id
# 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():
cls.group_dump_dict[item.group_id] = [item.dump_id]
else:
......@@ -222,8 +229,8 @@ class DispatchInfo:
cls.dump_group_dict[item.dump_id] = item.group_id
# add truck
truck_state = session_mysql.query(Equipment).filter_by(id=item.truck_id).first()
# if truck_state is not None and truck_state.disabled == 1:
truck_state = truck.truck_current_state[item.truck_id]
if truck_state is None or truck_state not in [6, 7]:
if item.group_id not in cls.group_truck_dict.keys():
cls.group_truck_dict[item.group_id] = [item.truck_id]
else:
......
......@@ -277,13 +277,15 @@ def global_period_para_update():
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()
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_name_to_uuid_dict": truck_name_to_uuid_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,
"unload_area_uuid_to_index_dict": unload_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():
def build_excavator_uuid_name_map():
# excavator_id <-> excavator_name
excavator_uuid_to_name_dict = {}
excavator_name_to_uuid_dict = {}
try:
for item in session_mysql.query(Equipment).filter_by(device_type=2).all():
truck_id = item.id
truck_name = item.equipment_id
excavator_id = item.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:
raise Exception("无挖机设备可用")
except Exception as es:
logger.warning(es)
session_postgre.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():
......
......@@ -9,6 +9,7 @@
from data.para_config import *
from settings import *
from tables import *
from util.core_exception import CoreException
# 挖机设备类
......@@ -43,6 +44,9 @@ class ExcavatorInfo(WalkManage):
# # 参数初始化
# self.excavator_para_period_update()
# 挖机状态列表
self.excavator_current_state = {}
def get_loading_time(self):
return self.loading_time
......@@ -200,6 +204,38 @@ class ExcavatorInfo(WalkManage):
self.logger.error(es)
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):
# 装载设备数量
......
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