浏览代码

更新图片记录

rambo 6 月之前
父节点
当前提交
dffb37cf81

+ 8 - 2
python/mcu/DeviceControl.py

@@ -1434,7 +1434,7 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                     break
                 action_is_take_picture = action["take_picture"]
                 action_id = action["id"]
-                image_index = -1
+                image_index = -1 
                 if action_is_take_picture:
                     image_index = index
                 program_item = ProgramItem(
@@ -1444,6 +1444,11 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                     goods_art_no=goods_art_no,
                     image_index=image_index,
                     smart_shooter=smart_shooter,
+                    record_id=(
+                        -1
+                        if action["action_name"] == "移动到初始位"
+                        else record_ids[index]
+                    ),
                 )
                 if self.action_state != 1:
                     # 异常终止
@@ -1496,7 +1501,8 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                     mcu=self,
                     goods_art_no=goods_art_no,
                     image_index=image_index,
-                    smart_shooter=smart_shooter
+                    smart_shooter=smart_shooter,
+                    record_id=action_id,
                 )
             if self.action_state != 1:
                 # 异常终止

+ 18 - 8
python/mcu/ProgramItem.py

@@ -20,6 +20,7 @@ class ProgramItem(BaseClass):
         mcu,
         goods_art_no: str = None,
         image_index: int = -1,
+        record_id: int = -1,
         smart_shooter=None,
     ):
         super().__init__(BaseClass)
@@ -66,6 +67,7 @@ class ProgramItem(BaseClass):
 
         self.last_photograph_time = None  # 最近一次拍照时间
         self.goods_art_no = goods_art_no  # 货号
+        self.record_id = record_id  # 货号
 
         self.set_other()
         self.error_info_text = ""  # 错误提示信息
@@ -183,13 +185,13 @@ class ProgramItem(BaseClass):
         if settings.IS_TEST:
             self.do_run()
         else:
-            try:
-                self.do_run()
-            except BaseException as e:
-                self.sendSocketMessage(
-                    msg="p_item 错误:{}".format(e), device_status=-1
-                )
-                self.set_state(state_value=99)
+            # try:
+            self.do_run()
+        # except BaseException as e:
+        #     self.sendSocketMessage(
+        #         msg="p_item 错误:{}".format(e), device_status=-1
+        #     )
+        #     self.set_state(state_value=99)
 
         self.set_state(state_value=2)
         return True
@@ -295,8 +297,16 @@ class ProgramItem(BaseClass):
                     )
                 # 拍照
                 print("smart shooter 拍照")
+                record_id = self.record_id
+                goods_art_no = self.goods_art_no
+                if record_id == -1:
+                    goods_art_no = ""
                 loop.create_task(
-                    self.smart_shooter.CameraShooter(msg_type="run_mcu"),
+                    self.smart_shooter.CameraShooter(
+                        msg_type="run_mcu",
+                        goods_art_no=goods_art_no,
+                        id=record_id,
+                    ),
                     name="CameraShooter",
                 )
             else:

+ 3 - 1
python/mcu/RemoteControlV2.py

@@ -287,7 +287,9 @@ class RemoteControlV2(BaseClass):
                     loop = asyncio.get_event_loop()
                     loop.create_task(
                         self.smart_shooter.CameraShooter(
-                            msg_type="handler_take_picture"
+                            msg_type="handler_take_picture",
+                            goods_art_no=record.goods_art_no,
+                            id=record_id_single,
                         ),
                         name="CameraShooter",
                     )

+ 30 - 12
python/mcu/capture/smart_shooter_class.py

@@ -90,7 +90,9 @@ class SmartShooter(metaclass=SingletonType):
                         "msg_type": self.msg_type,
                         "device_status": -1,
                     }
-                    await self.websocket_manager.send_personal_message(message,self.websocket)
+                    await self.websocket_manager.send_personal_message(
+                        message, self.websocket
+                    )
                 return False, msg_send
             cameraInfo = json_msg.get("CameraInfo")
             if cameraInfo == None or len(cameraInfo) == 0:
@@ -104,12 +106,14 @@ class SmartShooter(metaclass=SingletonType):
                         "msg_type": self.msg_type,
                         "device_status": -1,
                     }
-                    await self.websocket_manager.send_personal_message(message,self.websocket)
+                    await self.websocket_manager.send_personal_message(
+                        message, self.websocket
+                    )
                 return False, "相机未连接"
             # 链接的相机
             # connect_camera = cameraInfo
             CameraStatus = any(
-                item.get("CameraStatus") == "Ready" for item in cameraInfo
+                item.get("CameraStatus") in ["Ready", "Busy"] for item in cameraInfo
             )
             # CameraStatus = connect_camera.get("CameraStatus")
             if not CameraStatus:
@@ -123,7 +127,9 @@ class SmartShooter(metaclass=SingletonType):
                         "msg_type": self.msg_type,
                         "device_status": -1,
                     }
