rambo hace 5 meses
padre
commit
6e2ab9a1fb

+ 61 - 62
python/api.py

@@ -21,6 +21,7 @@ from service.run_main import RunMain
 import importlib
 from service.auto_deal_pics.upload_pic import UploadPic
 from service.OnePicTest import OnePicTest
+from service.base import check_move_goods_art_no_folder
 import hashlib
 import win32api, win32gui, win32con
 from win32gui import EnumWindows, GetWindowText
@@ -112,10 +113,18 @@ def fromExcelHandler(params: HandlerDetail):
         temp_class[tempItem.template_id] = tempItem.template_local_classes
         temp_name_list.append(tempItem.template_id)
     goods_art_no_arrays = []
+    for _, goods_row in excel_df.iterrows():
+        goods_art_no = str(goods_row["商品货号"])
+        goods_art_no_arrays.append(goods_art_no)
+    limit_path = "output/{}".format(
+        time.strftime("%Y-%m-%d", time.localtime(time.time()))
+    )
+    move_folder_array = check_move_goods_art_no_folder(
+        "output", goods_art_no_arrays, limit_path
+    )
     for index, row in excel_df.iterrows():
         goods_art_no_image_dir = str(row["文件夹名称"])
         goods_art_no = str(row["商品货号"])
-        goods_art_no_arrays.append(goods_art_no)
         print("货号数据", goods_art_no)
         goods_no = str(row["款号"])
         a001_df = goods_art_dirs.get_group(goods_no)
@@ -128,35 +137,35 @@ def fromExcelHandler(params: HandlerDetail):
         images = pr.read_all(session, conditions={"goods_art_no": goods_art_no})
         if not images:
             raise UnicornException("没有可用货号数据")
-        image_dir = "{}/data/{}".format(os.getcwd(), goods_no).replace("\\", "/")
-        check_path(image_dir)
-        for itemImg in images:
-            if itemImg.image_path == "" or itemImg.image_path == None:
-                raise UnicornException(
-                    f"货号【{goods_art_no}】存在没有拍摄完成的图片,请重拍或删除后重试"
-                )
-            new_file_name = (
-                            str(itemImg.goods_art_no) + "_" + str(itemImg.id) + ".jpg"
+        # 货号目录不存在再去进行移动和创建操作
+        if move_folder_array.get(goods_art_no) == None:
+            image_dir = "{}/data/{}".format(os.getcwd(), goods_no).replace("\\", "/")
+            check_path(image_dir)
+            for itemImg in images:
+                if itemImg.image_path == "" or itemImg.image_path == None:
+                    raise UnicornException(
+                        f"货号【{goods_art_no}】存在没有拍摄完成的图片,请重拍或删除后重试"
                     )
-            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_image_dir,
+                new_file_name = (
+                    str(itemImg.goods_art_no) + "_" + str(itemImg.id) + ".jpg"
                 )
-        if not resFlag:
-            raise UnicornException(path)
-        # if goods_art_no_image_dir not in path:
-        #     path = path + "/" + goods_art_no_image_dir
-        path = os.path.dirname(path)
+                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_image_dir,
+            )
+            if not resFlag:
+                raise UnicornException(path)
+            shutil.rmtree(image_dir)
+            # path = os.path.dirname(path)
     try:
-        print("path", path)
         config_data = {
-            "image_dir": path,
+            "image_dir": limit_path,  # 这个目录作为本次生成的图片目录非常重要 例:./output/当前日期
             "image_order": params.template_image_order,
             "goods_art_no": goods_art_no,
             "goods_art_nos": goods_art_no_arrays,
@@ -165,9 +174,7 @@ def fromExcelHandler(params: HandlerDetail):
             "cutout_mode": settings.CUTOUT_MODE,
             "logo_path": params.logo_path,
             "special_goods_art_no_folder_line": "",
-            "is_use_excel": (
-                False if params.excel_path == "" else True
-            ),  # 是否使用excel
+            "is_use_excel": (False if params.excel_path == "" else True),  # 是否使用excel
             "excel_path": params.excel_path,  # excel路径
             "is_check_color_is_all": False,
             "cutout_is_pass": True,
@@ -179,7 +186,7 @@ def fromExcelHandler(params: HandlerDetail):
             "temp_class": temp_class,
             "temp_name": params.temp_name,
             "temp_name_list": temp_name_list,
-            "target_error_folder": f"{path}/软件-生成详情错误",
+            "target_error_folder": f"{limit_path}/软件-生成详情错误",
         }
         # 动态导入类
         temp_class_dict = {}
