Jelajahi Sumber

独立抠图任务-socket处理

rambo 5 bulan lalu
induk
melakukan
930a2a8288

+ 0 - 5
python/api.py

@@ -310,11 +310,6 @@ async def handle_detail(request: Request, params: HandlerDetail):
         params.excel_path = ""
         params.excel_path = ""
     if params.excel_path != "" and params.excel_path != None:
     if params.excel_path != "" and params.excel_path != None:
         return await fromExcelHandler(params)
         return await fromExcelHandler(params)
-    # goods_art_list = run_main.data_mode_generate_detail.get_goods_art_no_info(
-    #     goods_art_list=goods_art_no_arrays
-    # )
-    # goods_art_nos = []
-    # goods_art_list_dict = group_by_style_number(goods_art_list)
     path = ""
     path = ""
     limit_path = "output/{}".format(
     limit_path = "output/{}".format(
         time.strftime("%Y-%m-%d", time.localtime(time.time()))
         time.strftime("%Y-%m-%d", time.localtime(time.time()))

+ 62 - 0
python/docs/socket命令.md

@@ -1011,4 +1011,66 @@ _(该命令用于单独自定义配置中某一项的单独调整测试,不进
     "msg_type": "detail_progress"
     "msg_type": "detail_progress"
 }
 }
 ```
 ```
+##### 发送独立抠图命令任务
+* data:{}
+    * token:用户token信息
+    * goods_art_no:货号-数组
+    * uuid:前端传递uuid
+* msg_type:固定为[segment_progress]
+###### 请求示例
+```json
+{
+    "type": "segment_progress",
+    "data": {
+        "token": "",
+        "uuid": "",
+        "goods_art_no": []
+    }
+}
+```
+###### 响应示例-成功
+```json
+{
+    "code": 0,
+    "msg": "开始处理抠图",
+    "status": 2,
+    "data": {
+        "status": "进行中",
+        "goods_art_nos": [
+            "AQN1411322",
+            "B411351"
+        ]
+    },
+    "msg_type": "segment_progress"
+}
+```
+```json
+{
+    "code": 0,
+    "msg": "抠图结束",
+    "status": 2,
+    "data": {
+        "status": "已完成",
+        "goods_art_nos": [
+            "AQN1411322",
+            "B411351"
+        ]
+    },
+    "msg_type": "segment_progress"
+}
+```
+###### 响应示例-失败-异常
+* code:1
+    * 异常情况下code会固定为1
+* msg:异常输出得错误内容;前端需要判断code是否等于1,如果等于1则代表异常,输出msg得内容即可,因为是异步执行,也可以忽略异常,不做处理
+* msg_type:固定为[segment_progress]
+```json
+{
+    "code": 1,
+    "msg": "异常输出得错误内容",
+    "status": 2,
+    "data": null,
+    "msg_type": "segment_progress"
+}
+```
 ##### 未完待续.....
 ##### 未完待续.....

+ 115 - 2
python/sockets/message_handler.py

@@ -7,7 +7,13 @@ from databases import DeviceConfig, SqlQuery, CRUD, PhotoRecord, SysConfigs
 from mcu.capture.module_digicam import DigiCam
 from mcu.capture.module_digicam import DigiCam
 from mcu.capture.smart_shooter_class import SmartShooter
 from mcu.capture.smart_shooter_class import SmartShooter
 from models import RecordUpdate
 from models import RecordUpdate
-
+from service.run_main import RunMain
+from utils.utils_func import check_path
+import time, shutil, os
+from service.base import check_move_goods_art_no_folder
+from service.deal_image import DealImage
+import settings
+from middleware import UnicornException
 
 
 # socket消息发送逻辑处理方法
 # socket消息发送逻辑处理方法
 async def handlerSend(
 async def handlerSend(
@@ -310,7 +316,8 @@ async def handlerSend(
                     goods_art_no=goods_art_no,
                     goods_art_no=goods_art_no,
                     is_af=is_af,
                     is_af=is_af,
                 ),
                 ),
-                name="smart_shooter_photo_take",)
+                name="smart_shooter_photo_take",
+            )
             await asyncio.sleep(2.5)
             await asyncio.sleep(2.5)
             await device_ctrl.controlDevice("laser_position", 1)
             await device_ctrl.controlDevice("laser_position", 1)
         case "digicam_take_picture":
         case "digicam_take_picture":
@@ -339,6 +346,112 @@ async def handlerSend(
                 ),
                 ),
                 name="sendCommand",
                 name="sendCommand",
             )
             )
