Browse Source

第三方商品发布

rambo 3 months ago
parent
commit
464d7c5254
5 changed files with 280 additions and 226 deletions
  1. 23 4
      python/api.py
  2. 1 1
      python/config.ini
  3. 1 0
      python/models.py
  4. 231 90
      python/service/online_request/module_online_data.py
  5. 24 131
      python/temp.py

+ 23 - 4
python/api.py

@@ -25,6 +25,8 @@ from service.base import check_move_goods_art_no_folder
 import hashlib
 import win32api, win32gui, win32con
 from win32gui import EnumWindows, GetWindowText
+from service.online_request.module_online_data import OnlineDataRequest
+
 def calculate_md5(filepath):
     # 打开文件,以二进制只读模式打开
     with open(filepath, "rb") as f:
@@ -291,8 +293,10 @@ async def handle_detail(request: Request, params: HandlerDetail):
     token = "Bearer " + params.token
     uuid = params.uuid
     run_main = RunMain(obj, token, uuid)
+    onlineData = OnlineDataRequest(token)
     goods_art_no_arrays = params.goods_art_no
     is_only_cutout = params.is_only_cutout
+    online_stores = params.online_stores
     handler_result = []
     handler_result_folder = ""
     if is_only_cutout == 1:
@@ -427,7 +431,6 @@ async def handle_detail(request: Request, params: HandlerDetail):
             except:
                 config_data = result
         if config_data["sign_text"] == "已结束详情处理":
-            # at_pic = AutoDealPics()
             print("config_data", config_data)
             out_put_dir = config_data.get("out_put_dir")
             if out_put_dir == None:
@@ -459,6 +462,22 @@ async def handle_detail(request: Request, params: HandlerDetail):
                             }
                         )
                 else:
