package org.ruoyi.common.wechat.itchat4j.core; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.annotation.JSONField; import org.ruoyi.common.wechat.itchat4j.beans.BaseMsg; import org.ruoyi.common.wechat.itchat4j.beans.SendMsg; import org.ruoyi.common.wechat.itchat4j.beans.User; import org.ruoyi.common.wechat.itchat4j.client.HttpClientManage; import org.ruoyi.common.wechat.itchat4j.client.SingleHttpClient; import org.ruoyi.common.wechat.itchat4j.service.impl.LoginServiceImpl; import org.ruoyi.common.wechat.itchat4j.utils.enums.parameters.BaseParaEnum; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 核心存储类,全局只保存一份,单例模式 * * @author https://github.com/yaphone * @author WesleyOne 修改 * @version 1.0 * @date 创建时间:2017年4月23日 下午2:33:56 */ public class Core { private Core() { } private Core(String uniqueKey) { this.uniqueKey = uniqueKey; this.myHttpClient = HttpClientManage.getInstance(this.uniqueKey); this.threadGroup = new ThreadGroup(this.uniqueKey); } protected static Core getInstance(String uniqueKey) { return new Core(uniqueKey); } private String uniqueKey; boolean alive = false; /** * 管理当前机器人的所有业务线程 */ @JSONField(serialize = false) private ThreadGroup threadGroup; @JSONField(serialize = false) boolean isFinishInit = false; /** * login,webWxInit * 登录接口获取 */ private String indexUrl; private String userName; private String nickName; String uuid = null; /** * webWxInit * InviteStartCount * SyncKey * synckey 随着每次获取最新消息后的返回值更新,其目的在于每次同步消息后记录一个当前同步的状态 */ Map loginInfo = new HashMap(); /** * webWxInit * 登陆账号自身信息 * * @see User */ private JSONObject userSelf; /** * 初始化/cgi-bin/mmwebwx-bin/webwxinit * 最后一次收到正常retcode的时间,秒为单位 *

* synccheck刷新 */ private long lastNormalRetcodeTime; /** * synccheck和webWxSync容错次数,超过退出 */ int receivingRetryCount = 5; @JSONField(serialize = false) SingleHttpClient myHttpClient; public SingleHttpClient getMyHttpClient() { return HttpClientManage.getInstance(uniqueKey); } /** * 初始话时获取联系人时创建 * @see LoginServiceImpl#webWxGetContact() */ /** * memberList长度 */ @JSONField(serialize = false) private int memberCount = 0; /** * 好友+群聊+公众号+特殊账号 * 注意:不主动插入,获取时通过其他几个账号集合合并 */ @JSONField(serialize = false) private List memberList = new ArrayList(); /** * 好友 */ @JSONField(serialize = false) private List contactList = new ArrayList(); /** * 群 */ @JSONField(serialize = false) private List groupList = new ArrayList(); /** * 公众号/服务号 */ @Deprecated @JSONField(serialize = false) private List publicUsersList = new ArrayList(); /** * 特殊账号 */ @JSONField(serialize = false) private List specialUsersList = new ArrayList(); /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ /** * synccheck和webWxSynct添加 * 异步接受消息存储 */ @JSONField(serialize = false) private List msgList = new ArrayList<>(); /** * 异步发送消息存储 */ @JSONField(serialize = false) private List sendList = new ArrayList(); /******************************** * 缓存字段,用于快速查找 ********************************/ /** * 微信昵称不能超过16位,而ID比较长,干脆用一个Map * 群ID或昵称,群信息 * 注意:存在相同昵称会后者覆盖前者 *

* WebWxBatchGetContact之后可以通过 * .getJSONArray("MemberList")获取群成员列表 */ @JSONField(serialize = false) private Map groupInfoMap = new HashMap<>(1024); /** * 微信昵称不能超过16位,而ID比较长,干脆用一个Map * 玩家ID或昵称,玩家信息 * 注意:存在相同昵称会后者覆盖前者 */ @JSONField(serialize = false) private Map userInfoMap = new HashMap<>(1024); /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ /** * 请求参数 */ @JSONField(serialize = false) public Map getParamMap() { return new HashMap(1) { /** * */ private static final long serialVersionUID = 1L; { Map map = new HashMap<>(16); for (BaseParaEnum baseRequest : BaseParaEnum.values()) { map.put(baseRequest.para(), getLoginInfo().get(baseRequest.value()).toString()); } put("BaseRequest", map); } }; } public String getUniqueKey() { return uniqueKey; } public void setUniqueKey(String uniqueKey) { this.uniqueKey = uniqueKey; } public boolean isAlive() { return alive; } public void setAlive(boolean alive) { this.alive = alive; if (!alive) { this.isFinishInit = false; } } public String getIndexUrl() { return indexUrl; } public void setIndexUrl(String indexUrl) { this.indexUrl = indexUrl; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getUuid() { return uuid; } public void setUuid(String uuid) { this.uuid = uuid; } public Map getLoginInfo() { return loginInfo; } public void setLoginInfo(Map loginInfo) { this.loginInfo = loginInfo; } public JSONObject getUserSelf() { return userSelf; } public void setUserSelf(JSONObject userSelf) { this.userSelf = userSelf; } public long getLastNormalRetcodeTime() { return lastNormalRetcodeTime; } public void setLastNormalRetcodeTime(long lastNormalRetcodeTime) { this.lastNormalRetcodeTime = lastNormalRetcodeTime; } public int getReceivingRetryCount() { return receivingRetryCount; } public void setReceivingRetryCount(int receivingRetryCount) { this.receivingRetryCount = receivingRetryCount; } public int getMemberCount() { return getContactList().size() + getGroupList().size() + getPublicUsersList().size() + getSpecialUsersList().size(); } public List getMemberList() { List memberList = new ArrayList<>(); memberList.addAll(this.getContactList()); memberList.addAll(this.getGroupList()); memberList.addAll(this.getPublicUsersList()); memberList.addAll(this.getSpecialUsersList()); return memberList; } public List getContactList() { return contactList; } public void setContactList(List contactList) { this.contactList = contactList; } public List getGroupList() { return groupList; } public void setGroupList(List groupList) { this.groupList = groupList; } public List getPublicUsersList() { return publicUsersList; } public void setPublicUsersList(List publicUsersList) { this.publicUsersList = publicUsersList; } public List getSpecialUsersList() { return specialUsersList; } public void setSpecialUsersList(List specialUsersList) { this.specialUsersList = specialUsersList; } public List getMsgList() { return msgList; } public void setMsgList(List msgList) { this.msgList = msgList; } public Map getGroupInfoMap() { return groupInfoMap; } public void setGroupInfoMap(Map groupInfoMap) { this.groupInfoMap = groupInfoMap; } public Map getUserInfoMap() { return userInfoMap; } public void setUserInfoMap(Map userInfoMap) { this.userInfoMap = userInfoMap; } public boolean isFinishInit() { return isFinishInit; } public void setFinishInit(boolean finishInit) { isFinishInit = finishInit; } public ThreadGroup getThreadGroup() { return threadGroup; } public void setThreadGroup(ThreadGroup threadGroup) { this.threadGroup = threadGroup; } public List getSendList() { return sendList; } }