rambo 6 ヶ月 前
コミット
5a248c4b4e

+ 2 - 2
python/api.py

@@ -517,7 +517,7 @@ def get_device_configs(params: ModelGetDeviceConfig):
 
 
 @app.post("/device_config_detail", description="获取可执行程序详情")
-def get_device_configs(params: ModelGetDeviceConfigDetail):
+def device_config_detail(params: ModelGetDeviceConfigDetail):
     action_id = params.id
     session = SqlQuery()
     configModel = CRUD(DeviceConfig)
@@ -546,7 +546,7 @@ def device_config_detail_query():
 
 
 @app.post("/remove_config", description="删除一条可执行命令")
-def get_device_configs(params: ModelGetDeviceConfigDetail):
+def remove_config(params: ModelGetDeviceConfigDetail):
     action_id = params.id
     session = SqlQuery()
     configModel = CRUD(DeviceConfig)

+ 64 - 99
python/databases.py

@@ -36,54 +36,6 @@ def __get_session():
             session.close()
 
 
-def batch_insert_device_configs(session: Session, action_tabs: list, data_list: list):
-    """批量插入数据到设备配置表"""
-    for idx, tab in enumerate(action_tabs):
-        crud = CRUD(DeviceConfigTabs)
-        device_tab = DeviceConfigTabs(
-            mode_type=tab.get("mode_type"),
-            mode_name=tab.get("mode_name"),
-        )
-        create_obj = crud.create(session, obj_in=device_tab)
-        for data in data_list:
-            data["tab_id"] = create_obj.id
-            data["is_system"] = False
-            if idx  in [0, 6]:
-                data["is_system"] = True
-            device_config = DeviceConfig(**data)
-            session.add(device_config)
-    session.commit()
-    session.close()
-
-
-def batch_insert_sys_configs(session: Session, data_list: list):
-    """批量插入数据到设备配置表"""
-    for data in data_list:
-        config = SysConfigs(**data)
-        session.add(config)
-    session.commit()
-    session.close()
-
-
-def insert_photo_records(
-    image_deal_mode: int, goods_art_no: str, image_index: int, action_id: int
-):
-    session = SqlQuery()
-    """批量插入数据到照片记录"""
-    data = {
-        "image_deal_mode": image_deal_mode,
-        "goods_art_no": goods_art_no,
-        "image_index": image_index,
-        "action_id": action_id,
-    }
-    device_config = PhotoRecord(**data)
-    session.add(device_config)
-    session.commit()
-    record_id = device_config.id
-    session.close()
-    return True, record_id
-
-
 # 创建一个通用的 CRUD 类
 class CRUD:
     def __init__(self, model):
@@ -93,9 +45,6 @@ class CRUD:
         obj_in_data = dict(obj_in)
         db_obj = self.model(**obj_in_data)
         session.add(db_obj)
