Parcourir la source

推送到消息中间件时带上userId和deviceModel,获取消息时,拿到userId和deviceModel保存到消息中心

wanghaicheng il y a 5 ans
Parent
commit
86b21d0991

+ 26 - 6
lift-common/src/main/java/cn.com.ty.lift.common/model/PushMessage.java

@@ -24,11 +24,12 @@ public class PushMessage implements Serializable {
 
     private static final long serialVersionUID = 4125096758372084309L;
 
-    private String       title;
-    private String       content;
+    private String title;
+    private String content;
+    private Hashtable<Long,Integer> users = new Hashtable<>();
     private List<String> toList = new ArrayList<>();
     //the count of try again. Increase 1 for each failure, maximum times 100
-    private int          tryCount = 0;
+    private int tryCount = 0;
 
     private PushMessage() {
     }
@@ -38,7 +39,7 @@ public class PushMessage implements Serializable {
         this.content = content;
     }
 
-    public PushMessage add(String to){
+    public PushMessage add(String to) {
         this.toList.add(to);
         return this;
     }
@@ -538,7 +539,7 @@ public class PushMessage implements Serializable {
      */
     public boolean sendTokenOnPlatform(JmsMessagingTemplate jmsMessagingTemplate, List<PushUserInfo> pushUserInfos) {
         try {
-            if(IterUtil.isEmpty(pushUserInfos)){
+            if (IterUtil.isEmpty(pushUserInfos)) {
                 return false;
             }
             Set<String> toAndroid = new HashSet<>();
@@ -552,6 +553,7 @@ public class PushMessage implements Serializable {
                     }
                 }
             }
+            resetUserIds(pushUserInfos);
             if (IterUtil.isNotEmpty(toAndroid)) {
                 this.setToList(new ArrayList<>(toAndroid));
                 jmsMessagingTemplate.send(ValuePool.PUSH_QUEUE_ANDROID_TOKEN, new GenericMessage<>(this));
@@ -576,9 +578,10 @@ public class PushMessage implements Serializable {
             if (Objects.isNull(pushUserInfo)) {
                 return false;
             }
-            if(!pushUserInfo.available()){
+            if (!pushUserInfo.available()) {
                 return false;
             }
+            resetUserIds(pushUserInfo);
             this.add(pushUserInfo.getDeviceFlag());
             if (pushUserInfo.isAndroid()) {
                 jmsMessagingTemplate.send(ValuePool.PUSH_QUEUE_ANDROID_TOKEN, new GenericMessage<>(this));
@@ -607,4 +610,21 @@ public class PushMessage implements Serializable {
             return false;
         }
     }
+
+    /**
+     * 将用户id和设备类型传到消息中间件中,方便消息中心功能来保存
+     * @param pushUserInfos 用户信息列表
+     */
+    private void resetUserIds(List<PushUserInfo> pushUserInfos) {
+        users.clear();
+        pushUserInfos.forEach(pushUserInfo -> users.put(pushUserInfo.getUserId(),pushUserInfo.getDeviceModel()));
+    }
+    /**
+     * 将用户id和设备类型传到消息中间件中,方便消息中心功能来保存
+     * @param pushUserInfo 用户信息列表
+     */
+    private void resetUserIds(PushUserInfo pushUserInfo) {
+        users.clear();
+        users.put(pushUserInfo.getUserId(),pushUserInfo.getDeviceModel());
+    }
 }

+ 5 - 6
lift-push/src/main/java/cn/com/ty/lift/push/app/PushConsumer.java

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Hashtable;
 import java.util.List;
 
 /**
@@ -138,12 +139,10 @@ public class PushConsumer {
      * @param pushMessage 要推送的消息
      */
     private void saveMessage(PushMessage pushMessage) {
-        List<String> toList = pushMessage.getToList();
-        List<UserAccount> userAccounts = userAccountService.list(Wrappers.<UserAccount>query().in(!toList.isEmpty(), "device_flag", toList));
         List<TimeMessage> timeMessages = new ArrayList<>();
-        for (UserAccount userAccount : userAccounts) {
+        pushMessage.getUsers().forEach((k, v) -> {
             TimeMessage timeMessage = new TimeMessage();
-            timeMessage.setUserId(userAccount.getUserId());
+            timeMessage.setUserId(k);
             timeMessage.setContent(pushMessage.getContent());
             switch (pushMessage.getTitle()) {
                 case "团队消息":
@@ -159,11 +158,11 @@ public class PushConsumer {
                     timeMessage.setType(4);
                     break;
             }
-            timeMessage.setDeviceModel(userAccount.getDeviceModel());
+            timeMessage.setDeviceModel(v);
             timeMessage.setCreateUserId(10000L);
             timeMessage.setCreateTime(LocalDateTime.now());
             timeMessages.add(timeMessage);
-        }
+        });
         log.info("消息记录列表:" + timeMessages.toString());
         timeMessageService.saveBatch(timeMessages);
     }