+                    result_goods_no_dict = return_data_check_before_detail["data"][
+                        "goods_no_dict"
+                    ]
+                    for goods_idx,goods_no_dict in enumerate(result_goods_no_dict.keys()):
+                        all_detail_path_list = config_data["all_detail_path_list"]
+                        for detail_path in all_detail_path_list:
+                            if goods_no_dict in detail_path:
+                                detail_path_replace = detail_path.replace(
+                                    "\\", "/"
+                                )
+                                result_goods_no_dict[goods_no_dict][
+                                    "detail_path"
+                                ] = f"{detail_path_replace}/拼接图/1.jpg"
+                    onlineData.uploadGoods2ThirdParty(
+                        result_goods_no_dict, online_stores=online_stores
+                    )
                     handler_result = config_data["success_handler"]
         else:
             handler_result.append(
@@ -467,9 +486,9 @@ async def handle_detail(request: Request, params: HandlerDetail):
     except UnicornException as e:
         handler_result_folder = ""
         handler_result = e.msg
-    except Exception as e:
-        handler_result_folder = ""
-        handler_result.append({"goods_art_no": "", "success": False, "info": str(e)})
+    # except Exception as e:
+    #     handler_result_folder = ""
+    #     handler_result.append({"goods_art_no": "", "success": False, "info": str(e)})
     return {
         "code": 0,
         "msg": "",

+ 1 - 1
python/config.ini

@@ -10,7 +10,7 @@ app_run=api:app
 # 端口号
 port=7074
 debug=false
-env=prod
+env=dev
 # 线程数
 works=5
 project=惠利玛

+ 1 - 0
python/models.py

@@ -97,6 +97,7 @@ class HandlerDetail(BaseModel):
     temp_list: list[TemplateItem] = Field(default=[], description="所有模板列表")
     logo_path: Optional[str] = Field(default="", description="logo地址路径")
     is_only_cutout: Optional[int] = Field(default=0, description="是否仅抠图;0否;1是")
+    online_stores: Optional[list[str]] = Field(default=[], description="是否仅抠图;0否;1是")
 
 class LogoParams(BaseModel):
     """logo参数"""

+ 231 - 90
python/service/online_request/module_online_data.py

@@ -1,3 +1,4 @@
+import base64
 import requests
 import settings
 import json
@@ -17,7 +18,7 @@ class JsonEncoder(json.JSONEncoder):
 
 
 class OnlineDataRequest(object):
-    def __init__(self,token):
+    def __init__(self, token):
         self.s = requests.session()
         self.token = token
         self.post_headers = {
@@ -42,23 +43,21 @@ class OnlineDataRequest(object):
 
     def auth_user(self):
         # 用户登录
-        url = "{domain}/api/auth/user".format(
-            domain=settings.DOMAIN
-        )
+        url = "{domain}/api/auth/user".format(domain=settings.DOMAIN)
         s = requests.session()
         _s = s.get(url=url, headers=settings.Headers)
         response_data = _s.json()
         return response_data
 
     def logout(self):
-        url = "{domain}/api/auth/logout".format(
-            domain=settings.DOMAIN
-        )
+        url = "{domain}/api/auth/logout".format(domain=settings.DOMAIN)
         s = requests.session()
         _s = s.post(url=url, headers=settings.Headers)
 
     def get_change_bar_code(self, code):
-        url = "{domain}/api/hct/open/sting_search_goods?string={code}".format(domain=settings.DOMAIN, code=code)
+        url = "{domain}/api/hct/open/sting_search_goods?string={code}".format(
+            domain=settings.DOMAIN, code=code
+        )
         try:
             s = requests.get(url)
             goods_art_no = s.json()["data"]["goods_art_no"]
@@ -67,22 +66,16 @@ class OnlineDataRequest(object):
             print(e)
             return
 
-    def get_goods_art_no_info(self, numbers_list=None, goods_art_list=None,token=None):
+    def get_goods_art_no_info(self, numbers_list=None, goods_art_list=None, token=None):
         # 获取商品基础信息,入参为商品的编号
 
-        url = "{domain}/api/backend/produce/goods/info".format(
-            domain=settings.DOMAIN
-        )
+        url = "{domain}/api/backend/produce/goods/info".format(domain=settings.DOMAIN)
         print("执行   get_goods_art_no_info   ", url)
         if numbers_list:
-            data = {
-                'numbers': numbers_list
-            }
+            data = {"numbers": numbers_list}
             print("请求编码:", numbers_list)
         else:
-            data = {
-                'goods_art_nos': goods_art_list
-            }
+            data = {"goods_art_nos": goods_art_list}
             print("请求货号:", goods_art_list)
             print("请求货号=====>", self.token)
         print("执行   get_goods_art_no_info----------------", data)
@@ -128,7 +121,7 @@ class OnlineDataRequest(object):
             goods_number_data[number]["所属企划"] = data["projects"][0]
             goods_number_data[number]["设计方名称"] = data["purchasing_unit"]
             goods_number_data[number]["供应商"] = data["supplier_name"]
-            goods_number_data[number]["供应商编码"] = data["supplier_code"].lstrip('0')
+            goods_number_data[number]["供应商编码"] = data["supplier_code"].lstrip("0")
             goods_number_data[number]["供应商货号"] = data["supplier_goods_artno"]
             goods_number_data[number]["销售工厂"] = data["sales_factory_name"]
             goods_number_data[number]["销售组织"] = data["man_org_name"]
@@ -144,8 +137,7 @@ class OnlineDataRequest(object):
     def get_on_goods_all_art(self, number):
         # 获取商品基础信息,入参为商品的编号
         url = "{domain}/api/backend/produce/goods/query/numbers?number={number}".format(
-            domain=settings.DOMAIN,
-            number=number
+            domain=settings.DOMAIN, number=number
         )
         _s = self.s.get(url=url, headers=self.post_headers)
         response_data = _s.json()
@@ -153,24 +145,34 @@ class OnlineDataRequest(object):
         """
         14250230 {'data': {'goods_number': 'AC5200117', 'brother_goods_arts': [{'number': '14250232', 'goods_art_no': 'AC52001173', 'color': '杏色'}, {'number': '14250231', 'goods_art_no': 'AC52001172', 'color': '灰色'}, {'number': '14250230', 'goods_art_no': 'AC52001171', 'color': '黑色'}]}, 'code': 0, 'message': 'success'}
         """
-        return response_data["data"]["goods_number"], response_data["data"]["brother_goods_arts"], \
-               response_data["data"]["goods_art_no"]
+        return (
+            response_data["data"]["goods_number"],
+            response_data["data"]["brother_goods_arts"],
+            response_data["data"]["goods_art_no"],
+        )
 
     def get_views(self, image_url):
 
         url = "http://{}/shoes_category".format(settings.VIEW_DEAL_DOMAIN)
-        data = {"train_path": "./datasets/Shoes_Dataset/Train/angle",
-                "model_filename": "./models/0320/output0320.pth",
-                "validate_path": image_url, }
-        _s = requests.post(url=url, data=json.dumps(data), )
+        data = {
+            "train_path": "./datasets/Shoes_Dataset/Train/angle",
+            "model_filename": "./models/0320/output0320.pth",
+            "validate_path": image_url,
+        }
+        _s = requests.post(
+            url=url,
+            data=json.dumps(data),
+        )
         response_data = _s.json()
         return response_data["classify_result"]
 
     def uploadImage(self, local_path: str) -> str:
         post_headers = {"Authorization": self.token}
-        url = settings.DOMAIN + '/api/upload'
-        resultData = self.s.post(url, files={'file': open(local_path, 'rb')}, headers=post_headers).json()
-        return resultData['data']['url']
+        url = settings.DOMAIN + "/api/upload"
+        resultData = self.s.post(
+            url, files={"file": open(local_path, "rb")}, headers=post_headers
+        ).json()
+        return resultData["data"]["url"]
 
     def get_current_menu(self):
         def get_menu(_menu_dict, _data):
@@ -200,18 +202,22 @@ class OnlineDataRequest(object):
     # 获取所有资源的配置
     def get_resource_config(self):
         url = "{domain}/api/openai/query_client_addons".format(domain=settings.DOMAIN)
-        _s = self.s.get(url=url, headers=self.post_headers, params={"type": "client_camera"})
+        _s = self.s.get(
+            url=url, headers=self.post_headers, params={"type": "client_camera"}
+        )
         response_data = _s.json()
         return response_data
 
     # 拍照日志上报
     def add_auto_photo_logs(self, data):
         url = "{domain}/api/openai/add_auto_photo_logs".format(domain=settings.DOMAIN)
-        post_data = {"goods_no": data["goods_art_no"],
-                     "take_photo_created_at": data["take_photo_created_at"],
-                     "photo_created_at": data["photo_create_time"],
-                     "image_dispose_mode": data["image_deal_mode"],
-                     "photo_serial_number": data["image_index"], }
+        post_data = {
+            "goods_no": data["goods_art_no"],
+            "take_photo_created_at": data["take_photo_created_at"],
+            "photo_created_at": data["photo_create_time"],
+            "image_dispose_mode": data["image_deal_mode"],
+            "photo_serial_number": data["image_index"],
+        }
 
         post_data = json.dumps(post_data)
 
@@ -223,9 +229,7 @@ class OnlineDataRequest(object):
         return response_data
 
     def upload_pic_list_data(self, data):
-        url = "{domain}/api/backend/goods/save/images".format(
-            domain=settings.DOMAIN
-        )
+        url = "{domain}/api/backend/goods/save/images".format(domain=settings.DOMAIN)
         data = json.dumps(data)
         self.post_headers["Content-Length"] = str(len(data))
         _s = self.s.post(url=url, data=data, headers=self.post_headers)
@@ -245,18 +249,24 @@ class OnlineDataRequest(object):
 
     def upload_pic(self, goods_data):
         # 检查货号图是否存在
-        url = "{domain}/api/backend/upload".format(
-            domain=settings.DOMAIN
-        )
+        url = "{domain}/api/backend/upload".format(domain=settings.DOMAIN)
         # print(url)
-        headers = {'Authorization': settings.Headers["Authorization"],
-                   'User-Agent': settings.Headers["User-Agent"],
-                   'Origin': settings.Headers["Origin"],
-                   'Host': settings.Headers["Host"], }
+        headers = {
+            "Authorization": settings.Headers["Authorization"],
+            "User-Agent": settings.Headers["User-Agent"],
+            "Origin": settings.Headers["Origin"],
+            "Host": settings.Headers["Host"],
+        }
 
         files = [
-            ('file',
-             (goods_data["file_path"], goods_data["image_io"], 'image/{}'.format(goods_data["e"])))
+            (
+                "file",
+                (
+                    goods_data["file_path"],
+                    goods_data["image_io"],
+                    "image/{}".format(goods_data["e"]),
+                ),
+            )
         ]
 
         _s = requests.post(url=url, headers=headers, files=files)
@@ -265,9 +275,10 @@ class OnlineDataRequest(object):
         return response_data["data"]["url"]
 
     # 查询是否已有详情图
-    def check_detail_image(self, goods_art_no,token):
-        url = "{domain}/api/backend/goods/check_detail_image?number={number}".format(domain=settings.DOMAIN,
-                                                                                     number=goods_art_no)
+    def check_detail_image(self, goods_art_no, token):
+        url = "{domain}/api/backend/goods/check_detail_image?number={number}".format(
+            domain=settings.DOMAIN, number=goods_art_no
+        )
         _s = self.s.get(url=url, headers=self.post_headers)
         response_data = _s.json()
         # print(response_data)
@@ -275,9 +286,12 @@ class OnlineDataRequest(object):
 
     # 调用API识别是否是拖鞋
     def yolo_shoes_category(self, image_url):
-        url = "{domain}/api/ai_image/main/yolo_shoes_category".format(domain=settings.DOMAIN)
-        post_data = {"image_url": image_url,
-                     }
+        url = "{domain}/api/ai_image/main/yolo_shoes_category".format(
+            domain=settings.DOMAIN
+        )
+        post_data = {
+            "image_url": image_url,
+        }
 
         post_data = json.dumps(post_data)
 
@@ -297,31 +311,150 @@ class OnlineDataRequest(object):
     # 图片上传by IO
     def upload_image_by_io(self, image_io) -> str:
         post_headers = {"Authorization": settings.Authorization}
-        url = settings.DOMAIN + '/api/upload'
-        resultData = self.s.post(url, files={'file': image_io}, headers=post_headers).json()
-        return resultData['data']['url']
-
+        url = settings.DOMAIN + "/api/upload"
+        resultData = self.s.post(
+            url, files={"file": image_io}, headers=post_headers
+        ).json()
+        return resultData["data"]["url"]
+
+    def upload_goods_api(self, params):
+        '''上传商品api'''
+        post_headers = {
+            "Authorization": self.token,
+            "Content-Type": "application/json",
+        }
+        url = settings.DOMAIN+"/api/ai_image/camera_machine/publish_goods"
+        postData = json.dumps(params)
+        print("上传商品api==>url", url)
+        print("上传第三方数据打印", params)
+        resultData = self.s.post(url, data=postData, headers=post_headers).json()
+        print("上传商品api==>resultData", resultData)
+        return resultData
+
+    def uploadGoods2ThirdParty(self, goods_no_dict=None,online_stores=[]):
+        params = []
+        if goods_no_dict == None:
+            return
+        for goods_no in goods_no_dict.keys():
+            goods_data = goods_no_dict[goods_no]
+            detail_path = goods_data.get("detail_path", "")
+            if detail_path == "":
+                continue
+            goods_title = goods_data.get("商品标题", "")
+            if goods_title == "":
+                continue
+            goods_price = goods_data.get("商品价格", 0)
+            if goods_title == 0:
+                continue
+            skuList = []
+            itemImageInfoList = []
+            itemSkuImageList = []
+            sku_list_basic = goods_data.get("货号资料", [])
+            quantity = 9999
+            skuPropValueList = []
+            for skuIdx, sku_data in enumerate(sku_list_basic):
+                sku_goods_art_no = sku_data.get("货号", "")
+                color_name = sku_data.get("颜色名称", "")
+                mainImages = sku_data.get("800x800", [])
+                if not mainImages:
+                    continue
+                mainImagePath = mainImages[0]
+                imageUrl = self.uploadImage(local_path=mainImagePath)
+                skuItemData = {
+                    "skuNo": sku_goods_art_no,
+                    "originalPrice": float(goods_price),
+                    "newSkuWeight": int(1),
+                    "skuMainImageUrl": str(imageUrl),
+                    "skuName": f"颜色:{color_name}",
+                    "sellingPrice": float(goods_price),
+                    "quantity": int(quantity),
+                    "showOrder": int(skuIdx + 1),
+                }
+                skuList.append(skuItemData)
+                itemImage = {
+                    "imageUrl": str(imageUrl),
+                    "imageType": 0,
+                    "imageItem": int(skuIdx),
+                    "imageIndex": 10,
+                }
+                itemImageInfoList.append(itemImage)
+                imageJson = {
+                    "imageUrl": str(imageUrl),
+                    "imageType": 1,
+                    "showOrder": 1,
+                }
+                skuPropValueList.append(
+                    {
+                        "imageJson": imageJson,
+                        "propValue": str(color_name),
+                        "showOrder": 1,
+                    }
+                )
+            itemSkuImageList.append(
+                {
+                    "propName": "颜色",
+                    "isImageProp": 1,
+                    "propShowOrder": 1,
+                    "skuPropValueList": skuPropValueList,
+                }
+            )
+            detailImageUrl = self.uploadImage(local_path=detail_path)
+            category_info = "流行男鞋>>休闲鞋>>时尚休闲鞋"
+            itemData = {
+                "catePathName": category_info,  # 分类
+                "itemName": str(goods_title),  # 商品标题
+                "itemNo": str(goods_no),
+                "brandName": "vali",  # 品牌名称
+                "sellingPrice": float(goods_price),  # 售价(未划线价)
+                "originalPrice": float(goods_price),  # 划线价
+                "quantity": int(quantity),  # 库存数量
+                "propInfoList": [
+                    {"propName": "品牌", "propIndex": 2, "propValue": "Vali"},
+                    {
+                        "propName": "平台类目",
+                        "propIndex": 3,
+                        "propValue": category_info,
+                    },
+                ],
+                "skuList": skuList,
+                "itemImageInfoList": itemImageInfoList,
+                "itemSkuImageList": itemSkuImageList,
+                "wapDescription": f'<img src="{detailImageUrl}"/>',
+                "pcDescription": f'<img src="{detailImageUrl}"/>',
+            }
+            params.append(itemData)
+        json_params = str(params)  # 直接转换为字符串表示
+        # 使用base64编码
+        encoded = base64.b64encode(json_params.encode("utf-8")).decode("utf-8")
+        self.upload_goods_api({"bizcontent": encoded, "online_stores": online_stores})
+        print("商品上传第三方成功")
 
 class GetOnlineDataHLM(OnlineDataRequest):
 
-    def __init__(self,token):
+    def __init__(self, token):
         super().__init__(token)
         self.token = token
-    def upload_pic(self, goods_data,token):
+
+    def upload_pic(self, goods_data, token):
         # 检查货号图是否存在
-        url = "{domain}/api/backend/upload".format(
-            domain=settings.DOMAIN
-        )
+        url = "{domain}/api/backend/upload".format(domain=settings.DOMAIN)
         # print(url)
-        headers = {'Authorization': self.token,
-                #    'User-Agent': settings.Headers["User-Agent"],
-                #    'Origin': settings.Headers["Origin"],
-                #    'Host': settings.Headers["Host"], 
-                   }
+        headers = {
+            "Authorization": self.token,
+            #    'User-Agent': settings.Headers["User-Agent"],
+            #    'Origin': settings.Headers["Origin"],
+            #    'Host': settings.Headers["Host"],
+        }
 
         files = [
-            ('file',
-             (goods_data["file_path"], goods_data["image_io"], 'image/{}'.format(goods_data["e"])))
+            (
+                "file",
+                (
+                    goods_data["file_path"],
+                    goods_data["image_io"],
+                    "image/{}".format(goods_data["e"]),
+                ),
+            )
         ]
 
         _s = requests.post(url=url, headers=headers, files=files)
@@ -329,10 +462,8 @@ class GetOnlineDataHLM(OnlineDataRequest):
 
         return response_data["data"]["url"]
 
-    def upload_pic_list_data(self, data,token):
-        url = "{domain}/api/backend/goods/save/images".format(
-            domain=settings.DOMAIN
-        )
+    def upload_pic_list_data(self, data, token):
+        url = "{domain}/api/backend/goods/save/images".format(domain=settings.DOMAIN)
         data = json.dumps(data)
         self.post_headers["Content-Length"] = str(len(data))
         _s = self.s.post(url=url, data=data, headers=self.post_headers)
@@ -348,14 +479,12 @@ class GetOnlineDataHLM(OnlineDataRequest):
             print(response_data)
             return False
 
-    def get_goods_art_no_info(self, numbers_list=None, goods_art_list=None,token=None):
+    def get_goods_art_no_info(self, numbers_list=None, goods_art_list=None, token=None):
         # 获取商品基础信息,入参为商品的编号
         url = "{domain}/api/backend/goods_client/goods_query".format(
             domain=settings.DOMAIN
         )
-        data = {
-            'goods_art_list': goods_art_list
-        }
+        data = {"goods_art_list": goods_art_list}
         print("url:", url)
         print("请求货号:", goods_art_list)
 
@@ -384,8 +513,12 @@ class GetOnlineDataHLM(OnlineDataRequest):
 
         for data in response_data["data"]:
             goods_number_data[data["goods_art_no"]] = {}
-            goods_number_data[data["goods_art_no"]]["商品货号"] = data["goods_art_no"].upper()
-            goods_number_data[data["goods_art_no"]]["款号"] = data["goods_number"].upper()
+            goods_number_data[data["goods_art_no"]]["商品货号"] = data[
+                "goods_art_no"
+            ].upper()
+            goods_number_data[data["goods_art_no"]]["款号"] = data[
+                "goods_number"
+            ].upper()
             goods_number_data[data["goods_art_no"]]["商品面料"] = data["fabric"]
             goods_number_data[data["goods_art_no"]]["商品内里"] = data["lining"]
             goods_number_data[data["goods_art_no"]]["商品鞋底"] = data["sole"]
@@ -398,33 +531,40 @@ class GetOnlineDataHLM(OnlineDataRequest):
 
     def uploadImage(self, local_path: str) -> str:
         post_headers = {"Authorization": settings.Authorization}
-        url = settings.DOMAIN + '/api/upload'
-        resultData = self.s.post(url, files={'file': open(local_path, 'rb')}, headers=post_headers).json()
-        return resultData['data']['url']
+        url = settings.DOMAIN + "/api/upload"
+        resultData = self.s.post(
+            url, files={"file": open(local_path, "rb")}, headers=post_headers
+        ).json()
+        return resultData["data"]["url"]
 
     # ============pixian抠图处理==========================
     def dispose_point(self, _type):
         # 扣分 sub;add为增加分数,每次操作一分
         url = "{domain}/api/ai_image/client/dispose_point".format(
-            domain=settings.DOMAIN)
+            domain=settings.DOMAIN
+        )
         data = {"type": _type}
-        _s = self.s.post(url=url, headers=self.post_headers, data=json.dumps(data), timeout=10)
+        _s = self.s.post(
+            url=url, headers=self.post_headers, data=json.dumps(data), timeout=10
+        )
         response_data = _s.json()
         return response_data
 
     def send_message(self, text):
         # 发送钉钉消息
-        url = "{domain}/api/ai_image/client/send_message".format(
-            domain=settings.DOMAIN)
+        url = "{domain}/api/ai_image/client/send_message".format(domain=settings.DOMAIN)
         data = {"message": text}
-        _s = self.s.post(url=url, headers=self.post_headers, data=json.dumps(data), timeout=10)
+        _s = self.s.post(
+            url=url, headers=self.post_headers, data=json.dumps(data), timeout=10
+        )
         response_data = _s.json()
         return response_data
 
     def get_cutout_image_times(self):
         # 获取抠图剩余次数
         url = "{domain}/api/ai_image/client/search_company_balance".format(
-            domain=settings.DOMAIN)
+            domain=settings.DOMAIN
+        )
         _s = self.s.post(url=url, headers=self.post_headers, timeout=10)
         response_data = _s.json()
         if "data" not in response_data:
@@ -435,7 +575,8 @@ class GetOnlineDataHLM(OnlineDataRequest):
     def get_key_secret(self):
         # 获取抠图剩余次数
         url = "{domain}/api/ai_image/client/get_key_serect".format(
-            domain=settings.DOMAIN)
+            domain=settings.DOMAIN
+        )
         _s = self.s.post(url=url, headers=self.post_headers, timeout=10)
         response_data = _s.json()
         return response_data["data"]

