浏览代码

目录结构

rambo 1 月之前
父节点
当前提交
4e21a28de5
共有 3 个文件被更改,包括 90 次插入47 次删除
  1. 47 28
      python/api.py
  2. 41 17
      python/custom_plugins/plugins_mode/detail_generate_base.py
  3. 2 2
      python/service/run_main.py

+ 47 - 28
python/api.py

@@ -61,6 +61,7 @@ def log_exception_with_context(context_message=""):
 
 def parserGoodsDict2Aigc(return_data_check_before_detail):
     """获取商品组装数据"""
+    print("获取商品组装数据===========>return_data_check_before_detail",return_data_check_before_detail)
     goods_no_dict = return_data_check_before_detail.get("data", {}).get(
         "goods_no_dict", {}
     )
@@ -327,6 +328,7 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
             return_data_check_before_detail = await _process_model_images(
                 aigc_clazz, run_main, return_data_check_before_detail, upper_footer_params
             )
+        current_day = time.strftime("%Y-%m-%d", time.localtime(time.time()))
         # 处理详情页
         if is_detail == 1:
             handler_result_folder, handler_result= await _process_detail_pages(
@@ -341,14 +343,14 @@ async def process_handle_detail(request: Request, params: HandlerDetail):
                 )
             await sendAsyncMessage(
                 msg="处理结束",
-                data={"output_folder": handler_result_folder, "list": handler_result},
+                data={"output_folder": f"{handler_result_folder}/{current_day}", "list": handler_result},
                 status="处理结束",
                 msg_type="detail_result_progress",
             )
         else:
             await sendAsyncMessage(
                 msg="处理结束",
-                data={"output_folder": handler_result_folder, "list": handler_result},
+                data={"output_folder": f"{handler_result_folder}/{current_day}", "list": handler_result},
                 status="处理结束",
                 msg_type="detail_result_progress",
             )
@@ -476,7 +478,7 @@ async def _build_config_data(params, goods_art_no_arrays):
         "is_check_color_is_all": False,
         "cutout_is_pass": True,
         "assigned_page_dict": {},
-        "detail_is_pass": True,
+        "detail_is_pass": False,
         "upload_is_pass": False,
         "upload_is_enable": False,
         "is_filter": False,
