rambo hace 8 meses
padre
commit
88311fad65
Se han modificado 4 ficheros con 71 adiciones y 28 borrados
  1. 3 0
      python/api.py
  2. 23 4
      python/databases.py
  3. 1 1
      python/docs/socket命令.md
  4. 44 23
      python/mcu/RemoteControlV2.py

+ 3 - 0
python/api.py

@@ -236,6 +236,7 @@ def get_photo_records(page: int=1,size:int=5):
                 "items": list_item,
             }
         )
+    session.close()
     return {
         "code": 0,
         "msg": "",
@@ -249,6 +250,7 @@ def get_photo_records(goods_art_no: str = None):
     session = SqlQuery()
     photos = CRUD(PhotoRecord)
     items = photos.read_all(session, conditions={"goods_art_no": goods_art_no})
+    session.close()
     return {
         "code": 0,
         "msg": "",
@@ -263,6 +265,7 @@ def delect_goods_arts(params: PhotoRecordDelete):
     photos = CRUD(PhotoRecord)
     for item in params.goods_art_nos:
         photos.deleteConditions(session, conditions={"goods_art_no": item})
+    session.close()
     return {
         "code": 0,
         "msg": "操作成功",

+ 23 - 4
python/databases.py

@@ -11,7 +11,14 @@ from model import DeviceConfig, PhotoRecord
 # 创建SQLite数据库引擎
 sqlite_file_name = "database.db"
 sqlite_url = f"sqlite:///{sqlite_file_name}"
-engine = create_engine(sqlite_url, echo=True)
+engine = create_engine(
+    sqlite_url,
+    echo=False,
+    pool_size=10,
+    max_overflow=20,
+    pool_timeout=30,
+    pool_recycle=1800,
+)
 
 # 创建表
 def create_all_database():
@@ -19,7 +26,10 @@ def create_all_database():
 # 创建会话
 def __get_session():
     with Session(engine) as session:
-        yield session
+        try:
+            yield session
+        finally:
+            session.close()
 
 
 def batch_insert_device_configs(session: Session, data_list: list):
@@ -28,6 +38,7 @@ def batch_insert_device_configs(session: Session, data_list: list):
         device_config = DeviceConfig(**data)
         session.add(device_config)
     session.commit()
+    session.close()
 
 
 def insert_photo_records(image_deal_mode: int, goods_art_no: str, image_index:int):
@@ -55,6 +66,7 @@ class CRUD:
         session.add(db_obj)
         session.commit()
         session.refresh(db_obj)
+        session.close()
         return db_obj
 
     def read(
@@ -72,7 +84,9 @@ class CRUD:
                 query = query.order_by(asc(getattr(self.model, order_by)))
             else:
                 query = query.order_by(desc(getattr(self.model, order_by)))
-        return session.exec(query).first()
+        data =  session.exec(query).first()
+        session.close()
+        return data
 
     def read_all(
         self,
@@ -89,7 +103,9 @@ class CRUD:
                 query = query.order_by(asc(getattr(self.model, order_by)))
             else:
                 query = query.order_by(desc(getattr(self.model, order_by)))
-        return session.exec(query).all()
+        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)
@@ -99,6 +115,7 @@ class CRUD:
             setattr(db_obj, key, value)
         session.commit()
         session.refresh(db_obj)
+        session.close()
         return db_obj
 
     def deleteConditions(
@@ -121,12 +138,14 @@ class CRUD:
         for obj in objects_to_delete:
             session.delete(obj)
         session.commit()
+        session.close()
         return True
 
     def delete(self, session: Session, obj_id: int):
         db_obj = session.get(self.model, obj_id)
         session.delete(db_obj)
         session.commit()
+        session.close()
 
 
 def SqlQuery():

+ 1 - 1
python/docs/socket命令.md

@@ -134,7 +134,7 @@ _(该命令用于单独自定义配置中某一项的单独调整测试,不进
 #### 消息示例
 * data中的子data参数释义:
     * action:【执行左脚程序】或【执行右脚程序】
-    * goods_art_no :扫描到的货号
+    * goods_art_no :扫描到的货号,当货号为空时代表用户未扫码,直接按遥控器的左右操作,需要前端判断用户是否在前端页面填写了货号,或者提醒用户填写货号
 * msg_type:当该字段为blue_tooth_scan时,前端可直接解析得到data数据包,将数据直接发送给socket服务端即可【执行拍摄任务】
 ```python
 {

+ 44 - 23
python/mcu/RemoteControlV2.py

@@ -182,6 +182,45 @@ class RemoteControlV2(BaseClass):
         self.windows.playsound.tips_type = tip
         self.windows.playsound.start()
 
+    def handlerAction(self, button_value):
+        '''处理拍照动作按键[左 右]'''
+        control_program = "执行左脚程序" if button_value == 1 else "执行右脚程序"
+        if self.goods_art_no == None or self.goods_art_no =="":
+            input_data = {
+                        "data": {
+                            "action": control_program,
+                            "goods_art_no": "",
+                        },
+                        "type": "run_mcu",
+                    }
+            self.msg_type = "blue_tooth_scan"
+            self.sendSocketMessage(
+                        code=0,
+                        msg=f"准备执行[{control_program}]",
+                        data=input_data,
+                        device_status=2,
+                    )
+            self.msg_type = "blue_tooth"
+            return
+        input_data = {
+                    "data": {
+                        "action": control_program,
+                        "goods_art_no": self.goods_art_no,
+                    },
+                    "type": "run_mcu",
+                }
+        self.msg_type = "blue_tooth_scan"
+        self.sendSocketMessage(
+                    code=0,
+                    msg=f"准备执行[{control_program}]",
+                    data=input_data,
+                    device_status=2,
+                )
+        self.goods_art_no = None
+        self.msg_type = "blue_tooth"
+    def handlerTakePhoto(self):
+        """处理单独拍照"""
+        pass
     def analysis_received_data(self):
         if not self.connect_state:
             return
@@ -222,29 +261,11 @@ class RemoteControlV2(BaseClass):
             if button_value in [1,2]:
                 # 扫描货号
                 print("收到货号信息", self.goods_art_no)
-                if self.goods_art_no == None or self.goods_art_no =="":
-                    self.sendSocketMessage(
-                        code=1, msg="货号信息不能为空", data=None, device_status=-1
-                    )
-                    return
-                control_program = (
-                    "执行左脚程序" if button_value == 1 else "执行右脚程序"
-                )
-                input_data = {
-                    "data": {
-                        "action": control_program,
-                        "goods_art_no": self.goods_art_no,
-                    },
-                    "type": "run_mcu",
-                }
-                self.msg_type = "blue_tooth_scan"
-                self.sendSocketMessage(
-                    code=0,
-                    msg=f"准备执行[{control_program}]",
-                    data=input_data,
-                    device_status=2,
-                )
-                self.msg_type = "blue_tooth"
+                self.handlerAction(button_value)
+            if button_value in [3]:
+                # 处理单拍
+                print("收到货号信息", self.goods_art_no)
+                self.handlerTakePhoto()
             self.sendSocketMessage(code=0, msg="", data=message, device_status=2)
             if settings.IS_DEBUG:
                 print("收到按键", button_value)