-                    await self.websocket_manager.send_personal_message(message,self.websocket)
+                    await self.websocket_manager.send_personal_message(
+                        message, self.websocket
+                    )
                 return False, msg_send
             self.connect_status = True
             msg_send = "相机已连接"
@@ -135,7 +141,9 @@ class SmartShooter(metaclass=SingletonType):
                     "msg_type": self.msg_type,
                     "device_status": 2,
                 }
-                await self.websocket_manager.send_personal_message(message,self.websocket)
+                await self.websocket_manager.send_personal_message(
+                    message, self.websocket
+                )
             return True, "相机已连接"
         except:
             self.connect_status = False
@@ -150,7 +158,9 @@ class SmartShooter(metaclass=SingletonType):
                     "msg_type": self.msg_type,
                     "device_status": -1,
                 }
-                await self.websocket_manager.send_personal_message(message,self.websocket)
+                await self.websocket_manager.send_personal_message(
+                    message, self.websocket
+                )
             return False, msg_send
 
     async def EnableCameraPreview(self, enable_status=True, msg_type=""):
@@ -188,7 +198,7 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": 2,
             }
-            await self.websocket_manager.send_personal_message(message,self.websocket)
+            await self.websocket_manager.send_personal_message(message, self.websocket)
             return True, "预览启用成功" if enable_status else "预览关闭成功"
         except:
             self.perview_state = False
@@ -202,7 +212,7 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": -1,
             }
-            await self.websocket_manager.send_personal_message(message,self.websocket)
+            await self.websocket_manager.send_personal_message(message, self.websocket)
             return False, "相机未连接或软件未打开"
 
     async def CameraAutofocus(self):
@@ -230,7 +240,7 @@ class SmartShooter(metaclass=SingletonType):
             context.term()
             return False, "相机未连接或软件未打开"
 
