瀏覽代碼

同步通讯录

吴树波 1 周之前
父節點
當前提交
62ce3c8375

+ 8 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyWxAccountController.java

@@ -166,4 +166,12 @@ public class CompanyWxAccountController extends BaseController
         companyWxAccountService.wxLoginOut(accountId);
         return R.ok().put("data", true);
     }
+    /**
+     * 同步微信联系人和群聊
+     */
+	@GetMapping("/syncWx")
+    public R syncWx(Long accountId){
+        companyWxAccountService.syncWx(accountId);
+        return R.ok();
+    }
 }

+ 2 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyWxAccount.java

@@ -64,6 +64,8 @@ public class CompanyWxAccount extends BaseEntity
     private LocalDateTime loginTime;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime outTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime syncFriendTime;
 
     private String outRemark;
 

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyWxAccountService.java

@@ -80,4 +80,6 @@ public interface ICompanyWxAccountService extends IService<CompanyWxAccount>
     void updateWxInfo(Long accountId);
 
     void wxLoginOut(Long accountId);
+
+    void syncWx(Long accountId);
 }

+ 26 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyWxServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.utils.DateUtils;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyUser;
@@ -13,22 +14,27 @@ import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.service.ICompanyWxAccountService;
 import com.fs.wxcid.domain.CidIpadServerUser;
+import com.fs.wxcid.dto.friend.ContactListResponse;
 import com.fs.wxcid.dto.login.LoginStatusData;
 import com.fs.wxcid.dto.login.LoginStatusResponseData;
 import com.fs.wxcid.dto.user.UserInfo;
 import com.fs.wxcid.dto.user.UserInfoExt;
 import com.fs.wxcid.dto.user.UserProfileData;
 import com.fs.wxcid.service.AdminLicenseService;
+import com.fs.wxcid.service.FriendService;
 import com.fs.wxcid.service.ICidIpadServerService;
 import com.fs.wxcid.service.ICidIpadServerUserService;
 import com.fs.wxcid.service.impl.LoginServiceImpl;
 import com.fs.wxcid.service.impl.UserServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 企微账号Service业务层处理
@@ -36,8 +42,12 @@ import java.util.List;
  * @author fs
  * @date 2024-12-09
  */
+@Slf4j
 @Service
 public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, CompanyWxAccount> implements ICompanyWxAccountService {
+    private final static String FRIEND_KEY = "cid:wx:friend-list:";
+    private final static List<String> REMOVE_FRIEND_STR_ARRAY = Arrays.asList("weixin", "fmessage", "medianote", "gh_3dfda90e39d6");
+    private final static String IS_ROOM_KEY = "@chatroom";
     @Autowired
     private CompanyWxAccountMapper companyWxAccountMapper;
     @Autowired
@@ -54,6 +64,10 @@ public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, Co
     private AdminLicenseService adminLicenseService;
     @Autowired
     private UserServiceImpl userService;
+    @Autowired
+    private FriendService friendService;
+    @Autowired
+    private RedisCacheT<List<String>> friendListRedis;
 
     /**
      * 查询企微账号
@@ -249,4 +263,16 @@ public class CompanyWxServiceImpl extends ServiceImpl<CompanyWxAccountMapper, Co
         updateById(account);
         loginService.logOut(accountId);
     }
+
+    @Override
+    public void syncWx(Long accountId) {
+        CompanyWxAccount account = getById(accountId);
+        account.setSyncFriendTime(LocalDateTime.now());
+        String key = FRIEND_KEY + accountId;
+        friendListRedis.deleteObject(key);
+        ContactListResponse response = friendService.getContactListNotKey(accountId);
+        List<String> friendList = response.getContactList().getContactUsernameList().stream().filter(e -> !REMOVE_FRIEND_STR_ARRAY.contains(e)).collect(Collectors.toList());
+        friendListRedis.setCacheObject(key, friendList);
+        updateById(account);
+    }
 }

+ 2 - 2
fs-service/src/main/java/com/fs/wxcid/dto/friend/GetContactListRequest.java

@@ -11,9 +11,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 public class GetContactListRequest {
     /** 当前群聊联系人的序列号(用于分页) */
     @JsonProperty("CurrentChatRoomContactSeq")
-    private Long CurrentChatRoomContactSeq;
+    private Integer CurrentChatRoomContactSeq;
 
     /** 当前普通联系人的序列号(用于分页) */
     @JsonProperty("CurrentWxcontactSeq")
-    private Long CurrentWxcontactSeq;
+    private Integer CurrentWxcontactSeq;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/wxcid/service/FriendService.java

@@ -40,4 +40,5 @@ public interface FriendService {
      */
     // 反序列化为泛型响应对象
     ApiResponseCommon<ContactListResponse> getContactList(String authKey, GetContactListRequest request);
+    ContactListResponse getContactListNotKey(Long accountId);
 }

+ 14 - 0
fs-service/src/main/java/com/fs/wxcid/service/impl/FriendServiceImpl.java

@@ -1,13 +1,16 @@
 package com.fs.wxcid.service.impl;
 
 import com.fs.common.exception.CustomException;
+import com.fs.wxcid.ServiceUtils;
 import com.fs.wxcid.dto.common.ApiResponse;
 import com.fs.wxcid.dto.common.ApiResponseCommon;
 import com.fs.wxcid.dto.friend.*;
+import com.fs.wxcid.dto.login.RequestBaseVo;
 import com.fs.wxcid.service.FriendService;
 import com.fs.wxwork.utils.WxWorkHttpUtil;
 import com.alibaba.fastjson.TypeReference;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -20,6 +23,8 @@ import java.util.Map;
 @Slf4j
 @Service
 public class FriendServiceImpl implements FriendService {
+    @Autowired
+    private ServiceUtils serviceUtils;
 
     /** 微信接口基础 URL */
     private static final String BASE_URL = "http://114.117.215.244:7006";
@@ -66,6 +71,15 @@ public class FriendServiceImpl implements FriendService {
 
     }
 
+    @Override
+    public ContactListResponse getContactListNotKey(Long accountId) {
+        GetContactListRequest request = new GetContactListRequest();
+        request.setCurrentChatRoomContactSeq(0);
+        request.setCurrentWxcontactSeq(0);
+        ApiResponseCommon<ContactListResponse> response = serviceUtils.sendPost("/friend/GetContactList", RequestBaseVo.builder().accountId(accountId).data(request).build(), new TypeReference<ApiResponseCommon<ContactListResponse>>() {});
+        return response.getData();
+    }
+
 
     // ------------------ 工具方法 ------------------
     /**