Commit 0eaf2942 by 徐高华

外部联系人修复查询

parent 6660f2bb
...@@ -23,4 +23,15 @@ public interface HaobanTimerApiService { ...@@ -23,4 +23,15 @@ public interface HaobanTimerApiService {
*/ */
public ServiceResponse<Void> deleteTempWxHm(String params) ; public ServiceResponse<Void> deleteTempWxHm(String params) ;
/**
*
* @Title: repairExternalUserId
* @Description: 检查修复外部联系人ID
* @author xugh
* @param wxEnterpriseId
* @return
* @throws
*/
public ServiceResponse<Void> repairExternalUserId(String wxEnterpriseId) ;
} }
...@@ -61,5 +61,7 @@ public interface MemberUnionidRelatedMapper { ...@@ -61,5 +61,7 @@ public interface MemberUnionidRelatedMapper {
* @date 2022-06-30 17:35:50 * @date 2022-06-30 17:35:50
*/ */
List<MemberUnionidRelated> listByWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId); List<MemberUnionidRelated> listByWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId);
List<MemberUnionidRelated> listByWxEnterpriseIdAndExternalUserId(@Param("wxEnterpriseId") String wxEnterpriseId , @Param("list")List<String> externalUserIdList);
} }
\ No newline at end of file
...@@ -354,5 +354,7 @@ public interface TabHaobanExternalClerkRelatedMapper { ...@@ -354,5 +354,7 @@ public interface TabHaobanExternalClerkRelatedMapper {
*/ */
int countByMemberId(@Param("memberId") String memberId, int countByMemberId(@Param("memberId") String memberId,
@Param("enterpriseId") String enterpriseId); @Param("enterpriseId") String enterpriseId);
List<TabHaobanExternalClerkRelated> listPageByWxenterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId,
@Param("startItem") int startItem , @Param("pageSize") int pageSize );
} }
\ No newline at end of file
...@@ -71,4 +71,6 @@ public interface ExternalClerkRelatedService { ...@@ -71,4 +71,6 @@ public interface ExternalClerkRelatedService {
*/ */
String checkAndUpdateMemberByUnonId(String enterpriseId, String memberId, String unionId); String checkAndUpdateMemberByUnonId(String enterpriseId, String memberId, String unionId);
void repairExternalUserId(String wxEnterpriseId);
} }
...@@ -6,8 +6,6 @@ import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise; ...@@ -6,8 +6,6 @@ import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface WxEnterpriseService { public interface WxEnterpriseService {
String add(WxEnterpriseDTO wxDTO); String add(WxEnterpriseDTO wxDTO);
......
package com.gic.haoban.manage.service.service.impl; package com.gic.haoban.manage.service.service.impl;
import static org.slf4j.LoggerFactory.getLogger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.UniqueIdUtils;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.haoban.common.utils.DingUtils;
import com.gic.haoban.common.utils.EntityUtil; import com.gic.haoban.common.utils.EntityUtil;
import com.gic.haoban.common.utils.StringUtil; import com.gic.haoban.common.utils.StringUtil;
import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO; import com.gic.haoban.manage.api.dto.ExternalClerkRelatedDTO;
import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO; import com.gic.haoban.manage.api.dto.MemberUnionidRelatedDTO;
import com.gic.haoban.manage.api.dto.SecretSettingDTO;
import com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO;
import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO; import com.gic.haoban.manage.api.dto.qdto.hm.WxUserAddLogQDTO;
import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.dao.mapper.MemberUnionidRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper; import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper; import com.gic.haoban.manage.service.dao.mapper.TabHaobanExternalClerkRelatedMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanRepairExternalUserMapper;
import com.gic.haoban.manage.service.dao.mapper.TabHaobanStaffClerkRelationMapper; import com.gic.haoban.manage.service.dao.mapper.TabHaobanStaffClerkRelationMapper;
import com.gic.haoban.manage.service.entity.MemberUnionidRelated;
import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated; import com.gic.haoban.manage.service.entity.TabHaobanExternalClerkRelated;
import com.gic.haoban.manage.service.entity.TabHaobanRepairExternalUser;
import com.gic.haoban.manage.service.entity.TabHaobanStaff; import com.gic.haoban.manage.service.entity.TabHaobanStaff;
import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation; import com.gic.haoban.manage.service.entity.TabHaobanStaffClerkRelation;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService; import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.SecretSettingService;
import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.haoban.manage.service.service.hm.WxUserAddLogService; import com.gic.haoban.manage.service.service.hm.WxUserAddLogService;
import com.gic.member.api.dto.MemberDTO; import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberApiService; import com.gic.member.api.service.MemberApiService;
import com.gic.member.api.service.MemberService; import com.gic.member.api.service.MemberService;
import com.gic.mq.sdk.util.ProviderLocalTagUtil;
import com.gic.redis.data.util.RedisUtil;
import com.gic.search.engine.api.dto.ESResponseQuerySingle; import com.gic.search.engine.api.dto.ESResponseQuerySingle;
import com.gic.search.engine.api.dto.dynamic.DynamicSearchDTO; import com.gic.search.engine.api.dto.dynamic.DynamicSearchDTO;
import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService; import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService;
import org.apache.commons.collections.CollectionUtils; import com.gic.wechat.api.dto.qywx.QywxNewExternalUseridDTO;
import org.apache.commons.lang3.StringUtils; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import static org.slf4j.LoggerFactory.getLogger;
@Service @Service
public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedService { public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedService {
...@@ -39,7 +66,6 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -39,7 +66,6 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
@Autowired @Autowired
private TabHaobanExternalClerkRelatedMapper mapper; private TabHaobanExternalClerkRelatedMapper mapper;
@Autowired @Autowired
private ESDataDynamicOperationApiService esDataDynamicOperationApiService; private ESDataDynamicOperationApiService esDataDynamicOperationApiService;
@Autowired @Autowired
...@@ -52,7 +78,19 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -52,7 +78,19 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
private TabHaobanStaffClerkRelationMapper staffClerkRelationMapper; private TabHaobanStaffClerkRelationMapper staffClerkRelationMapper;
@Autowired @Autowired
private WxUserAddLogService wxUserAddLogService; private WxUserAddLogService wxUserAddLogService;
@Autowired
private WxEnterpriseService wxEnterpriseService ;
@Autowired
private MemberUnionidRelatedMapper memberUnionidRelatedMapper ;
@Autowired
private QywxUserApiService qywxUserApiService ;
@Autowired
private Config config;
@Autowired
private TabHaobanRepairExternalUserMapper tabHaobanRepairExternalUserMapper ;
@Autowired
private SecretSettingService secretSettingService ;
@Override @Override
public void insert(TabHaobanExternalClerkRelated related) { public void insert(TabHaobanExternalClerkRelated related) {
String clerkId = related.getClerkId(); String clerkId = related.getClerkId();
...@@ -229,4 +267,146 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ ...@@ -229,4 +267,146 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
} }
return null; return null;
} }
@Override
public void repairExternalUserId(String wxEnterpriseIds) {
DingUtils.send("外部联系人修复消息,企业="+wxEnterpriseIds+",tranceid="+ProviderLocalTag.tag.get(), false);
if(StringUtils.isEmpty(wxEnterpriseIds)) {
return ;
}
Object cache = RedisUtil.getCache("repairExternalUserId") ;
String[] arr = wxEnterpriseIds.split(",") ;
for(int i=0;i<arr.length;i++) {
String wxEnterpriseId = arr[i] ;
if(StringUtils.isEmpty(wxEnterpriseId)) {
continue ;
}
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
if(null == qwDTO) {
logger.info("外部联系人检查,企业不存在,wxEnterpriseId={}",wxEnterpriseId);
continue ;
}
SecretSettingDTO secret = this.secretSettingService.getSecretSetting(wxEnterpriseId, SecretTypeEnum.CUSTOMIZED_APP.getVal()) ;
int pageSize = 800 ;
int pageNum = 0 ;
while(true) {
List<TabHaobanExternalClerkRelated> list = this.mapper.listPageByWxenterpriseId(wxEnterpriseId, pageNum*pageSize, pageSize) ;
if(CollectionUtils.isEmpty(list)) {
break ;
}
pageNum++;
Set<String> externalUserIdSet = list.stream().map(dto->dto.getExternalUserId()).collect(Collectors.toSet()) ;
List<String> externalUserIdList = new ArrayList<>();
externalUserIdList.addAll(externalUserIdSet) ;
List<MemberUnionidRelated> unionidlist = this.memberUnionidRelatedMapper.listByWxEnterpriseIdAndExternalUserId(wxEnterpriseId, externalUserIdList) ;
Map<String,String> map = unionidlist.stream().collect(Collectors.toMap(MemberUnionidRelated::getExternalUserid, MemberUnionidRelated::getSelfExternalUserid,(k1,k2)->k1)) ;
logger.info("外部联系人检查,第{}次,好友数={},unionid表数={}",pageNum,externalUserIdList.size(),unionidlist.size());
List<String> delList = new ArrayList<>() ;
Set<String> checkSet = unionidlist.stream().map(dto->dto.getExternalUserid()).collect(Collectors.toSet()) ;
List<String> checkList = new ArrayList<>();
checkList.addAll(checkSet) ;
for(String item : externalUserIdList) {
if(!checkList.contains(item)) {
delList.add(item) ;
}
}
logger.info("外部联系人检查,unionid表不存在记录的数量={},待检查数={}",delList.size(),checkList.size());
List<String> notExistQwList = new ArrayList<>();
List<TabHaobanRepairExternalUser> errorList = new ArrayList<>() ;
if(CollectionUtils.isNotEmpty(checkList)) {
List<String> qwList = new ArrayList<>();
List<QywxNewExternalUseridDTO> newExternalUseridList = null ;
if(null != cache) {
newExternalUseridList = this.qywxUserApiService.getNewExternalUseridByList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), checkList) ;
}else {
newExternalUseridList = this.qywxUserApiService.getSelfNewExternalUseridByList(qwDTO.getDkCorpid(), secret.getSecretVal(), checkList) ;
}
if (null != newExternalUseridList) {
logger.info("外部联系人检查,查询企微数={},返回数={}",checkList.size(),newExternalUseridList.size());
for (QywxNewExternalUseridDTO qywxNewExternalUseridDTO : newExternalUseridList) {
String new_external_userid = qywxNewExternalUseridDTO.getNew_external_userid();
String external_userid = qywxNewExternalUseridDTO.getExternal_userid();
qwList.add(external_userid) ;
if(new_external_userid.equals(external_userid)) {
continue ;
}else {
logger.info("外部联系人检查,数据异常={}",new_external_userid,external_userid);
TabHaobanRepairExternalUser user = new TabHaobanRepairExternalUser();
user.setId(UniqueIdUtils.uniqueLong());
user.setUserId(external_userid);
user.setWxEnterpriseId(wxEnterpriseId);
user.setStatusFlag(111);
user.setRemark(new_external_userid);
errorList.add(user) ;
}
}
if(checkList.size()!=newExternalUseridList.size()) {
for(String item : checkList) {
if(!qwList.contains(item)) {
notExistQwList.add(item) ;
}
}
}
}else {
logger.info("外部联系人检查,调用企业异常");
}
// 通过外部联系人查询不到
if(CollectionUtils.isNotEmpty(notExistQwList)) {
// 需要用自建的查询的
List<String> selfList = new ArrayList<>();
List<TabHaobanRepairExternalUser> addList = new ArrayList<>();
for(String item : notExistQwList) {
TabHaobanRepairExternalUser user = new TabHaobanRepairExternalUser();
user.setId(UniqueIdUtils.uniqueLong());
user.setUserId(item);
if(StringUtils.isNotBlank(map.get(item)) && !map.get(item).equals(item)) {
selfList.add(map.get(item)) ;
}
user.setSelfUserId(map.get(item));
user.setWxEnterpriseId(wxEnterpriseId);
user.setStatusFlag(11);
user.setRemark("企微查询不到");
addList.add(user) ;
}
if(CollectionUtils.isNotEmpty(selfList)) {
newExternalUseridList = null ;
if(null != cache) {
newExternalUseridList = this.qywxUserApiService.getNewExternalUseridByList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), selfList) ;
}else {
newExternalUseridList = this.qywxUserApiService.getSelfNewExternalUseridByList(qwDTO.getDkCorpid(), secret.getSecretVal(), selfList) ;
}
Map<String,String> selfMap = new HashMap<>() ;
if(null != newExternalUseridList) {
selfMap = newExternalUseridList.stream().collect(Collectors.toMap(QywxNewExternalUseridDTO::getExternal_userid, QywxNewExternalUseridDTO::getNew_external_userid,(k1,k2)->k1)) ;
}
for(TabHaobanRepairExternalUser item : addList) {
item.setNewUserId(selfMap.get(item.getSelfUserId()));
}
}
this.tabHaobanRepairExternalUserMapper.batchInsert(addList) ;
}
// unionid表不存在的记录
if(CollectionUtils.isNotEmpty(delList)) {
List<TabHaobanRepairExternalUser> addList = new ArrayList<>();
for(String item : delList) {
TabHaobanRepairExternalUser user = new TabHaobanRepairExternalUser();
user.setId(UniqueIdUtils.uniqueLong());
user.setUserId(item);
user.setWxEnterpriseId(wxEnterpriseId);
user.setStatusFlag(1);
user.setRemark("unionid不存在记录");
addList.add(user) ;
}
this.tabHaobanRepairExternalUserMapper.batchInsert(addList) ;
}
// 错误的ID
if(CollectionUtils.isNotEmpty(errorList)) {
this.tabHaobanRepairExternalUserMapper.batchInsert(errorList) ;
}
}
}
}
}
} }
...@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service; ...@@ -5,6 +5,7 @@ import org.springframework.stereotype.Service;
import com.gic.api.base.commons.ServiceResponse; import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.service.HaobanTimerApiService; import com.gic.haoban.manage.api.service.HaobanTimerApiService;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService; import com.gic.haoban.manage.service.service.hm.HmQrcodeTempService;
@Service("haobanTimerApiService") @Service("haobanTimerApiService")
...@@ -13,10 +14,21 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService { ...@@ -13,10 +14,21 @@ public class HaobanTimerApiServiceImpl implements HaobanTimerApiService {
@Autowired @Autowired
private HmQrcodeTempService hmQrcodeTempService ; private HmQrcodeTempService hmQrcodeTempService ;
@Autowired
private ExternalClerkRelatedService externalClerkRelatedService ;
@Override @Override
public ServiceResponse<Void> deleteTempWxHm(String params) { public ServiceResponse<Void> deleteTempWxHm(String params) {
this.hmQrcodeTempService.deleteForTimer(); this.hmQrcodeTempService.deleteForTimer();
return ServiceResponse.success(); return ServiceResponse.success();
} }
@Override
public ServiceResponse<Void> repairExternalUserId(String wxEnterpriseId) {
this.externalClerkRelatedService.repairExternalUserId(wxEnterpriseId) ;
return ServiceResponse.success();
}
} }
...@@ -185,5 +185,16 @@ ...@@ -185,5 +185,16 @@
where wx_enterprise_id = #{wxEnterpriseId} where wx_enterprise_id = #{wxEnterpriseId}
and status_flag = 1 and status_flag = 1
</select> </select>
<select id="listByWxEnterpriseIdAndExternalUserId" resultMap="BaseResultMap">
select
external_userid, self_external_userid from tab_haoban_member_unionid_related
where wx_enterprise_id = #{wxEnterpriseId}
and external_userid in
<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
#{id,jdbcType=VARCHAR}
</foreach>
and status_flag = 1
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -660,5 +660,11 @@ ...@@ -660,5 +660,11 @@
and member_id = #{memberId} and member_id = #{memberId}
and status_flag = 1 and status_flag = 1
</select> </select>
<select id="listPageByWxenterpriseId" resultMap="BaseResultMap">
select DISTINCT(external_user_id) from tab_haoban_external_clerk_related where wx_enterprise_id = #{wxEnterpriseId} and status_flag = 1
limit ${startItem},${pageSize}
</select>
</mapper> </mapper>
\ No newline at end of file
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