Commit 39eaec24 authored by 张晓彤's avatar 张晓彤

代码优化v1

parent efc064b5
...@@ -10,6 +10,7 @@ from data.para_config import * ...@@ -10,6 +10,7 @@ from data.para_config import *
from equipment import DumpInfo from equipment import DumpInfo
from data.dispatchInfo import DispatchInfo from data.dispatchInfo import DispatchInfo
# from core.group import Group # from core.group import Group
from util import CoreException
class AlgorithmBase: class AlgorithmBase:
...@@ -147,133 +148,133 @@ class ExpectedTime(AlgorithmBase): ...@@ -147,133 +148,133 @@ class ExpectedTime(AlgorithmBase):
:return: travel_time_value :return: travel_time_value
""" """
try: # try:
# truck_index = self.truck.truck_uuid_to_index_dict[truck_id]
# trip = self.truck.get_truck_current_trip()[truck_index]
#
# task = self.truck.get_truck_current_task()[truck_id]
truck_id = truck_info.get_truck_id() truck_id = truck_info.get_truck_id()
truck_index = self.truck.truck_uuid_to_index_dict[truck_id] trip = truck_info.get_trip()
# task = truck_task
# trip = truck_trip
trip = truck_info.get_trip() task = truck_info.get_task()
task = truck_info.get_task() truck_avl_time = self.pre_sch.get_truck_avl_time(truck_id=truck_id)
truck_avl_time = self.pre_sch.get_truck_avl_time(truck_id=truck_id) group_dynamic_excavator_num = len(self.group.excavator)
group_dynamic_excavator_num = len(self.group.excavator) group_dynamic_unload_area_num = len(self.group.unload_area)
group_dynamic_unload_area_num = len(self.group.unload_area) # except Exception as es:
# self.logger.error("车辆调度信息读取异常")
except Exception as es: # self.logger.error(es)
self.logger.error("车辆调度信息读取异常")
self.logger.error(es)
self.logger.info("-----------------------------------Alg. Module-----------------------------------") self.logger.info("-----------------------------------Alg. Module-----------------------------------")
if task == -2: if task == -2:
################################################ 矿卡启动 ############################################### ################################################ 矿卡启动 ###############################################
try:
self.logger.info(f'矿卡 {truck_id}')
self.logger.info("矿卡状态:矿卡启动或故障恢复")
self.logger.info(f"涉及挖机:{self.group.excavator}")
# self.logger.info(f"涉及挖机:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}")
except Exception as es:
self.logger.error(f"矿卡{truck_id}状态不匹配")
self.logger.error(es)
# try: # try:
# 挖机可用时间 self.logger.info(f'矿卡 {truck_id}')
excavator_val_time_global = self.pre_sch.get_excavator_avl_time() self.logger.info("矿卡状态:矿卡启动或故障恢复")
self.logger.info(f"涉及挖机:{self.group.excavator}")
# self.logger.info(f"涉及挖机:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}")
# except Exception as es:
# self.logger.error(f"矿卡{truck_id}状态不匹配")
# self.logger.error(es)
excavator_val_time = np.full(len(self.group.excavator), 0.0) try:
# 全局挖机可用时间 dict
excavator_val_time_dict = self.pre_sch.get_excavator_avl_time()
self.logger.info("self.group.excavator_uuid_index_dict") # 局部挖机可用时间 list
self.logger.info(self.group.excavator_uuid_index_dict) group_excavator_avl_time_ls = np.full(len(self.group.excavator), 0.0)
for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items(): self.logger.info("self.group.excavator_uuid_index_dict")
excavator_val_time[excavator_index] = excavator_val_time_global[excavator_id] self.logger.info(self.group.excavator_uuid_index_dict)
# 车辆驶往各目的地时间 for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items():
truck_reach_time = 60 * self.group.park_to_excavator_distance[0, :] / 1000 / \ group_excavator_avl_time_ls[excavator_index] = excavator_val_time_dict[excavator_id]
self.truck.empty_speed[truck_id] + truck_avl_time
# 计算车辆得到服务时间 # 车辆驶往各目的地时间
truck_service_time = np.maximum(truck_reach_time, excavator_val_time) truck_reach_time_ls = 60 * self.group.park_to_excavator_distance[0, :] / 1000 / \
self.truck.empty_speed[truck_id] + truck_avl_time
# 计算行程时间 # 计算车辆得到服务时间
transport_value = truck_service_time - truck_avl_time truck_service_time = np.maximum(truck_reach_time_ls, group_excavator_avl_time_ls)
self.logger.info("expected_travelling_schedule-truck_reach_time") # 计算行程时间
self.logger.info(truck_reach_time) transport_value = truck_service_time - truck_avl_time
self.logger.info("expected_travelling_schedule-excavator_val_time") self.logger.info("expected_travelling_schedule-truck_reach_time")
self.logger.info(excavator_val_time) self.logger.info(truck_reach_time_ls)
self.logger.info("expected_travelling_schedule-truck_service_time") self.logger.info("expected_travelling_schedule-excavator_val_time")
self.logger.info(truck_service_time) self.logger.info(group_excavator_avl_time_ls)
self.logger.info("expected_travelling_schedule-truck_avl_time") self.logger.info("expected_travelling_schedule-truck_service_time")
self.logger.info(truck_avl_time) self.logger.info(truck_service_time)
self.logger.info("expected_travelling_schedule-transport_value") self.logger.info("expected_travelling_schedule-truck_avl_time")
self.logger.info(transport_value) self.logger.info(truck_avl_time)
# except Exception as es: self.logger.info("expected_travelling_schedule-transport_value")
# self.logger.error("矿卡启动调度异常") self.logger.info(transport_value)
# self.logger.error(es)
# transport_value = np.zeros(group_dynamic_excavator_num) except Exception as es:
self.logger.error("矿卡启动调度异常")
self.logger.error(es)
transport_value = np.zeros(group_dynamic_excavator_num)
if task in [1, 2]: if task in [1, 2]:
################################################ 矿卡空载 ############################################### ################################################ 矿卡空载 ###############################################
try: # try:
self.logger.info(f'矿卡 {truck_id}') self.logger.info(f'矿卡 {truck_id}')
self.logger.info("矿卡状态:矿卡空载") self.logger.info("矿卡状态:矿卡空载")
self.logger.info(f"涉及卸载设备:{self.group.dump}") self.logger.info(f"涉及卸载设备:{self.group.dump}")
# self.logger.info(f"涉及卸载设备:{list(DeviceMap.dump_uuid_to_index_dict.keys())}") # self.logger.info(f"涉及卸载设备:{list(DeviceMap.dump_uuid_to_index_dict.keys())}")
except Exception as es: # except Exception as es:
self.logger.error(f"矿卡{truck_id}状态不匹配") # self.logger.error(f"矿卡{truck_id}状态不匹配")
self.logger.error(es) # self.logger.error(es)
try: try:
# 全局卸点可用时间 dict # get dump available time (List) for all
dump_val_time_global = self.pre_sch.get_dump_avl_time() dump_val_time_dict = self.pre_sch.get_dump_avl_time()
# get dump available time (List) within the group
group_dump_val_time_ls = np.full(len(self.group.unload_area), 0.0)
self.logger.info("self.group.dump_uuid_index_dict")
self.logger.info(self.group.dump_uuid_index_dict)
# 局部卸点可用时间 list
dump_val_time = np.full(len(self.group.unload_area), 0.0)
bb = self.group.dump_uuid_index_dict
for dump_id, dump_index in self.group.dump_uuid_index_dict.items(): for dump_id, dump_index in self.group.dump_uuid_index_dict.items():
dump_val_time[dump_index] = dump_val_time_global[dump_id] group_dump_val_time_ls[dump_index] = dump_val_time_dict[dump_id]
# 车辆所在挖机 uuid # get truck located excavator id (uuid) from truck trip
if int(trip[1]) < 0 or int(trip[1]) >= len(DeviceMap.excavator_index_to_uuid_dict):
raise CoreException(105, f'车辆 {truck_id} 行程驶往 {int(trip[1])} 号挖机越界')
excavator_id = DeviceMap.excavator_index_to_uuid_dict[int(trip[1])] excavator_id = DeviceMap.excavator_index_to_uuid_dict[int(trip[1])]
# 挖机所在分组序号 index # get excavator index (int) within group from group's excavator_group_index
if excavator_id not in self.group.excavator_uuid_index_dict:
raise CoreException(106, f'挖机 {excavator_id} 不存在于分组 {self.group.name} excavator_uuid_index_dict')
excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id] excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id]
# 车辆驶往各目的地时间 # get travelling time (List) to each dump
truck_reach_time = 60 * self.group.to_unload_area_distance[excavator_group_index, :] \ truck_reach_time_ls = 60 * self.group.to_unload_area_distance[excavator_group_index, :] \
/ 1000 / self.truck.heavy_speed[truck_id] + truck_avl_time / 1000 / self.truck.heavy_speed[truck_id] + truck_avl_time
# 车辆得到服务时间 # get truck servicing time (List)
truck_service_time = np.maximum(truck_reach_time, dump_val_time) if len(truck_reach_time_ls) != len(group_dump_val_time_ls):
raise CoreException(104, f'车辆抵达各卸点时间 {truck_reach_time_ls} 与 各卸点可用时间 {group_dump_val_time_ls} 不一致')
truck_service_time = np.maximum(truck_reach_time_ls, group_dump_val_time_ls)
# 计算行程时间 # get trip time
transport_value = truck_service_time - truck_avl_time transport_value = truck_service_time - truck_avl_time
self.logger.info("expected_travelling_schedule-truck_reach_time") self.logger.info("expected_travelling_schedule-truck_reach_time")
self.logger.info(truck_reach_time) self.logger.info(truck_reach_time_ls)
self.logger.info("expected_travelling_schedule-dump_val_time") self.logger.info("expected_travelling_schedule-dump_val_time")
self.logger.info(dump_val_time) self.logger.info(group_dump_val_time_ls)
self.logger.info("expected_travelling_schedule-truck_service_time") self.logger.info("expected_travelling_schedule-truck_service_time")
self.logger.info(truck_service_time) self.logger.info(truck_service_time)
...@@ -292,48 +293,52 @@ class ExpectedTime(AlgorithmBase): ...@@ -292,48 +293,52 @@ class ExpectedTime(AlgorithmBase):
elif task in [4, 5]: elif task in [4, 5]:
################################################ 矿卡重载 ############################################### ################################################ 矿卡重载 ###############################################
try: # try:
self.logger.info(f'矿卡 {truck_id}') self.logger.info(f'矿卡 {truck_id}')
self.logger.info("矿卡状态:矿卡重载") self.logger.info("矿卡状态:矿卡重载")
self.logger.info(f'涉及挖机设备:{self.group.excavator}') self.logger.info(f'涉及挖机设备:{self.group.excavator}')
# self.logger.info(f"涉及挖机设备:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}") # self.logger.info(f"涉及挖机设备:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}")
except Exception as es: # except Exception as es:
self.logger.error(f"矿卡{truck_id}状态不匹配") # self.logger.error(f"矿卡{truck_id}状态不匹配")
self.logger.error(es) # self.logger.error(es)
try: try:
# 挖机可用时间 # get excavator available time (List) for all
excavator_val_time_global = self.pre_sch.get_excavator_avl_time() excavator_val_time = self.pre_sch.get_excavator_avl_time()
excavator_val_time = np.full(len(self.group.excavator), 0.0) # get excavator available time (List) within the group
group_excavator_avl_time_ls = np.full(len(self.group.excavator), 0.0)
self.logger.info("self.group.excavator_uuid_index_dict")
self.logger.info(self.group.excavator_uuid_index_dict)
for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items(): for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items():
excavator_val_time[excavator_index] = excavator_val_time_global[excavator_id] group_excavator_avl_time_ls[excavator_index] = excavator_val_time[excavator_id]
# 车辆所在卸点 # get truck located dump id (uuid) from truck trip
dump_id = DeviceMap.dump_index_to_uuid_dict[int(trip[1])] dump_id = DeviceMap.dump_index_to_uuid_dict[int(trip[1])]
# 卸载区域id # get unload area id (uuid) from DispatchInfo dump_id to unload_area mapping
unload_area_id = DispatchInfo.dump_unload_area_dict[dump_id] unload_area_id = DispatchInfo.dump_unload_area_dict[dump_id]
# 卸点对应分组编号 # get unload area id (uuid) from DispatchInfo dump_id to unload
unload_area_group_index = self.group.unload_area_uuid_index_dict[unload_area_id] unload_area_group_index = self.group.unload_area_uuid_index_dict[unload_area_id]
# 车辆驶往各目的地时间 # 车辆驶往各目的地时间
truck_reach_time = 60 * self.group.to_excavator_distance[unload_area_group_index, :] \ truck_reach_time_ls = 60 * self.group.to_excavator_distance[unload_area_group_index, :] \
/ 1000 / self.truck.empty_speed[truck_id] + truck_avl_time / 1000 / self.truck.empty_speed[truck_id] + truck_avl_time
# 计算车辆得到服务时间 # 计算车辆得到服务时间
truck_service_time = np.maximum(truck_reach_time, excavator_val_time) truck_service_time = np.maximum(truck_reach_time_ls, group_excavator_avl_time_ls)
# 计算行程时间 # 计算行程时间
transport_value = truck_service_time - truck_avl_time transport_value = truck_service_time - truck_avl_time
self.logger.info("expected_travelling_schedule-truck_reach_time") self.logger.info("expected_travelling_schedule-truck_reach_time")
self.logger.info(truck_reach_time) self.logger.info(truck_reach_time_ls)
self.logger.info("expected_travelling_schedule-excavator_val_time") self.logger.info("expected_travelling_schedule-excavator_val_time")
self.logger.info(excavator_val_time) self.logger.info(group_excavator_avl_time_ls)
self.logger.info("expected_travelling_schedule-truck_service_time") self.logger.info("expected_travelling_schedule-truck_service_time")
self.logger.info(truck_service_time) self.logger.info(truck_service_time)
...@@ -352,6 +357,7 @@ class ExpectedTime(AlgorithmBase): ...@@ -352,6 +357,7 @@ class ExpectedTime(AlgorithmBase):
return transport_value return transport_value
class DistributionRatio(object): class DistributionRatio(object):
""" """
@date:2022/7/19 8:49 @date:2022/7/19 8:49
...@@ -469,7 +475,6 @@ class DistributionRatio(object): ...@@ -469,7 +475,6 @@ class DistributionRatio(object):
self.logger.error("卡车与下一个卸载区的配对关系异常") self.logger.error("卡车与下一个卸载区的配对关系异常")
self.logger.error(es) self.logger.error(es)
# try: # try:
# temp = list(self.unload_ratio.values()) # temp = list(self.unload_ratio.values())
# next_unload_id = list(self.unload_ratio.keys())[temp.index(max(temp))] # next_unload_id = list(self.unload_ratio.keys())[temp.index(max(temp))]
...@@ -499,4 +504,3 @@ class DistributionRatio(object): ...@@ -499,4 +504,3 @@ class DistributionRatio(object):
self.logger.error("分流配比主函数异常") self.logger.error("分流配比主函数异常")
self.logger.error(es) self.logger.error(es)
return next_unload_area_id return next_unload_area_id
...@@ -8,23 +8,23 @@ ...@@ -8,23 +8,23 @@
}, },
"mysql": { "mysql": {
"host": "172.16.0.103", "host": "192.168.9.152",
"port": "3306", "port": "3306",
"user": "root", "user": "root",
"password": "Huituo@123", "password": "Huituo@123",
"database": "ht_zhunneng" "database": "waytous"
}, },
"postgresql": { "postgresql": {
"host": "172.16.0.103", "host": "192.168.9.152",
"port": "5432", "port": "5432",
"user": "postgres", "user": "postgres",
"password": "Huituo@123", "password": "Huituo@123",
"database": "gis_zhunneng" "database": "shenbao_2021520"
}, },
"redis": { "redis": {
"host": "172.16.0.103", "host": "192.168.9.152",
"password": "Huituo@123" "password": "Huituo@123"
} }
} }
\ No newline at end of file
...@@ -20,6 +20,8 @@ from tables import session_mysql, session_postgre ...@@ -20,6 +20,8 @@ from tables import session_mysql, session_postgre
from graph.graph_load import graph_construct from graph.graph_load import graph_construct
from core.util import POST from core.util import POST
from graph.topo_graph import Topo from graph.topo_graph import Topo
from core.group import CurrentTruck
from typing import List
class Dispatcher: class Dispatcher:
...@@ -55,10 +57,11 @@ class Dispatcher: ...@@ -55,10 +57,11 @@ class Dispatcher:
:return: None :return: None
""" """
self.group_list = {} self.group_list = {}
groups = DispatchInfo.get_all_group() groups_id = DispatchInfo.get_all_groups_id()
for group_id in groups: for group_id in groups_id:
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, self.topo) group = Group(group_id, self.truck, self.pre_sch, self.excavator, self.dump, self.topo)
group.info_update()
self.group_list[group_id] = group self.group_list[group_id] = group
def group_info_update(self): def group_info_update(self):
...@@ -76,23 +79,29 @@ class Dispatcher: ...@@ -76,23 +79,29 @@ class Dispatcher:
""" """
for group in self.group_list.values(): for group in self.group_list.values():
try: # try:
truck_dispatch_plan_dict = group.group_dispatch(ExpectedTime) truck_dispatch_plan_dict = group.group_dispatch(ExpectedTime)
except Exception as es: if truck_dispatch_plan_dict is None:
self.logger.error(es) self.logger.error(f'分组 {group.group_id} 调度异常')
self.logger.error(f'分组{group.group_id} 调度异常') continue
self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}') # except Exception as es:
self.logger.info(f'组内车辆 {group.truck_set}') # self.logger.error(es)
self.logger.info("组内挖机") # self.logger.error(f'分组{group.group_id} 调度异常')
self.logger.info(group.excavator)
self.logger.info("组内卸点") # 派车计划输出
self.logger.info(group.dump)
self.submission.group_dispatch_to_redis(group, truck_dispatch_plan_dict) self.submission.group_dispatch_to_redis(group, truck_dispatch_plan_dict)
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,
"loadAreaId": item.load_area_id, "unloadAreaId": item.unload_area_id, "groupId": item.group_id,
"isdeleted": False, "isTemp": False, "haulFlag": -1, "groupName": DispatchInfo.group_name[group_id]}
return record
class DispatchSubmission: class DispatchSubmission:
""" class for the submission calculated dispatch. """ class for the submission calculated dispatch.
...@@ -108,44 +117,51 @@ class DispatchSubmission: ...@@ -108,44 +117,51 @@ class DispatchSubmission:
self.truck = truck self.truck = truck
self.topo = topo self.topo = topo
def truck_dispatch_to_redis(self, truck_id, dispatch_seq): def truck_dispatch_to_redis(self, truck_id: str, truck_info: CurrentTruck, dispatch_seq: List[int], group_mode: int):
""" """
将truck_id对应矿卡派车计划写入redis 将truck_id对应矿卡派车计划写入redis
:param group_mode: (int)
:param truck_id: (uuid) 矿卡uuid :param truck_id: (uuid) 矿卡uuid
:param truck_info: (object)
:param dispatch_seq: (List[int]) 矿卡派车计划 :param dispatch_seq: (List[int]) 矿卡派车计划
:return: None :return: None
""" """
try:
try:
group_id = DispatchInfo.truck_group_dict[truck_id]
record = {"truckId": truck_id} self.logger.info(f'调度车辆编号 {get_value("truck_uuid_to_name_dict")[truck_id]} {truck_id}')
task = self.truck.get_truck_current_task()[truck_id] self.logger.info(f'车辆任务 {truck_info.get_task()}')
state = self.truck.get_truck_current_state()[truck_id] self.logger.info(f'配对挖机 {dispatch_seq[0]}')
self.logger.info(f'配对卸点 {dispatch_seq[1]}')
except Exception as es: # try:
self.logger.error("调度结果写入异常-读取矿卡信息异常(uuid, group id, task)")
self.logger.error(es)
try: if truck_id not in DispatchInfo.truck_group_dict:
group_mode = DispatchInfo.get_group_mode(group_id) group_id = None
self.logger.error(f'调度结果写入异常-读取矿卡 {truck_id} 所在分组信息异常')
else:
group_id = DispatchInfo.truck_group_dict[truck_id]
except Exception as es: record = {"truckId": truck_id}
self.logger.error("调度模式读取异常")
self.logger.error(es)
group_mode = 3
if group_mode == 3: # if group_id is None or DispatchInfo.get_group_mode(group_id) is None:
self.logger.info("固定调度") # group_mode = 3
self.fixed_dispatch_mode(group_id, record, truck_id) # self.logger.error("调度模式读取异常-设置为固定派车模式")
else: # else:
self.logger.info("动态调度") # group_mode = DispatchInfo.get_group_mode(group_id)
self.dynamic_dispatch_mode(dispatch_seq, group_id, record, state, task, truck_id)
except Exception as es: self.logger.info(f'调度模式 {group_mode}')
self.logger.error("调度结果写入异常")
self.logger.error(f"调度结果:{dispatch_seq}") if group_mode == 3:
self.logger.error(es) self.logger.info("固定派车模式")
self.fixed_dispatch_mode(group_id, truck_id)
else:
self.logger.info("动态调度模式")
self.dynamic_dispatch_mode(dispatch_seq, group_id, record, truck_info.get_sate(),
truck_info.get_task(), truck_id)
# except Exception as es:
# self.logger.error("调度结果写入异常")
# self.logger.error(f"调度结果:{dispatch_seq}")
# self.logger.error(es)
def dynamic_dispatch_mode(self, dispatch_seq, group_id, record, state, task, truck_id): def dynamic_dispatch_mode(self, dispatch_seq, group_id, record, state, task, truck_id):
""" """
...@@ -158,37 +174,42 @@ class DispatchSubmission: ...@@ -158,37 +174,42 @@ class DispatchSubmission:
:param truck_id: :param truck_id:
:return: :return:
""" """
if (task in [1, 2]) or (task == 3 and state == 2): # 卡车空载或在装载区出场前, 可变更卸载目的地 if (task in [1, 2]) or (task == 3 and state == 2): # 车辆位于卸载区,或车辆重载等待
self.logger.info(f'调度1 {truck_id}')
# 查询车辆相关派车计划
try:
dump_id = DispatchInfo.unload_area_dump_dict[dispatch_seq[1]]
item = (session_mysql.query(DispatchSetting).filter_by(dump_id=dump_id, group_id=group_id,
isdeleted=0, ).first())
if item is None: self.logger.info(f'卸载区内或重载等待,请求装载区 {truck_id}')
raise Exception("调度计划配置异常")
if dispatch_seq[0] is None:
raise Exception("调度计划表与实时监控不匹配")
except Exception as es: # 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if dispatch_seq[1] is None or [dispatch_seq[1]] not in DispatchInfo.unload_area_dump_dict:
# 无法查询到目标卸载点
item = (session_mysql.query(DispatchSetting).filter_by(group_id=group_id, isdeleted=0, ).first()) item = (session_mysql.query(DispatchSetting).filter_by(group_id=group_id, isdeleted=0, ).first())
self.logger.error(es) else:
dump_id = DispatchInfo.unload_area_dump_dict[dispatch_seq[1]]
try:
item = (session_mysql.query(DispatchSetting).filter_by(dump_id=dump_id, group_id=group_id,
isdeleted=0, ).first())
if item is None:
raise Exception(f'{truck_id} 无法找到派车计划 {dump_id} {group_id}')
if dispatch_seq[0] is None:
raise Exception("调度计划挖机与实时监控不匹配")
except Exception as es:
item = (session_mysql.query(DispatchSetting).filter_by(group_id=group_id, isdeleted=0, ).first())
self.logger.error(es)
# 其余调度信息写入 # 其余调度信息写入
try: try:
# record["dispatchId"] = item.id
record["dispatchId"] = str(uuid.uuid1()) redis_format(truck_id, group_id, str(uuid.uuid1()), item)
record["exactorId"] = item.exactor_id # # record["dispatchId"] = item.id
record["loadAreaId"] = item.load_area_id # record["dispatchId"] = str(uuid.uuid1())
record["dumpId"] = item.dump_id # record["exactorId"] = item.exactor_id
record["unloadAreaId"] = item.unload_area_id # record["loadAreaId"] = item.load_area_id
record["groupId"] = group_id # record["dumpId"] = item.dump_id
record["isdeleted"] = False # record["unloadAreaId"] = item.unload_area_id
# record["isTemp"] = False # record["groupId"] = group_id
record["haulFlag"] = -1 # record["isdeleted"] = False
record["groupName"] = DispatchInfo.group_name[group_id] # # record["isTemp"] = False
# record["haulFlag"] = -1
# record["groupName"] = DispatchInfo.group_name[group_id]
if task == 3 and state == 2 and self.truck.get_truck_locate_dict()[truck_id] in self.topo.cross_bf_lanes: if task == 3 and state == 2 and self.truck.get_truck_locate_dict()[truck_id] in self.topo.cross_bf_lanes:
# try: # try:
...@@ -301,27 +322,18 @@ class DispatchSubmission: ...@@ -301,27 +322,18 @@ class DispatchSubmission:
# 调度信息写入 # 调度信息写入
try: # try:
# record["dispatchId"] = item.id
record["dispatchId"] = str(uuid.uuid1())
record["exactorId"] = item.exactor_id
record["loadAreaId"] = item.load_area_id
record["dumpId"] = item.dump_id
record["unloadAreaId"] = item.unload_area_id
record["groupId"] = group_id
record["isdeleted"] = False
record["isTemp"] = False
record["haulFlag"] = -1
record["groupName"] = DispatchInfo.group_name[group_id]
self.logger.info(f'redis 注入 {record}') self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record))) record = redis_format(truck_id, group_id, str(uuid.uuid1()), item)
except Exception as es: redis5.set(truck_id, str(json.dumps(record)))
self.logger.error("调度结果写入异常-矿卡故障或备停区-redis写入异常")
self.logger.error(es) # except Exception as es:
finally: # self.logger.error("调度结果写入异常-矿卡故障或备停区-redis写入异常")
redis5.set(truck_id, str(json.dumps(record))) # self.logger.error(es)
# finally:
# redis5.set(truck_id, str(json.dumps(record)))
except Exception as es: except Exception as es:
self.logger.error("调度结果写入异常-矿卡故障或备停区") self.logger.error("调度结果写入异常-矿卡故障或备停区")
...@@ -329,7 +341,7 @@ class DispatchSubmission: ...@@ -329,7 +341,7 @@ class DispatchSubmission:
else: else:
pass pass
def fixed_dispatch_mode(self, group_id, record, truck_id): def fixed_dispatch_mode(self, group_id, truck_id):
""" """
write dispatch plan in fixed dispatch method. write dispatch plan in fixed dispatch method.
:param group_id: :param group_id:
...@@ -338,27 +350,20 @@ class DispatchSubmission: ...@@ -338,27 +350,20 @@ class DispatchSubmission:
:return: :return:
""" """
try: try:
self.logger.info(f'调度0 {truck_id}')
item = session_mysql.query(DispatchSetting).filter_by(truck_id=truck_id, isdeleted=0, ).first() item = session_mysql.query(DispatchSetting).filter_by(truck_id=truck_id, isdeleted=0, ).first()
record["dispatchId"] = item.id
record["exactorId"] = item.exactor_id
record["dumpId"] = item.dump_id
record["loadAreaId"] = item.load_area_id
record["unloadAreaId"] = item.unload_area_id
record["groupId"] = item.group_id
record["isdeleted"] = False
record["isTemp"] = False
record["haulFlag"] = -1
record["groupName"] = DispatchInfo.group_name[group_id]
self.logger.info(f'redis 注入 {record}')
except Exception as es: except Exception as es:
item = None
self.logger.error(es) self.logger.error(es)
session_postgre.rollback() session_postgre.rollback()
session_mysql.rollback() session_mysql.rollback()
finally:
redis5.set(truck_id, str(json.dumps(record))) if item is None:
self.logger.error(f'车辆 {truck_id} 无派车计划-无法执行固定派车')
return
record = redis_format(truck_id, group_id, item.id, item)
redis5.set(truck_id, str(json.dumps(record)))
self.logger.info(f'redis 注入 {record}')
def group_dispatch_to_redis(self, group: Group, dispatch_plan_dict): def group_dispatch_to_redis(self, group: Group, dispatch_plan_dict):
""" """
...@@ -368,18 +373,18 @@ class DispatchSubmission: ...@@ -368,18 +373,18 @@ class DispatchSubmission:
:return: None :return: None
""" """
self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}')
self.logger.info(f'组内车辆 {group.truck_set}')
self.logger.info(f'组内挖机 {group.excavator}')
self.logger.info(f'组内卸点 {group.dump}')
self.logger.info(f'调度模式 {group.group_mode}')
self.logger.info("dispatch_plan_dict") self.logger.info("dispatch_plan_dict")
self.logger.info(dispatch_plan_dict) self.logger.info(dispatch_plan_dict)
for truck_id, dispatch_plan in dispatch_plan_dict.items(): for truck_id, dispatch_plan in dispatch_plan_dict.items():
try: try:
self.logger.info(f'======================================= 调度车辆 =======================================') self.logger.info(f'======================================= 调度车辆 =======================================')
self.logger.info(f'矿车编号 {get_value("truck_uuid_to_name_dict")[truck_id]} {truck_id}') self.truck_dispatch_to_redis(truck_id, group.truck_info_list[truck_id], dispatch_plan, group.group_mode)
self.logger.info(f'调度模式 {group.group_mode}')
self.logger.info(f'车辆任务 {group.truck_info_list[truck_id].get_task()}')
self.logger.info(f'配对挖机 {dispatch_plan[0]}')
self.logger.info(f'配对卸点 {dispatch_plan[1]}')
self.truck_dispatch_to_redis(truck_id, dispatch_plan)
self.logger.info("======================================== 完成写入 =======================================") self.logger.info("======================================== 完成写入 =======================================")
except Exception as es: except Exception as es:
self.logger.error("group_dispatch_to_redis_error") self.logger.error("group_dispatch_to_redis_error")
......
...@@ -31,11 +31,12 @@ class CurrentTruck: ...@@ -31,11 +31,12 @@ class CurrentTruck:
""" """
def __init__(self, truck_id, group_id, trip, task): def __init__(self, truck_id, group_id, trip, task, state):
self._truck_id = truck_id self._truck_id = truck_id
self._group_id = group_id self._group_id = group_id
self._trip = trip self._trip = trip
self._task = task self._task = task
self._state = state
def get_truck_id(self): def get_truck_id(self):
return self._truck_id return self._truck_id
...@@ -49,6 +50,9 @@ class CurrentTruck: ...@@ -49,6 +50,9 @@ class CurrentTruck:
def get_group_id(self): def get_group_id(self):
return self._group_id return self._group_id
def get_sate(self):
return self._state
class Group: class Group:
""" """
...@@ -237,7 +241,7 @@ class Group: ...@@ -237,7 +241,7 @@ class Group:
self.update_group_road_network() self.update_group_road_network()
self.update_device_material() self.update_device_material()
def group_dispatch(self, Solver) -> Mapping[str, List[str, str]]: def group_dispatch(self, Solver) -> Mapping[str, List[str]]:
""" """
Receive a Alg obj. and output dispatch plan for trucks in this group. Receive a Alg obj. and output dispatch plan for trucks in this group.
:param Solver: :param Solver:
...@@ -257,15 +261,18 @@ class Group: ...@@ -257,15 +261,18 @@ class Group:
self.logger.info(f'调度车辆 {truck_id}') self.logger.info(f'调度车辆 {truck_id}')
# try: # try:
# get truck index from mapping
try: try:
if truck_id not in self.truck.truck_uuid_to_index_dict: if truck_id not in self.truck.truck_uuid_to_index_dict:
raise CoreException(102, f'truck.truck dict 中不存在 {truck_id}') raise CoreException(102, f'truck.truck dict 中不存在 {truck_id}')
truck_idx = self.truck.truck_uuid_to_index_dict[truck_id] truck_idx = self.truck.truck_uuid_to_index_dict[truck_id]
except CoreException as es: except CoreException as es:
es.with_traceback_info()
self.logger.error(es) self.logger.error(es)
continue continue
# get truck trip from truck obj.
try: try:
truck_trip_info_list = self.truck.get_truck_current_trip() truck_trip_info_list = self.truck.get_truck_current_trip()
...@@ -274,10 +281,11 @@ class Group: ...@@ -274,10 +281,11 @@ class Group:
truck_trip = self.truck.get_truck_current_trip()[truck_idx] truck_trip = self.truck.get_truck_current_trip()[truck_idx]
except CoreException as es: except CoreException as es:
es.with_traceback_info()
self.logger.error(es) self.logger.error(es)
continue continue
# TODO: 怎么知道异常行数
# get truck task from truck obj.
try: try:
truck_task_list = self.truck.get_truck_current_task() truck_task_list = self.truck.get_truck_current_task()
...@@ -286,12 +294,15 @@ class Group: ...@@ -286,12 +294,15 @@ class Group:
truck_task = truck_task_list[truck_id] truck_task = truck_task_list[truck_id]
except CoreException as ce: except CoreException as es:
self.logger.error(ce) es.with_traceback_info()
self.logger.error(es)
continue continue
# Construct a truck obj. # Construct a truck obj.
truck_info = CurrentTruck(truck_id, self.group_id, truck_trip, truck_task) truck_info = CurrentTruck(truck_id, self.group_id, truck_trip, truck_task,
self.truck.get_truck_current_state()[truck_id])
self.truck_info_list[truck_id] = truck_info self.truck_info_list[truck_id] = truck_info
# Construct a test case for redispatch # Construct a test case for redispatch
...@@ -407,12 +418,19 @@ class Group: ...@@ -407,12 +418,19 @@ class Group:
self.logger.error("空载车辆空车智能模式-计算异常") self.logger.error("空载车辆空车智能模式-计算异常")
self.logger.error(es) self.logger.error(es)
def full_dynamic_mode(self, i: str, s: AlgorithmBase, truck_dispatch: Mapping[str, List[str, str]], def full_dynamic_mode(self, i: str, s: AlgorithmBase, truck_dispatch: Mapping[str, List[str]],
truck_info: CurrentTruck, truck_task: int, truck_trip: List[int, int]): truck_info: CurrentTruck, truck_task: int, truck_trip: List[int]):
# 车辆停止或者车辆位于卸载区内, 调度车辆前往装载区 # 车辆停止或者车辆位于卸载区内, 调度车辆前往装载区
if truck_task in [-2, 4, 5]: if truck_task in [-2, 4, 5]:
try: try:
if i in self.truck.truck_excavator_bind: if i in self.truck.truck_excavator_bind:
try:
if i not in self.truck.truck_excavator_bind:
raise CoreException(102, f'truck.excavator bind 中不存在 {i}')
except CoreException as es:
es.with_traceback_info()
self.logger.error(es)
return
next_excavator_id = self.truck.truck_excavator_bind[i] next_excavator_id = self.truck.truck_excavator_bind[i]
else: else:
next_excavator_value = s.solve(truck_info) next_excavator_value = s.solve(truck_info)
...@@ -527,8 +545,7 @@ class Group: ...@@ -527,8 +545,7 @@ class Group:
next_lane_list = get_cross_next_lanes(truck_locate) next_lane_list = get_cross_next_lanes(truck_locate)
# 交叉口下一路段可达的装载区 # 交叉口下一路段可达的装载区
next_lane_load_area_dict = get_lane_reach_load_areas(load_area_lane_dict, next_lane_load_area_dict = get_lane_reach_load_areas(load_area_lane_dict, next_lane_list)
next_lane_list)
# 排除下一个路段阻塞的装载区 # 排除下一个路段阻塞的装载区
delete_congestion_load_area(congestion_lane_dict, load_area_dict, delete_congestion_load_area(congestion_lane_dict, load_area_dict,
......
...@@ -479,12 +479,15 @@ class DispatchInfo: ...@@ -479,12 +479,15 @@ class DispatchInfo:
return cls.unload_area_uuid_to_index_dict[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):
......
...@@ -445,6 +445,7 @@ def global_period_para_update(): ...@@ -445,6 +445,7 @@ def global_period_para_update():
unload_area_index_to_uuid_dict, unload_area_index_to_uuid_dict,
) = build_work_area_uuid_index_map() ) = build_work_area_uuid_index_map()
load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len( load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(
unload_area_uuid_to_index_dict unload_area_uuid_to_index_dict
) )
......
...@@ -63,8 +63,6 @@ def process(dispatcher): ...@@ -63,8 +63,6 @@ def process(dispatcher):
# 更新周期参数 # 更新周期参数
logger.info("#####################################周期更新开始#####################################") logger.info("#####################################周期更新开始#####################################")
global_period_para_update()
# 清空数据库缓存 # 清空数据库缓存
session_mysql.commit() session_mysql.commit()
session_mysql.flush() session_mysql.flush()
...@@ -73,6 +71,7 @@ def process(dispatcher): ...@@ -73,6 +71,7 @@ def process(dispatcher):
session_postgre.commit() session_postgre.commit()
session_postgre.flush() session_postgre.flush()
# 更新全局参数信息
global_period_para_update() global_period_para_update()
# 更新调度信息 # 更新调度信息
...@@ -86,6 +85,7 @@ def process(dispatcher): ...@@ -86,6 +85,7 @@ def process(dispatcher):
DispatchInfo.update_group_name() DispatchInfo.update_group_name()
# 打印日志信息
logger.info("Dispatchinfo,更新后信息") logger.info("Dispatchinfo,更新后信息")
logger.info("group_set") logger.info("group_set")
logger.info(DispatchInfo.group_set) logger.info(DispatchInfo.group_set)
...@@ -110,13 +110,12 @@ def process(dispatcher): ...@@ -110,13 +110,12 @@ def process(dispatcher):
# logger.info(DispatchInfo.dump_group_dict) # logger.info(DispatchInfo.dump_group_dict)
# logger.info(DispatchInfo.truck_group_dict) # logger.info(DispatchInfo.truck_group_dict)
# 调度生成 # 调度生成
dispatcher.period_update() dispatcher.period_update()
dispatcher.group_generate() dispatcher.group_generate()
dispatcher.group_info_update() # dispatcher.group_info_update()
dispatcher.group_dispatch() dispatcher.group_dispatch()
......
...@@ -67,8 +67,8 @@ def set_log(): ...@@ -67,8 +67,8 @@ def set_log():
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60) # timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=30*1024*1024, backupCount=10, encoding="utf-8") # filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=30*1024*1024, backupCount=10, encoding="utf-8")
# filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10, encoding="utf-8") filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10, encoding="utf-8")
# 设置后缀名称,跟strftime的格式一样 # 设置后缀名称,跟strftime的格式一样
filehandler.suffix = "%Y-%m-%d_%H-%M.log" filehandler.suffix = "%Y-%m-%d_%H-%M.log"
......
# import sys
# print(sys.path)
# %%
def prime(p):
for i in range(3, p + 1):
is_prime = True
for j in range(2, i):
if i % j == 0:
is_prime = False
break
if is_prime:
print(i)
prime(10)
\ No newline at end of file
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true,
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"name": "stdout",
"text": [
"[-1.33, 122.22, 12.345]\n",
"230\n"
],
"output_type": "stream"
}
],
"source": [
"L = [-1.33, 122.22, 12.345]\n",
"\n",
"for i in L:\n",
" i = round(i, 2)\n",
"\n",
"print(L)\n",
"\n",
"def myfun(a, b, c):\n",
" return a * b + c\n",
"\n",
"x, y, z = 10, 20, 30\n",
"res = myfun(x, y, z)\n",
"print(res)\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"outputs": [
{
"name": "stdout",
"text": [
"3\n",
"5\n",
"7\n"
],
"output_type": "stream"
}
],
"source": [
"def prime(p):\n",
" for i in range(3, p + 1):\n",
" # is_prime = True\n",
" for j in range(2, i):\n",
" if i % j == 0:\n",
" is_prime = False\n",
" break\n",
" # if is_prime:\n",
" print(i)\n",
" \n",
"prime(10)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n",
"is_executing": false
}
}
}
],
"metadata": {
"kernelspec": {
"name": "pycharm-acbff253",
"language": "python",
"display_name": "PyCharm (integrated-scheduling-v3)"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"source": [],
"metadata": {
"collapsed": false
}
}
}
},
"nbformat": 4,
"nbformat_minor": 0
}
\ No newline at end of file
...@@ -13,14 +13,28 @@ ...@@ -13,14 +13,28 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 55, "execution_count": 4,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false, "is_executing": false,
"name": "#%%\n" "name": "#%%\n"
} }
}, },
"outputs": [], "outputs": [
{
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_28476\\3885974955.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mgraph\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtopo_graph\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnetworkx\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnx\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0muuid\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0msqlite3\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mE:\\Pycharm Projects\\Waytous\\integrated-scheduling-v4.0\\integrated-scheduling-v3.1\\graph\\topo_graph.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# from para_config import *\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0msettings\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0msched\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mE:\\Pycharm Projects\\Waytous\\integrated-scheduling-v4.0\\integrated-scheduling-v3.1\\settings.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[0mjson_file\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"config.json\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 24\u001b[1;33m \u001b[1;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mjson_file\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 25\u001b[0m \u001b[0mpara_config\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mjson\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"para\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'config.json'"
],
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'config.json'",
"output_type": "error"
}
],
"source": [ "source": [
"from graph.topo_graph import *\n", "from graph.topo_graph import *\n",
"import networkx as nx\n", "import networkx as nx\n",
...@@ -38,7 +52,7 @@ ...@@ -38,7 +52,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 61, "execution_count": 2,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false, "is_executing": false,
...@@ -47,11 +61,15 @@ ...@@ -47,11 +61,15 @@
}, },
"outputs": [ "outputs": [
{ {
"name": "stdout", "traceback": [
"text": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"数据库打开成功\n" "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_28476\\1331772586.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mconn\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msqlite3\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'test.db'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcursor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mprint\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m\"数据库打开成功\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mNameError\u001b[0m: name 'sqlite3' is not defined"
], ],
"output_type": "stream" "ename": "NameError",
"evalue": "name 'sqlite3' is not defined",
"output_type": "error"
} }
], ],
"source": [ "source": [
...@@ -73,7 +91,7 @@ ...@@ -73,7 +91,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 70, "execution_count": null,
"metadata": { "metadata": {
"pycharm": { "pycharm": {
"is_executing": false, "is_executing": false,
...@@ -862,6 +880,35 @@ ...@@ -862,6 +880,35 @@
"is_executing": false "is_executing": false
} }
} }
},
{
"cell_type": "code",
"execution_count": 7,
"outputs": [
{
"name": "stdout",
"text": [
"positive\n"
],
"output_type": "stream"
}
],
"source": [
"num = 10\n",
"if num > 0:\n",
" print(\"positive\")\n",
"elif num == 0:\n",
" print(\"zero\")\n",
"else:\n",
" print(\"negative\")"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n",
"is_executing": false
}
}
} }
], ],
"metadata": { "metadata": {
......
...@@ -6,19 +6,39 @@ ...@@ -6,19 +6,39 @@
# @File : core_exception.py # @File : core_exception.py
# @Software: PyCharm # @Software: PyCharm
import traceback
code_msg = {101: "调度失败", code_msg = {101: "调度失败",
102: "车辆不存在或信息缺失", 102: "车辆不存在或信息缺失",
103: "数组越界异常"} 103: "数组越界异常",
104: "数组维度不一致",
105: "数组越界",
106: "挖机不存在或信息缺失"}
class CoreException(Exception): class CoreException(Exception):
""" class for my exception.""" """ class for my exception."""
def __init__(self, Code=None, ErrorInfo=None): def __init__(self, Code: int = None, ErrorInfo: str = None):
super().__init__(self, ErrorInfo) super().__init__(self, ErrorInfo)
self.error_info = ErrorInfo self.__error_info = ErrorInfo
self.code = Code self.code = Code
self.__traceback = ""
def __str__(self): def __str__(self) -> str:
return '{0:}-{1:}'.format(code_msg[self.code], self.error_info) return '{0:}-{1:} \n{2:}'.format(code_msg[self.code], self.__error_info, self.__traceback)
# def with_traceback(self, tb) -> BaseException:
# self.__traceback = tb
# return self
def with_traceback_info(self):
self.__traceback = traceback.format_exc()
# try:
# raise CoreException(101, "CoreException")
# except CoreException as ce:
# ce.with_traceback_info()
# # print(traceback.format_exc())
# print(ce)
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