Commit e6106d87 by 墨竹

fix:刷新企微好友兼容

parent da6481ba
......@@ -28,7 +28,7 @@ public interface StaffApiService {
void del(String staffDepartmentStaffRelatedId);
/**
* 获取微信成员
* 保存微信成员
*
* @param userId
* @param wxEnterpriseId
......
......@@ -147,7 +147,6 @@ public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiServ
} else if (dataPre.getDataType().equals(PreDealTypeEnum.self_friend.getVal())) {
operationMap.get("selfFriendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
logger.info("好友处理:{}", params);
} else if (dataPre.getDataType().equals(PreDealTypeEnum.friend_merge.getVal())) {
operationMap.get("friendMergeSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
logger.info("好友合并处理:{}", params);
......
......@@ -999,11 +999,9 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return;
}
for (Object object : jsonArr) {
this.add(wxEnterpriseId, object.toString(), wxUserId, storeId);
}
}
@Override
......
package com.gic.haoban.manage.service.task;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
......@@ -18,7 +7,6 @@ import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
......@@ -26,6 +14,16 @@ import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@Deprecated
......
package com.gic.haoban.manage.service.task;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.pojo.ExternalUserPojo;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Deprecated
......@@ -47,12 +33,7 @@ public class FriendSyncOperation implements BaseSyncOperation {
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String reason = "";
......
......@@ -30,7 +30,7 @@ import java.util.List;
import java.util.stream.Collectors;
/**
* 通讯录同步
* 企微通讯录同步
* Created 2020/4/13.
*
* @author hua
......@@ -56,7 +56,7 @@ public class QywxClerkSyncOperation implements BaseSyncOperation {
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("微信成员处理:{}", JSONObject.toJSONString(dealParamMqDTO));
logger.info("企微通讯录成员同步处理:{}", JSONObject.toJSONString(dealParamMqDTO));
boolean dealFlag = true;
String reason = "";
//处理clerk
......@@ -67,8 +67,7 @@ public class QywxClerkSyncOperation implements BaseSyncOperation {
reason = response.getMessage();
}
} catch (Exception e) {
e.printStackTrace();
logger.info("微信成员同步失败:{}", e);
logger.info("企微通讯录成员同步失败:{}", e.getMessage(), e);
reason = "同步异常:";
dealFlag = false;
} finally {
......@@ -82,10 +81,10 @@ public class QywxClerkSyncOperation implements BaseSyncOperation {
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
logger.info("微信成员处理失败:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId,PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.exception.getVal(), reason);
logger.info("企微通讯录成员处理失败:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId, PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.exception.getVal(), reason);
if (!b) {
logger.info("微信成员处理异常:t:{}, d:{}", taskId, dataId);
logger.info("企微通讯录成员处理异常:t:{}, d:{}", taskId, dataId);
return;
}
checkDepartmentTask(taskId);
......@@ -94,10 +93,10 @@ public class QywxClerkSyncOperation implements BaseSyncOperation {
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
logger.info("微信成员处理成功:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId,PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
logger.info("企微通讯录成员处理成功:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId, PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.computed.getVal(), "成功");
if (!b) {
logger.info("微信成功修改错误!{}", dataId);
logger.info("企微通讯录成员成功修改错误!{}", dataId);
return;
}
checkDepartmentTask(taskId);
......@@ -109,7 +108,7 @@ public class QywxClerkSyncOperation implements BaseSyncOperation {
if (!b) {
return;
}
logger.info("微信同步成功:{}", taskId);
logger.info("企微通讯录成员成功:{}", taskId);
String key = "haoban_sync_clerk_task_" + taskId;
RedisUtil.lock(key, 3L);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
......@@ -126,7 +125,7 @@ public class QywxClerkSyncOperation implements BaseSyncOperation {
dealSyncOperationApiService.cleanDiffrence(wxEnterpriseId, taskId);
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseApiService.getOne(wxEnterpriseId);
String corpid = wxEnterpriseDTO.getCorpid();
TabHaobanWxApplication tabHaobanWxApplication = wxApplicationMapper.selectByCorpId(corpid,null);
TabHaobanWxApplication tabHaobanWxApplication = wxApplicationMapper.selectByCorpId(corpid, null);
logger.info("同步通讯录完成,批量处理wx_user_id,corpid:{}", corpid);
if (corpid.length() > 20) {
//批量处理wx_user_id to wx_open_user_id
......
......@@ -5,8 +5,6 @@ import com.gic.clerk.api.dto.ClerkListDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.dto.StoreGroupDTO;
import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.Constant;
import com.gic.haoban.base.api.common.ServiceResponse;
......@@ -15,7 +13,6 @@ import com.gic.haoban.manage.api.dto.DepartmentDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.DepartmentApiService;
import com.gic.haoban.manage.service.entity.TabHaobanDepartment;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
......@@ -51,9 +48,6 @@ public class StoreSyncOperation implements BaseSyncOperation {
private DepartmentService departmentService;
@Autowired
private StoreGroupService storeGroupService;
@Autowired
private PreDealService preDealService;
@Autowired
......@@ -69,9 +63,6 @@ public class StoreSyncOperation implements BaseSyncOperation {
private ClerkService clerkService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
@Autowired
private ClerkSyncOperation clerkSyncOperation;
@Override
......@@ -159,10 +150,7 @@ public class StoreSyncOperation implements BaseSyncOperation {
if (finalHasDatas.contains(mid.getClerkId())) {
return false;
}
if (StringUtils.isBlank(mid.getPhoneNumber())) {
return false;
}
return true;
return !StringUtils.isBlank(mid.getPhoneNumber());
}).map(clerkMid -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(clerkMid.getClerkId());
......
......@@ -40,6 +40,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
......@@ -52,6 +53,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
try {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId();
//获取所有外部联系人的外部联系人ids
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, wxUserId);
logger.info("selfUserIdList={}", JSONObject.toJSONString(selfUserIdList));
......@@ -76,7 +78,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
return;
}
if (CollectionUtils.isEmpty(userIdList)) {
logger.info("用户没有外部联系人2:{}", JSONObject.toJSONString(dataPre));
logger.info("用户没有外部联系人2:{}", JSONObject.toJSONString(dataPre));
dealFlag = false;
reason = "该用户没有外部联系人";
return;
......@@ -137,7 +139,7 @@ public class FriendClerkSyncNewOperation implements BaseSyncOperation {
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
Integer count = Integer.valueOf(cache.toString());
int count = Integer.parseInt(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
......
......@@ -15,12 +15,10 @@ import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterpriseRelated;
import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.haoban.manage.service.service.WxEnterpriseRelatedService;
import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
......@@ -43,6 +41,7 @@ import java.util.stream.Collectors;
*/
@Service
public class FriendSyncNewOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendSyncNewOperation.class);
@Autowired
private PreDealService preDealService;
......@@ -50,7 +49,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
......@@ -59,17 +57,18 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkService clerkService;
@Autowired
private PowerService powerService;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService;
@Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
@Autowired
private WxEnterpriseRelatedService wxEnterpriseRelatedService;
@Autowired
private WxEnterpriseService wxEnterpriseService;
@Autowired
private StaffService staffService;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
......@@ -96,6 +95,26 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
reason = "好友不存在";
return;
}
TabHaobanStaff tabHaobanStaff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if (tabHaobanStaff == null) {
dealFlag = false;
reason = "员工不存在";
return;
}
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(wxEnterpriseId);
if (wxEnterpriseDTO == null) {
logger.info("没有存在企业关联:wxEnterpriseId:{}", wxEnterpriseId);
dealFlag = false;
reason = "没有关联企业";
return;
}
String corpid = wxEnterpriseDTO.getCorpid();
//wxUserId 兼容
if (corpid.length() > 20) {
wxUserId = tabHaobanStaff.getWxOpenUseId();
} else {
wxUserId = tabHaobanStaff.getWxUserId();
}
//relationkey
relationKey = SecureUtil.md5(wxUserId + "_" + externalUserDTO.getName() + "_" + externalUserDTO.getAddCreateTime());
logger.info("relationKey:{},{}", relationKey, externalUserDTO.getExternalUserId());
......@@ -128,7 +147,6 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
dealFlag = tryAgainToMq(dataPre);
reason = "接口重试超出限制";
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
reason = "第三方好友处理异常";
dealFlag = false;
......@@ -198,12 +216,26 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
logger.info("没有存在企业关联:{},{}", staffClerkRelationDTO.getWxEnterpriseId(), staffClerkRelationDTO.getEnterpriseId());
return "没有关联企业";
}
Integer memberOpenCardFlag = wxEnterpriseRelated.getMemberOpenCardFlag();
//好友不同开平
if (wxEnterpriseRelated.getMemberOpenCardFlag() == 1) {
if (memberOpenCardFlag == 1) {
logger.info("好友不同开平,:{}", JSONObject.toJSONString(externalUserDTO));
return memberUnionidRelatedApiService.addFriendExternal(externalUserDTO);
}
WxEnterpriseDTO wxEnterpriseDTO = wxEnterpriseService.selectById(wxEnterpriseId);
if (wxEnterpriseDTO == null) {
logger.info("没有存在企业关联:wxEnterpriseId:{}", wxEnterpriseId);
return "没有关联企业";
}
Integer agreeExternalUseridFlag = wxEnterpriseDTO.getAgreeExternalUseridFlag();
//同一开平,但是走新规则
if (memberOpenCardFlag == 0
&& agreeExternalUseridFlag != null
&& agreeExternalUseridFlag == 1) {
logger.info("好友同一开平,但是走新规则,:{}", JSONObject.toJSONString(externalUserDTO));
return memberUnionidRelatedApiService.addFriendExternal(externalUserDTO);
}
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
......@@ -304,7 +336,7 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
try {
clientInstance.sendBatchMessages("departmentSyncDealMq", ret);
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId);
logger.info("发送失败:{}", taskId,e);
e.printStackTrace();
}
}
......
......@@ -29,6 +29,9 @@ import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* 自建好友处理
*/
@Service
public class SelfFriendSyncNewOperation implements BaseSyncOperation {
......@@ -39,7 +42,6 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
......@@ -196,9 +198,4 @@ public class SelfFriendSyncNewOperation implements BaseSyncOperation {
}
}
public static void main(String[] args) {
String res = "{'clerkId':'b160eb9a3daf4b3da936b678f1b06744','enterpriseId':'ff8080815dacd3a2015dacd3ef5c0000','externalUserId':'wm59NLDQAAY5Q4pABXAfaTJ6mORvpw','name':'hzw','storeId':'ff8080815695df44015697ada25b0102','wxEnterpriseId':'ca66a01b79474c40b3e7c7f93";
System.err.println(JSON.parseObject(res, ExternalUserDTO.class));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment