Просмотр исходного кода

微信会话内容存储获取优化,下载暂时关闭

anderx месяцев назад: 6
Родитель
Сommit
665f54c7c9

+ 20 - 7
src/main/java/com/kede/common/task/ConversationContentTask.java

@@ -64,10 +64,16 @@ public class ConversationContentTask {
             //用逗号分割
             String[] tolistArr = chatMsg.getTolist().split(",");
             //获取接收者名称
+            int x=0;
             for (String tolistName : tolistArr) {
-                String tolistName1 = conversationContentService.pushGetChatName(tolistName);
-                if (tolistName1 != null){
-                    stringJoiner.add(tolistName1);
+                //x为获取成功时
+                if (x!=84061){
+                    Map<String, Object> map = conversationContentService.pushGetChatName(tolistName);
+                    String name = map.get("name").toString();
+                    x= (int) map.get("code");
+                    if (name != null){
+                        stringJoiner.add(name);
+                    }
                 }
             }
         }
@@ -90,7 +96,8 @@ public class ConversationContentTask {
             String from = chatMsg.getFrom();
             //获取发送这名称
             System.out.println("====>"+chatMsg);
-            String chatName = conversationContentService.pushGetChatName(from);
+            Map<String, Object> map = conversationContentService.pushGetChatName(from);
+            String chatName = map.get("name").toString();
             String tolist = chatMsg.getTolist();
             String roomName=null;
             //判定是否有群编号,判定是单聊还是群聊,群聊获取群名称
@@ -105,10 +112,16 @@ public class ConversationContentTask {
                 //用逗号分割
                 String[] tolistArr = tolist.split(",");
                 //获取接收者名称
+                int x=0;
                 for (String tolistName : tolistArr) {
-                    String tolistName1 = conversationContentService.pushGetChatName(tolistName);
-                    if (tolistName1 != null){
-                        stringJoiner.add(tolistName1);
+                    //x为获取成功时
+                    if (x!=84061){
+                        Map<String, Object> maps = conversationContentService.pushGetChatName(tolistName);
+                        String name = maps.get("name").toString();
+                        x= (int) maps.get("code");
+                        if (name != null){
+                            stringJoiner.add(name);
+                        }
                     }
                 }
             }

+ 1 - 1
src/main/java/com/kede/wechat/service/ConversationContentService.java

@@ -15,7 +15,7 @@ public interface ConversationContentService {
 
     String getPermitUserList();
 
-    String pushGetChatName(String msg);
+    Map<String,Object> pushGetChatName(String msg);
 
     String pushGetRoomName(ChatMsg chatMsg);
 }

+ 53 - 26
src/main/java/com/kede/wechat/service/impl/ConversationContentServiceImpl.java

@@ -143,7 +143,7 @@ public class ConversationContentServiceImpl implements ConversationContentServic
                     String msgtype = jsonObject.getString("msgtype");
                     InputChatMsg chatMsg = new InputChatMsg(jsonObject);
                     if(msgtype.equals("file")||msgtype.equals("image")){
-                        String url=pushFileUrl(sdk,msgtype,jsonObject);
+                        String url=pushFileUrl(msgtype,jsonObject);
                         chatMsg.setContent(url);
                     }
                     list.add(chatMsg);
@@ -162,15 +162,16 @@ public class ConversationContentServiceImpl implements ConversationContentServic
     return map;
     }
 
-    private String pushFileUrl(long sdk, String msgtype, com.alibaba.fastjson.JSONObject jsonObject) {
+    private String pushFileUrl( String msgtype, com.alibaba.fastjson.JSONObject jsonObject) {
         String url = uploadPath;
         String sdkfileid=null;
 
         if (msgtype.equals("file")){
             com.alibaba.fastjson.JSONObject file = jsonObject.getJSONObject("file");
-            String filename = file.getString("filename");
-            sdkfileid = file.getString("sdkfileid");
+
             try {
+                String filename = file.getString("filename");
+                sdkfileid = file.getString("sdkfileid");
                 String osname = System.getProperties().getProperty("os.name");
                 if (osname.contains("Windows")) {
                     filename = new String(filename.getBytes("GBK"),"UTF-8");
@@ -185,8 +186,12 @@ public class ConversationContentServiceImpl implements ConversationContentServic
             com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("image");
             sdkfileid = image.getString("sdkfileid");
         }
+        //下载文件
+//        downloadFile(sdk, sdkfileid, url);
+        return url;
+    }
 
-
+    private void downloadFile(long sdk, String sdkfileid, String url) {
         String indexbuf = "";
         while(true){
             //每次使用GetMediaData拉取存档前需要调用NewMediaData获取一个media_data,在使用完media_data中数据后,还需要调用FreeMediaData释放。
@@ -195,7 +200,7 @@ public class ConversationContentServiceImpl implements ConversationContentServic
             if(ret!=0){
                 System.out.println("getmediadata ret:" + ret);
                 Finance.FreeMediaData(media_data);
-                return null;
+                return;
             }
             System.out.printf("getmediadata outindex len:%d, data_len:%d, is_finis:%d\n",Finance.GetIndexLen(media_data),Finance.GetDataLen(media_data), Finance.IsMediaDataFinish(media_data));
             try {
@@ -225,11 +230,9 @@ public class ConversationContentServiceImpl implements ConversationContentServic
                 Finance.FreeMediaData(media_data);
             }
         }
-        return url;
     }
 
 
-
     @Override
     public String getAccessToken() {
         //获取redis缓存数据
@@ -325,10 +328,15 @@ public class ConversationContentServiceImpl implements ConversationContentServic
     }
 
     @Override
-    public String pushGetChatName(String userId) {
+    public Map<String,Object> pushGetChatName(String userId) {
+        Map<String,Object> map = new HashMap<>();
+        Integer i =  0;
+
         ChatMsgUser chatMsgUser = chatMsgUserMapper.selectByUserId(userId);
         if (chatMsgUser != null){
-            return chatMsgUser.getName();
+            map.put("name",chatMsgUser.getName());
+            map.put("code",i);
+            return map;
         }else {
             String msgIdSub = userId.substring(0, 2);
             String url=null;
@@ -343,7 +351,9 @@ public class ConversationContentServiceImpl implements ConversationContentServic
                 url=String.format("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s",getAccessToken(),userId);
                 type=2;
             }
-            String userName = getUserName(url,type);
+            Map<String, Object> maps = getUserName(url, type);
+            String userName = maps.get("name").toString();
+            i= (Integer) maps.get("code");
             System.out.println(userId+"="+userName);
             if (StringUtils.isNotBlank(userName)){
                 chatMsgUser = new ChatMsgUser();
@@ -353,7 +363,9 @@ public class ConversationContentServiceImpl implements ConversationContentServic
                 chatMsgUser.setCreateTime(new Date());
                 chatMsgUserMapper.insert(chatMsgUser);
             }
-            return userName;
+            map.put("name",userName);
+            map.put("code",i);
+            return map;
         }
     }
 
@@ -411,25 +423,40 @@ public class ConversationContentServiceImpl implements ConversationContentServic
     }
 
 
-    private String getUserName(String url,Integer type){
-        com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
+    private Map<String,Object> getUserName(String url,Integer type){
         String name = null;
-        if (result.getInteger("errcode")==0){
-            System.out.println(result.toJSONString());
-            if (type==0){
-
-            }else if (type==1){
+        Integer code=null;
+        Map<String,Object> map=new HashMap<String, Object>();
+        if (type==0) {
+            name="机器人";
+            code=0;
+        }else if (type==1){
+                com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
+                if (result.getInteger("errcode")==0) {
+                    System.out.println(result.toJSONString());
+                }else {
+                    System.out.println(result.toJSONString());
+                    System.out.println("获取外部联系人名称失败");
+                }
                 com.alibaba.fastjson.JSONObject externalContact = result.getJSONObject("external_contact");
+                code = result.getInteger("errcode");
                 name=externalContact.getString("name");
-            }else if (type==2){
+        }else if (type==2){
+                com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
+                if (result.getInteger("errcode")==0) {
+                    System.out.println(result.toJSONString());
+
+                }else {
+                    System.out.println(result.toJSONString());
+                    System.out.println("获取内部联系人名称失败");
+                }
+                com.alibaba.fastjson.JSONObject externalContact = result.getJSONObject("external_contact");
+                code = result.getInteger("errcode");
                 name = result.getString("name");
             }
-
-        }else {
-            System.out.println(result.toJSONString());
-            System.out.println("获取会话内容存档成员列表失败");
-        }
-        return name;
+        map.put("name",name);
+        map.put("code",code);
+        return map;
     }