detail_func.py 6.7 KB

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