detail_func.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. import json
  2. import os
  3. import settings
  4. import shutil
  5. def get_all_dir_info(image_dir, goods_art_nos):
  6. # 遍历货号获取所有货号--可能为编号
  7. folder_name_list = []
  8. for folder_name in os.listdir(image_dir):
  9. _path = "{}/{}".format(image_dir, folder_name)
  10. print("_path===============>", _path)
  11. if not os.path.isdir(_path):
  12. continue
  13. if "无法对应" in folder_name:
  14. continue
  15. if "软件" in folder_name:
  16. if len(os.listdir(_path)) == 0:
  17. # 删除空文件夹
  18. os.rmdir(_path)
  19. continue
  20. print("folder_name====>", folder_name)
  21. print("goods_art_no====>", goods_art_nos)
  22. for goods_art_no in goods_art_nos:
  23. # 有原始图子文件夹就认为是一个正常的货号文件夹
  24. print("图片地址=====>>>>>",f"{_path}/原始图")
  25. if os.path.exists(f"{_path}/原始图"):
  26. folder_name_list.append(f"{goods_art_no}")
  27. return folder_name_list
  28. """
  29. def get_all_dir_info(image_dir):
  30. # 遍历货号获取所有货号--可能为编号
  31. folder_name_list = []
  32. for folder_name in os.listdir(image_dir):
  33. _path = "{}/{}".format(image_dir, folder_name)
  34. if not os.path.isdir(_path):
  35. continue
  36. if "无法对应" in folder_name:
  37. continue
  38. if "软件" in folder_name:
  39. if len(os.listdir(_path)) == 0:
  40. # 删除空文件夹
  41. os.rmdir(_path)
  42. continue
  43. print("folder_name====>", folder_name)
  44. print("goods_art_no====>", goods_art_nos)
  45. if folder_name in goods_art_nos:
  46. folder_name_list.append(folder_name)
  47. return folder_name_list
  48. """
  49. def get_all_detail_info(image_dir):
  50. # 遍历货号获取所有货号--可能为编号
  51. _list = []
  52. for goods_no in os.listdir(image_dir):
  53. goods_art_no_path = "{}/{}".format(image_dir, goods_no)
  54. if not os.path.isdir(goods_art_no_path):
  55. continue
  56. _list.append(goods_no)
  57. return _list
  58. def get_all_dir_info_and_pic_info(root_path, folder_name_list, need_view_list):
  59. # 遍历货号获取所有货号--可能为编号
  60. """
  61. 数据返回为每个文件夹下的文件结构
  62. """
  63. return_data = {}
  64. for one_folder in folder_name_list:
  65. source_material_path = "{}/{}/阴影图处理".format(root_path, one_folder)
  66. data = {"pics": {},
  67. "message": "",
  68. "800x800": []
  69. }
  70. # source_material_path ===================
  71. if not os.path.exists(source_material_path):
  72. data["message"] = "缺失 阴影图处理 文件夹"
  73. else:
  74. if len(os.listdir(source_material_path)) % 2 != 0:
  75. data["message"] = "缺失 阴影图处理 图片不为2的倍数"
  76. else:
  77. # 遍历图片
  78. _pic_name_list = []
  79. for pic in os.listdir(source_material_path):
  80. _pic = pic.replace(".png", "")
  81. _pic = _pic.split("_")
  82. if len(_pic) == 3:
  83. # 示例:侧视-阴影
  84. data["pics"]["{}-{}".format(_pic[1], _pic[2])] = "{}/{}".format(source_material_path, pic)
  85. _pic_name_list.append(_pic[1])
  86. # 检查图片是否都有
  87. _ = [x for x in need_view_list if x not in _pic_name_list]
  88. if _:
  89. _ = ",".join(_)
  90. data["message"] += "\图片{}视角缺失".format(_)
  91. # 放入商品货号主图 ===================
  92. goods_art_800_pic_f = "{}/{}/800x800".format(root_path, one_folder)
  93. print("缺失主图文件夹=====>>>>>>>", goods_art_800_pic_f)
  94. if not os.path.exists(goods_art_800_pic_f):
  95. data["message"] += "\缺失主图文件夹"
  96. else:
  97. if len(os.listdir(goods_art_800_pic_f)) == 0:
  98. data["message"] += "\缺失主图"
  99. else:
  100. for goods_art_pic in os.listdir(goods_art_800_pic_f):
  101. file_extends = goods_art_pic.split('.')[-1]
  102. # 过滤非图片信息
  103. if file_extends.lower() in ["jpg", "jpeg", "png", "webp", "avif"]:
  104. data["800x800"].append("{}/{}".format(goods_art_800_pic_f, goods_art_pic))
  105. # =======================
  106. return_data[one_folder] = data
  107. print("检查没有问题的文件夹-----------return_data")
  108. print(json.dumps(return_data))
  109. return return_data
  110. def merge_local_and_remote_data(all_dir_info_data: dict, remote_data):
  111. """
  112. all_dir_info_data:文件夹基础数据;文件夹结构数据
  113. remote_data:远程数据
  114. """
  115. print("---all_dir_info_data:")
  116. print(json.dumps(all_dir_info_data))
  117. print("---remote_data:")
  118. print(json.dumps(remote_data))
  119. error_folder_name_list = []
  120. for folder_name, value in all_dir_info_data.items():
  121. if folder_name not in remote_data:
  122. value["message"] = "文件夹没有对应数据信息"
  123. error_folder_name_list.append(folder_name)
  124. else:
  125. value["remote_data"] = remote_data[folder_name]
  126. # =======开始组装数据
  127. # 组装数据,按款号进行组装数据
  128. goods_no_dict = {}
  129. for folder_name, value in all_dir_info_data.items():
  130. if "remote_data" not in value:
  131. continue
  132. if "data" not in value["remote_data"]:
  133. continue
  134. _remote_data = value["remote_data"]["data"]
  135. goods_no = _remote_data["款号"]
  136. if goods_no not in goods_no_dict:
  137. goods_no_dict[goods_no] = {}
  138. goods_no_dict[goods_no]["款号"] = goods_no
  139. goods_no_dict[goods_no]["货号资料"] = []
  140. _goods_number = _remote_data["编号"] if "编号" in _remote_data else ""
  141. if _goods_number:
  142. _goods_number = "NUM{}".format(_goods_number)
  143. else:
  144. _goods_number = ""
  145. goods_no_dict[goods_no]["货号资料"].append({"货号": _remote_data["商品货号"],
  146. "文件夹名称": folder_name,
  147. "编号": _goods_number,
  148. "颜色名称": _remote_data["颜色名称"] if "颜色名称" in _remote_data else "",
  149. "pics": value["pics"],
  150. "800x800": value["800x800"],
  151. })
  152. # 添加款号的基础信息,进行去重处理,此处为动态字段
  153. key = ["款号", "商品货号", "编号", "颜色名称", ]
  154. for _k, _v in _remote_data.items():
  155. if _k not in key:
  156. if _k not in goods_no_dict[goods_no]:
  157. goods_no_dict[goods_no][_k] = ""
  158. if not goods_no_dict[goods_no][_k]:
  159. if _v:
  160. goods_no_dict[goods_no][_k] = _v
  161. # ======如果为红蜻蜓,则key需要更改为编号=========
  162. # 改款号信息 取任意一个商品的编号作为款号,格式为KNUM00001
  163. if settings.PROJECT == "红蜻蜓":
  164. _goods_no_dict = {}
  165. for key, value in goods_no_dict.items():
  166. number = "K{}".format(value["货号资料"][0]["编号"])
  167. _goods_no_dict[number] = value
  168. else:
  169. _goods_no_dict = goods_no_dict
  170. return _goods_no_dict, error_folder_name_list
  171. def move_folders(path_list, target_folder):
  172. create_folder(target_folder)
  173. for source_folder in path_list:
  174. shutil.move(source_folder, target_folder)
  175. def create_folder(path):
  176. if not os.path.exists(path):
  177. os.makedirs(path)