zhangyong 9 mēneši atpakaļ
vecāks
revīzija
d04e07a7a4
1 mainītis faili ar 16 papildinājumiem un 8 dzēšanām
  1. 16 8
      common/feishu_form.py

+ 16 - 8
common/feishu_form.py

@@ -59,27 +59,35 @@ class Material():
     """
     @classmethod
     def sort_keyword_data(cls, data):
+        # 将 JSON 字符串列表转为字典对象列表
         data = [json.loads(item) for item in data]
-        # 根据 keyword_name 进行分组
-        groups = defaultdict(list)
+
+        # 根据 keyword_name 和 channel_id 进行分组
+        groups = defaultdict(lambda: defaultdict(list))
         for item in data:
-            groups[item['keyword_name']].append(item)
+            groups[item['keyword_name']][item['channel_id']].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 列表进行轮流排序
+        # 将 priority_names 列表进行轮流排序,同时对 channel_id 进行轮流排序
         result = []
-        max_length = max(len(groups[name]) for name in priority_names)
+        max_length = max(len(groups[name][channel]) for name in priority_names for channel in groups[name])
 
         for i in range(max_length):
             for name in priority_names:
-                if i < len(groups[name]):
-                    result.append(groups[name][i])
+                channels = list(groups[name].keys())
+                channel_index = i % len(channels)  # 依次循环不同的 channel_id
+                channel = channels[channel_index]
+                if i < len(groups[name][channel]):
+                    result.append(groups[name][channel][i])
+
         # 将未列入优先顺序的其余数据添加到结果中
         for name in remaining_names:
-            result.extend(groups[name])
+            for channel in groups[name]:
+                result.extend(groups[name][channel])
 
         # 将结果转回 JSON 字符串列表
         sorted_list = [json.dumps(item, ensure_ascii=False) for item in result]