Commit b025054e by fudahua

会员标签同步-校验定时器

parent 99293ffb
...@@ -9,7 +9,8 @@ public enum QuartzEnum { ...@@ -9,7 +9,8 @@ public enum QuartzEnum {
/** /**
* 企业微信 * 企业微信
*/ */
HANDOVER_QYWX("handover", "com.gic.haoban.manage.api.service.HandoverOperationApiService", "batchQywxHandoverTimeTask", "0 0 0 * * *", "-1"); HANDOVER_QYWX("handover", "com.gic.haoban.manage.api.service.HandoverOperationApiService", "batchQywxHandoverTimeTask", "0 0 0 * * *", "-1"),
TAG_QYWX("qywxTagCheck", "com.gic.haoban.manage.api.service.QywxTagApiService", "checkQywxSync", "0 5 17 * * *", "-1");
private String key; private String key;
private String serviceName; private String serviceName;
private String method; private String method;
......
...@@ -149,4 +149,9 @@ public interface QywxTagApiService { ...@@ -149,4 +149,9 @@ public interface QywxTagApiService {
*/ */
public QywxTagInfoDTO getQywxTagByQywxTagId(String qywxTagId); public QywxTagInfoDTO getQywxTagByQywxTagId(String qywxTagId);
/**
* 校验企业微信标签同步
*/
public void checkQywxSync();
} }
...@@ -76,4 +76,13 @@ public interface QywxTagItemMapper { ...@@ -76,4 +76,13 @@ public interface QywxTagItemMapper {
* @return * @return
*/ */
List<TabQywxTagItem> listByQywxTagItemsIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("ids") List<String> ids); List<TabQywxTagItem> listByQywxTagItemsIds(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("ids") List<String> ids);
/**
* 根据id 获取标签项信息
*
* @param wxEnterpriseId
* @param qywxTagKeys
* @return
*/
List<TabQywxTagItem> listByQywxTagItemsKeys(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("qywxTagKeys") List<String> qywxTagKeys);
} }
\ No newline at end of file
...@@ -174,6 +174,15 @@ public interface QywxTagService { ...@@ -174,6 +174,15 @@ public interface QywxTagService {
public List<TabQywxTagItem> listQywxTagItemByIds(String wxEnterpriseId, List<String> ids); public List<TabQywxTagItem> listQywxTagItemByIds(String wxEnterpriseId, List<String> ids);
/** /**
* 根据企业微信的标签项获取 标签项列表
*
* @param wxEnterpriseId
* @param keys
* @return
*/
public List<TabQywxTagItem> listQywxTagItemByKeys(String wxEnterpriseId, List<String> keys);
/**
* 变更状态 * 变更状态
* *
* @param id * @param id
......
...@@ -3,6 +3,8 @@ package com.gic.haoban.manage.service.service; ...@@ -3,6 +3,8 @@ package com.gic.haoban.manage.service.service;
import com.gic.haoban.manage.api.dto.WxEnterpriseDTO; import com.gic.haoban.manage.api.dto.WxEnterpriseDTO;
import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise; import com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise;
import java.util.List;
public interface WxEnterpriseService { public interface WxEnterpriseService {
String add(WxEnterpriseDTO wxDTO); String add(WxEnterpriseDTO wxDTO);
...@@ -30,4 +32,11 @@ public interface WxEnterpriseService { ...@@ -30,4 +32,11 @@ public interface WxEnterpriseService {
int unbind(String wxEnterpriseId); int unbind(String wxEnterpriseId);
TabHaobanWxEnterprise getEnterpriseBycorpIdNoStatus(String corpid); TabHaobanWxEnterprise getEnterpriseBycorpIdNoStatus(String corpid);
/**
* 所有企业微信
*
* @return
*/
List<TabHaobanWxEnterprise> listAll();
} }
...@@ -222,6 +222,11 @@ public class QywxTagServiceImpl implements QywxTagService { ...@@ -222,6 +222,11 @@ public class QywxTagServiceImpl implements QywxTagService {
} }
@Override @Override
public List<TabQywxTagItem> listQywxTagItemByKeys(String wxEnterpriseId, List<String> keys) {
return qywxTagItemMapper.listByQywxTagItemsKeys(wxEnterpriseId, keys);
}
@Override
public void changeTagRelationStatus(String id, int status) { public void changeTagRelationStatus(String id, int status) {
TabQywxTagRelation tabQywxTagRelation = new TabQywxTagRelation(); TabQywxTagRelation tabQywxTagRelation = new TabQywxTagRelation();
tabQywxTagRelation.setQywxTagRelationId(id); tabQywxTagRelation.setQywxTagRelationId(id);
......
...@@ -89,4 +89,9 @@ public class WxEnterpriseServiceImpl implements WxEnterpriseService { ...@@ -89,4 +89,9 @@ public class WxEnterpriseServiceImpl implements WxEnterpriseService {
return null; return null;
} }
@Override
public List<TabHaobanWxEnterprise> listAll() {
List<TabHaobanWxEnterprise> ret = mapper.listAll();
return ret;
}
} }
...@@ -2,12 +2,15 @@ package com.gic.haoban.manage.service.service.out.impl; ...@@ -2,12 +2,15 @@ package com.gic.haoban.manage.service.service.out.impl;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.commons.util.ToolUtil; import com.gic.commons.util.ToolUtil;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.haoban.app.customer.enums.QywxTaskStatusEnum; import com.gic.haoban.app.customer.enums.QywxTaskStatusEnum;
import com.gic.haoban.app.customer.service.api.service.QywxTagSyncApiService; import com.gic.haoban.app.customer.service.api.service.QywxTagSyncApiService;
import com.gic.haoban.base.api.common.ServiceResponse; import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.common.utils.EntityUtil; import com.gic.haoban.common.utils.EntityUtil;
import com.gic.haoban.manage.api.dto.*; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.AlertTypeEnum;
import com.gic.haoban.manage.api.enums.QywxTagRelationSyncFlagEnum; import com.gic.haoban.manage.api.enums.QywxTagRelationSyncFlagEnum;
import com.gic.haoban.manage.api.enums.QywxTagRelationTypeEnum; import com.gic.haoban.manage.api.enums.QywxTagRelationTypeEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService; import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
...@@ -20,6 +23,7 @@ import com.gic.haoban.manage.service.service.QywxTagService; ...@@ -20,6 +23,7 @@ import com.gic.haoban.manage.service.service.QywxTagService;
import com.gic.haoban.manage.service.service.WxEnterpriseService; import com.gic.haoban.manage.service.service.WxEnterpriseService;
import com.gic.member.api.dto.MemberTagDTO; import com.gic.member.api.dto.MemberTagDTO;
import com.gic.member.api.service.MemberTagService; import com.gic.member.api.service.MemberTagService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService; import com.gic.search.engine.api.service.dynamic.ESDataDynamicOperationApiService;
import com.gic.wechat.api.dto.qywx.QywxTagDTO; import com.gic.wechat.api.dto.qywx.QywxTagDTO;
import com.gic.wechat.api.dto.qywx.QywxTagGroupDTO; import com.gic.wechat.api.dto.qywx.QywxTagGroupDTO;
...@@ -816,4 +820,126 @@ public class QywxTagApiServiceImpl implements QywxTagApiService { ...@@ -816,4 +820,126 @@ public class QywxTagApiServiceImpl implements QywxTagApiService {
TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(null, qywxTagId); TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(null, qywxTagId);
return EntityUtil.changeEntityByJSON(QywxTagInfoDTO.class, tabQywxTag); return EntityUtil.changeEntityByJSON(QywxTagInfoDTO.class, tabQywxTag);
} }
@Override
public void checkQywxSync() {
List<TabHaobanWxEnterprise> wxEnterprises = wxEnterpriseService.listAll();
wxEnterprises.forEach(wxEnterprise -> {
logger.info("企业:{}", wxEnterprise.getWxEnterpriseId());
try {
List<TabQywxTagRelation> tagRelations = qywxTagService.listAllQywxRelation(wxEnterprise.getWxEnterpriseId());
if (CollectionUtils.isEmpty(tagRelations)) {
logger.info("无需校验: 没有要同步的企业");
return;
}
QywxSyncTagFormatPojo pojo = this.listSyncTagItems(wxEnterprise.getWxEnterpriseId());
List<TabQywxTagRelation> qywxTagRelations = tagRelations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_GROUP.getType()).collect(Collectors.toList());
for (TabQywxTagRelation qywxTagRelation : qywxTagRelations) {
Map<String, Object> map = checkQywxSyncByQywxTag(qywxTagRelation, wxEnterprise, pojo);
if (MapUtils.isNotEmpty(map)) {
AlertMessageDTO messageDTO = new AlertMessageDTO();
messageDTO.setAlertTitle("标签同步异常");
messageDTO.setEnterpriseId(qywxTagRelation.getEnterpriseId());
messageDTO.setAlertType(AlertTypeEnum.QYWX_TAG_SYNC.getType());
messageDTO.setWxEnterpriseId(wxEnterprise.getWxEnterpriseId());
messageDTO.setContentMap(map);
ProviderLocalTag providerLocalTag = ProviderLocalTag.tag.get();
String traceId = providerLocalTag.traceId;
messageDTO.setTraceId(traceId);
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("haobanAlertMq", JSONObject.toJSONString(messageDTO));
} catch (Exception e) {
e.printStackTrace();
logger.info("异常:{}", e);
}
}
}
} catch (Exception e) {
logger.info("校验异常:{}", e);
}
});
}
/**
* 校验
*
* @param relation
* @param wxEnterprise
*/
private Map<String, Object> checkQywxSyncByQywxTag(TabQywxTagRelation relation, TabHaobanWxEnterprise wxEnterprise, QywxSyncTagFormatPojo pojo) {
Map<String, Object> ret = new HashMap<>();
boolean flag = false;
ret.put("hb标签id", relation.getQywxTagId());
TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(relation.getWxEnterpriseId(), relation.getQywxTagId());
if (null == tabQywxTag) {
logger.info("数据库不存在该企业微信标签:{}", relation.getQywxTagId());
ret.put("描述", "标签数据库不存在:" + relation.getTagItemId());
return ret;
}
ret.put("标签名称", tabQywxTag.getQywxGroupName());
List<String> ids = new ArrayList<>();
ids.add(tabQywxTag.getQywxGroupKey());
QywxGetCorpTagListDTO tagDetail = qywxSuiteApiService.getCorpTagList(wxEnterprise.getCorpid(), config.getWxSuiteid(), ids, QywxTagRelationTypeEnum.TAG_GROUP.getType());
if (tagDetail.getErrcode() != 0) {
logger.info("查询失败,无需操作:{}", JSONObject.toJSONString(tagDetail));
ret.put("描述", "查询失败:" + tagDetail.getErrmsg());
return ret;
}
if (CollectionUtils.isEmpty(tagDetail.getTagGroup())) {
logger.info("标签组不存在:{}", JSONObject.toJSONString(tagDetail));
ret.put("描述", "标签组不存在:" + tabQywxTag.getQywxGroupName());
return ret;
}
//获取该标签已经绑定的标签项key
Map<String, String> qywxToGicTagItemIdMap = pojo.getQywxToGicTagItemIdMap();
List<TabQywxTagItem> gicQywxTagItems = qywxTagService.listByQywxTagId(wxEnterprise.getWxEnterpriseId(), relation.getQywxTagId());
Map<String, String> gicQywxTagNameMap = gicQywxTagItems.stream().filter(tab -> qywxToGicTagItemIdMap.containsKey(tab.getQywxTagKey())).collect(Collectors.toMap(mid -> mid.getQywxTagKey(), mid -> mid.getQywxTagName()));
if (CollectionUtils.isEmpty(gicQywxTagItems)) {
logger.info("gic同步企业微信标签异常");
ret.put("描述", "gic同步企业微信标签异常:" + tabQywxTag.getQywxGroupName());
return ret;
}
Set<String> gicQywxKeysSet = gicQywxTagNameMap.keySet();
//获取企业微信的标签项key
QywxTagGroupDTO qywxTagGroupDTO = tagDetail.getTagGroup().get(0);
List<QywxTagDTO> tagItems = qywxTagGroupDTO.getTag();
if (CollectionUtils.isEmpty(tagItems)) {
ret.put("描述", "企业微信标签项空:" + tabQywxTag.getQywxGroupName());
return ret;
}
Map<String, QywxTagDTO> qywxTagDTOMap = tagItems.stream().collect(Collectors.toMap(dto -> dto.getId(), dto -> dto));
Set<String> qywxKeysSet = qywxTagDTOMap.keySet();
//在gic存在 企业微信不存在
Sets.SetView<String> qywxUnHaves = Sets.difference(gicQywxKeysSet, qywxKeysSet);
//企业微信存在 gic不存在
Sets.SetView<String> gicUnHaves = Sets.difference(qywxKeysSet, gicQywxKeysSet);
//企业微信缺少
if (!CollectionUtils.isEmpty(qywxUnHaves)) {
flag = true;
ret.put("企微缺少标签项", qywxUnHaves.stream().map(mid -> gicQywxTagNameMap.get(mid)).collect(Collectors.joining(", ", "", "")));
}
//gic缺少
if (!CollectionUtils.isEmpty(gicUnHaves)) {
flag = true;
ret.put("gic缺少标签项", gicUnHaves.stream().map(id -> qywxTagDTOMap.get(id).getName()).collect(Collectors.joining(",", "", "")));
}
if (flag) {
return ret;
}
return null;
}
} }
...@@ -199,4 +199,16 @@ ...@@ -199,4 +199,16 @@
and status_flag=1 and status_flag=1
and wx_enterprise_id=#{wxEnterpriseId} and wx_enterprise_id=#{wxEnterpriseId}
</select> </select>
<select id="listByQywxTagItemsKeys" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_qywx_tag_item
where qywx_tag_key in
<foreach collection="qywxTagKeys" open="(" close=")" separator="," item="item">
#{item}
</foreach>
and status_flag=1
and wx_enterprise_id=#{wxEnterpriseId}
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -56,4 +56,9 @@ public class QywxTagTest { ...@@ -56,4 +56,9 @@ public class QywxTagTest {
} }
@Test
public void test3() {
qywxTagApiService.checkQywxSync();
}
} }
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