detail_func.py 6.6 KB

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