-    async def CameraShooter(self, msg_type=""):
+    async def CameraShooter(self, msg_type="", goods_art_no="", id=0):
         self.msg_type = msg_type
         """
         执行拍照
@@ -245,6 +255,11 @@ class SmartShooter(metaclass=SingletonType):
             req["msg_id"] = "Shoot"
             req["msg_seq_num"] = 1
             req["CameraSelection"] = "All"
+            if goods_art_no != "" and id != 0:
+                # 此处用逗号分割,货号和id,需要在监听部分进行切割保存处理,如果使用下划线或者减号,可能货号中存在对应符号
+                req["PhotoOrigin"] = f"{goods_art_no},{id}"
+            else:
+                req["PhotoOrigin"] = ""
             json_msg = self.__send_tcp_message(socket, req)
             print("CameraShooter", json_msg)
             msg_result = json_msg.get("msg_result")
@@ -257,7 +272,9 @@ class SmartShooter(metaclass=SingletonType):
                     "msg_type": self.msg_type,
                     "device_status": -1,
                 }
-                await self.websocket_manager.send_personal_message(message,self.websocket)
+                await self.websocket_manager.send_personal_message(
+                    message, self.websocket
+                )
                 return False, msg_send
             msg_send = "拍照成功"
             message = {
@@ -267,7 +284,7 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": 2,
             }
-            await self.websocket_manager.send_personal_message(message,self.websocket)
+            await self.websocket_manager.send_personal_message(message, self.websocket)
             return True, "拍照成功"
         except:
             socket.close()
@@ -280,10 +297,11 @@ class SmartShooter(metaclass=SingletonType):
                 "msg_type": self.msg_type,
                 "device_status": -1,
             }
-            await self.websocket_manager.send_personal_message(message,self.websocket)
+            await self.websocket_manager.send_personal_message(message, self.websocket)
             return False, msg_send
 
     async def connect_listen(self):
+        print("smart shooter connect_listen", self.connect_status, self.listen_init)
         if self.connect_status == True or self.listen_init == True:
             return True
         # 发起监听

+ 40 - 14
python/sockets/message_handler.py

@@ -6,6 +6,26 @@ from mcu.BlueToothMode import BlueToothMode
 from databases import DeviceConfig, SqlQuery, CRUD, PhotoRecord, SysConfigs
 from mcu.capture.module_digicam import DigiCam
 from mcu.capture.smart_shooter_class import SmartShooter
+from models import RecordUpdate
+from sqlalchemy.exc import NoResultFound
+import os, datetime
+
+async def updateDataRecord(PhotoFilename, id):
+    await asyncio.sleep(0.01)
+    create_time = datetime.datetime.fromtimestamp(os.path.getctime(PhotoFilename))
+    data = {"id": id, "image_path": PhotoFilename, "photo_create_time": create_time}
+    # record_model = PhotoRecord(**data)
+    session = SqlQuery()
+    record_model = CRUD(PhotoRecord)
+    model = record_model.read(session, conditions={"id": id})
+    if model == None:
+        print(f"smart shooter 拍照记录更新失败,记录id:{id},不存在")
+    else:
+        # 走编辑逻辑
+        record_model.updateConditions(session, conditions={"id": id}, **data)
+        print(f"smart shooter 拍照记录更新成功,记录id:{id}")
+
+
 # socket消息发送逻辑处理方法
 async def handlerSend(
     manager: ConnectionManager,
@@ -21,17 +41,25 @@ async def handlerSend(
     code = receiveData.get("code")
     msg = receiveData.get("msg")
     data = receiveData.get("data")
+
     async def MsgCallback(msg):
         msg_id = msg.get("msg_id")
         match msg_id:
             case "PhotoUpdated":
                 PhotoFilename = msg.get("PhotoFilename")
                 PhotoLocation = msg.get("PhotoLocation")
+                PhotoOrigin = msg.get("PhotoOrigin")
                 if (PhotoFilename != "" and PhotoFilename != None) and (
                     PhotoLocation == "Local Disk"
                 ):
-                    # print("PhotoFilename", temp_photo_name, PhotoFilename)
                     # temp_photo_name = PhotoFilename
+                    # 更新拍照记录
+                    print("PhotoFilename", PhotoFilename, PhotoOrigin)
+                    if PhotoOrigin != "":
+                        goods_art_no, id = PhotoOrigin.split(",")
+                        loop.create_task(
+                            updateDataRecord(PhotoFilename, id), name="PhotoFilename"
+                        )
                     data = manager.jsonMessage(
                         code=1,
                         msg=f"照片获取成功",
@@ -67,7 +95,7 @@ async def handlerSend(
             pass
         case "forward_message":
             data = receiveData.get("data")
-            dictMsg = {"code":code,"msg":msg,"data":data}
+            dictMsg = {"code": code, "msg": msg, "data": data}
             await manager.broadcast(dictMsg)
         case "connect_mcu":
             device_ctrl = DeviceControl(
@@ -89,7 +117,7 @@ async def handlerSend(
                 websocket_manager=manager, smart_shooter=smart_shooter
             )
             # 是否强制初始化
-            is_force_init = data.get("value",False)
+            is_force_init = data.get("value", False)
             loop.create_task(device_ctrl.initDevice(is_force_init), name="init_mcu")
         case "control_mcu":
             device_name = data.get("device_name")
@@ -97,9 +125,7 @@ async def handlerSend(
             if (device_name == "" or device_name == None) or (
                 value == "" or value == None
             ):
-                data = manager.jsonMessage(
-                    code=1, msg="参数错误", msg_type="mcu"
-                )
+                data = manager.jsonMessage(code=1, msg="参数错误", msg_type="mcu")
                 await manager.send_personal_message(data, websocket)
                 return
             device_ctrl = DeviceControl(
@@ -119,7 +145,7 @@ async def handlerSend(
             msg_type = "run_mcu"
             action_info = data.get("action", "执行左脚程序")
             goods_art_no = data.get("goods_art_no", None)
-            if goods_art_no == None or goods_art_no =="":
+            if goods_art_no == None or goods_art_no == "":
                 # 判断货号是否存在
                 data = manager.jsonMessage(
                     code=1, msg="goods_art_no不能为空", msg_type=msg_type
@@ -137,7 +163,9 @@ async def handlerSend(
                 action_flag = "right"
             tab_id = action_configs_json.get(action_flag)
             photoRecord = CRUD(PhotoRecord)
-            goods_art_record = photoRecord.read(session,conditions={"goods_art_no": goods_art_no})
+            goods_art_record = photoRecord.read(
+                session, conditions={"goods_art_no": goods_art_no}
+            )
             if goods_art_record != None:
                 data = manager.jsonMessage(
                     code=1,
@@ -185,7 +213,7 @@ async def handlerSend(
                 blue_tooth.remote_control_v2.handlerTakePhoto(smart_shooter),
                 name="run_mcu_config",
             )
-        case "re_take_picture":#重拍
+        case "re_take_picture":  # 重拍
             msg_type = "re_take_picture"
             record_id = data.get("record_id")
             session = SqlQuery()
@@ -204,9 +232,7 @@ async def handlerSend(
             image_index = goods_art_record.image_index
             crud = CRUD(DeviceConfig)
             condtions = {"id": action_id}
-            device_action = crud.read(
-                session, conditions=condtions
-            )
+            device_action = crud.read(session, conditions=condtions)
             if device_action == None:
                 # 判断是否有可用配置
                 data = manager.jsonMessage(code=1, msg="当前没有可用配置")
@@ -282,9 +308,9 @@ async def handlerSend(
                 name="sendCommand",
             )
         case "smart_shooter_getinfo":
-            '''
+            """
             获取相机信息,是否连接
-            '''
+            """
             loop.create_task(
                 smart_shooter.GetCameraInfo(msg_type="smart_shooter_getinfo"),
                 name="smart_shooter_getinfo",