message_handler.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. from .connect_manager import ConnectionManager
  2. from models import WebSocket
  3. import json, asyncio
  4. from mcu.DeviceControl import DeviceControl, checkMcuConnection
  5. from mcu.BlueToothMode import BlueToothMode
  6. from databases import DeviceConfig, SqlQuery, CRUD, PhotoRecord, SysConfigs
  7. from mcu.capture.module_digicam import DigiCam
  8. # socket消息发送逻辑处理方法
  9. async def handlerSend(
  10. manager: ConnectionManager, receiveData: str, websocket: WebSocket
  11. ):
  12. loop = asyncio.get_event_loop()
  13. receiveData = json.loads(receiveData)
  14. # 处理消息发送逻辑
  15. receiveData = json.loads(receiveData.get("text"))
  16. jsonType = receiveData.get("type")
  17. code = receiveData.get("code")
  18. msg = receiveData.get("msg")
  19. data = receiveData.get("data")
  20. print("receiveData", receiveData)
  21. print("jsonType", jsonType)
  22. match jsonType:
  23. case "ping":
  24. """发送心跳"""
  25. data = manager.jsonMessage("pong")
  26. await manager.send_personal_message(data, websocket)
  27. case "pong":
  28. """发送心跳"""
  29. pass
  30. case "forward_message":
  31. data = receiveData.get("data")
  32. dictMsg = {"code": code, "msg": msg, "data": data}
  33. await manager.broadcast(dictMsg)
  34. case "connect_mcu":
  35. device_ctrl = DeviceControl(websocket_manager=manager)
  36. device_ctrl.mcu_exit = False
  37. # if device_ctrl.serial_ins.check_connect():
  38. # print("未连接")
  39. loop.create_task(checkMcuConnection(device_ctrl), name="mcu")
  40. case "connect_bluetooth":
  41. blue_tooth = BlueToothMode(websocket_manager=manager)
  42. blue_tooth.bluetooth_exit = False
  43. # await blue_tooth.main_func()
  44. print("连接蓝牙信息")
  45. loop.create_task(blue_tooth.main_func(), name="blue_tooth")
  46. # loop.close()
  47. case "init_mcu":
  48. device_ctrl = DeviceControl(websocket_manager=manager)
  49. # 是否强制初始化
  50. is_force_init = data.get("value", False)
  51. loop.create_task(device_ctrl.initDevice(is_force_init), name="init_mcu")
  52. case "control_mcu":
  53. device_name = data.get("device_name")
  54. value = data.get("value")
  55. if (device_name == "" or device_name == None) or (
  56. value == "" or value == None
  57. ):
  58. data = manager.jsonMessage(code=1, msg="参数错误", msg_type="mcu")
  59. await manager.send_personal_message(data, websocket)
  60. return
  61. device_ctrl = DeviceControl(websocket_manager=manager)
  62. device_ctrl.controlDevice(device_name, value)
  63. case "stop_action":
  64. device_ctrl = DeviceControl(websocket_manager=manager)
  65. if device_ctrl.is_runn_action == True:
  66. print("动作执行中,停止")
  67. device_ctrl.is_stop_action = True
  68. else:
  69. print("动作没有执行,略过")
  70. case "run_mcu":
  71. msg_type = "run_mcu"
  72. action_info = data.get("action", "执行左脚程序")
  73. goods_art_no = data.get("goods_art_no", None)
  74. if goods_art_no == None or goods_art_no == "":
  75. # 判断货号是否存在
  76. data = manager.jsonMessage(
  77. code=1, msg="goods_art_no不能为空", msg_type=msg_type
  78. )
  79. await manager.send_personal_message(data, websocket)
  80. return
  81. session = SqlQuery()
  82. sys_configs = CRUD(SysConfigs)
  83. action_configs = sys_configs.read(
  84. session, conditions={"key": "action_configs"}
  85. )
  86. action_configs_json = json.loads(action_configs.value)
  87. action_flag = "left"
  88. if "右" in action_info:
  89. action_flag = "right"
  90. tab_id = action_configs_json.get(action_flag)
  91. photoRecord = CRUD(PhotoRecord)
  92. goods_art_record = photoRecord.read(
  93. session, conditions={"goods_art_no": goods_art_no}
  94. )
  95. if goods_art_record != None:
  96. data = manager.jsonMessage(
  97. code=1,
  98. msg=f"货号[{goods_art_no}]已存在,请勿重复拍摄~",
  99. msg_type=msg_type,
  100. )
  101. await manager.send_personal_message(data, websocket)
  102. return
  103. crud = CRUD(DeviceConfig)
  104. condtions = {"tab_id": tab_id}
  105. all_devices = crud.read_all(
  106. session, conditions=condtions, order_by="action_index", ascending=True
  107. )
  108. if len(all_devices) == 0:
  109. # 判断是否有可用配置
  110. data = manager.jsonMessage(code=1, msg="当前没有可用配置")
  111. await manager.send_personal_message(data, websocket, msg_type=msg_type)
  112. return
  113. action_list = [dict(device.__dict__) for device in all_devices]
  114. print("action_list", action_list)
  115. device_ctrl = DeviceControl(websocket_manager=manager)
  116. loop.create_task(
  117. device_ctrl.run_mcu_config(action_list, goods_art_no, action_info),
  118. name="run_mcu_config",
  119. )
  120. case "run_mcu_single":
  121. device_ctrl = DeviceControl(websocket_manager=manager)
  122. loop.create_task(
  123. device_ctrl.run_mcu_config_single(data, None, "run_mcu_single"),
  124. name="run_mcu_single",
  125. )
  126. case "handler_take_picture":
  127. blue_tooth = BlueToothMode(websocket_manager=manager)
  128. loop.create_task(
  129. blue_tooth.remote_control_v2.handlerTakePhoto(),
  130. name="run_mcu_config",
  131. )
  132. case "re_take_picture": # 重拍
  133. # try:
  134. # # 判断拍照软件是否初始化
  135. # digicam = DigiCam()
  136. # camera_is_connect = digicam.checkCameraConnect()
  137. # if camera_is_connect is not True:
  138. # data = manager.jsonMessage(
  139. # code=1, msg="相机未连接,请检查", msg_type=msg_type
  140. # )
  141. # await manager.send_personal_message(data, websocket)
  142. # return
  143. # digicam.getCaptureFolderPath()
  144. # except:
  145. # data = manager.jsonMessage(
  146. # code=1, msg="digicam未初始化,请检查", msg_type=msg_type
  147. # )
  148. # await manager.send_personal_message(data, websocket)
  149. # return
  150. msg_type = "re_take_picture"
  151. record_id = data.get("record_id")
  152. session = SqlQuery()
  153. photoRecord = CRUD(PhotoRecord)
  154. goods_art_record = photoRecord.read(session, conditions={"id": record_id})
  155. if goods_art_record == None:
  156. data = manager.jsonMessage(
  157. code=1,
  158. msg=f"记录不存在,请核实后重新操作~",
  159. msg_type=msg_type,
  160. )
  161. await manager.send_personal_message(data, websocket)
  162. return
  163. action_id = goods_art_record.action_id
  164. goods_art_no = goods_art_record.goods_art_no
  165. image_index = goods_art_record.image_index
  166. crud = CRUD(DeviceConfig)
  167. condtions = {"id": action_id}
  168. device_action = crud.read(session, conditions=condtions)
  169. device_result = dict(device_action.__dict__)
  170. if device_action == None:
  171. # 判断是否有可用配置
  172. data = manager.jsonMessage(code=1, msg="当前没有可用配置")
  173. await manager.send_personal_message(data, websocket, msg_type=msg_type)
  174. return
  175. # 清除图片记录,执行重拍
  176. reset_data = {"image_path": None}
  177. photoRecord.update(session, record_id, **reset_data)
  178. device_ctrl = DeviceControl(websocket_manager=manager)
  179. loop.create_task(
  180. device_ctrl.run_mcu_config_single(
  181. device_result,
  182. goods_art_no,
  183. msg_type=msg_type,
  184. image_index=image_index,
  185. record_id=record_id,
  186. ),
  187. name="run_mcu_config_single",
  188. )
  189. case "get_deviation":
  190. device_ctrl = DeviceControl(websocket_manager=manager)
  191. loop.create_task(
  192. device_ctrl.getDeviationInfo(),
  193. name="get_deviation",
  194. )
  195. case "set_deviation":
  196. device_ctrl = DeviceControl(websocket_manager=manager)
  197. value = data.get("value", None)
  198. action_name = data.get("action_name", None)
  199. loop.create_task(
  200. device_ctrl.set_deviation_cmd(value, action_name, "set"),
  201. name="set_deviation",
  202. )
  203. case "move_deviation":
  204. device_ctrl = DeviceControl(websocket_manager=manager)
  205. value = data.get("value", None)
  206. action_name = data.get("action_name", None)
  207. loop.create_task(
  208. device_ctrl.set_deviation_cmd(value, action_name, "move"),
  209. name="move_deviation",
  210. )
  211. case "get_mcu_other_info":
  212. device_ctrl = DeviceControl(websocket_manager=manager)
  213. loop.create_task(
  214. device_ctrl.getMcuOtherInfo(),
  215. name="mcu_other_set_get",
  216. )
  217. case "set_mcu_other_info":
  218. device_ctrl = DeviceControl(websocket_manager=manager)
  219. loop.create_task(
  220. device_ctrl.setMcuOtherInfo(data),
  221. name="setMcuOtherInfo",
  222. )
  223. case "send_command":
  224. device_ctrl = DeviceControl(websocket_manager=manager)
  225. loop.create_task(
  226. device_ctrl.sendCommand(data.get("command", None)),
  227. name="sendCommand",
  228. )
  229. case "digicam_take_picture":
  230. msg_type = "re_take_picture"
  231. id = data.get("id", 0)
  232. goods_art_no = data.get("goods_art_no", "")
  233. session = SqlQuery()
  234. photoRecord = CRUD(PhotoRecord)
  235. goods_art_record = photoRecord.read(session, conditions={"id": id})
  236. if goods_art_record == None:
  237. data = manager.jsonMessage(
  238. code=1,
  239. msg=f"记录不存在,请核实后重新操作~",
  240. msg_type=msg_type,
  241. )
  242. await manager.send_personal_message(data, websocket)
  243. return
  244. reset_data = {"image_path": None}
  245. photoRecord.update(session, id, **reset_data)
  246. device_ctrl = DeviceControl(websocket_manager=manager)
  247. loop.create_task(
  248. device_ctrl.only_take_photo(
  249. goods_art_no=goods_art_no,
  250. image_index=goods_art_record.image_index,
  251. record_id=id,
  252. ),
  253. name="sendCommand",
  254. )
  255. case _:
  256. data = manager.jsonMessage(code=1, msg="未知消息")
  257. await manager.send_personal_message(data, websocket)
  258. return