From 488eb5812286849e9c82584f285b72bf51befa77 Mon Sep 17 00:00:00 2001 From: chandler <1915724901@qq.com> Date: Fri, 27 Dec 2024 09:10:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(0):=20[java]-[mvn]-=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=80=80=E7=BE=A4=E7=9B=91=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clients/java/wechat-ferry-mvn/CHANGELOG.md | 8 ++ .../ferry/task/LeaveGroupMonitorTask.java | 92 +++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/LeaveGroupMonitorTask.java diff --git a/clients/java/wechat-ferry-mvn/CHANGELOG.md b/clients/java/wechat-ferry-mvn/CHANGELOG.md index e32710c..239b55e 100644 --- a/clients/java/wechat-ferry-mvn/CHANGELOG.md +++ b/clients/java/wechat-ferry-mvn/CHANGELOG.md @@ -44,6 +44,14 @@ - 2.发送富文本包含thumbnailUrl参数会导致消息发送不出去 - `待修复` - 3.发送文件成功之后客户端崩溃 - `待修复` +### 2024-12-27 + +#### ⛰️ Features + +- 查询群成员返回类新增字段 +- 新增退群监测功能 +- 说明文档更新 + ### 2024-12-25 #### ⛰️ Features diff --git a/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/LeaveGroupMonitorTask.java b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/LeaveGroupMonitorTask.java new file mode 100644 index 0000000..51e7dea --- /dev/null +++ b/clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/LeaveGroupMonitorTask.java @@ -0,0 +1,92 @@ +package com.wechat.ferry.task; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import com.wechat.ferry.entity.dto.WxPpUserDTO; +import com.wechat.ferry.entity.vo.request.WxPpWcfGroupMemberReq; +import com.wechat.ferry.entity.vo.response.WxPpWcfContactsResp; +import com.wechat.ferry.entity.vo.response.WxPpWcfGroupMemberResp; +import com.wechat.ferry.enums.WxContactsTypeEnum; +import com.wechat.ferry.service.WeChatDllService; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class LeaveGroupMonitorTask { + + private WeChatDllService weChatDllService; + + @Autowired + public void setWeChatDllService(WeChatDllService weChatDllService) { + this.weChatDllService = weChatDllService; + } + + /** + * 群成员信息集合 key:群ID val:微信标识-weChatUid + */ + private final Map> wxPpGroupMemberMap = new HashMap<>(); + + @Scheduled(cron = "0 0/2 * * * ?") + public void scheduled() { + // 群变动 + List groupList = new ArrayList<>(); + List contactsList = weChatDllService.queryContactsList(); + if (!CollectionUtils.isEmpty(contactsList)) { + for (WxPpWcfContactsResp vo : contactsList) { + if (WxContactsTypeEnum.GROUP.getCode().equals(vo.getType())) { + groupList.add(vo.getWeChatUid()); + } + } + // 清理我不在的群 + for (Map.Entry> entry : wxPpGroupMemberMap.entrySet()) { + if (!groupList.contains(entry.getKey())) { + log.info("该账号自身退出了[{}]群组", entry.getKey()); + } + } + } + + // 群成员变动 + if (!CollectionUtils.isEmpty(groupList)) { + WxPpWcfGroupMemberReq request; + for (String gid : groupList) { + request = new WxPpWcfGroupMemberReq(); + request.setGroupNo(gid); + List dbGroupMemberList = weChatDllService.queryGroupMemberList(request); + if (!CollectionUtils.isEmpty(dbGroupMemberList)) { + // 现在的群成员 + Map nowGroupMemberMap = new HashMap<>(); + for (WxPpWcfGroupMemberResp groupMember : dbGroupMemberList) { + nowGroupMemberMap.put(groupMember.getWeChatUid(), groupMember.getGroupNickName()); + } + + Map oldGroupMemberMap = new HashMap<>(); + // 判断之前有没有这个群 + if (wxPpGroupMemberMap.containsKey(gid)) { + // 之前有这个群 + oldGroupMemberMap = wxPpGroupMemberMap.get(gid); + // 遍历之前的群 + for (Map.Entry entry : oldGroupMemberMap.entrySet()) { + if (!nowGroupMemberMap.containsKey(entry.getKey())) { + log.info("{}-{},这个人退出了[{}]群组", entry.getKey(), entry.getValue(), gid); + } + } + } else { + // 之前没这个群 + wxPpGroupMemberMap.put(gid, nowGroupMemberMap); + } + } + } + } + log.info("[定时任务]-[重置签到]-结束"); + } + +}