+        case "segment_progress":
+            msg_type = "segment_progress"
+            obj = None
+            token = data.get("token", "")
+            token = "Bearer " + token
+            uuid = data.get("uuid", "")
+            run_main = RunMain(obj, token, uuid)
+            goods_art_no_arrays = data.get("goods_art_no", [])
+            limit_path = "output/{}".format(
+                time.strftime("%Y-%m-%d", time.localtime(time.time()))
+            )
+            check_path(limit_path)
+            # 该数组表示是否需要后面的移动文件夹操作,减少重复抠图,提升抠图时间和速度
+            move_folder_array = check_move_goods_art_no_folder(
+                "output", goods_art_no_arrays, limit_path
+            )
+            for goods_art_no in goods_art_no_arrays:
+                session = SqlQuery()
+                pr = CRUD(PhotoRecord)
+                images = pr.read_all(session, conditions={"goods_art_no": goods_art_no})
+                if not images:
+                    data = manager.jsonMessage(
+                        code=1,
+                        msg=f"没有可用货号数据",
+                        msg_type=msg_type,
+                    )
+                    await manager.send_personal_message(data, websocket)
+                    return
+                if move_folder_array.get(goods_art_no) == None:
+                    image_dir = "{}/data/".format(os.getcwd()).replace("\\", "/")
+                    check_path(image_dir)
+                    for idx, itemImg in enumerate(images):
+                        if itemImg.image_path == "" or itemImg.image_path == None:
+                            data = manager.jsonMessage(
+                                code=1,
+                                msg=f"货号【{goods_art_no}】存在没有拍摄完成的图片,请重拍或删除后重试",
+                                msg_type=msg_type,
+                            )
+                            await manager.send_personal_message(data, websocket)
+                            return
+                        new_file_name = (
+                            str(itemImg.goods_art_no) + "_" + str(idx) + ".jpg"
+                        )
+                        if not os.path.exists(
+                            image_dir + "/" + os.path.basename(new_file_name)
+                        ):
+                            shutil.copy(itemImg.image_path, image_dir + new_file_name)
+                    dealImage = DealImage(image_dir)
+                    resFlag, path = dealImage.dealMoveImage(
+                        image_dir=image_dir,
+                        callback_func=None,
+                        goods_art_no=goods_art_no,
+                    )
+                    if not resFlag:
+                        # path
+                        data = manager.jsonMessage(
+                            code=1,
+                            msg=f"抠图操作异常,请检查目录是否存在,或者权限不足",
+                            msg_type=msg_type,
+                        )
+                        await manager.send_personal_message(data, websocket)
+                        return
+            # try:
+            cutOutMode = (
+                "1"
+                if settings.getSysConfigs("other_configs", "cutout_mode", "普通抠图")
+                == "普通抠图"
+                else "2"
+            )
+            config_data = {
+                "image_dir": limit_path,
+                "image_order": ("俯视,侧视,后跟,鞋底,内里"),
+                "goods_art_no": "",
+                "goods_art_nos": goods_art_no_arrays,
+                "is_check_number": False,
+                "resize_image_view": "后跟",
+                "cutout_mode": cutOutMode,
+                "logo_path": "",
+                "special_goods_art_no_folder_line": "",
+                "is_use_excel": False,  # 是否使用excel
+                "excel_path": "",  # excel路径
+                "is_check_color_is_all": False,
+                "cutout_is_pass": True,
+                "assigned_page_dict": {},
+                "detail_is_pass": True,
+                "upload_is_pass": False,
+                "upload_is_enable": settings.IS_UPLOAD_HLM,  # 是否上传到惠利玛商品库,通过config.ini得is_upload开启
+                "is_filter": False,
+                "temp_class": {},
+                "temp_name": "",
+                "temp_name_list": [],
+                "target_error_folder": f"{limit_path}/软件-生成详情错误",
+                "success_handler": [],
+            }
+            return_data = run_main.check_before_cutout(config_data)
+            loop = asyncio.get_event_loop()
+            try:
+                await run_main.check_for_cutout_image_first_call_back(return_data)
+            except UnicornException as e:
+                data = manager.jsonMessage(
+                    code=1,
+                    msg=e.msg,
+                    msg_type=msg_type,
+                )
+                await manager.send_personal_message(data, websocket)
+                return
         case _:
         case _:
             data = manager.jsonMessage(code=1, msg="未知消息")
             data = manager.jsonMessage(code=1, msg="未知消息")
             await manager.send_personal_message(data, websocket)
             await manager.send_personal_message(data, websocket)

+ 1 - 1
python/sockets/socket_server.py

@@ -167,7 +167,7 @@ async def send_message(websocket):
             if websocket.client_state.name != "CONNECTED":
             if websocket.client_state.name != "CONNECTED":
                 print("WebSocket连接已断开,停止发送消息")
                 print("WebSocket连接已断开,停止发送消息")
                 break
                 break
-            print("发送消息中。。。。。")
+            print("发送消息中。。。。。", message)
             # 发送消息
             # 发送消息
             await websocket.send_json(message)
             await websocket.send_json(message)
             message_queue.task_done()
             message_queue.task_done()