+ 24 - 131
python/temp.py

@@ -2,65 +2,6 @@
 # from settings import recordDataPoint
 from service.online_request.module_online_data import OnlineDataRequest
 
-# result = recordDataPoint(
-#     token="7a6d7d43419df1f98bf00efa100f94b5f6e33c43",
-#     uuid="1000548b-5a5e-5ff5-d322-0842bf2beb86",
-#     page="抠图完成",
-#     goods_art_no="12345"
-# )
-# print("result", result.json())
-"""
-[
-                "itemSkuImageList" => [
-                    [
-                        "propName" => "颜色",
-                        "skuPropValueList" => [
-                            [
-                                "imageJson" => [
-                                    [
-                                        "imageUrl" => "https://ossimg.valimart.net/uploads/vali_ai/20250619/175031982841045.png",
-                                        "imageType" => 1,
-                                        "showOrder" => 1
-                                    ]
-                                ],
-                                "propValue" => "经典绿",
-                                "showOrder" => 1
-                            ],
-                            [
-                                "imageJson" => [
-                                    [
-                                        "imageUrl" => "https://ossimg.valimart.net/uploads/vali_ai/20250619/175031982841045.png",
-                                        "imageType" => 1,
-                                        "showOrder" => 1
-                                    ]
-                                ],
-                                "propValue" => "经典红",
-                                "showOrder" => 2
-                            ]
-                        ],
-                        "isImageProp" => 1,
-                        "propShowOrder" => 1
-                    ]
-                ],
-                "wapDescription" => "<img src=\"https://ossimg.valimart.net/uploads/vali_ai/20250619/175031982841045.png\"/>", //wap端详情
-                "pcDescription" => "<img src=\"https://ossimg.valimart.net/uploads/vali_ai/20250619/175031982841045.png\"/>", //这个是电脑端详情
-                "itemImageInfoList" => [
-                    [
-                        "imageUrl" => "https://ossimg.valimart.net/uploads/vali_ai/20250619/175031982841045.png",
-                        "imageType" => 0,
-                        "imageItem" => 0,
-                        "imageIndex" => 10
-                    ],
-                    [
-                        "imageUrl" => "https://ossimg.valimart.net/uploads/vali_ai/20250619/175031982841045.png",
-                        "imageType" => 0,
-                        "imageItem" => 1,
-                        "imageIndex" => 10
-                    ]
-                ]
-            ]
-
-"""
 tempData = {
     "code": 0,
     "message": "",
@@ -76,29 +17,29 @@ tempData = {
                         " 编号": "",
                         "颜色名称": "黑色",
                         "pics": {
-                            "俯视-抠图": "output/2025-08-19/A596371/阴影图处理/A596371(1)_俯视_抠图.png",
-                            "俯视-阴影": "output/2025-08-19/A596371/阴影图处理/A596371(1)_俯视_阴影.png",
-                            "侧视-抠图": "output/2025-08-19/A596371/阴影图处理/A596371(2)_侧视_抠图.png",
-                            "侧视-阴影": "output/2025-08-19/A596371/阴影图处理/A596371(2)_侧视_阴影.png",
-                            "后跟-抠图": "output/2025-08-19/A596371/阴影图处 理/A596371(3)_后跟_抠图.png",
-                            "后跟-阴影": "output/2025-08-19/A596371/阴影图处理/A596371(3)_后跟_阴影.png",
-                            "鞋底-抠图": "output/2025-08-19/A596371/阴影图处理/A596371(4)_鞋底_抠图.png",
-                            "鞋底-阴影": "output/2025-08-19/A596371/阴影图处理/A596371(4)_鞋底_阴影.png",
-                            "内里-抠图": "output/2025-08-19/A596371/阴影图处理/A596371(5)_内里_抠图.png",
-                            "内里-阴影": "output/2025-08-19/A596371/阴影图处理/A596371(5)_内里_阴影.png",
-                            "其他1-抠图": "output/2025-08-19/A596371/阴影图处理/A596371(6)_其他1_抠图.png",
-                            "其他1-阴影": "output/2025-08-19/A596371/阴影图处理/A596371(6)_其他1_阴影.png",
-                            "其他0-抠图": "output/2025-08-19/A596371/阴影图处理/A596371(7)_其他0_抠图.png",
-                            "其他0-阴影": "output/2025-08-19/A596371/阴影图处理/A596371(7)_其他0_阴影.png",
+                            "俯视-抠图": "output/2025-08-20/A596371/阴影图处理/A596371(1)_俯视_抠图.png",
+                            "俯视-阴影": "output/2025-08-20/A596371/阴影图处理/A596371(1)_俯视_阴影.png",
+                            "侧视-抠图": "output/2025-08-20/A596371/阴影图处理/A596371(2)_侧视_抠图.png",
+                            "侧视-阴影": "output/2025-08-20/A596371/阴影图处理/A596371(2)_侧视_阴影.png",
+                            "后跟-抠图": "output/2025-08-20/A596371/阴影图处理/A596371(3)_后跟_抠图.png",
+                            "后跟-阴影": "output/2025-08-20/A596371/阴影图处理/A596371(3)_后跟_阴影.png",
+                            "鞋底-抠图": "output/2025-08-20/A596371/阴影图处理/A596371(4)_鞋底_抠图.png",
+                            "鞋底-阴影": "output/2025-08-20/A596371/阴影图处理/A596371(4)_鞋底_阴影.png",
+                            "内里-抠图": "output/2025-08-20/A596371/阴影图处理/A596371(5)_内里_抠图.png",
+                            "内里-阴影": "output/2025-08-20/A596371/阴影图处理/A596371(5)_内里_阴影.png",
+                            "其他1-抠图": "output/2025-08-20/A596371/阴影图处理/A596371(6)_其他1_抠图.png",
+                            "其他1-阴影": "output/2025-08-20/A596371/阴影图处理/A596371(6)_其他1_阴影.png",
+                            "其他0-抠图": "output/2025-08-20/A596371/阴影图处理/A596371(7)_其他0_抠图.png",
+                            "其他0-阴影": "output/2025-08-20/A596371/阴影图处理/A596371(7)_其他0_阴影.png",
                         },
                         "800x800": [
-                            "output/2025-08-19/A596371/800x800/A596371(1)_800.png",
-                            "output/2025-08-19/A596371/800x800/A596371(2)_800.png",
-                            "output/2025-08-19/A596371/800x800/A596371(3)_800.png",
-                            "output/2025-08-19/A596371/800x800/A596371(4)_800.png",
-                            "output/2025-08-19/A596371/800x800/A596371(5)_800.png",
-                            "output/2025-08-19/A596371/800x800/A596371(6)_800.png",
-                            "output/2025-08-19/A596371/800x800/A596371(7)_800.png",
+                            "output/2025-08-20/A596371/800x800/A596371(1)_800.png",
+                            "output/2025-08-20/A596371/800x800/A596371(2)_800.png",
+                            "output/2025-08-20/A596371/800x800/A596371(3)_800.png",
+                            "output/2025-08-20/A596371/800x800/A596371(4)_800.png",
+                            "output/2025-08-20/A596371/800x800/A596371(5)_800.png",
+                            "output/2025-08-20/A596371/800x800/A596371(6)_800.png",
+                            "output/2025-08-20/A596371/800x800/A596371(7)_800.png",
                         ],
                     }
                 ],
