|
@@ -28,6 +28,12 @@ from win32gui import EnumWindows, GetWindowText
|
|
|
from service.online_request.module_online_data import OnlineDataRequest
|
|
from service.online_request.module_online_data import OnlineDataRequest
|
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
from functools import partial
|
|
from functools import partial
|
|
|
|
|
+from service.online_request.module_online_data import AIGCDataRequest
|
|
|
|
|
+def parserGoodsDict2Aigc(return_data_check_before_detail):
|
|
|
|
|
+ '''获取商品组装数据'''
|
|
|
|
|
+ goods_no_dict = return_data_check_before_detail.get("data",{}).get("goods_no_dict", {})
|
|
|
|
|
+ return goods_no_dict
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@app.get("/")
|
|
@app.get("/")
|
|
|
async def index():
|
|
async def index():
|
|
@@ -154,13 +160,18 @@ async def fromExcelHandler(params: HandlerDetail):
|
|
|
shutil.rmtree(image_dir)
|
|
shutil.rmtree(image_dir)
|
|
|
# path = os.path.dirname(path)
|
|
# path = os.path.dirname(path)
|
|
|
cutOutMode = (
|
|
cutOutMode = (
|
|
|
- '0'
|
|
|
|
|
- if settings.getSysConfigs("other_configs", "cutout_mode", "普通抠图") == "普通抠图"
|
|
|
|
|
- else '1'
|
|
|
|
|
|
|
+ "0"
|
|
|
|
|
+ if settings.getSysConfigs("other_configs", "cutout_mode", "普通抠图")
|
|
|
|
|
+ == "普通抠图"
|
|
|
|
|
+ else "1"
|
|
|
)
|
|
)
|
|
|
config_data = {
|
|
config_data = {
|
|
|
"image_dir": limit_path, # 这个目录作为本次生成的图片目录非常重要 例:./output/当前日期
|
|
"image_dir": limit_path, # 这个目录作为本次生成的图片目录非常重要 例:./output/当前日期
|
|
|
- "image_order": params.template_image_order,
|
|
|
|
|
|
|
+ "image_order": (
|
|
|
|
|
+ "俯视,侧视,后跟,鞋底,内里,组合,组合2,组合3,组合4,组合5"
|
|
|
|
|
+ if params.template_image_order == None or params.template_image_order == ""
|
|
|
|
|
+ else params.template_image_order
|
|
|
|
|
+ ),
|
|
|
"goods_art_no": goods_art_no,
|
|
"goods_art_no": goods_art_no,
|
|
|
"goods_art_nos": goods_art_no_arrays,
|
|
"goods_art_nos": goods_art_no_arrays,
|
|
|
"is_check_number": False,
|
|
"is_check_number": False,
|
|
@@ -289,11 +300,17 @@ async def handle_detail(request: Request, params: HandlerDetail):
|
|
|
obj = None
|
|
obj = None
|
|
|
token = "Bearer " + params.token
|
|
token = "Bearer " + params.token
|
|
|
uuid = params.uuid
|
|
uuid = params.uuid
|
|
|
|
|
+ aigc_clazz = AIGCDataRequest(token)
|
|
|
run_main = RunMain(obj, token, uuid)
|
|
run_main = RunMain(obj, token, uuid)
|
|
|
onlineData = OnlineDataRequest(token)
|
|
onlineData = OnlineDataRequest(token)
|
|
|
goods_art_no_arrays = params.goods_art_no
|
|
goods_art_no_arrays = params.goods_art_no
|
|
|
- is_only_cutout = params.is_only_cutout
|
|
|
|
|
- online_stores = params.online_stores
|
|
|
|
|
|
|
+ is_only_cutout = params.is_only_cutout # 是否仅抠图
|
|
|
|
|
+ online_stores = params.online_stores # 上传第三方的店铺名称数组
|
|
|
|
|
+ is_detail = params.is_detail # 上传第三方的店铺名称数组
|
|
|
|
|
+ is_product_scene = params.is_product_scene # 上传第三方的店铺名称数组
|
|
|
|
|
+ is_upper_footer = params.is_upper_footer # 上传第三方的店铺名称数组
|
|
|
|
|
+ upper_footer_params = params.upper_footer_params # 上传第三方的店铺名称数组
|
|
|
|
|
+ product_scene_prompt = params.product_scene_prompt # 上传第三方的店铺名称数组
|
|
|
handler_result = []
|
|
handler_result = []
|
|
|
handler_result_folder = ""
|
|
handler_result_folder = ""
|
|
|
if is_only_cutout == 1:
|
|
if is_only_cutout == 1:
|
|
@@ -351,15 +368,15 @@ async def handle_detail(request: Request, params: HandlerDetail):
|
|
|
temp_class[tempItem.template_id] = tempItem.template_local_classes
|
|
temp_class[tempItem.template_id] = tempItem.template_local_classes
|
|
|
temp_name_list.append(tempItem.template_id)
|
|
temp_name_list.append(tempItem.template_id)
|
|
|
cutOutMode = (
|
|
cutOutMode = (
|
|
|
- '1'
|
|
|
|
|
|
|
+ "1"
|
|
|
if settings.getSysConfigs("other_configs", "cutout_mode", "普通抠图")
|
|
if settings.getSysConfigs("other_configs", "cutout_mode", "普通抠图")
|
|
|
== "普通抠图"
|
|
== "普通抠图"
|
|
|
- else '2'
|
|
|
|
|
|
|
+ else "2"
|
|
|
)
|
|
)
|
|
|
config_data = {
|
|
config_data = {
|
|
|
"image_dir": limit_path,
|
|
"image_dir": limit_path,
|
|
|
"image_order": (
|
|
"image_order": (
|
|
|
- "俯视,侧视,后跟,鞋底,内里"
|
|
|
|
|
|
|
+ "俯视,侧视,后跟,鞋底,内里,组合,组合2,组合3,组合4,组合5"
|
|
|
if params.template_image_order == None or params.template_image_order == ""
|
|
if params.template_image_order == None or params.template_image_order == ""
|
|
|
else params.template_image_order
|
|
else params.template_image_order
|
|
|
),
|
|
),
|
|
@@ -415,9 +432,80 @@ async def handle_detail(request: Request, params: HandlerDetail):
|
|
|
"msg": "",
|
|
"msg": "",
|
|
|
"data": {"output_folder": handler_result_folder, "list": handler_result},
|
|
"data": {"output_folder": handler_result_folder, "list": handler_result},
|
|
|
}
|
|
}
|
|
|
|
|
+ if is_product_scene == 1:
|
|
|
|
|
+ if product_scene_prompt == "" or product_scene_prompt == None:
|
|
|
|
|
+ raise UnicornException("请填写场景描述")
|
|
|
|
|
+ if is_upper_footer == 1:
|
|
|
|
|
+ if upper_footer_params == {} or upper_footer_params == None:
|
|
|
|
|
+ raise UnicornException("请选择模特")
|
|
|
|
|
+ man_id = upper_footer_params.get("man_id")
|
|
|
|
|
+ if not man_id:
|
|
|
|
|
+ raise UnicornException("请选择男模特")
|
|
|
|
|
+ women_id = upper_footer_params.get("women_id")
|
|
|
|
|
+ if not women_id:
|
|
|
|
|
+ raise UnicornException("请选择女模特")
|
|
|
handler_result = []
|
|
handler_result = []
|
|
|
try:
|
|
try:
|
|
|
return_data_check_before_detail = run_main.check_before_detail(config_data)
|
|
return_data_check_before_detail = run_main.check_before_detail(config_data)
|
|
|
|
|
+ if is_product_scene == 1:
|
|
|
|
|
+ goods_dict = parserGoodsDict2Aigc(return_data_check_before_detail)
|
|
|
|
|
+ new_goods_dict = {}
|
|
|
|
|
+ for goods_art_no in goods_dict.keys():
|
|
|
|
|
+ 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")
|
|
|
|
|
+ ceshi_image_path = first_pics.get("侧视-抠图")
|
|
|
|
|
+ save_root_path = ceshi_image_path.split("阴影图处理")[0]
|
|
|
|
|
+ save_image_path = f"{save_root_path}场景图.jpg"
|
|
|
|
|
+ aigc_clazz.center_paste_image(ceshi_image_path, save_image_path)
|
|
|
|
|
+ image_path = aigc_clazz.generateProductScene(
|
|
|
|
|
+ save_image_path, product_scene_prompt, save_image_path
|
|
|
|
|
+ )
|
|
|
|
|
+ goods_art_dict_info["场景图"] = image_path
|
|
|
|
|
+ new_goods_dict[goods_art_no] = goods_art_dict_info
|
|
|
|
|
+ handler_result.append(
|
|
|
|
|
+ {
|
|
|
|
|
+ "goods_art_no": goods_art_no,
|
|
|
|
|
+ "success": True,
|
|
|
|
|
+ "info": "处理成功",
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ return_data_check_before_detail["data"]["goods_no_dict"] = new_goods_dict
|
|
|
|
|
+ if is_upper_footer == 1:
|
|
|
|
|
+ goods_dict = parserGoodsDict2Aigc(return_data_check_before_detail)
|
|
|
|
|
+ new_goods_dict = {}
|
|
|
|
|
+ for goods_art_no in goods_dict.keys():
|
|
|
|
|
+ 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")
|
|
|
|
|
+ gender = goods_art_dict_info.get("性别")
|
|
|
|
|
+ model_id = man_id if "男" in gender else women_id
|
|
|
|
|
+ ceshi_image_path = first_pics.get("侧视-抠图")
|
|
|
|
|
+ save_root_path = ceshi_image_path.split("阴影图处理")[0]
|
|
|
|
|
+ save_image_path = f"{save_root_path}模特图.jpg"
|
|
|
|
|
+ shutil.copy(ceshi_image_path, save_image_path)
|
|
|
|
|
+ image_path = aigc_clazz.generateUpperShoes(
|
|
|
|
|
+ save_image_path, model_id, save_image_path
|
|
|
|
|
+ )
|
|
|
|
|
+ goods_art_dict_info["模特图"] = image_path
|
|
|
|
|
+ new_goods_dict[goods_art_no] = goods_art_dict_info
|
|
|
|
|
+ handler_result.append(
|
|
|
|
|
+ {
|
|
|
|
|
+ "goods_art_no": goods_art_no,
|
|
|
|
|
+ "success": True,
|
|
|
|
|
+ "info": "处理成功",
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ return_data_check_before_detail["data"]["goods_no_dict"] = new_goods_dict
|
|
|
|
|
+ if is_detail == 0:
|
|
|
|
|
+ return {
|
|
|
|
|
+ "code": 0,
|
|
|
|
|
+ "msg": "",
|
|
|
|
|
+ "data": {
|
|
|
|
|
+ "output_folder": handler_result_folder,
|
|
|
|
|
+ "list": handler_result,
|
|
|
|
|
+ },
|
|
|
|
|
+ }
|
|
|
check_for_detail_first_res = await run_main.check_for_detail_first_call_back(
|
|
check_for_detail_first_res = await run_main.check_for_detail_first_call_back(
|
|
|
return_data_check_before_detail
|
|
return_data_check_before_detail
|
|
|
)
|
|
)
|
|
@@ -459,17 +547,17 @@ async def handle_detail(request: Request, params: HandlerDetail):
|
|
|
}
|
|
}
|
|
|
)
|
|
)
|
|
|
else:
|
|
else:
|
|
|
- if len(online_stores) >0:
|
|
|
|
|
|
|
+ if len(online_stores) > 0:
|
|
|
result_goods_no_dict = return_data_check_before_detail["data"][
|
|
result_goods_no_dict = return_data_check_before_detail["data"][
|
|
|
"goods_no_dict"
|
|
"goods_no_dict"
|
|
|
]
|
|
]
|
|
|
- for goods_idx,goods_no_dict in enumerate(result_goods_no_dict.keys()):
|
|
|
|
|
|
|
+ for goods_idx, goods_no_dict in enumerate(
|
|
|
|
|
+ result_goods_no_dict.keys()
|
|
|
|
|
+ ):
|
|
|
all_detail_path_list = config_data["all_detail_path_list"]
|
|
all_detail_path_list = config_data["all_detail_path_list"]
|
|
|
for detail_path in all_detail_path_list:
|
|
for detail_path in all_detail_path_list:
|
|
|
if goods_no_dict in detail_path:
|
|
if goods_no_dict in detail_path:
|
|
|
- detail_path_replace = detail_path.replace(
|
|
|
|
|
- "\\", "/"
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ detail_path_replace = detail_path.replace("\\", "/")
|
|
|
result_goods_no_dict[goods_no_dict][
|
|
result_goods_no_dict[goods_no_dict][
|
|
|
"detail_path"
|
|
"detail_path"
|
|
|
] = f"{detail_path_replace}/详情页.jpg"
|
|
] = f"{detail_path_replace}/详情页.jpg"
|
|
@@ -724,16 +812,18 @@ def delect_goods_arts(params: PhotoRecordDelete):
|
|
|
"msg": "操作成功",
|
|
"msg": "操作成功",
|
|
|
"data": None,
|
|
"data": None,
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
def query_config_by_key(key_name):
|
|
def query_config_by_key(key_name):
|
|
|
"""
|
|
"""
|
|
|
- 在sys_configs.json格式的数据中查询指定的key,如果匹配则返回整个对象
|
|
|
|
|
-
|
|
|
|
|
- Args:
|
|
|
|
|
- key_name (str): 要查询的key名称
|
|
|
|
|
-
|
|
|
|
|
- Returns:
|
|
|
|
|
- dict or None: 匹配的对象或None(如果没有找到)
|
|
|
|
|
- """
|
|
|
|
|
|
|
+ 在sys_configs.json格式的数据中查询指定的key,如果匹配则返回整个对象
|
|
|
|
|
+
|
|
|
|
|
+ Args:
|
|
|
|
|
+ key_name (str): 要查询的key名称
|
|
|
|
|
+
|
|
|
|
|
+ Returns:
|
|
|
|
|
+ dict or None: 匹配的对象或None(如果没有找到)
|
|
|
|
|
+ """
|
|
|
try:
|
|
try:
|
|
|
# 获取所有配置数据
|
|
# 获取所有配置数据
|
|
|
configs = json.load(open("sys_configs.json", encoding="utf-8"))
|
|
configs = json.load(open("sys_configs.json", encoding="utf-8"))
|
|
@@ -748,6 +838,7 @@ def query_config_by_key(key_name):
|
|
|
print(f"查询配置时出错: {e}")
|
|
print(f"查询配置时出错: {e}")
|
|
|
return None
|
|
return None
|
|
|
|
|
|
|
|
|
|
+
|
|
|
@app.get("/get_sys_config", description="查询系统配置")
|
|
@app.get("/get_sys_config", description="查询系统配置")
|
|
|
def get_sys_config(key: str = None):
|
|
def get_sys_config(key: str = None):
|
|
|
if key == None:
|
|
if key == None:
|