| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676 |
- package com.kede.wechat.service.impl;
- import com.kede.common.dao.ChatMsgMapper;
- import com.kede.common.enums.WechatSmgTypeEnum;
- import com.kede.common.model.ChatMsg;
- import com.kede.common.model.ChatMsgUser;
- import com.kede.common.utils.DateUtils;
- import com.kede.common.utils.HttpUtils;
- import com.kede.common.utils.RSAEncrypt;
- import com.kede.common.utils.StringUtils;
- import com.kede.core.mybatis.BaseMybatisDao;
- import com.kede.wechat.bo.ChatMsgUserBo;
- import com.kede.wechat.bo.InputChatMsg;
- import com.kede.wechat.bo.InputGetChatName;
- import com.kede.wechat.bo.InputgetUserMsg;
- import com.kede.wechat.service.ConversationContentService;
- import com.tencent.wework.Finance;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
- import com.kede.common.dao.ChatMsgUserMapper;
- import javax.annotation.Resource;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.UnsupportedEncodingException;
- import java.util.*;
- import java.util.stream.Collectors;
- import static sun.plugin2.os.windows.OSVERSIONINFOA.size;
- @Service("ConversationContentService")
- public class ConversationContentServiceImpl extends BaseMybatisDao<ChatMsgUserMapper> implements ConversationContentService {
- Logger logger = LoggerFactory.getLogger(ConversationContentServiceImpl.class);
- @Resource
- private RedisTemplate redisTemplate;
- @Resource
- private ChatMsgUserMapper chatMsgUserMapper;
- @Resource
- private ChatMsgMapper chatMsgMapper;
- @Value(value = "${conversationContent.corpid}")
- private String corpid;
- @Value(value = "${conversationContent.secret}")
- private String secret;
- @Value(value = "${conversationContent.app.secret}")
- private String appSecret;
- @Value(value = "${conversationContent.addressBook.secret}")
- private String addressBookSecret;
- @Value(value = "${upload.path}")
- private String uploadPath;
- static String priKey ="-----BEGIN PRIVATE KEY-----\n" +
- "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCnh5N/kiyeNx/y\n" +
- "dDKe3FO8HWj8tuQQUCkCc8ol1Sqmcs9ey7S2189UDbZOPeY2xiiMD6AdFVUK5Y0P\n" +
- "gbX/XZFVizhwXseE+1IV1k0w3C++5Y4Zll7nZoJ05ANMbj+dlamAlNYOutmc0lZf\n" +
- "CGXM5oeu+U0XDWE1+uY7TRAGV3OcA7GBraXiothncbkNf0ZwfBEGVyLNHcNODgwz\n" +
- "ECc0KJuEF2V+UAt11HloT60atSmdiktwbJ6KOJ62TM/eU+F/5d3UJLdw0Xb8kEFn\n" +
- "PYK/1mD8PGKFA6F0wSajNLc6iPg5mgiOS5j02N2+nEN8m7vIdL7Hd0yrigf5kEdl\n" +
- "x9PC7OYpAgMBAAECggEAIUhSCVok+xnAgw6Kr/zdtdWx8eLz1DnYq+ANHQ8IdiEB\n" +
- "Cbg2osylJ/HBcjHh9qfPjmPcT2rZhlysdZQzcBRKt0/9WnW59bVoTWZR148m/Snl\n" +
- "3Td+i0JWUJqr/Rc6FDiTgDQRgsOkT/+JoT+t2dNCyYRFyHqkAXFjJAzfTiM5mJjg\n" +
- "h8q7bU/LXoc49kuaNYmt5rV1nACoIh7MmKZpmR4OKXDWrl52Xt5qCEonp3bAH/S3\n" +
- "HaTqsoqot7fF5aZWEuDWUeYQPzgVSsdw2k9Lq1c8aoE15IRfQCxtBOYpk8LEDJty\n" +
- "JIGHrzBEHP7cok4UdBWbfuI1YjqmjefQovQumKqfcQKBgQDlXDrFFvx+k9pUI2bo\n" +
- "KXcqroOcpdsssO5uJOG1PwuM02wIR0hP1d89fItFwLLuzjb+jeyN3qwFgoh21fkk\n" +
- "Z3HkxubMY4fpXk1mAsTPUZxll8YYgGE7tXk1Rk5xsBMzlFRW88N7Ww/rQMBOlpJA\n" +
- "6UfZGFYMezb1vXf7u3M4w/N22wKBgQC6/OF5DsCHAOui8CPXS2z2YTKuoOJmHKIe\n" +
- "vBeXy+ic+YRuTBXgA0Z1wL4xDW/LeCqoTmetbTuvGSyahMV4QSK0pxH9gk80sH4+\n" +
- "YEza3DLASxr4gSsr2fL6siuXN/OHyMClQb6JVa0yuPG1zLzShaIXYVAyz1m9rU1B\n" +
- "JpQfbEV8SwKBgGnBDvAVWzLZ5Y9qC2b8x4+Mi+7MorSGmEl9A/1YJnE2gteGVpdJ\n" +
- "G/fz1xvAcECgIMdalToM8/BOcbGpk4jvkZpVA9I2ClLWQoXIvQqCrMRDKPnfJ/Yq\n" +
- "BMtFsaHF9/SObhzxpK7aHAry/ji+QI1hgtlc2UBEB+FjDVGq6sO/xiCFAoGAV/3Y\n" +
- "PJdskhskx7AprY6Y3/gtWW/sGhEvWTc6Avy5oeTpJN45DQl9hrwExCCGk0EhEcKT\n" +
- "l1Dn3SYDj1MbedNs+YYFOT6w9yJ2xfObNwKX/1VYg8iFAEW3ybE+QhLaTvNxdFLT\n" +
- "zty6fDv7wolt8cNg24+3pbFdkZyT1izJV2Aj8rECgYBZQMObUgJ57n8FrXCdcdSa\n" +
- "MGsFYl8KUZa1zvzhoi3h7YtbVNNtSHcEK7VDyIheBt9pFCN7nuDX3jW2XYW2USEC\n" +
- "T7Pab2DAXPkRmXspWNID21G+AqqGSLD4pk9+ZmqevTfAtI+ajiu5NH1guH73rVOM\n" +
- "xGjQ5dCmWpUGt4fmO+zWIw==\n" +
- "-----END PRIVATE KEY-----";
- static String pubKey ="-----BEGIN PUBLIC KEY-----\n" +
- "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp4eTf5Isnjcf8nQyntxT\n" +
- "vB1o/LbkEFApAnPKJdUqpnLPXsu0ttfPVA22Tj3mNsYojA+gHRVVCuWND4G1/12R\n" +
- "VYs4cF7HhPtSFdZNMNwvvuWOGZZe52aCdOQDTG4/nZWpgJTWDrrZnNJWXwhlzOaH\n" +
- "rvlNFw1hNfrmO00QBldznAOxga2l4qLYZ3G5DX9GcHwRBlcizR3DTg4MMxAnNCib\n" +
- "hBdlflALddR5aE+tGrUpnYpLcGyeijietkzP3lPhf+Xd1CS3cNF2/JBBZz2Cv9Zg\n" +
- "/DxihQOhdMEmozS3Ooj4OZoIjkuY9NjdvpxDfJu7yHS+x3dMq4oH+ZBHZcfTwuzm\n" +
- "KQIDAQAB\n" +
- "-----END PUBLIC KEY-----";
- @Override
- public Map<String,Object> getChatData(Integer pageSeq, Integer pageLimit) {
- String message = null;
- Map<String,Object> map = new HashMap<>();
- List<InputChatMsg> list = new ArrayList<>();
- Integer total = 0;
- long sdk = Finance.NewSdk();
- System.out.println(Finance.Init(sdk, corpid, secret));
- long ret = 0;
- int seq = 0;
- int limit = 200;
- if (pageSeq != null || pageLimit!=null){
- seq=pageSeq;
- limit = pageLimit;
- }
- long slice = Finance.NewSlice();
- ret = Finance.GetChatData(sdk, seq, limit, null, null, 3, slice);
- if (ret != 0) {
- System.out.println("getchatdata ret " + ret);
- }
- String getchatdata = Finance.GetContentFromSlice(slice);
- JSONObject jo = new JSONObject(getchatdata);
- JSONArray chatdata = jo.getJSONArray("chatdata");
- total=chatdata.length();
- System.out.println("消息数:" + total);
- for (int i = 0; i < chatdata.length(); i++) {
- String item = chatdata.get(i).toString();
- // item:{
- // "publickey_ver":1,
- // "encrypt_chat_msg":"XSeHr+qM0YfX/q5WWvmnVEuL2E4U0RclkIbK9JnWQq7Y/0Ynir3srKh+9DH6BqRj/NYXKmUC65+0WRo
- // QboW3dC200XTqVNj+z0kljl11HdNmjuS3p7g0L+DYG5Bdz6Lo8FuHf/5WkOVi/R5VxOO6FvU+PediEOSCBN2dVHCeyIvExCk5mh
- // o+ME9QV/Q19HujmHpxzl3cu1XvBAZ7YvIpd2d/BCCI9JwmBc5bXr2FQ0r/PFkZadKGjw0cxqPyNIBkNc+ic0wHhWSZFTvY3qDW2
- // FFAdkYW68w8PA5f+8gD9VUuxKzz/j3Fu/6547Ayyuo93lPtbud5lAWXyeLexyHujFmdr300MA44BoYZsuTqdVsHbtEGLw967kO1
- // oHcImidD416ZuQh2VZiOYTJMtDZALdB1tXramb7kFj0AsKloFLKeg3ks3TYRKwEmM9wJ/y2hGDJzq5xncBFFShbLao5u",
- // "msgid":"1634016854685227651_1749628622146_external",
- // "encrypt_random_key":"kJ3XJM7CB7DGZqFxSfT8+EDWfr8vZmVVKzKLl5FM47Sd7iUSlgZF/a4dm5sTpCMW3uzk/m1LZV4odH
- // RyVO2+AaVJsidMoLV2LmmWiCAuXkzdK4yDbGItkvpZGrilgAlJjR8EhsUuqXOjvxkUemGvKMhrUqKdCaO4p3GYT/cxMRJDUmrP0v
- // TQqdgwznQOSubbBFDdMTSAfEtZnGp5tOQdCNFCbIqks4/Y8Isd/nd/Kq3QNsXjE+GdZkqVuOqRujOeCeqFRJF022i2KFuJQ+R+7X
- // 1es92NKBbaNT1AlRNfjtACH1KrPRLlEnmAS0EUIWWmn45/kOpH3T4ovOuNDnrafw==",
- // "seq":1}
- JSONObject data = new JSONObject(item);
- String encrypt_random_key = data.getString("encrypt_random_key");
- String encrypt_chat_msg = data.getString("encrypt_chat_msg");
- long msg = Finance.NewSlice();
- try {
- message = RSAEncrypt.decryptRSA(encrypt_random_key, priKey);
- ret = Finance.DecryptData(sdk, message, encrypt_chat_msg, msg);
- if (ret != 0) {
- System.out.println("getchatdata ret " + ret);
- // return;
- }
- String str = String.valueOf(Finance.GetContentFromSlice(msg));
- com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(str);
- String msgtype = jsonObject.getString("msgtype");
- InputChatMsg chatMsg = new InputChatMsg(jsonObject);
- ChatMsg chatMsg1 = chatMsgMapper.selectByMsgId(chatMsg.getMsgid());
- if (chatMsg1 == null){
- //处理数据
- pushSmgType(msgtype, jsonObject, sdk, chatMsg);
- list.add(chatMsg);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- Finance.FreeSlice(slice);
- map.put("list",list);
- map.put("total",total);
- return map;
- }
- private void pushSmgType(String msgtype, com.alibaba.fastjson.JSONObject jsonObject, long sdk, InputChatMsg chatMsg) {
- if (msgtype.equals("text"))
- {
- //文档
- com.alibaba.fastjson.JSONObject text = jsonObject.getJSONObject("text");
- if (text!=null){
- String content1 = text.getString("content");
- chatMsg.setContent(pushCharset(content1));
- // chatMsg.setContent(content1);
- }
- }else if (msgtype.equals("link"))
- {
- //链接
- com.alibaba.fastjson.JSONObject link = jsonObject.getJSONObject("link");
- chatMsg.setMsgurl(link.getString("link_url"));
- chatMsg.setContent(pushCharset(link.getString("title")));
- }else if (msgtype.equals("mixed"))
- {
- //混合
- System.out.println(jsonObject);
- com.alibaba.fastjson.JSONObject mixed = jsonObject.getJSONObject("mixed");
- com.alibaba.fastjson.JSONArray item = mixed.getJSONArray("item");
- for (int j = 0; j < item.size(); j++) {
- com.alibaba.fastjson.JSONObject e = item.getJSONObject(j);
- String type = e.getString("type");
- if (type.equals("text")){
- com.alibaba.fastjson.JSONObject contentJson = e.getJSONObject("content");
- String content = contentJson.getString("content");
- chatMsg.setContent(pushCharset(content));
- }else {
- String url =uploadPath;
- com.alibaba.fastjson.JSONObject content = e.getJSONObject("content");
- String sdkfileid=content.getString("sdkfileid");
- if (type.equals("file")){
- try {
- String filename = content.getString("filename");
- String osname = System.getProperties().getProperty("os.name");
- if (osname.contains("Windows")) {
- filename = new String(filename.getBytes("GBK"),"UTF-8");
- String safeName=filename.replaceAll("[<>:\"/\\\\|?*,、]", "_");
- url = url +"/wechat/"+ safeName;
- }
- } catch (UnsupportedEncodingException ex) {
- throw new RuntimeException(ex);
- }
- }else if (type.equals("image")) {
- url = url + "/wechat/" + System.currentTimeMillis() + ".jpg";
- com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("image");
- }else {
- chatMsg.setContent(chatMsg.getContent()+"[附件="+e+"]");
- }
- downloadFile(sdk, sdkfileid, url);
- chatMsg.setMsgurl(url);
- }
- }
- } else if (msgtype.equals("sphfeed"))
- {
- chatMsg.setContent(jsonObject.getString("sphfeed"));
- } else if (msgtype.equals("file")||msgtype.equals("image")||msgtype.equals("video")||msgtype.equals("voice"))
- {
- String url=pushFileUrl(sdk, msgtype, jsonObject);
- chatMsg.setMsgurl(url);
- } else {
- chatMsg.setContent(pushCharset(jsonObject.toJSONString()));
- }
- }
- private String pushCharset(String content1) {
- String str ;
- try {
- String osname = System.getProperties().getProperty("os.name");
- if (osname.contains("Windows")) {
- String result = new String(content1.getBytes("GBK"),"UTF-8");
- str=result;
- }else{
- str=content1;
- }
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException(e);
- }
- return str;
- }
- private String pushFileUrl(long sdk, 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");
- 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");
- String safeName=filename.replaceAll("[<>:\"/\\\\|?*,、]", "_");
- url = url +"/wechat/"+ safeName;
- }
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException(e);
- }
- }else if (msgtype.equals("image")){
- url = url +"/wechat/"+ System.currentTimeMillis()+".jpg";
- com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("image");
- sdkfileid = image.getString("sdkfileid");
- }else if (msgtype.equals("voice")){
- url = url +"/wechat/"+ System.currentTimeMillis()+".mp3";
- com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("voice");
- sdkfileid = image.getString("sdkfileid");
- }else if (msgtype.equals("video")){
- url = url +"/wechat/"+ System.currentTimeMillis()+".mp4";
- com.alibaba.fastjson.JSONObject image = jsonObject.getJSONObject("video");
- }
- // 下载文件
- 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释放。
- long media_data = Finance.NewMediaData();
- int ret = Finance.GetMediaData(sdk, indexbuf, sdkfileid, null, null, 3, media_data);
- if(ret!=0){
- System.out.println("getmediadata ret:" + ret);
- Finance.FreeMediaData(media_data);
- 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 {
- File file = new File(url);
- if (!file.getParentFile().exists()) {
- file.getParentFile().mkdirs(); // 自动创建缺失的父目录
- }
- //大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
- FileOutputStream outputStream = new FileOutputStream(url, true);
- outputStream.write(Finance.GetData(media_data));
- outputStream.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- if(Finance.IsMediaDataFinish(media_data) == 1)
- {
- //已经拉取完成最后一个分片
- Finance.FreeMediaData(media_data);
- break;
- }
- else
- {
- //获取下次拉取需要使用的indexbuf
- indexbuf = Finance.GetOutIndexBuf(media_data);
- Finance.FreeMediaData(media_data);
- }
- }
- }
- @Override
- public String getAccessToken() {
- //获取redis缓存数据
- String accessToken = null;
- Map<String,String> accessMap = (Map<String, String>) redisTemplate.opsForValue().get("ACCESS_TOKEN");
- if (accessMap == null){
- logger.debug("getAccessToken无缓存从接口获取");
- Map<String, String> map = getAccessMap(corpid, secret);
- //新增redis缓存数据
- redisTemplate.opsForValue().set("ACCESS_TOKEN",map);
- accessToken = map.get("accessToken");
- }else {
- logger.debug("getAccessToken有缓存从缓存获取");
- accessToken = accessMap.get("accessToken");
- Long expireDate = Long.valueOf(accessMap.get("expireDate"));
- if (expireDate < System.currentTimeMillis()){
- logger.debug("getAccessToken缓存已过期从接口获取");
- Map<String, String> map = getAccessMap(corpid, secret);
- accessToken = map.get("accessToken");
- //新增redis缓存数据
- redisTemplate.opsForValue().set("ACCESS_TOKEN",map);
- }
- }
- return accessToken;
- }
- public String getAddressBookAccessToken() {
- //获取redis缓存数据
- String accessToken = null;
- Map<String,String> accessMap = (Map<String, String>) redisTemplate.opsForValue().get("ADDRESS_BOOK_ACCESS_TOKEN");
- if (accessMap == null){
- logger.debug("ADDRESS_BOOK无缓存从接口获取");
- Map<String, String> map = getAccessMap(corpid, secret);
- //新增redis缓存数据
- redisTemplate.opsForValue().set("ADDRESS_BOOK_ACCESS_TOKEN",map);
- accessToken = map.get("accessToken");
- }else {
- logger.debug("ADDRESS_BOOK有缓存从缓存获取");
- accessToken = accessMap.get("accessToken");
- Long expireDate = Long.valueOf(accessMap.get("expireDate"));
- if (expireDate < System.currentTimeMillis()){
- logger.debug("ADDRESS_BOOK缓存已过期从接口获取");
- Map<String, String> map = getAccessMap(corpid, secret);
- accessToken = map.get("accessToken");
- //新增redis缓存数据
- redisTemplate.opsForValue().set("ADDRESS_BOOK_ACCESS_TOKEN",map);
- }
- }
- return accessToken;
- }
- @Override
- public String getAppAccessToken() {
- //获取redis缓存数据
- String accessToken = null;
- Map<String,String> accessMap = (Map<String, String>) redisTemplate.opsForValue().get("ADDRESS_BOOK_ACCESS_TOKEN");
- if (accessMap == null){
- logger.debug("APP_ACCESS_TOKEN无缓存从接口获取");
- Map<String, String> map = getAccessMap(corpid,appSecret);
- //新增redis缓存数据
- redisTemplate.opsForValue().set("APP_ACCESS_TOKEN",map);
- accessToken = map.get("accessToken");
- }else {
- logger.debug("APP_ACCESS_TOKEN有缓存从缓存获取");
- accessToken = accessMap.get("accessToken");
- Long expireDate = Long.valueOf(accessMap.get("expireDate"));
- if (expireDate < System.currentTimeMillis()){
- logger.debug("APP_ACCESS_TOKEN缓存已过期从接口获取");
- Map<String, String> map = getAccessMap(corpid,appSecret);
- accessToken = map.get("accessToken");
- //新增redis缓存数据
- redisTemplate.opsForValue().set("APP_ACCESS_TOKEN",map);
- }
- }
- return accessToken;
- }
- @Override
- public String getPermitUserList() {
- String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_permit_user_list?access_token=%s",getAccessToken());
- com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
- if (result.getInteger("errcode")==0){
- List<String> ids = result.getJSONArray("ids").toJavaList(String.class);
- ids.stream().forEach(System.out::println);
- }else {
- System.out.println(result.getString("errcode"));
- System.out.println("获取会话内容存档成员列表失败");
- }
- pushGetChatName(result.toJSONString());
- return null;
- }
- @Override
- public Map<String,Object> pushGetChatName(String userId) {
- Map<String,Object> map = new HashMap<>();
- Integer i = 0;
- ChatMsgUser chatMsgUser = chatMsgUserMapper.selectByUserId(userId);
- if (chatMsgUser != null){
- map.put("name",chatMsgUser.getName());
- map.put("code",i);
- return map;
- }else {
- String msgIdSub = userId.substring(0, 2);
- String url=null;
- Integer type;
- if (msgIdSub.equals("wb")){
- type=0;
- // url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_robot_info??access_token=%s&robot_id=%s",getAppAccessToken(),userId);
- }else if (msgIdSub.equals("wo")||msgIdSub.equals("wm")){
- // https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get
- url=String.format("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=%s&external_userid=%s",getAppAccessToken(),userId);
- type=1;
- }else {
- url=String.format("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s",getAccessToken(),userId);
- type=2;
- }
- Map<String, Object> maps = getUserName(url, type);
- Object o = maps.get("name");
- String userName = null;
- if(o!=null){
- userName = o.toString();
- }
- i= (Integer) maps.get("code");
- System.out.println(userId+"="+userName);
- if (StringUtils.isNotBlank(userName)){
- chatMsgUser = new ChatMsgUser();
- chatMsgUser.setUserId(userId);
- chatMsgUser.setName(userName);
- chatMsgUser.setType(type);
- chatMsgUser.setCreateTime(new Date());
- chatMsgUserMapper.insert(chatMsgUser);
- }
- map.put("name",userName);
- map.put("code",i);
- return map;
- }
- }
- /**
- * errorGode 错误码
- * 301059=非内部群,不提供数据
- * 90501=该群不是客户群
- * @param chatMsg
- * @return
- */
- @Override
- public String pushGetRoomName(ChatMsg chatMsg) {
- String name=null;
- // https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=ACCESS_TOKEN
- String roomid = chatMsg.getRoomid();
- ChatMsgUser chatMsgUser = chatMsgUserMapper.selectByUserId(roomid);
- if (chatMsgUser != null){
- return chatMsgUser.getName();
- }else {
- //查询编号中有没有external
- String msgIdSub = chatMsg.getMsgid();
- int i = msgIdSub.indexOf("external");
- if (i>0){
- String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/externalcontact/groupchat/get?access_token=%s",getAppAccessToken());
- Map<String,Object> map = new HashMap<String, Object>();
- map.put("chat_id",roomid);
- map.put("cursor",0);
- com.alibaba.fastjson.JSONObject jsonObject = HttpUtils.httpPost(url, map);
- String roomname = jsonObject.getString("roomname");
- if (StringUtils.isBlank(roomname)){
- com.alibaba.fastjson.JSONObject groupChat = jsonObject.getJSONObject("group_chat");
- if (groupChat!=null){
- name = groupChat.getString("name");
- }
- }
- if (jsonObject.getInteger("errcode")==0){
- }else {
- System.out.println("获取外部群名称失败"+jsonObject.getString("errcode"));
- }
- }
- else
- {
- //https://qyapi.weixin.qq.com/cgi-bin/msgaudit/groupchat/get
- String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/msgaudit/groupchat/get?access_token=%s",getAccessToken());
- Map<String,Object> map = new HashMap<String, Object>();
- map.put("roomid",roomid);
- com.alibaba.fastjson.JSONObject jsonObject = HttpUtils.httpPost(url, map);
- System.out.println(jsonObject.toJSONString());
- String roomname = jsonObject.getString("roomname");
- if (StringUtils.isBlank(roomname)){
- com.alibaba.fastjson.JSONObject groupChat = jsonObject.getJSONObject("group_chat");
- name = groupChat.getString("name");
- }
- if (jsonObject.getInteger("errcode")==0){
- }else {
- System.out.println("获取内部群名称失败"+jsonObject.getString("errcode"));
- }
- }
- }
- return name;
- }
- @Override
- public Object getMsgData(InputGetChatName in) {
- List<ChatMsgUser> list = chatMsgUserMapper.getUserList(2);
- list.forEach(e->{
- //查询每个人的所有信息
- List<ChatMsg> chatMsgs = chatMsgMapper.selectMsgById(e.getUserId(),null);
- List<ChatMsg> collect = chatMsgs.stream().filter(e1 -> e1.getType().equals(0)).collect(Collectors.toList());
- List<ChatMsg> collect1 = chatMsgs.stream().filter(e1 -> e1.getType().equals(1)).collect(Collectors.toList());
- List<String> toUser=new ArrayList<>();
- List<String> toList=new ArrayList<>();
- collect.forEach(e1->{
- if (e1.getFromId().equals(e.getUserId())){
- if (!toUser.contains(e1.getTolist())){
- toUser.add(e1.getTolist());
- }
- }else {
- if (!toUser.contains(e1.getFromId())){
- toUser.add(e1.getFromId());
- }
- }
- });
- collect1.forEach(e1->{
- if (e1.getFromId().equals(e.getUserId())){
- if (!toList.contains(e1.getRoomid())){
- toList.add(e1.getRoomid());
- }
- }else {
- if (!toList.contains(e1.getRoomid())){
- toList.add(e1.getRoomid());
- }
- }
- });
- System.out.println(e.getName()+"单聊有:");
- toUser.forEach(System.out::println);
- System.out.println("================================");
- System.out.println(e.getName()+"群聊有:");
- toList.forEach(System.out::println);
- });
- return list;
- }
- @Override
- public Object getUserMsg(InputgetUserMsg in) {
- List<ChatMsgUser> list = chatMsgUserMapper.getUserList(2);
- return list;
- }
- @Override
- public Object getMyIdByUser(InputgetUserMsg in) {
- return chatMsgUserMapper.selectMyIdByUser(in.getUserId());
- }
- @Override
- public Object getMyIdByRoom(InputgetUserMsg in) {
- return chatMsgUserMapper.selectMyIdByRoom(in.getUserId());
- }
- @Override
- public Object getMsgList(InputgetUserMsg in) {
- List<ChatMsg> chatMsgs=new ArrayList<>();
- if (StringUtils.isNotEmpty(in.getRoomId())){
- chatMsgs = chatMsgMapper.selectByRoomId(in);
- }else if (StringUtils.isNotEmpty(in.getUserId())&&StringUtils.isNotEmpty(in.getFoId())){
- chatMsgs = chatMsgMapper.selectByUserIdAndFoId(in);
- //将list按时间先后排序
- chatMsgs.sort(Comparator.comparing(ChatMsg::getMsgtime));
- }
- for (ChatMsg e : chatMsgs) {
- WechatSmgTypeEnum field = WechatSmgTypeEnum.getField(e.getMsgtype());
- if (field==null){
- e.setMsgType(e.getMsgtype());
- }else {
- String desc = field.getDesc();
- e.setMsgType(desc);
- }
- }
- return chatMsgs;
- }
- private Map<String,Object> getUserName(String url,Integer type){
- String name = null;
- 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());
- com.alibaba.fastjson.JSONObject externalContact = result.getJSONObject("external_contact");
- code = result.getInteger("errcode");
- name=externalContact.getString("name");
- }else {
- code = result.getInteger("errcode");
- System.out.println(result.toJSONString());
- System.out.println("获取外部联系人名称失败");
- }
- }else if (type==2){
- com.alibaba.fastjson.JSONObject result = HttpUtils.httpGet(url);
- if (result.getInteger("errcode")==0) {
- System.out.println(result.toJSONString());
- 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("获取内部联系人名称失败");
- code = result.getInteger("errcode");
- }
- }
- if(name!=null)map.put("name",name);
- if (code!=null)map.put("code",code);
- return map;
- }
- private Map<String, String> getAccessMap(String corpid, String secret) {
- String url=String.format("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s",corpid,secret);
- Date date = new Date();
- com.alibaba.fastjson.JSONObject jsonObject = HttpUtils.httpGet(url);
- String access_token = (String) jsonObject.get("access_token");
- Integer expires_in = (Integer) jsonObject.get("expires_in");
- //时间加上过期时间
- Date expireDate = DateUtils.addMilliseconds(date, expires_in*1000);
- Map<String,String> map = new HashMap<>();
- map.put("accessToken",access_token);
- map.put("expireDate", String.valueOf(expireDate.getTime()));
- return map;
- }
- }
|