detail_func.py 6.5 KB

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