@@ -190,17 +197,15 @@ def fromExcelHandler(params: HandlerDetail):
             temp_class_dict[key] = cls
 
         config_data["temp_class"] = temp_class_dict
+        # 此处对抠图进行批量处理,保证所有的图片在生成详情图之前已经完成抠图,以保证详情图生成的效率
         return_data = run_main.check_before_cutout(config_data)
         cutout_res = run_main.check_for_cutout_image_first_call_back(return_data)
-        print("cutout_res", cutout_res)
         check_for_detail_first_res = None
         if cutout_res:
-            return_data_check_before_detail = run_main.check_before_detail(
-                    config_data
-                )
+            return_data_check_before_detail = run_main.check_before_detail(config_data)
             check_for_detail_first_res = run_main.check_for_detail_first_call_back(
-                    return_data_check_before_detail
-                )
+                return_data_check_before_detail
+            )
         if isinstance(check_for_detail_first_res, partial):
             result = check_for_detail_first_res()
             try:
@@ -216,34 +221,32 @@ def fromExcelHandler(params: HandlerDetail):
                 print("to_deal_dir", to_deal_dir)
                 if os.path.exists(to_deal_dir):
                     upload_pic = UploadPic(
-                            windows=None,
-                            to_deal_dir=to_deal_dir,
-                            config_data=config_data,
-                            token=token,
-                        )
+                        windows=None,
+                        to_deal_dir=to_deal_dir,
+                        config_data=config_data,
+                        token=token,
+                    )
                     upload_pic.run()
             out_put_dir = config_data["out_put_dir"]
-            out_put_dir_path = "{}/{}".format(os.getcwd(), out_put_dir).replace(
-                    "\\", "/"
-                )
+            out_put_dir_path = "{}/{}".format(os.getcwd(), out_put_dir).replace("\\", "/")
             handler_result_folder = os.path.dirname(out_put_dir_path)
             handler_result.append(
-                    {"goods_art_no": goods_art_no, "success": True, "info": "处理成功"}
-                )
+                {"goods_art_no": goods_art_no, "success": True, "info": "处理成功"}
+            )
         else:
             handler_result.append(
-                    {"goods_art_no": goods_art_no, "success": False, "info": "处理失败"}
-                )
+                {"goods_art_no": goods_art_no, "success": False, "info": "处理失败"}
+            )
     except Exception as e:
         handler_result.append(
                 {"goods_art_no": goods_art_no, "success": False, "info": str(e)}
             )
     handler_result_folder = "/".join(handler_result_folder.split("/")[:-1])
     return {
-            "code": 0,
-            "msg": "",
-            "data": {"output_folder": handler_result_folder, "list": handler_result},
-        }
+        "code": 0,
+        "msg": "",
+        "data": {"output_folder": handler_result_folder, "list": handler_result},
+    }
 
 
 def group_by_style_number(data):
@@ -303,10 +306,10 @@ async def handle_detail(request: Request, params: HandlerDetail):
                         f"货号【{goods_art_no}】存在没有拍摄完成的图片,请重拍或删除后重试"
                     )
                 new_file_name = (
-                        str(itemImg.goods_art_no) + "_" + str(itemImg.id) + ".jpg"
+                    str(itemImg.goods_art_no) + "_" + str(itemImg.id) + ".jpg"
                 )
                 if not os.path.exists(
-                        image_dir + "/" + os.path.basename(new_file_name)
+                    image_dir + "/" + os.path.basename(new_file_name)
                 ):
                     shutil.copy(itemImg.image_path, image_dir + "/" + new_file_name)
             dealImage = DealImage(image_dir)
@@ -325,7 +328,7 @@ async def handle_detail(request: Request, params: HandlerDetail):
                 "image_order": (
                     "俯视,侧视,后跟,鞋底,内里"
                     if params.template_image_order == None
-                       or params.template_image_order == ""
+                    or params.template_image_order == ""
                     else params.template_image_order
                 ),
                 "goods_art_no": goods_art_no,
@@ -400,7 +403,7 @@ async def handle_detail(request: Request, params: HandlerDetail):
                 "image_order": (
                     "俯视,侧视,后跟,鞋底,内里"
                     if params.template_image_order is None
-                       or params.template_image_order == ""
+                    or params.template_image_order == ""
                     else params.template_image_order
                 ),
                 "goods_art_no": "",
@@ -435,9 +438,7 @@ async def handle_detail(request: Request, params: HandlerDetail):
                 temp_class_dict[key] = cls
 
             config_data["temp_class"] = temp_class_dict
