Browse Source

消息通知

xhb 3 months ago
parent
commit
e413eed6b7

+ 1 - 1
incubator-game/src/main/java/com/incubator/game/constant/RedisKeyConstant.java

@@ -26,7 +26,7 @@ public class RedisKeyConstant {
     /**
      * 查看个人活动
      */
-    public static final String ZJ_USER_EVENT_KEY = "zj:user:event:activity";
+    public static final String ZJ_USER_EVENT_KEY = "zj:user:event:";
 
     /**
      * 查看个人消息

+ 34 - 3
incubator-game/src/main/java/com/incubator/game/data/po/MessagePO.java

@@ -1,5 +1,10 @@
 package com.incubator.game.data.po;
 
+import cn.hutool.json.JSONArray;
+
+import java.util.Date;
+import java.util.List;
+
 /**
  * Author:  xhb
  * Date:  2024-12-17 10:24
@@ -29,13 +34,39 @@ public class MessagePO {
     /**
      * 消息时间
      */
-    private String createTime;
+    private Date createTime;
 
     /**
      * 消息状态
      */
     private String status;
 
+    /**
+     * 是否领奖
+     */
+    private String  isGet;
+
+    /**
+     * 奖励列表
+     */
+    private JSONArray rewardList;
+
+    public String getIsGet() {
+        return isGet;
+    }
+
+    public void setIsGet(String isGet) {
+        this.isGet = isGet;
+    }
+
+    public JSONArray getRewardList() {
+        return rewardList;
+    }
+
+    public void setRewardList(JSONArray rewardList) {
+        this.rewardList = rewardList;
+    }
+
     public String getId() {
         return id;
     }
@@ -68,11 +99,11 @@ public class MessagePO {
         this.content = content;
     }
 
-    public String getCreateTime() {
+    public Date getCreateTime() {
         return createTime;
     }
 
-    public void setCreateTime(String createTime) {
+    public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
 

+ 4 - 0
incubator-game/src/main/java/com/incubator/game/handler/address/GetAddressList.java

@@ -34,6 +34,10 @@ public class GetAddressList extends NetHandler {
         String userInfo = RedisUtil.get(RedisKeyConstant.USER_BASE + userId);
         JSONObject userObject = JSONUtil.parseObj(userInfo);
         JSONArray userAddress = userObject.getJSONArray("userAddress");
+        if (userAddress == null || userAddress.isEmpty()) {
+            response.setData(new HashMap<>());
+            return;
+        }
         List<ZjMemberAddrPO> zjMemberAddrPOList = userAddress.toList(ZjMemberAddrPO.class);
         Map<String,Object> map = new HashMap<>();
 //        List<Map<String, Object>> newList  = new ArrayList<>();

+ 1 - 1
incubator-game/src/main/java/com/incubator/game/handler/backpack/BagUse.java

@@ -95,7 +95,7 @@ public class BagUse extends NetHandler {
                 String orderNo = UtilCore.getDateRandomId();//订单号
                 zjOrder.setOrderNo(orderNo);
                 zjOrder.setProductName("实物道具");
-                zjOrder.setStatus("3");
+                zjOrder.setOrderStatus("3");
                 zjOrder.setPayType("2");
                 zjOrder.setOrderType("5");
                 zjOrder.setName(addressee);

+ 1 - 1
incubator-game/src/main/java/com/incubator/game/handler/event/EventInfo.java

@@ -30,7 +30,7 @@ public class EventInfo extends NetHandler {
         String eventStr = RedisUtil.get(RedisKeyConstant.ZJ_USER_EVENT_KEY + userId);
         JSONArray objects = JSONUtil.parseArray(eventStr);
         Map<String, Object> map = new HashMap<>();
-        map.put("event", ProtoUtil.eventToJsonArray(objects));
+        map.put("event", ProtoUtil.eventToJsonArray(eventStr));
         response.setData(map);
     }
 }

+ 47 - 0
incubator-game/src/main/java/com/incubator/game/handler/event/GetReward.java

@@ -0,0 +1,47 @@
+package com.incubator.game.handler.event;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.incubator.common.MessageHandler;
+import com.incubator.common.net.Connection;
+import com.incubator.core.net.ws.NetHandler;
+import com.incubator.core.net.ws.WSRequest;
+import com.incubator.core.net.ws.WSResponse;
+import com.incubator.game.constant.RedisKeyConstant;
+import com.incubator.game.data.jedis.RedisUtil;
+import com.incubator.game.data.mq.RabbitMQUtil;
+import com.incubator.game.util.JsonToMapUtil;
+import com.incubator.game.util.ProtoUtil;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-17 14:56
+ */
+@MessageHandler(id = CommonProto.Cmd.GetRewardReq_VALUE)
+public class GetReward extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.GetRewardRes_VALUE);
+        String userId = session.getPlayerId();
+        String eventId = request.getDataValue("eventId", String.class, "");//活动id
+        String periodNum = request.getDataValue("periodNum", String.class, "");//活动id
+        JSONObject object = new JSONObject();
+        object.put("type","GetReward");
+        object.put("userId",userId);
+        object.put("eventId",eventId);
+        object.put("periodNum",periodNum);
+        try {
+            RabbitMQUtil.sendMessage(object.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        response.setMessage("领取成功!");
+    }
+}

+ 3 - 0
incubator-game/src/main/java/com/incubator/game/handler/login/LoginGameHandler.java

@@ -109,6 +109,9 @@ public class LoginGameHandler extends NetHandler {
 		map.put("contestInfo", ProtoUtil.contestListToMessage());
 
 		//奖励弹窗
+		String eventStr = RedisUtil.get(RedisKeyConstant.ZJ_USER_EVENT_KEY + userId);
+		map.put("eventList", ProtoUtil.eventToJsonArray(eventStr));
+
 
 		response.setData(map);
 	}

+ 2 - 4
incubator-game/src/main/java/com/incubator/game/handler/mall/ShopBuy.java

@@ -14,10 +14,7 @@ import com.incubator.game.data.entity.ZjOrder;
 import com.incubator.game.data.entity.ZjUser;
 import com.incubator.game.data.jedis.RedisUtil;
 import com.incubator.game.data.mq.RabbitMQUtil;
-import com.incubator.game.data.po.ZjBackpackPO;
-import com.incubator.game.data.po.ZjOrderPO;
-import com.incubator.game.data.po.ZjProductPo;
-import com.incubator.game.data.po.ZjUserLobbyPo;
+import com.incubator.game.data.po.*;
 import com.incubator.game.util.UtilCore;
 import com.incubator.message.proto.CommonProto;
 
@@ -50,6 +47,7 @@ public class ShopBuy extends NetHandler {
         JSONArray userBackpack = userObject.getJSONArray("userBackpack");
         JSONArray orderList = userObject.getJSONArray("orderList");
         List<ZjBackpackPO> zjBackpackPOS = userBackpack.toList(ZjBackpackPO.class);
+
         List<ZjOrderPO> zjOrderPOS = orderList.toList(ZjOrderPO.class);
 
         String malls = RedisUtil.get(RedisKeyConstant.MALL_BASE);

+ 61 - 0
incubator-game/src/main/java/com/incubator/game/handler/message/GetRewardMessage.java

@@ -0,0 +1,61 @@
+package com.incubator.game.handler.message;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.incubator.common.MessageHandler;
+import com.incubator.common.net.Connection;
+import com.incubator.core.net.ws.NetHandler;
+import com.incubator.core.net.ws.WSRequest;
+import com.incubator.core.net.ws.WSResponse;
+import com.incubator.game.constant.RedisKeyConstant;
+import com.incubator.game.data.jedis.RedisUtil;
+import com.incubator.game.data.mq.RabbitMQUtil;
+import com.incubator.game.data.po.MessagePO;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.List;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-17 15:33
+ * Description: 获取奖励消息
+ */
+@MessageHandler(id = CommonProto.Cmd.GetRewardMessageReq_VALUE)
+public class GetRewardMessage extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.GetRewardMessageRes_VALUE);
+        String userId = session.getPlayerId();
+        String id = request.getDataValue("id", String.class, "");//消息id
+
+        String jsonStr = RedisUtil.get(RedisKeyConstant.ZJ_USER_MESSAGE + userId);
+        JSONObject parse = JSONUtil.parseObj(jsonStr);
+        JSONArray jsonArray = parse.getJSONArray("messageList");
+        List<MessagePO> messagePOS = jsonArray.toList(MessagePO.class);
+
+        for (MessagePO messagePO : messagePOS) {
+            if(messagePO.getId().equals(id)){
+                messagePO.setIsGet("Y");
+                JSONArray rewardList = messagePO.getRewardList();
+
+                JSONObject object = new JSONObject();
+                object.put("type","GetMessageReward");
+                object.put("userId",userId);
+                object.put("rewardList",rewardList);
+                try {
+                    RabbitMQUtil.sendMessage(object.toString());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+                break;
+            }
+        }
+        parse.put("messageList", jsonArray);
+        RedisUtil.set(RedisKeyConstant.ZJ_USER_MESSAGE + userId, parse.toString());
+        response.setMessage("领取成功!");
+    }
+
+}

+ 10 - 4
incubator-game/src/main/java/com/incubator/game/handler/message/MessageInfo.java

@@ -12,6 +12,7 @@ import com.incubator.core.net.ws.WSResponse;
 import com.incubator.game.constant.RedisKeyConstant;
 import com.incubator.game.data.jedis.RedisUtil;
 import com.incubator.game.data.po.MessagePO;
+import com.incubator.game.util.JsonToMapUtil;
 import com.incubator.game.util.ObjectMapperUtil;
 import com.incubator.message.proto.CommonProto;
 
@@ -32,11 +33,16 @@ public class MessageInfo extends NetHandler {
         String userId = session.getPlayerId();
         String jsonStr = RedisUtil.get(RedisKeyConstant.ZJ_USER_MESSAGE + userId);
         JSONObject parse = JSONUtil.parseObj(jsonStr);
-        JSONArray jsonArray = parse.getJSONArray("");
-        List<MessagePO> messagePOS = jsonArray.toList(MessagePO.class);
-        List<Map<String, Object>> maps = ObjectMapperUtil.convertListToMapList(messagePOS);
+        String messageList =(String)parse.get("messageList");
+        JSONArray jsonArray = parse.getJSONArray("messageList");
+        if (jsonArray == null) {
+           return;
+        }
+//        List<MessagePO> messagePOS = jsonArray.toList(MessagePO.class);
+//        List<Map<String, Object>> maps = ObjectMapperUtil.convertListToMapList(messagePOS);
+        List<Map<String, Object>> mapList = JsonToMapUtil.parseJsonArrayToMapList(jsonStr);
         Map<String, Object> map = new HashMap<>();
-        map.put("messageList", maps);
+        map.put("messageList", mapList);
         response.setData(map);
     }
 }

+ 51 - 0
incubator-game/src/main/java/com/incubator/game/handler/message/ReadMessage.java

@@ -0,0 +1,51 @@
+package com.incubator.game.handler.message;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.incubator.common.MessageHandler;
+import com.incubator.common.net.Connection;
+import com.incubator.core.net.ws.NetHandler;
+import com.incubator.core.net.ws.WSRequest;
+import com.incubator.core.net.ws.WSResponse;
+import com.incubator.game.constant.RedisKeyConstant;
+import com.incubator.game.data.jedis.RedisUtil;
+import com.incubator.game.data.po.MessagePO;
+import com.incubator.message.proto.CommonProto;
+
+import java.util.List;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-17 14:58
+ */
+@MessageHandler(id = CommonProto.Cmd.ReadMessageReq_VALUE)
+public class ReadMessage extends NetHandler {
+
+    @Override
+    public void onDate(Connection session, WSRequest request, WSResponse response) {
+        response.setCmd(CommonProto.Cmd.ReadMessageRes_VALUE);
+
+        String userId = session.getPlayerId();
+        String id = request.getDataValue("id", String.class, "");//消息id
+        String status = request.getDataValue("status", String.class, "");//消息状态
+
+        String jsonStr = RedisUtil.get(RedisKeyConstant.ZJ_USER_MESSAGE + userId);
+        JSONObject parse = JSONUtil.parseObj(jsonStr);
+        JSONArray jsonArray = parse.getJSONArray("messageList");
+        List<MessagePO> messagePOS = jsonArray.toList(MessagePO.class);
+
+        for (MessagePO messagePO : messagePOS) {
+            if (messagePO.getId().equals(id)) {
+                messagePO.setStatus(status);
+                if (status.equals("-1")){
+                    messagePOS.remove(messagePO);
+                }
+                break;
+            }
+        }
+        parse.put("messageList", messagePOS);
+        RedisUtil.set(RedisKeyConstant.ZJ_USER_MESSAGE + userId, parse.toString());
+    }
+
+}

+ 5 - 1
incubator-game/src/main/java/com/incubator/game/handler/order/GetOrderList.java

@@ -35,11 +35,15 @@ public class GetOrderList extends NetHandler {
         String userInfo = RedisUtil.get(RedisKeyConstant.USER_BASE + userId);
         JSONObject userObject = JSONUtil.parseObj(userInfo);
         JSONArray userOrder = userObject.getJSONArray("orderList");
+        if (userOrder == null || userOrder.isEmpty()) {
+            response.setData(new HashMap<>());
+            return;
+        }
         List<ZjOrderPO> zjOrderPOList = userOrder.toList(ZjOrderPO.class);
 
         // 使用Stream API提取orderType为1的数据
         List<ZjOrderPO> orderType1List = zjOrderPOList.stream()
-                .filter(order -> order.getOrderType().equals("2"))
+                .filter(order -> order.getOrderType().equals("1"))
                 .collect(Collectors.toList());
 
         // 使用Stream API提取orderType为2的数据

+ 101 - 0
incubator-game/src/main/java/com/incubator/game/util/JsonToMapUtil.java

@@ -0,0 +1,101 @@
+package com.incubator.game.util;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Author:  xhb
+ * Date:  2024-12-17 12:32
+ */
+public class JsonToMapUtil {
+    public static List<Map<String, Object>> parseJsonArrayToMapList(String jsonArrayStr) {
+        JSONArray jsonArray = JSONUtil.parseArray(jsonArrayStr);
+        List<Map<String, Object>> resultList = new ArrayList<>();
+
+        for (Object obj : jsonArray) {
+            JSONObject jsonObject = (JSONObject) obj;
+            Map<String, Object> resultMap = parseJsonObject(jsonObject);
+            resultList.add(resultMap);
+        }
+
+        return resultList;
+    }
+
+    private static Map<String, Object> parseJsonObject(JSONObject jsonObject) {
+        Map<String, Object> resultMap = new HashMap<>();
+
+        for (String key : jsonObject.keySet()) {
+            Object value = jsonObject.get(key);
+            if (value instanceof JSONArray) {
+                value = parseJsonArray((JSONArray) value);
+            } else if (value instanceof JSONObject) {
+                value = parseJsonObject((JSONObject) value);
+            }
+            resultMap.put(key, value);
+        }
+
+        return resultMap;
+    }
+
+    private static List<Object> parseJsonArray(JSONArray jsonArray) {
+        List<Object> resultList = new ArrayList<>();
+
+        for (Object obj : jsonArray) {
+            if (obj instanceof JSONObject) {
+                resultList.add(parseJsonObject((JSONObject) obj));
+            } else {
+                resultList.add(obj);
+            }
+        }
+
+        return resultList;
+    }
+
+
+
+
+
+
+    public static Map<String, Object> jsonToMap(String jsonString) {
+        JSONObject jsonObject = new JSONObject(jsonString);
+        return jsonToMap(jsonObject);
+    }
+
+    private static Map<String, Object> jsonToMap(JSONObject jsonObject) {
+        Map<String, Object> resultMap = new HashMap<>();
+
+        for (String key : jsonObject.keySet()) {
+            Object value = jsonObject.get(key);
+
+            if (value == null) {
+                resultMap.put(key, null);
+            } else if (value instanceof JSONObject) {
+                resultMap.put(key, jsonToMap((JSONObject) value));
+            } else if (value instanceof JSONArray) {
+                resultMap.put(key, jsonArrayToMapList((JSONArray) value));
+            } else {
+                resultMap.put(key, value);
+            }
+        }
+
+        return resultMap;
+    }
+
+    private static List<Map<String, Object>> jsonArrayToMapList(JSONArray jsonArray) {
+        List<Map<String, Object>> resultList = new ArrayList<>();
+
+        for (Object obj : jsonArray) {
+            if (obj instanceof JSONObject) {
+                resultList.add(jsonToMap((JSONObject) obj));
+            }
+        }
+
+        return resultList;
+    }
+}

+ 51 - 51
incubator-game/src/main/java/com/incubator/game/util/ProtoUtil.java

@@ -236,56 +236,56 @@ public final class ProtoUtil {
      * @param eventArray
      * @return
      */
-    public static List<Map<String, Object>> eventToJsonArray(JSONArray eventArray) {
-        List<Map<String, Object>> list = new ArrayList<>();
-        for (Object o : eventArray) {
-            Map<String, Object> objectObjectHashMap = new HashMap<>();
-            cn.hutool.json.JSONObject object = (cn.hutool.json.JSONObject)o;
-            String type = (String)object.get("type");
-            objectObjectHashMap.put("type", type);
-
-            List<Object> objectList = new ArrayList<>();
-            JSONArray objects = object.getJSONArray("reward");
-            for (Object object1 : objects) {
-                Map<String, Object> objectObjectHashMap1 = new HashMap<>();
-                cn.hutool.json.JSONObject object2 = (cn.hutool.json.JSONObject)object1;
-                String eventId =(String) object2.get("eventId");
-                String eventName =(String) object2.get("eventName");
-                String eventType =(String) object2.get("eventType");
-                objectObjectHashMap1.put("eventId",eventId);
-                objectObjectHashMap1.put("eventName",eventName);
-                objectObjectHashMap1.put("eventType",eventType);
-
-                JSONArray objects1 = object2.getJSONArray("rewardList");
-                List<Object> objects2 = new ArrayList<>();
-                for (Object o1 : objects1) {
-                    HashMap<String, Object> stringObjectHashMap = new HashMap<>();
-                    cn.hutool.json.JSONObject o11 = (cn.hutool.json.JSONObject) o1;
-                    String periodNum = (String)o11.get("periodNum");
-                    String winProbability = (String)o11.get("winProbability");
-                    String goodsId = (String)o11.get("goodsId");
-                    String goodsName = (String)o11.get("goodsName");
-                    String baseReward = (String)o11.get("baseReward");
-                    String goodsImg = (String)o11.get("goodsImg");
-                    String lookEventRewardNum = (String)o11.get("lookEventRewardNum");
-                    String shareExtendRewardNum = (String)o11.get("shareExtendRewardNum");
-                    stringObjectHashMap.put("periodNum", periodNum);
-                    stringObjectHashMap.put("winProbability", winProbability);
-                    stringObjectHashMap.put("goodsId", goodsId);
-                    stringObjectHashMap.put("goodsName", goodsName);
-                    stringObjectHashMap.put("baseReward", baseReward);
-                    stringObjectHashMap.put("goodsImg", goodsImg);
-                    stringObjectHashMap.put("lookEventRewardNum", lookEventRewardNum);
-                    stringObjectHashMap.put("shareExtendRewardNum", shareExtendRewardNum);
-                    objects2.add(stringObjectHashMap);
-                }
-                objectObjectHashMap1.put("rewardList",objects2);
-                objectList.add(objectObjectHashMap1);
-            }
-            objectObjectHashMap.put("reward", objectList);
-
-            list.add(objectObjectHashMap);
-        }
-        return list;
+    public static List<Map<String, Object>> eventToJsonArray(String eventArray) {
+//        List<Map<String, Object>> list = new ArrayList<>();
+//        for (Object o : eventArray) {
+//            Map<String, Object> objectObjectHashMap = new HashMap<>();
+//            cn.hutool.json.JSONObject object = (cn.hutool.json.JSONObject)o;
+//            String type = (String)object.get("type");
+//            objectObjectHashMap.put("type", type);
+//
+//            List<Object> objectList = new ArrayList<>();
+//            JSONArray objects = object.getJSONArray("reward");
+//            for (Object object1 : objects) {
+//                Map<String, Object> objectObjectHashMap1 = new HashMap<>();
+//                cn.hutool.json.JSONObject object2 = (cn.hutool.json.JSONObject)object1;
+//                String eventId =(String) object2.get("eventId");
+//                String eventName =(String) object2.get("eventName");
+//                String eventType =(String) object2.get("eventType");
+//                objectObjectHashMap1.put("eventId",eventId);
+//                objectObjectHashMap1.put("eventName",eventName);
+//                objectObjectHashMap1.put("eventType",eventType);
+//
+//                JSONArray objects1 = object2.getJSONArray("rewardList");
+//                List<Object> objects2 = new ArrayList<>();
+//                for (Object o1 : objects1) {
+//                    HashMap<String, Object> stringObjectHashMap = new HashMap<>();
+//                    cn.hutool.json.JSONObject o11 = (cn.hutool.json.JSONObject) o1;
+//                    String periodNum = (String)o11.get("periodNum");
+//                    String winProbability = (String)o11.get("winProbability");
+//                    String goodsId = (String)o11.get("goodsId");
+//                    String goodsName = (String)o11.get("goodsName");
+//                    String baseReward = (String)o11.get("baseReward");
+//                    String goodsImg = (String)o11.get("goodsImg");
+//                    String lookEventRewardNum = (String)o11.get("lookEventRewardNum");
+//                    String shareExtendRewardNum = (String)o11.get("shareExtendRewardNum");
+//                    stringObjectHashMap.put("periodNum", periodNum);
+//                    stringObjectHashMap.put("winProbability", winProbability);
+//                    stringObjectHashMap.put("goodsId", goodsId);
+//                    stringObjectHashMap.put("goodsName", goodsName);
+//                    stringObjectHashMap.put("baseReward", baseReward);
+//                    stringObjectHashMap.put("goodsImg", goodsImg);
+//                    stringObjectHashMap.put("lookEventRewardNum", lookEventRewardNum);
+//                    stringObjectHashMap.put("shareExtendRewardNum", shareExtendRewardNum);
+//                    objects2.add(stringObjectHashMap);
+//                }
+//                objectObjectHashMap1.put("rewardList",objects2);
+//                objectList.add(objectObjectHashMap1);
+//            }
+//            objectObjectHashMap.put("reward", objectList);
+//
+//            list.add(objectObjectHashMap);
+//        }
+        return JsonToMapUtil.parseJsonArrayToMapList(eventArray);
     }
 }

+ 7 - 0
incubator-message/src/main/proto/CommonProto.proto

@@ -130,10 +130,17 @@ enum Cmd {
     //个人活动
     EventInfoReq = 200801;     // 活动信息请求
     EventInfoRes = 200802;     // 活动信息响应
+    GetRewardReq = 200803;     // 领取活动响应
+    GetRewardRes = 200804;     // 领取活动响应
 
     //个人消息
     MessageInfoReq = 200901;     // 个人消息信息请求
     MessageInfoRes = 200902;     // 个人消息信息响应
+    ReadMessageReq = 200903;     // 消息状态请求
+    ReadMessageRes = 200904;     // 消息状态响应
+    GetRewardMessageReq = 200905;     // 领取消息奖励请求
+    GetRewardMessageRes = 200906;     // 领取消息奖励响应
+
 
 
     // 服务器推送消息 900000-999999 (全部以偶数结尾)