feat(0): [java]-[mvn]-新增退群监测
This commit is contained in:
parent
d42b27568d
commit
488eb58122
8
clients/java/wechat-ferry-mvn/CHANGELOG.md
vendored
8
clients/java/wechat-ferry-mvn/CHANGELOG.md
vendored
@ -44,6 +44,14 @@
|
||||
- 2.发送富文本包含thumbnailUrl参数会导致消息发送不出去 - `待修复`
|
||||
- 3.发送文件成功之后客户端崩溃 - `待修复`
|
||||
|
||||
### 2024-12-27
|
||||
|
||||
#### ⛰️ Features
|
||||
|
||||
- 查询群成员返回类新增字段
|
||||
- 新增退群监测功能
|
||||
- 说明文档更新
|
||||
|
||||
### 2024-12-25
|
||||
|
||||
#### ⛰️ Features
|
||||
|
92
clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/LeaveGroupMonitorTask.java
vendored
Normal file
92
clients/java/wechat-ferry-mvn/src/main/java/com/wechat/ferry/task/LeaveGroupMonitorTask.java
vendored
Normal file
@ -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<String, Map<String, String>> wxPpGroupMemberMap = new HashMap<>();
|
||||
|
||||
@Scheduled(cron = "0 0/2 * * * ?")
|
||||
public void scheduled() {
|
||||
// 群变动
|
||||
List<String> groupList = new ArrayList<>();
|
||||
List<WxPpWcfContactsResp> 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<String, Map<String, String>> 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<WxPpWcfGroupMemberResp> dbGroupMemberList = weChatDllService.queryGroupMemberList(request);
|
||||
if (!CollectionUtils.isEmpty(dbGroupMemberList)) {
|
||||
// 现在的群成员
|
||||
Map<String, String> nowGroupMemberMap = new HashMap<>();
|
||||
for (WxPpWcfGroupMemberResp groupMember : dbGroupMemberList) {
|
||||
nowGroupMemberMap.put(groupMember.getWeChatUid(), groupMember.getGroupNickName());
|
||||
}
|
||||
|
||||
Map<String, String> oldGroupMemberMap = new HashMap<>();
|
||||
// 判断之前有没有这个群
|
||||
if (wxPpGroupMemberMap.containsKey(gid)) {
|
||||
// 之前有这个群
|
||||
oldGroupMemberMap = wxPpGroupMemberMap.get(gid);
|
||||
// 遍历之前的群
|
||||
for (Map.Entry<String, String> entry : oldGroupMemberMap.entrySet()) {
|
||||
if (!nowGroupMemberMap.containsKey(entry.getKey())) {
|
||||
log.info("{}-{},这个人退出了[{}]群组", entry.getKey(), entry.getValue(), gid);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 之前没这个群
|
||||
wxPpGroupMemberMap.put(gid, nowGroupMemberMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log.info("[定时任务]-[重置签到]-结束");
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user