diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/aggregation/facade/ContactDo.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/aggregation/facade/ContactDo.java index de13658..bfb43d2 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/aggregation/facade/ContactDo.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/aggregation/facade/ContactDo.java @@ -43,6 +43,13 @@ public class ContactDo extends Contact { @ApiModelProperty(value = "联系人类型") private String contactType; + /** + * 展示名称 + * 有备注优先展示备注 + */ + @ApiModelProperty(value = "展示名称") + private String showName; + /** * 根据自定义SQL查询联系人列表 * @@ -56,14 +63,13 @@ public class ContactDo extends Contact { List list = new ArrayList<>(); // 查询联系人 List dbContactList = wechatSocketClient.querySql(DatabaseNameEnum.MICRO_MSG.getCode(), - "SELECT UserName, Alias, NickName, DelFlag, VerifyFlag, Remark, LabelIDList, DomainList, ChatRoomType, HeadImgMd5, Type FROM Contact;"); + "SELECT UserName, Alias, DelFlag, Type, VerifyFlag, Remark, NickName, LabelIDList, DomainList, ChatRoomType, PYInitial, QuanPin, RemarkPYInitial, RemarkQuanPin, ChatRoomNotify FROM Contact;"); if (!CollectionUtils.isEmpty(dbContactList)) { for (Wcf.DbRow dbRow : dbContactList) { List dbFieldList = dbRow.getFieldsList(); if (!ObjectUtils.isEmpty(dbFieldList)) { - ContactDo po; + ContactDo po = new ContactDo(); for (Wcf.DbField dbField : dbFieldList) { - po = new ContactDo(); String content = (String)wechatSocketClient.convertSqlVal(dbField.getType(), dbField.getContent()); // 用户名 if ("UserName".equals(dbField.getColumn())) { @@ -105,11 +111,8 @@ public class ContactDo extends Contact { if ("ChatRoomType".equals(dbField.getColumn())) { po.setChatRoomType(Integer.valueOf(content)); } - // - if ("HeadImgMd5".equals(dbField.getColumn())) { - po.setHeadImgMd5(content); - } } + list.add(po); } } } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/po/wcf/Contact.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/po/wcf/Contact.java index fa18dab..bc1f1ef 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/po/wcf/Contact.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/entity/po/wcf/Contact.java @@ -68,10 +68,4 @@ public class Contact { @ApiModelProperty(value = "群类型") private Integer chatRoomType; - /** - * 头像MD5 - */ - @ApiModelProperty(value = "头像MD5") - private String headImgMd5; - } diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java index 91ad36c..46eb503 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/handle/WeChatSocketClient.java @@ -391,7 +391,7 @@ public class WeChatSocketClient { public Function getSqlType(int type) { Map> sqlTypeMap = new HashMap<>(); // 初始化SQL_TYPES 根据类型执行不同的Func - sqlTypeMap.put(1, bytes -> ByteBuffer.wrap(bytes).getInt()); + sqlTypeMap.put(1, bytes -> new String(bytes, StandardCharsets.UTF_8)); sqlTypeMap.put(2, bytes -> ByteBuffer.wrap(bytes).getFloat()); sqlTypeMap.put(3, bytes -> new String(bytes, StandardCharsets.UTF_8)); sqlTypeMap.put(4, bytes -> bytes); diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/ContactGroupMonitorTask.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/ContactGroupMonitorTask.java index 537021c..897d107 100644 --- a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/ContactGroupMonitorTask.java +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/ContactGroupMonitorTask.java @@ -14,7 +14,6 @@ import org.springframework.util.CollectionUtils; import com.wechat.ferry.aggregation.facade.ContactDo; import com.wechat.ferry.config.WeChatFerryProperties; -import com.wechat.ferry.entity.po.wcf.Contact; import com.wechat.ferry.enums.WxContactsTypeEnum; import com.wechat.ferry.handle.WeChatSocketClient; @@ -60,19 +59,23 @@ public class ContactGroupMonitorTask { private final Map> groupMemberMap = new HashMap<>(); /** - * 初始化标志 + * 初始化状态 */ - private Boolean initFlag = false; + private Boolean initStatus = false; - @Scheduled(cron = "0 0/2 * * * ?") + @Scheduled(cron = "0 0 0 * * ?") public void scheduled() { + if (true) { + // 目前查询的所有的联系人,未判断群组是否已退出等状态,故该功能暂不启用,仅提供一个小样例 + return; + } ContactDo contactDo = new ContactDo(); // 查询联系人 List contactList = contactDo.queryContactListBySql(wechatSocketClient, weChatFerryProperties); + log.info("[定时任务]-[联系人群组监控]-{}", contactList.size()); // 调用联系人监控处理 contactMonitor(contactList); - initFlag = true; - log.info("[定时任务]-[重置签到]-结束"); + log.info("[定时任务]-[联系人群组监控]-结束"); } // 联系人监控 @@ -89,14 +92,18 @@ public class ContactGroupMonitorTask { List addGroupList = new ArrayList<>(); // 退出群组 List deleteGroupList = new ArrayList<>(); - // 本次的联系人标识列表 - List nowContactIdList = new ArrayList<>(); + // 本次个微联系人标识列表 + List nowPpContactIdList = new ArrayList<>(); + // 本次企微联系人标识列表 + List nowCpContactIdList = new ArrayList<>(); + // 本次群组标识列表 + List nowGroupIdList = new ArrayList<>(); // 开始匹配 if (!CollectionUtils.isEmpty(contactList)) { - for (ContactDo contactDo : contactList) { - nowContactIdList.add(contactDo.getWeChatUid()); - if (!initFlag) { + // 判断全部联系人是否为空 + if (allContactDoMap.isEmpty()) { + for (ContactDo contactDo : contactList) { // 首次初始化 allContactDoMap.put(contactDo.getWeChatUid(), contactDo); if (WxContactsTypeEnum.PERSON.getCode().equals(contactDo.getContactType())) { @@ -109,52 +116,68 @@ public class ContactGroupMonitorTask { // 群组-初始化 groupMap.put(contactDo.getWeChatUid(), contactDo.getNickname()); } - } else { - // 非首次 - if (!ppContactDoMap.containsKey(contactDo.getWeChatUid())) { - // 个微-新增 - addPpContactList.add(contactDo.getWeChatUid()); - ppContactDoMap.put(contactDo.getWeChatUid(), contactDo.getNickname()); - } else if (!cpContactDoMap.containsKey(contactDo.getContactType())) { - // 企业微信-新增 - addCpContactList.add(contactDo.getWeChatUid()); - cpContactDoMap.put(contactDo.getWeChatUid(), contactDo.getNickname()); - } else if (!groupMap.containsKey(contactDo.getContactType())) { - // 群组-新增 - addGroupList.add(contactDo.getWeChatUid()); - groupMap.put(contactDo.getWeChatUid(), contactDo.getNickname()); + } + log.info("[定时任务]-[联系人监控]-首次初始化成功"); + } else { + // 检测新增联系人 + for (ContactDo contactDo : contactList) { + if (WxContactsTypeEnum.PERSON.getCode().equals(contactDo.getContactType())) { + // 个微 + nowPpContactIdList.add(contactDo.getWeChatUid()); + if (!ppContactDoMap.containsKey(contactDo.getWeChatUid())) { + // 个微-新增 + addPpContactList.add(contactDo.getWeChatUid()); + ppContactDoMap.put(contactDo.getWeChatUid(), contactDo.getNickname()); + } + } else if (WxContactsTypeEnum.WORK.getCode().equals(contactDo.getContactType())) { + // 企业微信 + nowCpContactIdList.add(contactDo.getWeChatUid()); + if (!cpContactDoMap.containsKey(contactDo.getWeChatUid())) { + // 企业微信-新增 + addCpContactList.add(contactDo.getWeChatUid()); + cpContactDoMap.put(contactDo.getWeChatUid(), contactDo.getNickname()); + } + } else if (WxContactsTypeEnum.GROUP.getCode().equals(contactDo.getContactType())) { + // 群组 + nowGroupIdList.add(contactDo.getWeChatUid()); + if (!groupMap.containsKey(contactDo.getWeChatUid())) { + // 群组-新增 + addGroupList.add(contactDo.getWeChatUid()); + groupMap.put(contactDo.getWeChatUid(), contactDo.getNickname()); + } } } } // 初始化完成 - if (initFlag) { + if (initStatus) { // 个微 for (Map.Entry entry : ppContactDoMap.entrySet()) { - if (!nowContactIdList.contains(entry.getKey())) { + if (!nowPpContactIdList.contains(entry.getKey())) { // 个微-删除 deletePpContactList.add(entry.getKey()); } } // 企微 for (Map.Entry entry : cpContactDoMap.entrySet()) { - if (!nowContactIdList.contains(entry.getKey())) { + if (!nowCpContactIdList.contains(entry.getKey())) { // 企微-删除 deleteCpContactList.add(entry.getKey()); } } // 群组 for (Map.Entry entry : groupMap.entrySet()) { - if (!nowContactIdList.contains(entry.getKey())) { + if (!nowGroupIdList.contains(entry.getKey())) { // 群组-删除 deleteGroupList.add(entry.getKey()); log.info("\"{}\"离开了群聊"); } } + log.info("[定时任务]-[联系人监控]-个微新增:{},个微删除:{},企微新增:{},企微删除:{},群组新增:{},群组删除:{}", addPpContactList, deletePpContactList, addCpContactList, + deleteCpContactList, addGroupList, deleteGroupList); } } - log.info("[定时任务]-[联系人监控]-个微新增:{},个微删除:{},企微新增:{},企微删除:{},群组新增:{},群组删除:{}", addPpContactList, deletePpContactList, addCpContactList, - deleteCpContactList, addGroupList, deleteGroupList); + initStatus = true; } // 监控群成员