CheckCommand.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import datetime
  2. import threading
  3. import time
  4. import uuid
  5. import db_helper.db_operation
  6. import async_communication as CM
  7. import message_pb2 as message
  8. import google.protobuf.text_format as tf
  9. class CommandChecker:
  10. def __init__(self):
  11. self._db = db_helper.db_operation.DBOperation()
  12. self._dispatch_statu = {}
  13. def exit_isOK(self, pick_body):
  14. pick_table = message.pick_table()
  15. tf.Parse(pick_body, pick_table)
  16. if pick_table.primary_key is None or pick_table.primary_key == '':
  17. pick_table.statu.execute_statu = message.eError
  18. pick_table.statu.statu_description = " 唯一码不能为空!"
  19. else:
  20. # 查询车位表和指令表是否有该车
  21. space_res = self._db.query_space_in_primary_key(pick_table.primary_key)
  22. command_res = self._db.query_command_in_primary_key(pick_table.primary_key)
  23. if len(command_res) > 0:
  24. pick_table.statu.execute_statu = message.eError
  25. pick_table.statu.statu_description = "指令正在执行中!请稍等!"
  26. elif len(space_res) <= 0:
  27. pick_table.statu.execute_statu = message.eError
  28. pick_table.statu.statu_description = "车辆信息不存在!"
  29. return pick_table
  30. def receive_dispatch_statu(self, statu,ex,key):
  31. self._dispatch_statu[key] = statu
  32. def entrance_isOK(self, park_body):
  33. # 停车表单
  34. park_table = message.park_table()
  35. tf.Parse(park_body, park_table)
  36. # 创建虚拟测量信息
  37. measure_info = message.measure_info()
  38. measure_info.height = 1.55
  39. park_table.entrance_measure_info.CopyFrom(measure_info)
  40. #检查调度状态
  41. key = "dispatch_%d_statu_port" % park_table.unit_id
  42. if len(self._dispatch_statu) == 0 or self._dispatch_statu[key].timeout():
  43. park_table.statu.execute_statu = message.eError
  44. park_table.statu.statu_description = "设备故障,请联系管理员!"
  45. return park_table
  46. # 赋值唯一码
  47. uid = str(uuid.uuid1())
  48. park_table.primary_key = uid
  49. # 查询车位表和指令表是否有该车
  50. space_res = self._db.query_space_in_car_number(park_table.car_number)
  51. command_res = self._db.query_command_in_car_number(park_table.car_number)
  52. if len(command_res) > 0:
  53. park_table.statu.execute_statu = message.eError
  54. park_table.statu.statu_description = "指令正在执行中!请稍等!"
  55. elif len(space_res) > 0:
  56. park_table.statu.execute_statu = message.eError
  57. park_table.statu.statu_description = "车辆 :%s 已在库内!" % park_table.car_number
  58. else:
  59. # 车辆不在库内 查询是否有对应大小空车位
  60. space_res = self._db.query_space_in_height_unit_and_empty(measure_info.height,park_table.unit_id)
  61. command_res = self._db.query_command_in_height_unit_and_statu(measure_info.height,park_table.unit_id)
  62. if len(space_res) - len(command_res) <= 0:
  63. park_table.statu.execute_statu = message.eError
  64. park_table.statu.statu_description = "没有空余车位,车牌号:%s 高度:%.3fm!" % (park_table.car_number, measure_info.height)
  65. return park_table