zhangyong 7 månader sedan
förälder
incheckning
1e2abdf807
1 ändrade filer med 15 tillägg och 17 borttagningar
  1. 15 17
      common/feishu_form.py

+ 15 - 17
common/feishu_form.py

@@ -59,29 +59,27 @@ class Material():
     """
     @classmethod
     def sort_keyword_data(cls, data):
-        # 将 JSON 字符串列表转为字典对象列表
         data = [json.loads(item) for item in data]
-
-        # 根据 channel_id 和 keyword_name 进行分组
-        groups = defaultdict(lambda: defaultdict(list))
+        # 根据 keyword_name 进行分组
+        groups = defaultdict(list)
         for item in data:
-            groups[item['channel_id']][item['keyword_name']].append(item)
-
-        # 获取所有唯一的 channel_id 并创建一个轮流顺序
-        unique_channel_ids = list(groups.keys())
+            groups[item['keyword_name']].append(item)
+        # 获取所有唯一的 keyword_name 并创建一个轮流顺序
+        unique_names = list(groups.keys())
+        priority_names = [name for name in unique_names if name in unique_names]
+        remaining_names = [name for name in unique_names if name not in priority_names]
 
+        # 将 priority_names 列表进行轮流排序
         result = []
-
-        # 依次循环不同的 channel_id
-        max_length = max(len(groups[channel][keyword]) for channel in unique_channel_ids for keyword in groups[channel])
+        max_length = max(len(groups[name]) for name in priority_names)
 
         for i in range(max_length):
-            for channel in unique_channel_ids:
-                keywords = list(groups[channel].keys())
-                keyword_index = i % len(keywords)  # 依次循环不同的 keyword_name
-                keyword = keywords[keyword_index]
-                if i < len(groups[channel][keyword]):
-                    result.append(groups[channel][keyword][i])
+            for name in priority_names:
+                if i < len(groups[name]):
+                    result.append(groups[name][i])
+        # 将未列入优先顺序的其余数据添加到结果中
+        for name in remaining_names:
+            result.extend(groups[name])
 
         # 将结果转回 JSON 字符串列表
         sorted_list = [json.dumps(item, ensure_ascii=False) for item in result]