feat(0): [java]-[mvn]-联系人群组监控逻辑修改
This commit is contained in:
parent
7b7e99c0e1
commit
3d641826a1
@ -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<ContactDo> list = new ArrayList<>();
|
||||
// 查询联系人
|
||||
List<Wcf.DbRow> 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<Wcf.DbField> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,10 +68,4 @@ public class Contact {
|
||||
@ApiModelProperty(value = "群类型")
|
||||
private Integer chatRoomType;
|
||||
|
||||
/**
|
||||
* 头像MD5
|
||||
*/
|
||||
@ApiModelProperty(value = "头像MD5")
|
||||
private String headImgMd5;
|
||||
|
||||
}
|
||||
|
@ -391,7 +391,7 @@ public class WeChatSocketClient {
|
||||
public Function<byte[], Object> getSqlType(int type) {
|
||||
Map<Integer, Function<byte[], Object>> 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);
|
||||
|
@ -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<String, Map<String, String>> 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<ContactDo> 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<String> addGroupList = new ArrayList<>();
|
||||
// 退出群组
|
||||
List<String> deleteGroupList = new ArrayList<>();
|
||||
// 本次的联系人标识列表
|
||||
List<String> nowContactIdList = new ArrayList<>();
|
||||
// 本次个微联系人标识列表
|
||||
List<String> nowPpContactIdList = new ArrayList<>();
|
||||
// 本次企微联系人标识列表
|
||||
List<String> nowCpContactIdList = new ArrayList<>();
|
||||
// 本次群组标识列表
|
||||
List<String> nowGroupIdList = new ArrayList<>();
|
||||
|
||||
// 开始匹配
|
||||
if (!CollectionUtils.isEmpty(contactList)) {
|
||||
// 判断全部联系人是否为空
|
||||
if (allContactDoMap.isEmpty()) {
|
||||
for (ContactDo contactDo : contactList) {
|
||||
nowContactIdList.add(contactDo.getWeChatUid());
|
||||
if (!initFlag) {
|
||||
// 首次初始化
|
||||
allContactDoMap.put(contactDo.getWeChatUid(), contactDo);
|
||||
if (WxContactsTypeEnum.PERSON.getCode().equals(contactDo.getContactType())) {
|
||||
@ -109,53 +116,69 @@ public class ContactGroupMonitorTask {
|
||||
// 群组-初始化
|
||||
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 (!cpContactDoMap.containsKey(contactDo.getContactType())) {
|
||||
}
|
||||
} 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 (!groupMap.containsKey(contactDo.getContactType())) {
|
||||
}
|
||||
} 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<String, String> entry : ppContactDoMap.entrySet()) {
|
||||
if (!nowContactIdList.contains(entry.getKey())) {
|
||||
if (!nowPpContactIdList.contains(entry.getKey())) {
|
||||
// 个微-删除
|
||||
deletePpContactList.add(entry.getKey());
|
||||
}
|
||||
}
|
||||
// 企微
|
||||
for (Map.Entry<String, String> entry : cpContactDoMap.entrySet()) {
|
||||
if (!nowContactIdList.contains(entry.getKey())) {
|
||||
if (!nowCpContactIdList.contains(entry.getKey())) {
|
||||
// 企微-删除
|
||||
deleteCpContactList.add(entry.getKey());
|
||||
}
|
||||
}
|
||||
// 群组
|
||||
for (Map.Entry<String, String> 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);
|
||||
}
|
||||
}
|
||||
initStatus = true;
|
||||
}
|
||||
|
||||
// 监控群成员
|
||||
private void groupMemberMonitor() {
|
||||
|
Loading…
Reference in New Issue
Block a user