@@ -128,7 +69,7 @@ tempData = {
         "excel_temp_goods_no_data": {},
         "finally_goods_no_need_temps": {"A596371": ["huilima-1"]},
         "config_data": {
-            "image_dir": "output/2025-08-19",
+            "image_dir": "output/2025-08-20",
             "image_order": "俯视,侧视,后跟,鞋底,内里,组合,组合2",
             "goods_art_no": "",
             "goods_art_nos": ["A596371"],
@@ -171,7 +112,7 @@ tempData = {
                 "xinjunlue-1",
                 "qingyangyizhan-1",
             ],
-            "target_error_folder": "output/2025-08-19/软件-生成详情错误",
+            "target_error_folder": "output/2025-08-20/软件-生成详情错误",
             "success_handler": [],
             "sign_text": "",
         },
@@ -181,52 +122,4 @@ goods_no_dict = tempData["data"]["goods_no_dict"]
 params = []
 token = "71c53bf53045d6bc5cb65a85be9e6064b6a5e2ba"
 onlineData = OnlineDataRequest(token)
-for goods_no in goods_no_dict.keys():
-    goods_data = goods_no_dict[goods_no]
-    goods_title = goods_data.get("商品标题", "")
-    if goods_title == "":
-        continue
-    goods_price = goods_data.get("商品价格", 0)
-    if goods_title == 0:
-        continue
-    skuList = []
-    sku_list_basic = goods_data.get("货号资料", [])
-    quantity = 9999
-    for skuIdx, sku_data in enumerate(sku_list_basic):
-        sku_goods_art_no = sku_data.get("货号", "")
-        color_name = sku_data.get("颜色名称", "")
-        mainImages = sku_data.get("800x800", [])
-        if not mainImages: continue
-        mainImagePath = mainImages[0]
-        imageUrl = onlineData.uploadImage(local_path=mainImagePath)
-        skuItemData = {
-            "skuNo": sku_goods_art_no,
-            "originalPrice": float(goods_price),
-            "newSkuWeight": int(1),
-            "skuMainImageUrl": imageUrl,
-            "skuName": f"颜色:{color_name}",
-            "sellingPrice": float(goods_price),
-            "quantity": int(quantity),
-            "showOrder": int(skuIdx + 1),
-        }
-        skuList.append(skuItemData)
-    category_info = "流行男鞋>>休闲鞋>>时尚休闲鞋"
-    itemData = {
-        "catePathName": category_info,  # 分类
-        "itemName": str(goods_title),  # 商品标题
-        "brandName": "vali",  # 品牌名称
-        "sellingPrice": float(goods_price),  # 售价(未划线价)
-        "originalPrice": float(goods_price),  # 划线价
-        "quantity": int(quantity),  # 库存数量
-        "propInfoList": [
-            {"propName": "品牌", "propIndex": 2, "propValue": "Vali"},
-            {
-                "propName": "平台类目",
-                "propIndex": 3,
-                "propValue": category_info,
-            },
-        ],
-        "skuList": skuList,
-    }
-    params.append(itemData)
-print(params)
+onlineData.uploadGoods2ThirdParty(goods_no_dict, params)