ソースを参照

优质视频区分员工

xueyiming 5 ヶ月 前
コミット
3f2ae09f54

+ 35 - 16
we-com-server/src/main/java/com/tzld/piaoquan/wecom/job/WeComMessageDataJob.java

@@ -71,7 +71,7 @@ public class WeComMessageDataJob {
     private static final int MAX_BYTES = 64;
 
     //历史优质视频可推送用户列表
-    List<PushMessage> goodHistoryPushList = new ArrayList<>();
+    Map<Long, List<PushMessage>> goodHistoryPushMap = new HashMap<>();
 
     //保底视频列表
     Map<Long, List<Long>> guaranteedVideoMap = new HashMap<>();
@@ -91,11 +91,27 @@ public class WeComMessageDataJob {
             PushMessage pushMessage = new PushMessage();
             Long videoId = Long.parseLong((String) record.get(0));
             Set<Long> userIds = new HashSet<>(JSONObject.parseArray((String) record.get(1), Long.class));
+            Long staffId = Long.parseLong((String) record.get(2));
+            Double score = Double.parseDouble((String) record.get(3));
             pushMessage.setVideoId(videoId);
             pushMessage.setUserIds(userIds);
+            pushMessage.setStaffId(staffId);
+            pushMessage.setScore(score);
             list.add(pushMessage);
         }
-        goodHistoryPushList = list;
+        Map<Long, List<PushMessage>> groupedMap = list.stream()
+                .collect(Collectors.groupingBy(PushMessage::getStaffId,
+                        Collectors.mapping(pushMessage -> pushMessage,
+                                Collectors.toList())))
+                .entrySet()
+                .stream()
+                .collect(Collectors.toMap(
+                        Map.Entry::getKey,
+                        entry -> entry.getValue().stream()
+                                .sorted(Comparator.comparing(PushMessage::getScore).reversed()) // 根据 score 降序排序
+                                .collect(Collectors.toList())
+                ));
+        goodHistoryPushMap = groupedMap;
 
         //保底视频获取
         String key = String.format(GUARANTEED_MINI_PROGRAM_KEY, DateUtil.getThatDayDateString());
@@ -236,20 +252,23 @@ public class WeComMessageDataJob {
         for (StaffWithUser staffWithUser : staffWithUserList) {
             int n = 0;
             SendMessage sendMessage = new SendMessage();
-            for (PushMessage pushMessage : goodHistoryPushList) {
-                if (pushMessage.getUserIds().contains(user.getId())) {
-                    if (n == 0) {
-                        sendMessage.setVideoId1(pushMessage.getVideoId());
-                    }
-                    if (n == 1) {
-                        sendMessage.setVideoId2(pushMessage.getVideoId());
-                    }
-                    if (n == 2) {
-                        sendMessage.setVideoId3(pushMessage.getVideoId());
-                    }
-                    n++;
-                    if (n >= MAX_VIDEO_NUM) {
-                        break;
+            List<PushMessage> list = goodHistoryPushMap.get(staffWithUser.getStaffId());
+            if (!CollectionUtils.isEmpty(list)) {
+                for (PushMessage pushMessage : list) {
+                    if (pushMessage.getUserIds().contains(user.getId())) {
+                        if (n == 0) {
+                            sendMessage.setVideoId1(pushMessage.getVideoId());
+                        }
+                        if (n == 1) {
+                            sendMessage.setVideoId2(pushMessage.getVideoId());
+                        }
+                        if (n == 2) {
+                            sendMessage.setVideoId3(pushMessage.getVideoId());
+                        }
+                        n++;
+                        if (n >= MAX_VIDEO_NUM) {
+                            break;
+                        }
                     }
                 }
             }

+ 4 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/model/bo/PushMessage.java

@@ -10,4 +10,8 @@ public class PushMessage {
     private Long videoId;
 
     private Set<Long> userIds;
+
+    private Long staffId;
+
+    private Double score;
 }