dispatch_command.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. #ifndef __DISPATCH_COMMAND_HH__
  2. #define __DISPATCH_COMMAND_HH__
  3. #include "../tool/singleton.h"
  4. #include "../tool/thread_condition.h"
  5. #include "../error_code/error_code.h"
  6. #include "../dispatch/database_controller.h"
  7. #include "../message/message.pb.h"
  8. #include "../tool/common_data.h"
  9. #include <string>
  10. #include <map>
  11. #include <glog/logging.h>
  12. //调度指令模块, 主要是与数据库的表 command_queue 同步, 然后按照一定的策略
  13. class Dispatch_command
  14. {
  15. public:
  16. #define PARK_TIME_FLAG 101 //存车时间标记, 用于记录时差
  17. #define PICK_TIME_FLAG 102 //取车时间标记, 用于记录时差120
  18. #ifdef CHUTIAN_PROJECT_PROJECT
  19. #define SORT_LOSS_RATIO 1 //排序时, 排序编号间和楼层距离的比例, 默认1:1
  20. #endif//CHUTIAN_PROJECT_PROJECT
  21. #ifdef SHANGGUJIE_PROJECT_PROJECT
  22. #define SORT_LOSS_RATIO 0//厦门车库暂时不允许插队, 按时间顺序
  23. #define SORT_LOSS_RATIO_UNIT_C 600//厦门车库暂时不允许插队, 按时间顺序
  24. #endif//SHANGGUJIE_PROJECT_PROJECT
  25. //调度指令模块 的状态
  26. enum Dispatch_command_status
  27. {
  28. E_DISPATCH_COMMAND_UNKNOW = 0, //未知
  29. E_DISPATCH_COMMAND_READY = 1, //准备,待机
  30. E_DISPATCH_COMMAND_BUSY = 2, //工作正忙
  31. E_DISPATCH_COMMAND_DISCONNECT = 3, //断连
  32. E_DISPATCH_COMMAND_FAULT = 100, //故障
  33. };
  34. //调度指令, 格式和数据库的 command_queue 保持一致
  35. struct Dispatch_command_info
  36. {
  37. std::string m_car_number; //车牌号
  38. std::string m_primary_key; //唯一码
  39. int m_unit=0; //单元号,
  40. int m_terminal_id=0; //终端号,
  41. int m_queue_id=0; //排序的id,
  42. std::string m_queue_time; //排序的time,
  43. int m_type=0; //指令类型, 0无效, 1存车, 2取车,
  44. int m_statu=0; //指令状态, 0排队中, 1正在工作, 2已完成, 3故障异常
  45. int m_import_id=0; //入口id, 1~6
  46. int m_export_id=0; //出口id, 1~6
  47. int m_height_level=0; //车高等级, 0=无效, 1=小车, 2=中车,3=大车,4=超高, 5=超高
  48. float m_height=0; //车高
  49. int m_wheel_base_level=0; //轮距等级, 0=无效,
  50. float m_wheel_base=0; //轮距
  51. int m_width_level=0; //车宽等级, 0=无效,
  52. float m_width=0; //车宽
  53. std::string m_space_info_string; //车位信息的DebugString, 默认没有, 存车要根据感测信息的车高去申请车位, 取车根据车牌号找车位
  54. parkspace_info m_space_info_msg; //车位信息的proto格式
  55. std::string m_measure_buffer_string; //感测信息的DebugString, 里面自带车高, 小1.5 中1.7 大1.9,
  56. measure_buffer m_measure_buffer_msg; //感测信息的proto格式
  57. std::string m_car_number_info_string; //车牌信息,包含图片
  58. plate_number_info m_car_number_info_msg; //车牌信息,包含图片
  59. int m_useless_distance=0; //空跑的路程,
  60. void clear()
  61. {
  62. m_car_number.clear(); //车牌号
  63. m_primary_key.clear(); //唯一码
  64. m_unit=0; //单元号,
  65. m_terminal_id=0; //终端号,
  66. m_queue_id=0; //排序的id,
  67. m_type=0; //指令类型, 0无效, 1存车, 2取车,
  68. m_statu=0; //指令状态, 0排队中, 1正在工作, 2已完成, 3故障异常
  69. m_import_id=0; //入口id, 1~6
  70. m_export_id=0; //出口id, 1~6
  71. m_height_level=0; //车高等级, 0=无效, 1=小车, 2=中车,3=大车,4=超高, 5=故障
  72. m_height=0; //车高
  73. m_wheel_base_level=0; //轮距等级,
  74. m_wheel_base=0; //轮距
  75. m_width_level=0;
  76. m_width=0;
  77. m_space_info_string.clear(); //车位信息的DebugString, 默认没有, 存车要根据感测信息的车高去申请车位, 取车根据车牌号找车位
  78. m_space_info_msg = parkspace_info(); //车位信息的proto格式
  79. m_measure_buffer_string.clear(); //感测信息的DebugString, 里面自带车高, 小1.5 中1.7 大1.9,
  80. m_measure_buffer_msg = measure_buffer(); //感测信息的proto格式
  81. m_car_number_info_string.clear(); //车牌信息,包含图片
  82. m_car_number_info_msg = plate_number_info(); //车牌信息,包含图片
  83. m_useless_distance=0; //空跑的路程,
  84. }
  85. };
  86. //排队指令信息的集合
  87. struct Dispatch_command_collect
  88. {
  89. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_total; //调度指令map, 数据库的所有信息
  90. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_park_0; //调度指令map, 存车排队
  91. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_park_1; //调度指令map, 存车运行中
  92. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_park_2; //调度指令map, 存车完成
  93. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_park_10; //调度指令map, 存车故障
  94. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_pick_0; //调度指令map, 取车排队
  95. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_pick_1; //调度指令map, 取车运行中
  96. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_pick_2; //调度指令map, 取车完成
  97. std::map<std::string, Dispatch_command_info> m_dispatch_command_map_pick_10; //调度指令map, 取车故障
  98. std::vector<Dispatch_command_info> m_dispatch_command_vector_pick_0; //调度指令map, 取车排队, vector
  99. unsigned short m_ready_small_space_count = 0; //空闲小车位数量,
  100. unsigned short m_ready_middle_space_count = 0; //空闲中车位数量,
  101. unsigned short m_ready_big_space_count = 0; //空闲大车位数量,
  102. unsigned short m_ready_total_space_count = 0; //空闲总车位数量,
  103. unsigned short m_wait_small_park_count = 0; //排队小车存车的数量
  104. unsigned short m_wait_middle_park_count = 0; //排队中车存车的数量
  105. unsigned short m_wait_big_park_count = 0; //排队大车存车的数量
  106. unsigned short m_wait_total_park_count = 0; //排队总车存车的数量
  107. unsigned short m_wait_small_pick_count = 0; //排队小车取车的数量
  108. unsigned short m_wait_middle_pick_count = 0; //排队中车取车的数量
  109. unsigned short m_wait_big_pick_count = 0; //排队大车取车的数量
  110. unsigned short m_wait_total_pick_count = 0; //排队总车取车的数量
  111. void clear()
  112. {
  113. m_dispatch_command_map_total.clear();
  114. m_dispatch_command_map_park_0.clear();
  115. m_dispatch_command_map_park_1.clear();
  116. m_dispatch_command_map_park_2.clear();
  117. m_dispatch_command_map_park_10.clear();
  118. m_dispatch_command_map_pick_0.clear();
  119. m_dispatch_command_map_pick_1.clear();
  120. m_dispatch_command_map_pick_2.clear();
  121. m_dispatch_command_map_pick_10.clear();
  122. m_dispatch_command_vector_pick_0.clear();
  123. m_ready_small_space_count = 0; //空闲小车位数量,
  124. m_ready_middle_space_count = 0; //空闲中车位数量,
  125. m_ready_big_space_count = 0; //空闲大车位数量,
  126. m_ready_total_space_count = 0; //空闲总车位数量,
  127. m_wait_small_park_count = 0; //排队小车存车的数量
  128. m_wait_middle_park_count = 0; //排队中车存车的数量
  129. m_wait_big_park_count = 0; //排队大车存车的数量
  130. m_wait_total_park_count = 0; //排队总车存车的数量
  131. m_wait_small_pick_count = 0; //排队小车存车的数量
  132. m_wait_middle_pick_count = 0; //排队中车存车的数量
  133. m_wait_big_pick_count = 0; //排队大车存车的数量
  134. m_wait_total_pick_count = 0; //排队总车存车的数量
  135. }
  136. };
  137. //调度车位信息, 格式和数据库的 space 保持一致
  138. struct Dispatch_space_info
  139. {
  140. int m_id=0; //车位id
  141. int m_serial_id=0; //排序id
  142. int m_table_id=0; //标签id
  143. int m_unit=0; //单元号,
  144. int m_floor=0; //车位楼层
  145. int m_room_id=0; //层内id
  146. int m_height_level=0; //车高等级, 0=无效, 1=小车, 2=中车,3=大车,4=超高, 5=超高
  147. float m_height=0; //车高
  148. int m_wheel_base_level=0; //轮距等级, 0=无效,
  149. float m_wheel_base=0; //轮距
  150. int m_width_level=0; //车宽等级, 0=无效,
  151. float m_width=0; //车宽
  152. std::string m_primary_key; //key
  153. std::string m_car_number; //车牌号
  154. int m_statu=0; //车位状态, 0可用, 1故障
  155. std::string m_space_info_string; //车位信息的DebugString, 默认没有, 存车要根据感测信息的车高去申请车位, 取车根据车牌号找车位
  156. parkspace_info m_space_info_msg; //车位信息的proto格式
  157. std::string m_measure_buffer_string; //感测信息的DebugString, 里面自带车高, 小1.5 中1.7 大1.9,
  158. measure_buffer m_measure_buffer_msg; //感测信息的proto格式
  159. void clear()
  160. {
  161. m_id=0;
  162. m_serial_id = 0;
  163. m_table_id=0;
  164. m_unit=0;
  165. m_floor=0;
  166. m_room_id=0;
  167. m_height_level=0;
  168. m_height=0;
  169. m_wheel_base_level=0;
  170. m_wheel_base=0;
  171. m_width_level=0;
  172. m_width=0;
  173. m_primary_key.clear();
  174. m_car_number.clear();
  175. m_statu=0;
  176. m_space_info_string.clear();
  177. m_space_info_msg = parkspace_info();
  178. m_measure_buffer_string.clear();
  179. m_measure_buffer_msg = measure_buffer();
  180. }
  181. };
  182. //调度车辆信息, 格式和数据库的 vehicle 保持一致
  183. struct Dispatch_vehicle_info
  184. {
  185. std::string m_car_number; //车牌号
  186. std::string m_primary_key; //唯一码
  187. std::string m_actually_measure_buffer_string; //感测信息的DebugString, 里面自带车高, 小1.5 中1.7 大1.9,
  188. measure_buffer m_actually_measure_buffer_msg; //感测信息的proto格式
  189. };
  190. public:
  191. Dispatch_command();
  192. Dispatch_command(const Dispatch_command& other)= default;
  193. Dispatch_command& operator =(const Dispatch_command& other)= default;
  194. ~Dispatch_command();
  195. public://API functions
  196. Error_manager dispatch_command_init(int dispatch_manager_id);
  197. Error_manager dispatch_command_uninit();
  198. #ifdef SHANGGUJIE_PROJECT_PROJECT
  199. //存车指令入队, 检查节点直接通过rabbitmq发送给调度, 调度接受后数据库指令入队,
  200. Error_manager insert_park_command_gy(park_table park_command, int statu = 0);
  201. //存车指令入队, 检查节点直接通过rabbitmq发送给调度, 调度接受后数据库指令入队,
  202. Error_manager insert_park_command_gy(park_table park_command, Dispatch_command::Dispatch_space_info dispatch_space_info, int statu = 0);
  203. //取车指令入队, 检查节点直接通过rabbitmq发送给调度, 调度接受后数据库指令入队,
  204. Error_manager insert_pick_command_gy(pick_table pick_command, int statu = 0);
  205. //取车指令入队, 检查节点直接通过rabbitmq发送给调度, 调度接受后数据库指令入队,
  206. Error_manager insert_pick_command_gy(pick_table pick_command, Dispatch_command::Dispatch_space_info dispatch_space_info, int statu = 0);
  207. #endif//SHANGGUJIE_PROJECT_PROJECT
  208. //检查指令队列, 优先恢复未完成的指令,其次在执行新的指令
  209. //调度开始前, 向数据库发送请求的相关操作, 输入 穿梭机所在的楼层, 调度id 0~2, 空闲出口id, 如果不是0,就表示有空闲的出口
  210. Error_manager dispatch_request_to_sql(int plc_floor, int dispatch_id, int outlet_ready, int plc_park_priority);
  211. //调度完成后, 向数据库发送答复的相关操作
  212. Error_manager dispatch_response_to_sql(Error_manager error);
  213. //调度 , 向数据库 重新分配车位,
  214. Error_manager dispatch_reallocate_to_sql_gy(int height_level, int wheel_base_level, int width_level, int outlet_ready);
  215. //检查出口是否空闲, 检查指令队列的取车完成的出口id是否存在, 不存在就是空闲,返回成功
  216. Error_manager check_export_id_is_ready(int export_id);
  217. //检查出口取车是否完成, 指定的出口有取车完成指令就返回成功, 否则报错.
  218. Error_manager check_pickup_is_finish(int unit_id, int export_id);
  219. //检查入口存车是否开始, 指定的入口有存车开始指令就返回成功, 否则报错.
  220. Error_manager check_park_is_start(int import_id);
  221. //获取指定入口的 存车流程的 唯一码,
  222. Error_manager get_primary_key_for_store(int import_id, std::string & primary_key );
  223. //查重 指令队列, 根据存车终端id。
  224. Error_manager check_command_queue_for_terminal_id(int unit_id, int terminal_id);
  225. //删除 指令队列, 根据出口编号
  226. Error_manager delete_command_queue_for_export_id(int unit_id, int export_id);
  227. //查重 指令队列, 根据存车唯一码
  228. Error_manager check_command_queue_for_primary_key(int unit_id, std::string primary_key, int type, int statu);
  229. //查询 指令队列, 取车指令 根据唯一码 恢复指令表
  230. Error_manager query_command_queue_for_primary_key_ex(std::string primary_key, Dispatch_command_info & dispatch_command_info);
  231. //更新指令表,存车换车位时, 更新车位信息
  232. Error_manager update_command_queue_for_reallocate();
  233. //更新指令表,存车和取车换到新出口, 更新出口信息
  234. Error_manager update_command_queue_for_revocation();
  235. //添加plc数据储存
  236. Error_manager insert_plc_data(std::string plc_data, float hearbeat);
  237. //查重 存车的车位检查是否重复, where is car_number or primary_key
  238. Error_manager check_dispatch_space_for_car_number_or_primary_key(std::string car_number, std::string primary_key);
  239. //查询 取车的车位 取车指令 根据车牌号 查询对应的车位
  240. Error_manager query_dispatch_space_for_car_number(std::string car_number, parkspace_info & parkspace_info, measure_buffer & measure_buffer);
  241. //查询 取车的车位 取车指令 根据唯一码 查询对应的车位
  242. Error_manager query_dispatch_space_for_primary_key(std::string primary_key, parkspace_info & parkspace_info, measure_buffer & measure_buffer);
  243. //查询 取车的车位 取车指令 根据唯一码 恢复指令表
  244. Error_manager query_dispatch_space_for_primary_key_ex(std::string primary_key, Dispatch_command_info & dispatch_command_info);
  245. //查询 取车的车辆感测信息 取车指令 根据key 查询感测信息, 楚天旧版
  246. Error_manager query_dispatch_vehicle_for_primary_key(std::string primary_key, measure_buffer & measure_buffer);
  247. public://get or set member variable
  248. protected://member functions
  249. public:
  250. //获取调度指令, 与数据库同步 command_queue, statu指令状态, 0:排队等待, 1正在运行, 2:已经完成
  251. Error_manager query_all_dispatch_command(int statu);
  252. //对调度指令进行排序, 选出最优解, 比较存车和取车
  253. Error_manager sort_dispatch_command_for_total(int plc_park_priority);
  254. //对调度指令进行排序, 选出最优解, 只比较存车
  255. Error_manager sort_dispatch_command_for_park(int plc_park_priority);
  256. //查询指令表, 与数据库同步所有的指令信息,注意了:内部加锁,
  257. Error_manager query_all_dispatch_command_ex();
  258. //查询指令表, 与数据库同步所有的指令信息,注意了:内部bu加锁,
  259. Error_manager query_all_dispatch_command_ex_unlock();
  260. //查询车位表, 与数据库同步所有的剩余车位信息,注意了:内部加锁,
  261. Error_manager query_all_dispatch_ready_space_ex();
  262. //获取 指定车高 指定单元 的车位信息,用于车位分配, 找不到就会报错,
  263. Error_manager query_specify_height_unit_parkspace_info_gy(int unit, int height_level, int wheel_base_level, int width_level, Dispatch_space_info & dispatch_space_info);
  264. //获取 指定车高 指定单元 的空闲车位数量,
  265. Error_manager query_specify_height_unit_parkspace_info(int unit, int height_level, int & dispatch_space_count);
  266. //查询空闲车位最优解, 存车指令 根据调度指令最优解 获取 空闲车位最优解
  267. Error_manager query_dispatch_space_optimal_gy(int unit, int height_level, int wheel_base_level, int width_level, unsigned short & car_type, Dispatch_space_info & dispatch_space_info);
  268. //查询空闲车位最优解, 存车指令 根据调度指令最优解 获取 空闲车位最优解
  269. Error_manager query_dispatch_space_optimal_ex_gy(int unit, int height_level, int wheel_base_level, int width_level, Dispatch_space_info & dispatch_space_info);
  270. //查询 取车的车位 取车指令 根据车牌号 查询对应的车位
  271. Error_manager query_dispatch_space_for_car_number();
  272. //查询 取车的车辆感测信息 取车指令 根据key 查询感测信息
  273. // Error_manager query_dispatch_vehicle_for_primary_key();
  274. //更新 车位状态, 根据唯一码 只修状态
  275. Error_manager update_parkspace_statu_by_primary_key(int statu, std::string primary_key);
  276. //更新 车位状态, 根据车位ID 修改车牌号即可,
  277. Error_manager update_parkspace_write_car_number(int statu);
  278. //更新 车位状态, 存车排队预约车位
  279. Error_manager update_parkspace_write_car_number(park_table park_command, Dispatch_command::Dispatch_space_info dispatch_space_info, int statu);
  280. //更新 车位状态, 找到车牌号, 写NULL
  281. Error_manager update_parkspace_clear_car_number(int statu);
  282. //更新 车位状态, 找到车牌号, 写NULL by id
  283. Error_manager update_parkspace_clear_car_number_by_id(int space_id, int statu, std::string str = "");
  284. //更新车牌图片信息,
  285. Error_manager update_parkspace_write_car_number_info(int statu);
  286. //删除车牌图片信息,
  287. Error_manager update_parkspace_clear_car_number_info(int statu);
  288. //更新 指令队列, 根据车牌号 修改状态即可, //指令状态, 0排队中, 1正在工作, 2已完成, 3故障异常
  289. Error_manager update_command_queue_for_statu(int statu);
  290. //更新 指令队列, 根据唯一码 修改状态即可, 对存取车所有指令 //指令状态, 0排队中, 1正在工作, 2已完成, 3故障异常
  291. Error_manager update_command_queue_for_statu_ex(std::string primary_key, int statu, int type);
  292. //更新 指令队列, 根据车牌号 修改状态即可, //指令状态, 0排队中, 1正在工作, 2已完成, 3故障异常
  293. // Error_manager update_command_queue_for_statu(int statu, std::string error_description);
  294. //把整个单元的排队指令改为故障
  295. Error_manager update_command_queue_from_wait_to_fault_for_unit(int unit_id);
  296. //删除 指令队列, 根据车牌号 删除指令 20230810 输入车牌号和存取车类型
  297. Error_manager delete_command_queue_for_car_number(std::string car_number, int type);
  298. //制作存车表单
  299. Error_manager create_park_table(int inlet_ready);
  300. //制作取车表单
  301. Error_manager create_pick_table(int outlet_ready);
  302. //增加 车辆表, 存车指令 完成后添加车辆信息
  303. Error_manager select_vehicle_for_car_number();
  304. //增加 车辆表, 存车指令 完成后添加车辆信息
  305. Error_manager insert_vehicle_for_car_number();
  306. //增加 车辆表, 存车指令 完成后添加车辆信息, park_statu停车状态, 0:不存在, 1:存车中, 2:取车中, 3:在楼上存车
  307. Error_manager updata_vehicle_for_car_number(int park_statu);
  308. //删除 车辆表, 取车指令 完成后删除车辆信息
  309. Error_manager delete_vehicle_for_car_number();
  310. //检查记录表是否提前创建。没有创建就返回成功
  311. Error_manager check_record_for_no_primary_key(std::string primary_key);
  312. //增加 记录表, 存车指令 完成后添加存车记录
  313. Error_manager insert_record_for_park_start();
  314. //更新 记录表, 存车指令 完成后只更新存车开始时间
  315. Error_manager updata_record_for_park_start();
  316. //增加 记录表, 存车指令 完成后添加存车记录
  317. Error_manager insert_record_for_park_start(park_table park_command, Dispatch_command::Dispatch_space_info dispatch_space_info);
  318. //增加 记录表, 存车指令 完成后添加存车记录
  319. Error_manager updata_record_for_park_end();
  320. //更新 记录表, 取车指令 完成后更新取车记录
  321. Error_manager updata_record_for_pick_start();
  322. //更新 记录表, 取车指令 完成后更新取车记录
  323. Error_manager updata_record_for_pick_end();
  324. //更新 记录表, 取车指令 完成后更新取车记录, 撤销指令, 没有取车时间差
  325. Error_manager updata_record_for_pick_end_ex();
  326. //计算汽车在车库的存车时间, 从存车开始到取车结束, 返回 parking_time, 单位秒.
  327. Error_manager get_parking_time(std::string primary_key, int & parking_time );
  328. public:
  329. //获取出入口id 1~2为入口, 3~4为出口,
  330. //输入terminal_id 1~19, 输入 action_mode 1:存车, 2:取车
  331. int get_passway_id(int terminal_id, int action_mode);
  332. protected://member variable
  333. public:
  334. Dispatch_command_status m_dispatch_command_status; //调度指令模块 的状态
  335. std::mutex m_lock; // 锁.
  336. int m_dispatch_id; //调度id, 0-2
  337. int m_unit; //单元号
  338. int m_device_floor; //穿梭机所在的楼层, 存车完在对应的车位楼层, 取车完在1楼
  339. int m_outlet_ready; //取车空闲出口id, 0表示没有出口, 1~6表示空闲出口
  340. std::map<std::string, Dispatch_command_info> m_dispatch_command_map; //调度指令map, 数据库的所有信息
  341. std::string m_primary_key_optimal; //调度指令最优解
  342. Dispatch_space_info m_dispatch_space_info[100]; //调度车位最优解, 可以多次重新分配
  343. std::atomic<int> m_dispatch_space_info_count; //调度车位最优解, 如果重新分配,这个count就是最新使用的下标
  344. // int m_wait_park_count = 0; //排队存车的数量
  345. // int m_wait_pick_count = 0; //排队取车的数量
  346. // Dispatch_vehicle_info m_dispatch_vehicle_info; //调度车位最优解
  347. // Dispatch_space_info m_dispatch_space_info_reallocate[100]; //调度车位最优解, 重新分配的车位
  348. Dispatch_command_collect m_dispatch_command_collect_last; //排队指令信息的集合, last
  349. Dispatch_command_collect m_dispatch_command_collect_now; //排队指令信息的集合, now
  350. Common_data::Dispatch_process_type m_dispatch_process_type ; //调度流程类型
  351. park_table m_park_table_msg; //停车表单
  352. pick_table m_pick_table_msg; //取车表单
  353. unsigned short m_height_level; //车高等级, 存车同步车位表, 取车同步指令表
  354. unsigned short m_wheel_base_level; //车长等级,存车同步车位表, 取车同步指令表
  355. unsigned short m_width_level; //车宽等级,存车同步车位表, 取车同步指令表
  356. private:
  357. };
  358. #endif // __DISPATCH_COMMAND_HH__