rambo 3 kuukautta sitten
vanhempi
commit
dbe8aa34be

+ 80 - 46
python/api.py

@@ -69,8 +69,12 @@ def parserGoodsDict2Aigc(return_data_check_before_detail):
 
 async def sendAsyncMessage(msg="", goods_arts=[], status="", msg_type="", data=None,progress=None):
     """异步发送消息"""
+    mapping = {"segment_progress":"抠图","scene_progress":"场景图","upper_footer_progress":"模特图","detail_progress":"详情页","upload_goods_progress":"上传第三方商品"}
     if progress is not None:
         progress["msg_type"] = msg_type
+        name = mapping.get(msg_type,None)
+        if name:
+            progress["name"] = name
     data = {
         "code": 0,
         "msg": msg,
@@ -591,6 +595,10 @@ async def handle_detail_background(
 ):
     goods_art_no_arrays = params.goods_art_no
     is_check = params.is_check
+    obj = None
+    token = "Bearer " + params.token
+    uuid = params.uuid
+    run_main = RunMain(obj, token, uuid)
     is_only_cutout = params.is_only_cutout  # 是否仅抠图
     online_stores = params.online_stores  # 上传第三方的店铺名称数组
     is_detail = params.is_detail  # 上传第三方的店铺名称数组
@@ -647,15 +655,26 @@ async def handle_detail_background(
                 )
                 if not resFlag:
                     raise UnicornException(path)
+        remote_data = run_main.data_mode_generate_detail.get_goods_art_no_info(goods_art_list=goods_art_no_arrays)
+        if  remote_data == {}:
+            raise UnicornException("所有货号在商品档案资料中不存在,请检查货号是否正确")
+        error_goods_art_no = []
+        for goods_art_no_check in goods_art_no_arrays:
+            check_item = remote_data.get(goods_art_no_check,None)
+            if not check_item:
+                error_goods_art_no.append(goods_art_no_check)
+        if len(error_goods_art_no) > 0:
+            raise UnicornException("以下货号在商品档案资料中不存在,请检查货号是否正确:{}".format(error_goods_art_no))
     except Exception as e:
         raise UnicornException(str(e))
+    
     progress = [{"msg_type":"segment_progress","name":"抠图","status":"等待处理","current":0,"total":0,"error":0}]
     if is_product_scene == 1:
         progress.append({"msg_type":"scene_progress","name":"场景图","status":"等待处理","current":0,"total":0,"error":0})
     if is_upper_footer == 1:
         progress.append({"msg_type":"upper_footer_progress","name":"模特图","status":"等待处理","current":0,"total":0,"error":0})
     if is_detail==1 or (params.excel_path != "" and params.excel_path != None):
-        progress.append({"msg_type":"detail_progress","name":"详情页(详情页切片、详情页拼接、详情页生成完成)","status":"等待处理","current":0,"total":0,"error":0})
+        progress.append({"msg_type":"detail_progress","name":"详情页","status":"等待处理","current":0,"total":0,"error":0})
     if len(online_stores) > 0:
         progress.append({"msg_type":"upload_goods_progress","name":"上传第三方商品","status":"等待处理","current":0,"total":0,"error":0})
     if is_check == 1:
@@ -826,10 +845,11 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                     }
                 )
         if len(move_folder_array.keys()) == len(goods_art_no_arrays):
-            progress = {"status":"抠图完成",
+            progress = {"status":"处理完成",
                     "current":len(goods_art_no_arrays),
                     "total":len(goods_art_no_arrays),
-                    "error":0}
+                    "error":0
+                    }
             await sendAsyncMessage(
                 msg="抠图完成",
                 data={"output_folder": handler_result_folder, "list": handler_result},
@@ -837,15 +857,6 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                 msg_type="segment_progress",
                 progress=progress
             )