-            return_data_check_before_detail = run_main.check_before_detail(
-                config_data
-            )
+            return_data_check_before_detail = run_main.check_before_detail(config_data)
             check_for_detail_first_res = run_main.check_for_detail_first_call_back(
                 return_data_check_before_detail
             )
@@ -475,9 +476,7 @@ async def handle_detail(request: Request, params: HandlerDetail):
                     {"goods_art_no": "", "success": False, "info": "处理失败"}
                 )
     except Exception as e:
-        handler_result.append(
-            {"goods_art_no": "", "success": False, "info": str(e)}
-        )
+        handler_result.append({"goods_art_no": "", "success": False, "info": str(e)})
     return {
         "code": 0,
         "msg": "",

+ 1 - 1
python/config.ini

@@ -9,7 +9,7 @@ host=127.0.0.1
 app_run=api:app
 # 端口号
 port=7074
-debug=false
+debug=true
 env=dev
 # 线程数
 works=3

+ 11 - 11
python/index.py

@@ -33,8 +33,8 @@ async def run_server():
 
 async def main():
     # await init_load_source().load_source()
-    # await run_server()
-    await  asyncio.gather(run_server(), init_load_source().load_source())
+    await run_server()
+    # await  asyncio.gather(run_server(), init_load_source().load_source())
 
 
 if __name__ == "__main__":
@@ -42,12 +42,12 @@ if __name__ == "__main__":
     signal.signal(signal.SIGTERM, handle_shutdown)
     print("python server is running at port:", PORT)
     print("python server is running at port:", APP_RUN)
-    asyncio.run(main())
-    # isDebug = True if IS_DEBUG == "true" else False
-    # uvicorn.run(
-    #     app=APP_RUN,
-    #     host=APP_HOST,
-    #     port=int(PORT),
-    #     reload=isDebug,
-    #     loop="auto",
-    # )
+    # asyncio.run(main())
+    isDebug = True if IS_DEBUG == "true" else False
+    uvicorn.run(
+        app=APP_RUN,
+        host=APP_HOST,
+        port=int(PORT),
+        reload=isDebug,
+        loop="auto",
+    )

+ 33 - 5
python/service/base.py

@@ -207,21 +207,49 @@ def get_folder(path):
 
 
 # 获取所有货号颜色 文件夹
-def get_all_goods_art_no_folder(path):
+def get_all_goods_art_no_folder(path, goods_art_nos):
     folder_list = []
     if not os.path.exists(path):
         return folder_list
     if os.path.isfile(path):
         return folder_list
-
     temp_folder_list = get_folder(path)
+    # for goods_art_no in goods_art_nos:
     for folder_data in temp_folder_list:
-        _p = "{}/原始图".format(folder_data["folder_path"])
-        if os.path.exists(_p):
-            folder_list.append(folder_data)
+            folder_path = folder_data["folder_path"]
+            _p = "{}/原始图".format(folder_path)
+            if os.path.exists(_p):
+                folder_data["folder_path"] = f"{folder_path}"
+                folder_list.append(folder_data)
     return folder_list
 
 
+def check_move_goods_art_no_folder(path, goods_art_nos,limit_folder):
+    """
+    检查目录是否存在,如果存在,直接移动到当前日期下的目录
+    """
+    folder_list = {}
+    if not os.path.exists(path):
+        return folder_list
+    if os.path.isfile(path):
+        return folder_list
+    temp_folder_list = get_folder(path)
+    for goods_art_no in goods_art_nos:
+        for folder_data in temp_folder_list:
+            folder_path = folder_data["folder_path"]
+            _p = "{}/{}/原始图".format(folder_path, goods_art_no)
+            if os.path.exists(_p):
+                folder_data["folder_path"] = f"{folder_path}/{goods_art_no}"
+                # 整个目录移动到目标目录
+                folder_list[goods_art_no] = folder_data
+                if not os.path.exists(f"{limit_folder}/{goods_art_no}"):
+                    # 目标不存在
+                    folder_list[goods_art_no] = folder_data
+                    shutil.move(folder_data["folder_path"], limit_folder)
+                else:
+                    # 如果希望覆盖
+                    print(f"目标目录 {limit_folder}/{goods_art_no} 已存在,跳过移动")
+    return folder_list
 def get_date_time_original(file_path):
     with open(file_path, "rb") as file_data:
         tags = exifread.process_file(file_data)

+ 0 - 3
python/service/deal_image.py

@@ -178,9 +178,6 @@ class DealImage(BaseDealImage):
 
         # 遍历目标文件夹,获取有拍摄信息的图片,并按拍摄时间排序
         files = self.list_dir(image_dir)
-        print("\033[32m绿色文本\033[0m")
-        print("files", files, image_dir)
-        print("\033[32m绿色文本\033[0m")
         original_photo_list = []  # 原始图片列表
         for file in files:
             # -----图片清洗

+ 3 - 3
python/service/detail_func.py

@@ -23,10 +23,9 @@ def get_all_dir_info(image_dir, goods_art_nos):
         print("goods_art_no====>", goods_art_nos)
         for goods_art_no in goods_art_nos:
             # 有原始图子文件夹就认为是一个正常的货号文件夹
-            print("图片地址=====>>>>>",f"{_path}/{goods_art_no}/原始图")
-            if os.path.exists(f"{_path}/{goods_art_no}/原始图"):
+            print("图片地址=====>>>>>",f"{_path}/原始图")
+            if os.path.exists(f"{_path}/原始图"):
                 folder_name_list.append(f"{goods_art_no}")
-
     return folder_name_list
 """
 def get_all_dir_info(image_dir):
@@ -102,6 +101,7 @@ def get_all_dir_info_and_pic_info(root_path, folder_name_list, need_view_list):
 
         # 放入商品货号主图 ===================
         goods_art_800_pic_f = "{}/{}/800x800".format(root_path, one_folder)
+        print("缺失主图文件夹=====>>>>>>>", goods_art_800_pic_f)
         if not os.path.exists(goods_art_800_pic_f):
             data["message"] += "\缺失主图文件夹"
         else:

+ 1 - 1
python/service/module_generate_goods_art_no_table.py

@@ -166,7 +166,7 @@ class GenerateGoodsArtNoTable():
                 os.mkdir(big_image_folder_path)
             all_big_images = os.listdir(big_image_folder_path)
             goods_pic_total = len(all_big_images)
-            _Type = [".png", ".PNG", ".jpg", ".JPG", ".gif", ".GIF", ".jpge", ".JPGE"]
+            _Type = [".png", ".PNG", ".jpg", ".JPG", ".gif", ".GIF", ".jpge", ".JPGE",".WEBP",".webp",".avif",".avif"]
             thumb_image_file_path = None
             # print("all_big_images",all_big_images)
             if all_big_images:

+ 8 - 5
python/service/run_main.py

@@ -62,18 +62,20 @@ class RunMain():
         is_check_number = config_data["is_check_number"]
         is_filter = config_data["cutout_is_pass"]
         resize_image_view = config_data["resize_image_view"]
+        goods_art_nos = config_data["goods_art_nos"]
         logo_path = config_data["logo_path"]
         cutout_mode = config_data["cutout_mode"]  # 是否精细化抠图,默认为普通抠图
         special_goods_art_no_folder_line = config_data["special_goods_art_no_folder_line"]
-
         # 自动处理红蜻蜓货号,进行重命名
         # if settings.PROJECT == "红蜻蜓":
         #     # 规整红蜻蜓货号图
         #     all_goods_art_no_folder_data = get_all_goods_art_no_folder(path=image_dir)
         #     BaseDealImage().rename_folder_for_hqt(all_goods_art_no_folder_data=all_goods_art_no_folder_data)
         # 重新获取文件夹信息
-        all_goods_art_no_folder_data = get_all_goods_art_no_folder(path=image_dir)
-
+        all_goods_art_no_folder_data = get_all_goods_art_no_folder(
+            path=image_dir, goods_art_nos=goods_art_nos
+        )
+        print("all_goods_art_no_folder_data", all_goods_art_no_folder_data)
         f = True
         is_do_other = False
         if is_do_other:
@@ -123,7 +125,7 @@ class RunMain():
         else:
             # 图片命名顺序
             image_order_list = res['imageOrderList']
-            print("图片命名顺序", image_order_list)
+            print("图片命名顺序", image_order_list, all_goods_art_no_folder_data)
             for goods_art_no_folder_data in all_goods_art_no_folder_data:
                 if goods_art_no_folder_data["label"] != "待处理":
                     continue
@@ -980,7 +982,8 @@ class RunMain():
                 error_text = "{}".format(e)
                 if "Unable to allocate" in error_text:
                     error_text = "电脑内存不足,生成失败"
-
+                print(f"发生错误的文件: {e.__traceback__.tb_frame.f_globals['__file__']}")
+                print(f"发生错误的行号: {e.__traceback__.tb_lineno}")
                 # self.show_progress_detail("失败原因:{}".format(error_text))
                 self.fail_num += 1
                 raise UnicornException("{}处理失败,失败原因:{}".format(goods_no,error_text))