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}/{goods_art_no}/原始图")
  25. if os.path.exists(f"{_path}/{goods_art_no}/原始图"):
  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. if not os.path.exists(goods_art_800_pic_f):
  94. data["message"] += "\缺失主图文件夹"
  95. else:
  96. if len(os.listdir(goods_art_800_pic_f)) == 0:
  97. data["message"] += "\缺失主图"
  98. else:
  99. for goods_art_pic in os.listdir(goods_art_800_pic_f):
  100. file_extends = goods_art_pic.split('.')[-1]
  101. # 过滤非图片信息
  102. if file_extends.lower() in ["jpg", "jpeg", "png", "webp", "avif"]:
  103. data["800x800"].append("{}/{}".format(goods_art_800_pic_f, goods_art_pic))
  104. # =======================
  105. return_data[one_folder] = data
  106. print("检查没有问题的文件夹-----------return_data")
  107. print(json.dumps(return_data))
  108. return return_data
  109. def merge_local_and_remote_data(all_dir_info_data: dict, remote_data):
  110. """
  111. all_dir_info_data:文件夹基础数据;文件夹结构数据
  112. remote_data:远程数据
  113. """
  114. print("---all_dir_info_data:")
  115. print(json.dumps(all_dir_info_data))
  116. print("---remote_data:")
  117. print(json.dumps(remote_data))
  118. error_folder_name_list = []
  119. for folder_name, value in all_dir_info_data.items():
  120. if folder_name not in remote_data:
  121. value["message"] = "文件夹没有对应数据信息"
  122. error_folder_name_list.append(folder_name)
  123. else:
  124. value["remote_data"] = remote_data[folder_name]
  125. # =======开始组装数据
  126. # 组装数据,按款号进行组装数据
  127. goods_no_dict = {}
  128. for folder_name, value in all_dir_info_data.items():
  129. if "remote_data" not in value:
  130. continue
  131. if "data" not in value["remote_data"]:
  132. continue
  133. _remote_data = value["remote_data"]["data"]
  134. goods_no = _remote_data["款号"]
  135. if goods_no not in goods_no_dict:
  136. goods_no_dict[goods_no] = {}
  137. goods_no_dict[goods_no]["款号"] = goods_no
  138. goods_no_dict[goods_no]["货号资料"] = []
  139. _goods_number = _remote_data["编号"] if "编号" in _remote_data else ""
  140. if _goods_number:
  141. _goods_number = "NUM{}".format(_goods_number)
  142. else:
  143. _goods_number = ""
  144. goods_no_dict[goods_no]["货号资料"].append({"货号": _remote_data["商品货号"],
  145. "文件夹名称": folder_name,
  146. "编号": _goods_number,
  147. "颜色名称": _remote_data["颜色名称"] if "颜色名称" in _remote_data else "",
  148. "pics": value["pics"],
  149. "800x800": value["800x800"],
  150. })
  151. # 添加款号的基础信息,进行去重处理,此处为动态字段
  152. key = ["款号", "商品货号", "编号", "颜色名称", ]
  153. for _k, _v in _remote_data.items():
  154. if _k not in key:
  155. if _k not in goods_no_dict[goods_no]:
  156. goods_no_dict[goods_no][_k] = ""
  157. if not goods_no_dict[goods_no][_k]:
  158. if _v:
  159. goods_no_dict[goods_no][_k] = _v
  160. # ======如果为红蜻蜓,则key需要更改为编号=========
  161. # 改款号信息 取任意一个商品的编号作为款号,格式为KNUM00001
  162. if settings.PROJECT == "红蜻蜓":
  163. _goods_no_dict = {}
  164. for key, value in goods_no_dict.items():
  165. number = "K{}".format(value["货号资料"][0]["编号"])
  166. _goods_no_dict[number] = value
  167. else:
  168. _goods_no_dict = goods_no_dict
  169. return _goods_no_dict, error_folder_name_list
  170. def move_folders(path_list, target_folder):
  171. create_folder(target_folder)
  172. for source_folder in path_list:
  173. shutil.move(source_folder, target_folder)
  174. def create_folder(path):
  175. if not os.path.exists(path):
  176. os.makedirs(path)