-        if is_only_cutout == 1:
-            await sendAsyncMessage(
-                msg="处理结束",
-                data={"output_folder": handler_result_folder, "list": handler_result},
-                status="处理结束",
-                msg_type="detail_result_progress",
-            )
-            return True
-
         try:
             if is_product_scene == 1:
                 if product_scene_prompt == "" or product_scene_prompt == None:
@@ -880,7 +891,7 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                     product_scene_total_progress = len(goods_dict.keys())
                     product_scene_finish_progress = 0
                     product_scene_error_progress = 0
-                    product_scene_progress = {"status":"开始处理场景图", "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
+                    product_scene_progress = {"status":"正在处理", "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
                     print("product_scene_progress",goods_dict,product_scene_progress)
                     await sendAsyncMessage(
                         msg="开始处理场景图",
@@ -891,6 +902,15 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                     )
                     for goods_art_no in goods_dict.keys():
                         print("处理场景图", goods_art_no)
+                        product_scene_finish_progress+=1
+                        product_scene_progress = {"status":"正在处理","goods_art_no":goods_art_no, "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
+                        await sendAsyncMessage(
+                                msg="正在处理场景图",
+                                goods_arts=[goods_art_no],
+                                status="正在处理场景图",
+                                msg_type="scene_progress",
+                                progress=product_scene_progress
+                            )
                         goods_art_dict_info = goods_dict[goods_art_no]
                         first_goods_art_no_info = goods_art_dict_info.get("货号资料", [])[0]
                         first_pics = first_goods_art_no_info.get("pics")
@@ -918,8 +938,13 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                     "info": "场景图处理成功",
                                 }
                             )
-                            product_scene_finish_progress+=1
-                            product_scene_progress = {"status":"正在处理场景图", "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
+                            product_scene_progress = {
+                                "status":"处理成功", 
+                                "current":product_scene_finish_progress, 
+                                "total":product_scene_total_progress, 
+                                "error":product_scene_error_progress,
+                                "goods_art_no":goods_art_no,
+                                }
                             await sendAsyncMessage(
                                 msg="场景图处理完成",
                                 goods_arts=[goods_art_no],
@@ -936,8 +961,9 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                     "info": f"场景图处理失败:{e}",
                                 }
                             )
+                            product_scene_finish_progress -=1
                             product_scene_error_progress +=1
-                            product_scene_progress = {"status":"正在处理场景图", "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
+                            product_scene_progress = {"status":"处理失败","goods_art_no":goods_art_no, "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
                             await sendAsyncMessage(
                                 msg="场景图处理失败",
                                 goods_arts=[goods_art_no],
@@ -945,7 +971,7 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                 msg_type="scene_progress",
                                 progress=product_scene_progress
                             )
-                    product_scene_progress = {"status":"正在处理场景图", "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
+                    product_scene_progress = {"status":"处理完成", "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
                     await sendAsyncMessage(
                                 msg="场景图处理结束",
                                 goods_arts=[],
@@ -963,7 +989,7 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                     upper_footer_total_progress = len(goods_dict.keys())
                     upper_footer_finish_progress = 0
                     upper_footer_error_progress = 0
-                    upper_footer_progress = {"status":"开始处理模特图", "current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
+                    upper_footer_progress = {"status":"正在处理",  "current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
                     await sendAsyncMessage(
                         msg="开始处理模特图",
                         goods_arts=list(goods_dict.keys()),
@@ -972,6 +998,15 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                         progress=upper_footer_progress
                     )
                     for goods_art_no in goods_dict.keys():
+                        upper_footer_finish_progress+=1
+                        upper_footer_progress = {"status":"正在处理","goods_art_no":goods_art_no, "current":product_scene_finish_progress, "total":product_scene_total_progress, "error":product_scene_error_progress}
+                        await sendAsyncMessage(
+                                msg="正在处理模特图",
+                                goods_arts=[goods_art_no],
+                                status="正在处理模特图",
+                                msg_type="upper_footer_progress",
+                                progress=upper_footer_progress
+                            )
                         goods_art_dict_info = goods_dict[goods_art_no]
                         first_goods_art_no_info = goods_art_dict_info.get("货号资料", [])[0]
                         first_pics = first_goods_art_no_info.get("pics")
@@ -1001,8 +1036,7 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                     "info": "模特图处理成功",
                                 }
                             )
-                            upper_footer_finish_progress+=1
-                            upper_footer_progress = {"status":"正在处理模特图", "current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
+                            upper_footer_progress = {"status":"处理完成", "goods_art_no": goods_art_no,"current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
                             await sendAsyncMessage(
                                 msg="模特图处理成功",
                                 goods_arts=[goods_art_no],
@@ -1020,7 +1054,7 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                 }
                             )
                             upper_footer_error_progress+=1
-                            upper_footer_progress = {"status":"正在处理模特图", "current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
+                            upper_footer_progress = {"status":"处理失败", "goods_art_no": goods_art_no,"current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
                             await sendAsyncMessage(
                                 msg="模特图处理失败",
                                 goods_arts=[goods_art_no],
@@ -1028,12 +1062,12 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                 msg_type="upper_footer_progress",
                                 progress=upper_footer_progress
                             )
-                    upper_footer_progress = {"status":"模特图处理结束", "current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
+                    upper_footer_progress = {"status":"处理完成", "current":upper_footer_finish_progress, "total":upper_footer_total_progress, "error":upper_footer_error_progress}
                     await sendAsyncMessage(
                                 msg="模特图处理结束",
                                 goods_arts=[],
                                 status="模特图处理结束",
-                                msg_type="scene_progress",
+                                msg_type="upper_footer_progress",
                                 progress=upper_footer_progress
                             )
                     if new_goods_dict is not None or new_goods_dict != {}:
@@ -1048,17 +1082,17 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                         msg_type="detail_result_progress",
                     )
                     return True
-                detail_total_progress = len(goods_dict.keys())
-                detail_finish_progress = 0
+                # detail_total_progress = len(goods_dict.keys())
+                # detail_finish_progress = 0
                 detail_error_progress = 0
-                detail_progress = {"status":"开始处理详情页", "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
-                await sendAsyncMessage(
-                    msg="开始处理详情页",
-                    goods_arts=[],
-                    status="开始处理详情页",
-                    msg_type="detail_progress",
-                    progress=detail_progress
-                )
+                # detail_progress = {"status":"开始处理", "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
+                # await sendAsyncMessage(
+                #     msg="开始处理详情页",
+                #     goods_arts=[],
+                #     status="开始处理详情页",
+                #     msg_type="detail_progress",
+                #     progress=detail_progress
+                # )
                 check_for_detail_first_res = run_main.check_for_detail_first_call_back(
                     return_data_check_before_detail
                 )
@@ -1069,16 +1103,16 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                     except:
                         config_data = result
                 if config_data["sign_text"] == "已结束详情处理":
-                    detail_finish_progress = len(config_data["success_handler"])
-                    detail_error_progress = detail_total_progress - detail_finish_progress
-                    detail_progress = {"status":"详情页处理结束", "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
-                    await sendAsyncMessage(
-                        msg="详情页处理结束",
-                        goods_arts=[],
-                        status="详情页处理结束",
-                        msg_type="detail_progress",
-                        progress=detail_progress
-                    )
+                    # detail_finish_progress = len(config_data["success_handler"])
+                    # detail_error_progress = detail_total_progress - detail_finish_progress
+                    # detail_progress = {"status":"处理完成", "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
+                    # await sendAsyncMessage(
+                    #     msg="详情页处理结束",
+                    #     goods_arts=[],
+                    #     status="详情页处理结束",
+                    #     msg_type="detail_progress",
+                    #     progress=detail_progress
+                    # )
                     print("config_data", config_data)
                     out_put_dir = config_data.get("out_put_dir")
                     if out_put_dir == None:
@@ -1124,10 +1158,10 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                             result_goods_no_dict[goods_no_dict][
                                                 "detail_path"
                                             ] = f"{detail_path_replace}/详情页.jpg"
-                                upload_total_progress = len(goods_dict.keys())
+                                upload_total_progress = len(result_goods_no_dict.keys())
                                 upload_finish_progress = 0
                                 upload_error_progress = 0
-                                upload_progress = {"status":"开始上传商品数据", "current":upload_finish_progress, "total":upload_total_progress, "error":upload_error_progress}
+                                upload_progress = {"status":"开始处理", "current":upload_finish_progress, "total":upload_total_progress, "error":upload_error_progress}
                                 await sendAsyncMessage(
                                     msg="开始上传商品数据",
                                     goods_arts=[],
@@ -1145,7 +1179,7 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                                 upload_finish_progress = upload_total_progress
                                 if upload_error_progress > 0:
                                     upload_finish_progress = 0
-                                upload_progress = {"status":"开始上传商品数据", "current":upload_finish_progress, "total":upload_total_progress, "error":upload_error_progress}
+                                upload_progress = {"status":"处理完成", "current":upload_finish_progress, "total":upload_total_progress, "error":upload_error_progress}
                                 await sendAsyncMessage(
                                     msg="商品上传第三方成功",
                                     goods_arts=[],

+ 56 - 55
python/custom_plugins/plugins_mode/detail_generate_base.py

@@ -50,28 +50,29 @@ def _init_message_thread():
 _init_message_thread()
 
 
-def sendMessageAsync(code=0, msg="开始处理详情", data=None, msg_type="detail_progress"):
-    """异步发送消息"""
-
-    def _send_in_thread():
-        # 在消息线程中调度任务
-        future = asyncio.run_coroutine_threadsafe(
-            sendSocketMessage(
-                code=code,
-                msg=msg,
-                data=data,
-                msg_type=msg_type,
-            ),
-            _message_loop,
-        )
-        # 可选:等待结果或设置超时
-        try:
-            result = future.result(timeout=5.0)
-        except THTimeoutError:
-            print("消息发送超时")
-
-    # 在线程中执行异步任务的调度
-    _send_in_thread()
+# def sendMessageAsync(code=0, msg="开始处理详情", data=None, msg_type="detail_progress",progress=None):
+#     """异步发送消息"""
+#     if progress is None:
+#         data["progress"] = progress
+#     def _send_in_thread():
+#         # 在消息线程中调度任务
+#         future = asyncio.run_coroutine_threadsafe(
+#             sendSocketMessage(
+#                 code=code,
+#                 msg=msg,
+#                 data=data,
+#                 msg_type=msg_type,
+#             ),
+#             _message_loop,
+#         )
+#         # 可选:等待结果或设置超时
+#         try:
+#             result = future.result(timeout=5.0)
+#         except THTimeoutError:
+#             print("消息发送超时")
+
+#     # 在线程中执行异步任务的调度
+#     _send_in_thread()
 
 
 class DetailBase(object):
@@ -217,17 +218,17 @@ class DetailBase(object):
                                     new_path,
                                     "NUM{}".format(i["number"]),
                                 )
-        sendMessageAsync(
-            code=0,
-            msg="详情页生成完成",
-            msg_type="detail_progress",
-            data={
-                "goods_no": self.goods_no,
-                "temp_name": self.template_name,
-                "status": "已完成",
-                "goods_art_nos": self.goods_art_nos,
-            },
-        )
+        # sendMessageAsync(
+        #     code=0,
+        #     msg="详情页生成完成",
+        #     msg_type="detail_progress",
+        #     data={
+        #         "goods_no": self.goods_no,
+        #         "temp_name": self.template_name,
+        #         "status": "已完成",
+        #         "goods_art_nos": self.goods_art_nos,
+        #     },
+        # )
         scp_path = "{out_put_dir}/{goods_no}".format(
             out_put_dir=self.out_put_dir, goods_no=self.goods_no
         )
@@ -250,17 +251,17 @@ class DetailBase(object):
     # 生成各个详情图切片
     def deal_details(self):
         detailed_images = []
-        sendMessageAsync(
-            code=0,
-            msg="正在生成详情页切片",
-            msg_type="detail_progress",
-            data={
-                "goods_no": self.goods_no,
-                "temp_name": self.template_name,
-                "status": "进行中",
-                "goods_art_nos": self.goods_art_nos,
-            },
-        )
+        # sendMessageAsync(
+        #     code=0,
+        #     msg="正在生成详情页切片",
+        #     msg_type="detail_progress",
+        #     data={
+        #         "goods_no": self.goods_no,
+        #         "temp_name": self.template_name,
+        #         "status": "进行中",
+        #         "goods_art_nos": self.goods_art_nos,
+        #     },
+        # )
         for index, func in enumerate(self.deal_pic_func_list):
             image_pp = func()
             if not self.assigned_page_list:
@@ -276,17 +277,17 @@ class DetailBase(object):
 
     # 生成拼接的图片
     def generate_spliced_picture(self):
-        sendMessageAsync(
-            code=0,
-            msg="正在生成详情拼接图",
-            msg_type="detail_progress",
-            data={
-                "goods_no": self.goods_no,
-                "temp_name": self.template_name,
-                "status": "进行中",
-                "goods_art_nos": self.goods_art_nos,
-            },
-        )
+        # sendMessageAsync(
+        #     code=0,
+        #     msg="正在生成详情拼接图",
+        #     msg_type="detail_progress",
+        #     data={
+        #         "goods_no": self.goods_no,
+        #         "temp_name": self.template_name,
+        #         "status": "进行中",
+        #         "goods_art_nos": self.goods_art_nos,
+        #     },
+        # )
         detail_path = "{out_put_dir}/{goods_no}/详情页切片".format(
             out_put_dir=self.out_put_dir, goods_no=self.goods_no
         )

+ 44 - 24
python/service/base_deal.py

@@ -33,15 +33,16 @@ def sendAsyncMessage(msg="", goods_arts=[], status="",progress={}):
         "data": {
             "status": status,
             "goods_art_nos": goods_arts,
-            "progress":{
+        },
+        "progress":{
                 "msg_type":"segment_progress",
                 "name":"抠图",
+                "goods_art_no":progress.get("goods_art_no",""),
                 "status":progress.get("status"),
                 "current":progress.get("current",0),
                 "total":progress.get("total",0),
                 "error":progress.get("error",0)
-            }
-        },
+            },
         "msg_type": "segment_progress",
     }
     message_queue.put_nowait(data)
@@ -535,6 +536,12 @@ class BaseDealImage(object):
             images = [x for x in self.list_dir("{}/原始图".format(folder_path))]
             cutImageList = []
             goods_art_floder_name = goods_art_no_folder_data["folder_name"]
+            progress = {"status":"正在处理",
+                "current":finish_progress,
+                "total":total_progress,
+                "error":error_progress,
+                "goods_art_no":goods_art_floder_name
+                }
             sendAsyncMessage(
                 msg="正在抠图",
                 goods_arts=[goods_art_floder_name],
@@ -606,16 +613,27 @@ class BaseDealImage(object):
                                 continue
                             else:
                                 callback_func("货号图{} 抠图完成~".format(file_name))
-            if goods_art_floder_name not in error_goods_art_no_folder:
-                finish_progress+=1
-                progress = {"status":"正在处理",
+            progress = {
+                "status":"处理成功",
                 "current":finish_progress,
                 "total":total_progress,
-                "error":error_progress}
+                "error":error_progress,
+                "goods_art_no":goods_art_floder_name
+                }
+            if goods_art_floder_name not in error_goods_art_no_folder:
+                finish_progress+=1
                 sendAsyncMessage(
-                    msg="抠图完成",
+                    msg="处理成功",
                     goods_arts=[goods_art_floder_name],
-                    status="抠图完成",
+                    status="处理成功",
+                    progress=progress
+                )
+            else:
+                progress["status"] = "处理失败"
+                sendAsyncMessage(
+                    msg="处理失败",
+                    goods_arts=[goods_art_floder_name],
+                    status="处理失败",
                     progress=progress
                 )
             if cutout_mode == "2":
@@ -632,10 +650,12 @@ class BaseDealImage(object):
                             error_goods_art_no_folder.append(folder_path)
                         break
         error_progress = len(error_goods_art_no_folder)
-        progress = {"status":"抠图完成",
+        progress = {
+                "status":"抠图完成",
                 "current":finish_progress,
                 "total":total_progress,
-                "error":error_progress}
+                "error":error_progress
+                }
         if error_goods_art_no_folder:
             print("以下货号抠图失败~\n {}".format(error_goods_art_no_folder))
             callback_func("以下货号抠图失败~\n {}".format(error_goods_art_no_folder))
@@ -643,22 +663,22 @@ class BaseDealImage(object):
                 msg=f"抠图处理失败",
                 goods_arts=error_goods_art_no_folder,
                 status="抠图处理失败",
-                progress=progress
+                # progress=progress
             )
         else:
+            # sendAsyncMessage(
+            #     msg=f"完成抠图处理",
+            #     goods_arts=goods_art_nos,
+            #     status="完成抠图处理",
+            #     # progress=progress
+            # )
+            # callback_func("完成抠图处理")
             sendAsyncMessage(
-                msg=f"完成抠图处理",
-                goods_arts=goods_art_nos,
-                status="完成抠图处理",
-                progress=progress
-            )
-            callback_func("完成抠图处理")
-        sendAsyncMessage(
-                    msg="抠图完成",
-                    goods_arts=[],
-                    status="抠图完成",
-                    progress=progress
-                )
+                        msg="抠图完成",
+                        goods_arts=[],
+                        status="抠图完成",
+                        progress=progress
+                    )
 
     def checkCutoutImage(self, image_dir: str, todo_goods_art_no_folder_name_list=None):
         """

+ 77 - 11
python/service/run_main.py

@@ -22,7 +22,7 @@ from .base_deal import BaseDealImage
 from middleware import UnicornException
 from settings import recordDataPoint
 import asyncio
-
+from utils.common import message_queue
 
 class RunMain:
     # run_end_sign = Signal(dict)
@@ -522,13 +522,7 @@ class RunMain:
         _result = {"code": 99, "message": "无法解析到数据,请检查登录企业"}
         print("is_use_excel", is_use_excel)
         if not is_use_excel:
-            if settings.PROJECT == "红蜻蜓":
-                # goods_no_dict输出为文件夹下涉及到的所有款为key的字典,后续通过解析字典,进行提取对应文件夹
-                _result = self.data_mode_generate_detail.get_basic_goods_art_data_by_hqt_and_hlm(
-                    folder_name_list
-                )
-
-            elif settings.PROJECT == "惠利玛":
+            if settings.PROJECT == "惠利玛":
                 if settings.Company:
                     if "惠利玛" in settings.Company:
                         _result = self.data_mode_generate_detail.get_basic_goods_art_data_by_hqt_and_hlm(
@@ -790,12 +784,44 @@ class RunMain:
 
         return_data["code"] = 0
         return return_data
-
+    def sendAsyncMessage(self,msg="", goods_arts=[], status="",progress={}):
+        """异步发送消息"""
+        data = {
+            "code": 0,
+            "msg": msg,
+            "status": 2,
+            "data": {
+                "status": status,
+                "goods_art_nos": goods_arts,
+            },
+            "progress":{
+                    "msg_type":"detail_progress",
+                    "name":"详情页",
+                    "goods_art_no":progress.get("goods_art_no"),
+                    "status":progress.get("status"),
+                    "current":progress.get("current",0),
+                    "total":progress.get("total",0),
+                    "error":progress.get("error",0)
+                },
+            "msg_type": "detail_progress",
+        }
+        message_queue.put_nowait(data)
     def move_error_folders(self, one_path, target_folder, message=""):
         if os.path.exists(one_path):
             check_path(target_folder)
             move_folders(path_list=[one_path], target_folder=target_folder)
-
+    '''
+    total_progress = len(all_goods_art_no_folder_data)
+        finish_progress = 0
+        error_progress = 0
+        progress = {"status":"正在处理",
+                "current":finish_progress,
+                "total":total_progress,
+                "error":error_progress}
+        sendAsyncMessage(
+            msg="开始处理抠图", goods_arts=goods_art_nos, status="开始处理",progress=progress
+        )
+    '''
     def check_for_detail_first_call_back(self, data):
         # 首次数据校验的信息返回
         # self.show_message(text="22222222222222222222222")
@@ -932,9 +958,27 @@ class RunMain:
 
         all_detail_path_list = []
         out_put_dir_resp = ""
+        detail_total_progress = len(finally_goods_no_need_temps.items())
+        detail_finish_progress = 0
+        detail_error_progress = 0
+        detail_progress = {"status":"正在处理", "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
+        self.sendAsyncMessage(
+            msg="正在处理",
+            goods_arts=[],
+            status="正在处理",
+            progress=detail_progress
+        )
         for goods_no, temp_name_list in finally_goods_no_need_temps.items():
             for _temp_name in temp_name_list:
                 try:
+                    detail_finish_progress+=1
+                    detail_progress = {"status":"正在处理","goods_art_no":goods_no, "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
+                    self.sendAsyncMessage(
+                        msg="正在处理",
+                        goods_arts=[],
+                        status="正在处理",
+                        progress=detail_progress
+                    )
                     # if _temp_name != "xiaosushuoxie-4":
                     #     continue
                     assigned_page_list = []
@@ -973,6 +1017,13 @@ class RunMain:
                     config_data["success_handler"].append(
                         {"goods_art_no": goods_no, "success": True, "info": "处理成功"}
                     )
+                    detail_progress = {"status":"处理成功","goods_art_no":goods_no, "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
+                    self.sendAsyncMessage(
+                        msg="开始处理详情页",
+                        goods_arts=[],
+                        status="开始处理详情页",
+                        progress=detail_progress
+                    )
                     recordDataPoint(
                         token=self.token,
                         uuid=self.uuid,
@@ -980,6 +1031,14 @@ class RunMain:
                         data={"goods_art_no": goods_no, "temp_name": _temp_name},
                     )
                 except BaseException as e:
+                    detail_error_progress+=1
+                    detail_progress = {"status":"处理失败","goods_art_no":goods_no, "current":detail_finish_progress, "total":detail_total_progress, "error":detail_error_progress}
+                    self.sendAsyncMessage(
+                        msg="处理失败",
+                        goods_arts=[],
+                        status="处理失败",
+                        progress=detail_progress
+                    )
                     self.show_progress_detail(
                         {
                             "goods_art_no": goods_no,
@@ -1025,7 +1084,14 @@ class RunMain:
         print("out_put_dir_resp", out_put_dir_resp)
         # 打开文件夹
         # os.startfile(out_put_dir)
-
+        detail_finish_progress = self.total_num - self.fail_num
+        detail_progress = {"status":"处理完成", "current":detail_finish_progress, "total":self.total_num, "error":self.fail_num}
+        self.sendAsyncMessage(
+            msg="处理完成",
+            goods_arts=[],
+            status="处理完成",
+            progress=detail_progress
+        )
         return config_data
 
     def detail_run_by_thread11111(