@@ -510,8 +512,8 @@ async def _process_cutout(run_main, config_data, goods_art_no_arrays, move_folde
     cutout_res = run_main.check_for_cutout_image_first_call_back(return_data)
     
     if cutout_res:
-        sys_path = format(os.getcwd()).replace("\\", "/")
-        handler_result_folder = f"{sys_path}/{config_data['image_dir']}"
+        # sys_path = format(os.getcwd()).replace("\\", "/")
+        handler_result_folder = f"{config_data['image_dir']}"
         
         for goods_art_item in goods_art_no_arrays:
             handler_result.append({
@@ -521,13 +523,16 @@ async def _process_cutout(run_main, config_data, goods_art_no_arrays, move_folde
             })
             
     if len(move_folder_array.keys()) == len(goods_art_no_arrays):
+        handler_result_folder = handler_result_folder.replace("\\", "/")
+        success_items = [item for item in handler_result if item.get('success') == True]
+        cutout_folder = handler_result_folder+"/"+success_items[0].get("goods_art_no")+"/800x800" if len(success_items) > 0 else ""
         progress = {
             "status": "处理完成",
             "current": len(goods_art_no_arrays),
             "total": len(goods_art_no_arrays),
-            "error": 0
+            "error": 0,
+            "folder":cutout_folder,
         }
-        
         await sendAsyncMessage(
             msg="抠图完成",
             data={"output_folder": handler_result_folder, "list": handler_result},
@@ -565,16 +570,18 @@ async def _process_scene_images(aigc_clazz, run_main, return_data_check_before_d
         msg_type="scene_progress",
         progress=product_scene_progress
     )
-    
     for goods_art_no in goods_dict.keys():
         try:
             product_scene_finish_progress += 1
+            folder = ""
             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
+                "error": product_scene_error_progress,
+                "goods_art_no": goods_art_no,
+                "folder": folder,
             }
             
             await sendAsyncMessage(
@@ -594,6 +601,14 @@ async def _process_scene_images(aigc_clazz, run_main, return_data_check_before_d
             if os.path.isfile(save_image_path):
                 goods_art_dict_info["场景图"] = save_image_path
                 new_goods_dict[goods_art_no] = goods_art_dict_info
+                product_scene_progress["folder"] = save_image_path
+                await sendAsyncMessage(
+                    msg="场景图处理完成",
+                    goods_arts=[goods_art_no],
+                    status="场景图处理完成",
+                    msg_type="scene_progress",
+                    progress=product_scene_progress
+                )
                 continue
                 
             aigc_clazz.center_paste_image(ceshi_image_path, save_image_path)
@@ -603,15 +618,7 @@ async def _process_scene_images(aigc_clazz, run_main, return_data_check_before_d
             
             goods_art_dict_info["场景图"] = image_path
             new_goods_dict[goods_art_no] = goods_art_dict_info
-            
-            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,
-            }
-            
+            product_scene_progress["folder"] = save_image_path
             await sendAsyncMessage(
                 msg="场景图处理完成",
                 goods_arts=[goods_art_no],
@@ -621,6 +628,7 @@ async def _process_scene_images(aigc_clazz, run_main, return_data_check_before_d
             )
             
         except Exception as e:
+            print("场景图处理异常",e)
             os.remove(save_image_path)
             product_scene_finish_progress -= 1
             product_scene_error_progress += 1
@@ -699,13 +707,16 @@ async def _process_model_images(aigc_clazz, run_main, return_data_check_before_d
     
     for goods_art_no in goods_dict.keys():
         upper_footer_finish_progress += 1
+        folder = ""
         try:
             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
+                "error": upper_footer_error_progress,
+                "goods_art_no": goods_art_no,
+                "folder": folder,
             }
             
             await sendAsyncMessage(
@@ -727,6 +738,14 @@ async def _process_model_images(aigc_clazz, run_main, return_data_check_before_d
             if os.path.isfile(save_image_path):
                 goods_art_dict_info["模特图"] = save_image_path
                 new_goods_dict[goods_art_no] = goods_art_dict_info
+                upper_footer_progress["folder"] = save_image_path
+                await sendAsyncMessage(
+                    msg="模特图处理成功",
+                    goods_arts=[goods_art_no],
+                    status="模特图处理成功",
+                    msg_type="upper_footer_progress",
+                    progress=upper_footer_progress
+                )
                 continue
                 
             shutil.copy(ceshi_image_path, save_image_path)
@@ -745,14 +764,14 @@ async def _process_model_images(aigc_clazz, run_main, return_data_check_before_d
             goods_art_dict_info["模特图"] = image_path
             new_goods_dict[goods_art_no] = goods_art_dict_info
             
-            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
-            }
-            
+            # 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
+            # }
+            upper_footer_progress["folder"] = save_image_path
             await sendAsyncMessage(
                 msg="模特图处理成功",
                 goods_arts=[goods_art_no],
@@ -823,7 +842,7 @@ async def _process_detail_pages(run_main, return_data_check_before_detail, onlin
         handler_result_folder = ""
         # 处理失败情况
     else:
-        out_put_dir_path = "{}/{}".format(os.getcwd(), out_put_dir).replace("\\", "/")
+        out_put_dir_path = "{}".format(out_put_dir).replace("\\", "/")
         handler_result_folder = os.path.dirname(out_put_dir_path)
     if handler_result_folder:
         handler_result_folder = os.path.dirname(handler_result_folder)

+ 41 - 17
python/custom_plugins/plugins_mode/detail_generate_base.py

@@ -145,8 +145,11 @@ class DetailBase(object):
             return False
 
     def del_detail_folder(self):
-        out_path = "{out_put_dir}/{goods_no}".format(
-            out_put_dir=self.out_put_dir, goods_no=self.goods_no
+        out_path = "{out_put_dir}/切片图-{template_name}".format(
+            out_put_dir=self.out_put_dir,template_name=self.template_name
+        )
+        detail_image_path = "{out_put_dir}/详情页-{template_name}".format(
+            out_put_dir=self.out_put_dir,template_name=self.template_name
         )
         if not os.path.exists(out_path):
             return
@@ -154,7 +157,16 @@ class DetailBase(object):
             shutil.rmtree(out_path)
         except BaseException as e:
             print("删除文件夹失败", e)
-
+    def del_detail_longimage(self):
+        detail_image_path = "{out_put_dir}/详情页-{template_name}".format(
+            out_put_dir=self.out_put_dir,template_name=self.template_name
+        )
+        if not os.path.exists(detail_image_path):
+            return
+        try:
+            shutil.rmtree(detail_image_path)
+        except BaseException as e:
+            print("删除详情页失败", e)
     def run_all(self):
         if self.template_name:
             self.out_put_dir = "{}/详情图-{}".format(
@@ -165,6 +177,7 @@ class DetailBase(object):
         # 如果没有指定页面,则删除指定目录下的对应的详情文件夹
         if not self.assigned_page_list:
             self.del_detail_folder()
+            self.del_detail_longimage()
         detailed_images = self.deal_details()
         self.create_folder(self.out_put_dir)
         detail_path = "{out_put_dir}/切片图-{template_name}".format(
@@ -197,15 +210,16 @@ class DetailBase(object):
                     if "颜色名称" not in pic_data:
                         continue
                     color_name = pic_data["颜色名称"]
-
-                    color_file_path = "{out_put_dir}/{goods_number}".format(
+                    # {out_put_dir}/{goods_number}
+                    color_file_path = "{out_put_dir}".format(
                         out_put_dir=self.out_put_dir,
                         goods_no=self.goods_no,
                         goods_number=pic_data["编号"],
                     )
                     for i in self.goods_no_value["data_all_goods_art_info"]:
                         if color_name in i["color"]:
-                            new_path = "{out_put_dir}/{goods_no}/{goods_number}".format(
+                            # {out_put_dir}/{goods_no}/{goods_number}
+                            new_path = "{out_put_dir}".format(
                                 out_put_dir=self.out_put_dir,
                                 goods_no=self.goods_no,
                                 goods_number="NUM{}".format(i["number"]),
@@ -288,7 +302,7 @@ class DetailBase(object):
         #         "goods_art_nos": self.goods_art_nos,
         #     },
         # )
-        detail_path = "{out_put_dir}/{goods_no}/切片图-{template_name}".format(
+        detail_path = "{out_put_dir}/切片图-{template_name}".format(
             out_put_dir=self.out_put_dir, goods_no=self.goods_no,template_name=self.template_name
         )
         if not os.path.exists(detail_path):
@@ -298,7 +312,7 @@ class DetailBase(object):
             detailed_images.append(PictureProcessing(image_data["file_path"]))
         # 生成拼接图
         img = self.add_pic(detailed_images)
-        join_path = "{out_put_dir}/{goods_no}/详情页-{template_name}".format(
+        join_path = "{out_put_dir}/详情页-{template_name}".format(
             out_put_dir=self.out_put_dir, goods_no=self.goods_no,template_name=self.template_name
         )
         # self.create_folder(join_path)
@@ -571,6 +585,7 @@ class DetailBase(object):
     def move_other_pic(self, move_main_pic=True):
         # ------------------------------移动其他图片------------------------------
         goods_no_main_pic_number = 0
+        sorted_list_800 = []
         for goods_art_no_dict in self.goods_no_value["货号资料"]:
             if "800x800" not in goods_art_no_dict:
                 continue
@@ -585,10 +600,12 @@ class DetailBase(object):
                 goods_art_no = goods_art_no_dict["货号"]
             # print("goods_art_no:", goods_art_no)
             # 移动颜色图=====================
-            goods_art_no_f = "{}/{}".format(self.out_put_dir, self.goods_no)
+            # goods_art_no_f = "{}/{}".format(self.out_put_dir, self.goods_no)
+            sorted_list_800 = natsorted(goods_art_no_dict["800x800"], key=lambda x: x.split("(")[1].split(")")[0])
+            goods_art_no_f = "{}".format(self.out_put_dir)
             self.create_folder(goods_art_no_f)
             # 放入一张主图
-            old_pic_path_1 = goods_art_no_dict["800x800"][0]
+            old_pic_path_1 = sorted_list_800[0]
             shutil.copy(
                 old_pic_path_1,
                 "{}/颜色图{}{}".format(
@@ -598,18 +615,25 @@ class DetailBase(object):
 
             # 把其他主图放入作为款号图=====================
             if move_main_pic:
-                for pic_path in goods_art_no_dict["800x800"]:
-                    goods_no_main_pic_number += 1
+                for idx,pic_path in enumerate(sorted_list_800):
+                    index = idx + 1
+                    try:
+                      split_size = pic_path.split("_")[1].split(".")[0]
+                    except:
+                      split_size = ""
+                    suffix_name = "_"+split_size if split_size else ""
+                    print("pic_path=========>",split_size)
                     e = os.path.splitext(pic_path)[1]
                     shutil.copy(
                         pic_path,
-                        "{out_put_dir}/{goods_no}/主图{goods_no}({goods_no_main_pic_number}){e}".format(
+                        "{out_put_dir}/主图{goods_no}({goods_no_main_pic_number}){suffix_name}{e}".format(
                             out_put_dir=self.out_put_dir,
-                            goods_no=self.goods_no,
+                            goods_no=goods_art_no,
                             goods_no_main_pic_number=str(
-                                goods_no_main_pic_number + 10
-                            ).zfill(2),
+                                index
+                            ),
                             e=e,
+                            suffix_name=suffix_name
                         ),
                     )
 
@@ -643,7 +667,7 @@ class DetailBase(object):
 
         for _index, main_pic_path_list in enumerate(all_main_pic_path_list):
             self.check_state_end()
-            out_path_root = "{out_put_dir}/{goods_no}/main_image_{_index}".format(
+            out_path_root = "{out_put_dir}/main_image_{_index}".format(
                 out_put_dir=self.out_put_dir, goods_no=self.goods_no, _index=_index
             )
             check_path(out_path_root)

+ 2 - 2
python/service/run_main.py

@@ -655,8 +655,8 @@ class RunMain:
                 # _path = "{}/{}/{}/{}".format(
                 #     image_dir, "软件-详情图生成", __temp_name, goods_no
                 # )
-                _path = "{}/{}".format(
-                    image_dir, f"详情图-{goods_no}"
+                _path = "{}/{}/切片图-{}".format(
+                    image_dir, f"详情图-{goods_no}",__temp_name
                 )
                 if not os.path.exists(_path):
                     print("款号详情图不存在", _path)