-        session.commit()
-        # session.refresh(db_obj)
-        # session.close()
         return db_obj
 
     def read(
@@ -121,7 +70,6 @@ class CRUD:
             else:
                 query = query.order_by(desc(getattr(self.model, order_by)))
         data = session.exec(query).first()
-        session.close()
         return data
 
     def read_all(
@@ -162,52 +110,28 @@ class CRUD:
             else:
                 query = query.order_by(desc(getattr(self.model, order_by)))
         data = session.exec(query).all()
-        session.close()
         return data
 
     def update(self, session: Session, obj_id: int, **kwargs):
         db_obj = session.get(self.model, obj_id)
         for key, value in kwargs.items():
-            # if value == None or value == "":
-            #     continue
             setattr(db_obj, key, value)
-        session.commit()
-        session.refresh(db_obj)
-        session.close()
         return db_obj
 
-    def updateConditions(
-        self, session: Session, conditions: Optional[Dict] = None, **kwargs
-    ):
-        query = select(self.model)
-        if conditions:
-            query = query.where(
-                and_(
-                    *(
-                        getattr(self.model, key) == value
-                        for key, value in conditions.items()
-                    )
-                )
-            )
-        data = session.exec(query).first()
-        for key, value in kwargs.items():
-            if value == None or value == "":
-                continue
-            setattr(data, key, value)
-        session.commit()
-        session.refresh(data)
-        session.close()
-        return data
+    def delete(self, session: Session, obj_id: int):
+        db_obj = session.get(self.model, obj_id)
+        session.delete(db_obj)
 
-    def deleteConditions(
-        self,
-        session: Session,
-        conditions: Optional[Dict] = None,
-    ):
-        query = select(self.model)
-        if conditions == None:
-            return False
-        query = query.where(
+    # 恢复 updateConditions 方法
+    def updateConditions(self, session: Session, conditions: Dict, **kwargs):
+        """
+        根据条件更新记录
+        :param session: 数据库会话
+        :param conditions: 更新条件字典
+        :param kwargs: 需要更新的字段和值
+        :return: 更新后的对象
+        """
+        query = select(self.model).where(
             and_(
                 *(
                     getattr(self.model, key) == value
@@ -215,18 +139,59 @@ class CRUD:
                 )
             )
         )
-        objects_to_delete = session.exec(query).all()
-        for obj in objects_to_delete:
-            session.delete(obj)
-        session.commit()
-        session.close()
-        return True
+        result = session.exec(query).first()
+        if result:
+            for key, value in kwargs.items():
+                setattr(result, key, value)
+            session.commit()  # 提交事务以保存更改
+            return result
+        return None
 
-    def delete(self, session: Session, obj_id: int):
-        db_obj = session.get(self.model, obj_id)
-        session.delete(db_obj)
+
+# 批量插入数据到设备配置表
+def batch_insert_device_configs(session: Session, action_tabs: list, data_list: list):
+    """批量插入数据到设备配置表"""
+    for idx, tab in enumerate(action_tabs):
+        crud = CRUD(DeviceConfigTabs)
+        device_tab = DeviceConfigTabs(
+            mode_type=tab.get("mode_type"),
+            mode_name=tab.get("mode_name"),
+        )
+        create_obj = crud.create(session, obj_in=device_tab)
+        for data in data_list:
+            data["tab_id"] = create_obj.id
+            data["is_system"] = False
+            if idx in [0, 6]:
+                data["is_system"] = True
+            device_config = DeviceConfig(**data)
+            session.add(device_config)
+    session.commit()  # 合并事务提交
+
+# 批量插入系统配置
+def batch_insert_sys_configs(session: Session, data_list: list):
+    """批量插入数据到设备配置表"""
+    for data in data_list:
+        config = SysConfigs(**data)
+        session.add(config)
+    session.commit()  # 合并事务提交
+
+# 插入照片记录
+def insert_photo_records(
+    image_deal_mode: int, goods_art_no: str, image_index: int, action_id: int
+):
+    with SqlQuery() as session:  # 使用上下文管理器复用会话
+        """批量插入数据到照片记录"""
+        data = {
+            "image_deal_mode": image_deal_mode,
+            "goods_art_no": goods_art_no,
+            "image_index": image_index,
+            "action_id": action_id,
+        }
+        device_config = PhotoRecord(**data)
+        session.add(device_config)
         session.commit()
-        session.close()
+        record_id = device_config.id
+        return True, record_id
 
 
 def SqlQuery():

+ 3 - 1
python/mcu/capture/smart_shooter_class.py

@@ -113,6 +113,8 @@ class SmartShooter(metaclass=SingletonType):
                 return False, "相机未连接"
             # 链接的相机
             # connect_camera = cameraInfo
+            # for item in cameraInfo:
+            #     print("相机状态::::>>>>>>>", item.get("CameraStatus"))
             CameraStatus = any(
                 item.get("CameraStatus") in ["Ready", "Busy"] for item in cameraInfo
             )
@@ -388,7 +390,7 @@ class SmartShooter(metaclass=SingletonType):
                 continue
             camera_states, camera_msg = await self.GetCameraInfo(is_send=False)
             if not camera_states:
-                print("相机未连接")
+                print("相机未连接回调打印", camera_states, camera_msg)
                 await asyncio.sleep(0.01)  # 等待相机连接
                 continue
             if self.stop_listen:

+ 1 - 58
python/sockets/message_handler.py

@@ -7,23 +7,8 @@ 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消息发送逻辑处理方法
@@ -42,49 +27,7 @@ async def handlerSend(
     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"
-                ):
-                    # temp_photo_name = PhotoFilename
-                    # 更新拍照记录
-                    print("PhotoFilename", PhotoFilename, PhotoOrigin)
-                    if PhotoOrigin != "" and PhotoOrigin != "external":
-                        goods_art_no, id = PhotoOrigin.split(",")
-                        loop.create_task(
-                            updateDataRecord(PhotoFilename, id), name="PhotoFilename"
-                        )
-                    data = manager.jsonMessage(
-                        code=0,
-                        msg=f"照片获取成功",
-                        data={"photo_file_name": PhotoFilename},
-                        msg_type="smart_shooter_photo_take",
-                    )
-                    await manager.send_personal_message(data, websocket)
-            case "LiveviewUpdated":
-                CameraLiveviewImage = msg.get("CameraLiveviewImage", None)
-                # base64_to_image(CameraLiveviewImage, "liveview.jpg")
-                # print("收到直播画面:CameraLiveviewImage")
-                data = manager.jsonMessage(
-                    code=1,
-                    msg=f"预览数据发送",
-                    data={"smart_shooter_preview": CameraLiveviewImage},
-                    msg_type="smart_shooter_enable_preview",
-                )
-                await manager.send_personal_message(data, websocket)
 
-    # 构建监听条件
-    smart_shooter.callback_listen = MsgCallback
-    loop.create_task(
-        smart_shooter.connect_listen(),
-        name="smart_shooter_connect_listen",
-    )
     match jsonType:
         case "ping":
             """发送心跳"""

+ 59 - 2
python/sockets/socket_server.py

@@ -8,12 +8,31 @@ from mcu.BlueToothMode import BlueToothMode
 from mcu.capture.smart_shooter_class import SmartShooter
 import time
 from .socket_client import socket_manager
+from sqlalchemy.exc import NoResultFound
+import os, datetime
+
 conn_manager = ConnectionManager()
 active_connections = set()
 device_ctrl = DeviceControl(websocket_manager=conn_manager)
 blue_tooth = BlueToothMode(websocket_manager=conn_manager)
 smart_shooter = SmartShooter(websocket_manager=conn_manager)
 from utils.common import message_queue
+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}")
+
+
 @app.websocket("/ws")
 async def websocket_endpoint(websocket: WebSocket):
     await conn_manager.connect(websocket)
@@ -63,8 +82,46 @@ async def websocket_endpoint(websocket: WebSocket):
                 except Exception as e:
                     print(e)
                     break
-
-        await asyncio.gather(handler_messages(), send_message())
+        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"
+                    ):
+                        # temp_photo_name = PhotoFilename
+                        # 更新拍照记录
+                        print("PhotoFilename", PhotoFilename, PhotoOrigin)
+                        if PhotoOrigin != "" and PhotoOrigin != "external":
+                            goods_art_no, id = PhotoOrigin.split(",")
+                            await updateDataRecord(PhotoFilename, id)
+                        data = conn_manager.jsonMessage(
+                            code=0,
+                            msg=f"照片获取成功",
+                            data={"photo_file_name": PhotoFilename},
+                            msg_type="smart_shooter_photo_take",
+                        )
+                        await conn_manager.send_personal_message(data, websocket)
+                case "LiveviewUpdated":
+                    CameraLiveviewImage = msg.get("CameraLiveviewImage", None)
+                    # base64_to_image(CameraLiveviewImage, "liveview.jpg")
+                    # print("收到直播画面:CameraLiveviewImage")
+                    data = conn_manager.jsonMessage(
+                        code=1,
+                        msg=f"预览数据发送",
+                        data={"smart_shooter_preview": CameraLiveviewImage},
+                        msg_type="smart_shooter_enable_preview",
+                    )
+                    await conn_manager.send_personal_message(data, websocket)
+        smart_shooter.callback_listen = MsgCallback
+        async def runListen():
+            await smart_shooter.connect_listen()
+        await asyncio.gather(
+            handler_messages(), send_message(), runListen()
+        )
     except WebSocketDisconnect:
         # socket_manager.close()
         print("Client disconnected")