Commit a621d903 by 徐高华

wx_user_id调整

parent c002d98b
...@@ -155,11 +155,10 @@ public class TestController extends WebBaseController { ...@@ -155,11 +155,10 @@ public class TestController extends WebBaseController {
continue; continue;
} }
String wxEnterpriseId = staff.getWxEnterpriseId(); String wxEnterpriseId = staff.getWxEnterpriseId();
String wxUserId = staff.getWxUserId();
String taskName = "刷新企业微信好友(" + staff.getStaffName() + ")"; String taskName = "刷新企业微信好友(" + staff.getStaffName() + ")";
String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(staff.getWxEnterpriseId(), taskName, staffId, staff.getStaffName(), SyncTaskTypeEnum.FRIEND_SINGLE.getType()); String taskId = dealSyncOperationApiService.createWxFriendTaskSingle(staff.getWxEnterpriseId(), taskName, staffId, staff.getStaffName(), SyncTaskTypeEnum.FRIEND_SINGLE.getType());
if (StringUtils.isNotBlank(taskId)) { if (StringUtils.isNotBlank(taskId)) {
dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, wxUserId, staffId, wxEnterpriseId); dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
} }
} }
return resultResponse(HaoBanErrCode.ERR_1); return resultResponse(HaoBanErrCode.ERR_1);
......
...@@ -9,21 +9,6 @@ import java.util.List; ...@@ -9,21 +9,6 @@ import java.util.List;
@Mapper @Mapper
public interface HandoverExternalMapper { public interface HandoverExternalMapper {
/**
*/
int deleteByPrimaryKey(String handoverExternalId);
/**
*/
int insert(TabHandoverExternal record);
/**
*/
int insertSelective(TabHandoverExternal record);
/**
*/
TabHandoverExternal selectByPrimaryKey(String handoverExternalId);
/** /**
*/ */
...@@ -31,10 +16,6 @@ public interface HandoverExternalMapper { ...@@ -31,10 +16,6 @@ public interface HandoverExternalMapper {
/** /**
*/ */
int updateByPrimaryKey(TabHandoverExternal record);
/**
*/
int insertBatch(@Param("list") List<TabHandoverExternal> list); int insertBatch(@Param("list") List<TabHandoverExternal> list);
/** /**
......
...@@ -72,7 +72,7 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe ...@@ -72,7 +72,7 @@ public class ClerkMainStoreRelatedServiceImpl implements ClerkMainStoreRelatedSe
logger.info("刷新好友失败或正在刷新:{},{}", staffId, storeId); logger.info("刷新好友失败或正在刷新:{},{}", staffId, storeId);
return; return;
} }
dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staff.getWxUserId(), staffId, wxEnterpriseId); dealSyncOperationApiService.dealWxFriendClerkSingle(taskId, staffId, staffId, wxEnterpriseId);
logger.info("任务id:{}", taskId); logger.info("任务id:{}", taskId);
} }
......
package com.gic.haoban.manage.service.service.out.impl; package com.gic.haoban.manage.service.service.out.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page; import com.gic.api.base.commons.Page;
import com.gic.clerk.api.dto.ClerkDTO; import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService; import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.GICMQClientUtil; import com.gic.commons.util.GICMQClientUtil;
import com.gic.commons.util.ToolUtil; import com.gic.commons.util.ToolUtil;
import com.gic.enterprise.api.dto.StoreDTO; import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.dto.StoreGroupDTO; import com.gic.enterprise.api.dto.StoreGroupDTO;
import com.gic.enterprise.api.service.StoreGroupService; import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService; import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.BasePageInfo; import com.gic.haoban.base.api.common.BasePageInfo;
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.*; import com.gic.haoban.manage.api.enums.*;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService; import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.service.dao.mapper.StaffMapper; import com.gic.haoban.manage.service.dao.mapper.StaffMapper;
import com.gic.haoban.manage.service.entity.*; import com.gic.haoban.manage.service.entity.*;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.haoban.manage.service.task.BaseSyncOperation; import com.gic.haoban.manage.service.task.BaseSyncOperation;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
import com.gic.wechat.api.service.qywx.QywxDepartmentApiService; import com.gic.wechat.api.service.qywx.QywxDepartmentApiService;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* Created 2020/4/9. * Created 2020/4/9.
* *
* @author hua * @author hua
*/ */
@Service @Service
public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiService { public class DealSyncOperationApiServiceImpl implements DealSyncOperationApiService {
private static final Logger logger = LoggerFactory.getLogger(DealSyncOperationApiServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(DealSyncOperationApiServiceImpl.class);
@Autowired @Autowired
private DepartmentService departmentService; private DepartmentService departmentService;
@Autowired @Autowired
private StoreGroupService storeGroupService; private StoreGroupService storeGroupService;
@Autowired @Autowired
private PreDealService preDealService; private PreDealService preDealService;
@Autowired @Autowired
private SyncTaskService syncTaskService; private SyncTaskService syncTaskService;
@Autowired @Autowired
private StoreService storeService; private StoreService storeService;
@Autowired @Autowired
private Map<String, BaseSyncOperation> operationMap; private Map<String, BaseSyncOperation> operationMap;
@Autowired @Autowired
private StaffService staffService; private StaffService staffService;
@Autowired @Autowired
private StaffMapper staffMapper ; private StaffMapper staffMapper ;
@Autowired @Autowired
private StaffDepartmentRelatedService staffDepartmentRelatedService; private StaffDepartmentRelatedService staffDepartmentRelatedService;
@Autowired @Autowired
private ClerkService clerkService; private ClerkService clerkService;
@Autowired @Autowired
private QywxDepartmentApiService qywxDepartmentApiService; private QywxDepartmentApiService qywxDepartmentApiService;
@Autowired @Autowired
private WxEnterpriseService wxEnterpriseService; private WxEnterpriseService wxEnterpriseService;
@Autowired @Autowired
private StaffClerkRelationService staffClerkRelationService; private StaffClerkRelationService staffClerkRelationService;
@Autowired @Autowired
private SecretSettingService secretSettingService; private SecretSettingService secretSettingService;
@Autowired private static final String LOCK_KEY = "sync_wx_lock_";
private ClerkMainStoreRelatedService clerkMainStoreRelatedService;
private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_";
private static final String LOCK_KEY = "sync_wx_lock_";
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
private static final String LOCK_SUCCESS_KEY = "sync_wx_success_lock_";
private static final String FRIEND_TAG_LOCK = "haoban_sync_tag_lock_";
private static final String FRIEND_LOCK = "haoban_fresh_wx_friend_lock_";
@Override
private static final String FRIEND_TAG_LOCK = "haoban_sync_tag_lock_"; public void departmentDealMq(String params) {
DealParamMqDTO dealParamMqDTO = JSONObject.parseObject(params, DealParamMqDTO.class);
@Override TabHaobanPreDealLog dataPre = preDealService.getByDataId(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dealParamMqDTO.getType() - 1, PreDealStatusEnum.all.getVal());
public void departmentDealMq(String params) { logger.info("好办同步处理mq处理开始:{},dataPre={}", params,JSON.toJSONString(dataPre));
DealParamMqDTO dealParamMqDTO = JSONObject.parseObject(params, DealParamMqDTO.class); if (dataPre == null) {
TabHaobanPreDealLog dataPre = preDealService.getByDataId(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dealParamMqDTO.getType() - 1, PreDealStatusEnum.all.getVal()); return;
logger.info("好办同步处理mq处理开始:{},dataPre={}", params,JSON.toJSONString(dataPre)); }
if (dataPre == null) { Integer dataType = dataPre.getDataType();
return; logger.info("同步类型,dataType:{}",dataType);
} if (dataType.equals(PreDealTypeEnum.dept.getVal())) {
Integer dataType = dataPre.getDataType(); logger.info("0 部门处理:{}", params);
logger.info("同步类型,dataType:{}",dataType); operationMap.get("qywxDeptSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
if (dataType.equals(PreDealTypeEnum.dept.getVal())) { } else if (dataType.equals(PreDealTypeEnum.clerk.getVal())) {
logger.info("0 部门处理:{}", params); logger.info("2 成员处理:{}", params);
operationMap.get("qywxDeptSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("qywxStaffSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.clerk.getVal())) { } else if (dataType.equals(PreDealTypeEnum.friend_clerk.getVal())) {
logger.info("2 成员处理:{}", params); logger.info("6 好友导购处理:{}", params);
operationMap.get("qywxStaffSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("friendClerkSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.friend_clerk.getVal())) { } else if (dataType.equals(PreDealTypeEnum.friend.getVal())) {
logger.info("6 好友导购处理:{}", params); logger.info("8 第三方好友处理:{}", params);
operationMap.get("friendClerkSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("friendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.friend.getVal())) { } else if (dataType.equals(PreDealTypeEnum.self_friend.getVal())) {
logger.info("8 第三方好友处理:{}", params); logger.info("7 自建好友处理:{}", params);
operationMap.get("friendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("selfFriendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.self_friend.getVal())) { } else if (dataType.equals(PreDealTypeEnum.tag.getVal())) {
logger.info("7 自建好友处理:{}", params); logger.info("10 会员标签处理:{}", params);
operationMap.get("selfFriendSyncNewOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("friendTagSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.tag.getVal())) { } else if (dataType.equals(PreDealTypeEnum.tag_member.getVal())) {
logger.info("10 会员标签处理:{}", params); logger.info("11 会员标签处理标签项:{}", params);
operationMap.get("friendTagSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); operationMap.get("friendMemberTagSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre);
} else if (dataType.equals(PreDealTypeEnum.tag_member.getVal())) { } else {
logger.info("11 会员标签处理标签项:{}", params); logger.info("不是正常数据类型:{}", params);
operationMap.get("friendMemberTagSyncOperation").dealSingleByMq(dealParamMqDTO, dataPre); }
} else { }
logger.info("不是正常数据类型:{}", params);
}
} @Override
public void dealDepartment(String taskId, String wxEnterpriseId
, List<SyncSingleDealDTO> addList, List<SyncSingleDealDTO> editList) {
@Override
public void dealDepartment(String taskId, String wxEnterpriseId logger.info("初始开始:{}", taskId);
, List<SyncSingleDealDTO> addList, List<SyncSingleDealDTO> editList) { //处理修改
dealEidtSync(editList);
logger.info("初始开始:{}", taskId);
//处理修改 if (CollectionUtils.isEmpty(addList)) {
dealEidtSync(editList); syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
unlockTask(wxEnterpriseId);
if (CollectionUtils.isEmpty(addList)) { return;
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal()); }
unlockTask(wxEnterpriseId); logger.info("处理分组信息开始:{}", taskId);
return; dealAddSync(taskId, wxEnterpriseId, addList);
}
logger.info("处理分组信息开始:{}", taskId); //加入队列处理
dealAddSync(taskId, wxEnterpriseId, addList); logger.info("初始化到队列:{}", taskId);
dealDepartmentInit(taskId, wxEnterpriseId, addList);
//加入队列处理
logger.info("初始化到队列:{}", taskId); }
dealDepartmentInit(taskId, wxEnterpriseId, addList);
@Override
} public void reDealDepartment(String taskId, int dataType) {
logger.info("开始重新同步:{}", taskId);
@Override TabHaobanSyncTask task = syncTaskService.getSyncTask(taskId);
public void reDealDepartment(String taskId, int dataType) { if (null == task) {
logger.info("开始重新同步:{}", taskId); logger.info("任务不存在!{}", taskId);
TabHaobanSyncTask task = syncTaskService.getSyncTask(taskId); return;
if (null == task) { }
logger.info("任务不存在!{}", taskId); if ((!task.getStatusFlag().equals(SyncTaskStatusEnum.exception_close.getVal())) &&
return; (!task.getStatusFlag().equals(SyncTaskStatusEnum.exception_compute.getVal()))) {
} logger.info("任务不在没有在异常状态!{}", taskId);
if ((!task.getStatusFlag().equals(SyncTaskStatusEnum.exception_close.getVal())) && return;
(!task.getStatusFlag().equals(SyncTaskStatusEnum.exception_compute.getVal()))) { }
logger.info("任务不在没有在异常状态!{}", taskId);
return; int groupErrCount = preDealService.countExcepAndPreByTaskId(taskId, PreDealTypeEnum.dept.getVal());
} int storeErrCount = preDealService.countExcepAndPreByTaskId(taskId, PreDealTypeEnum.store.getVal());
List<TabHaobanPreDealLog> list = null;
int groupErrCount = preDealService.countExcepAndPreByTaskId(taskId, PreDealTypeEnum.dept.getVal()); if (dataType == -1) {
int storeErrCount = preDealService.countExcepAndPreByTaskId(taskId, PreDealTypeEnum.store.getVal()); if (groupErrCount > 0) {
List<TabHaobanPreDealLog> list = null; dataType = PreDealTypeEnum.dept.getVal();
if (dataType == -1) { list = preDealService.queryDepartRebuildDealLog(taskId);
if (groupErrCount > 0) { } else if (storeErrCount > 0) {
dataType = PreDealTypeEnum.dept.getVal(); dataType = PreDealTypeEnum.store.getVal();
list = preDealService.queryDepartRebuildDealLog(taskId); list = preDealService.listRebuildByTaskId(taskId, dataType);
} else if (storeErrCount > 0) { } else {
dataType = PreDealTypeEnum.store.getVal(); dataType = PreDealTypeEnum.clerk.getVal();
list = preDealService.listRebuildByTaskId(taskId, dataType); list = preDealService.listRebuildByTaskId(taskId, dataType);
} else { }
dataType = PreDealTypeEnum.clerk.getVal(); }
list = preDealService.listRebuildByTaskId(taskId, dataType); if (CollectionUtils.isEmpty(list)) {
} unlockTask(task.getWxEnterpriseId());
} return;
if (CollectionUtils.isEmpty(list)) { }
unlockTask(task.getWxEnterpriseId()); Set<String> midList = list.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
return; //根据类型获取状态
} SyncTaskStatusEnum syncTaskStatusEnum = (dataType == PreDealTypeEnum.dept.getVal() ? SyncTaskStatusEnum.group_sync
Set<String> midList = list.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet()); : (dataType == PreDealTypeEnum.store.getVal() ? SyncTaskStatusEnum.store_sync : SyncTaskStatusEnum.clerk_sync));
//根据类型获取状态 logger.info("处理开始:类型:{}", syncTaskStatusEnum.getVal());
SyncTaskStatusEnum syncTaskStatusEnum = (dataType == PreDealTypeEnum.dept.getVal() ? SyncTaskStatusEnum.group_sync //处理预处理数据
: (dataType == PreDealTypeEnum.store.getVal() ? SyncTaskStatusEnum.store_sync : SyncTaskStatusEnum.clerk_sync)); preDealService.updateExceptionToPre(taskId);
logger.info("处理开始:类型:{}", syncTaskStatusEnum.getVal()); dealDepartmentToMq(taskId, midList, syncTaskStatusEnum);
//处理预处理数据 }
preDealService.updateExceptionToPre(taskId);
dealDepartmentToMq(taskId, midList, syncTaskStatusEnum);
} private String createBaseTask(String wxEnterpriseId, String taskName, String userId, String desc, int taskType) {
String key = "sync_create_task_" + wxEnterpriseId;
RedisUtil.lock(key, 10L);
private String createBaseTask(String wxEnterpriseId, String taskName, String userId, String desc, int taskType) { String taskLock = getTaskLock(wxEnterpriseId);
String key = "sync_create_task_" + wxEnterpriseId; if (StringUtils.isNotBlank(taskLock)) {
RedisUtil.lock(key, 10L); logger.info("【同步锁】taskLock={}", taskLock);
String taskLock = getTaskLock(wxEnterpriseId); RedisUtil.unlock(key);
if (StringUtils.isNotBlank(taskLock)) { return null;
logger.info("【同步锁】taskLock={}", taskLock); }
RedisUtil.unlock(key); TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask();
return null; tabHaobanSyncTask.setAddUser(userId);
} tabHaobanSyncTask.setTaskName(taskName);
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask(); tabHaobanSyncTask.setTaskDesc(desc);
tabHaobanSyncTask.setAddUser(userId); tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId);
tabHaobanSyncTask.setTaskName(taskName); tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal());
tabHaobanSyncTask.setTaskDesc(desc); tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID());
tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId); tabHaobanSyncTask.setTaskType(taskType);
tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal()); syncTaskService.createTask(tabHaobanSyncTask);
tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID()); lockTask(wxEnterpriseId, tabHaobanSyncTask.getTaskId());
tabHaobanSyncTask.setTaskType(taskType); RedisUtil.unlock(key);
syncTaskService.createTask(tabHaobanSyncTask); return tabHaobanSyncTask.getTaskId();
lockTask(wxEnterpriseId, tabHaobanSyncTask.getTaskId());
RedisUtil.unlock(key); }
return tabHaobanSyncTask.getTaskId();
@Override
} public String createTask(String wxEnterpriseId, String taskName, String userId, String desc) {
return createBaseTask(wxEnterpriseId, taskName, userId, desc, 0);
@Override
public String createTask(String wxEnterpriseId, String taskName, String userId, String desc) { }
return createBaseTask(wxEnterpriseId, taskName, userId, desc, 0);
@Override
} public String createQywxTask(String wxEnterpriseId, String taskName, String userId, String desc) {
return createBaseTask(wxEnterpriseId, taskName, userId, desc, SyncTaskTypeEnum.QYWX_CONTACT.getType());
@Override
public String createQywxTask(String wxEnterpriseId, String taskName, String userId, String desc) { }
return createBaseTask(wxEnterpriseId, taskName, userId, desc, SyncTaskTypeEnum.QYWX_CONTACT.getType());
} /**
* 处理修改数据
*
/** * @param editList
* 处理修改数据 */
* private void dealEidtSync(List<SyncSingleDealDTO> editList) {
* @param editList if (CollectionUtils.isEmpty(editList)) {
*/ return;
private void dealEidtSync(List<SyncSingleDealDTO> editList) { }
if (CollectionUtils.isEmpty(editList)) { //先处理修改的
return; editList.forEach(syncSingleDealDTO -> {
} TabHaobanDepartment department = departmentService.selectById(syncSingleDealDTO.getDepartmentId());
//先处理修改的 if (!department.getParentDepartmentId().equals(syncSingleDealDTO.getParentDepartmentId())) {
editList.forEach(syncSingleDealDTO -> { department.setParentDepartmentId(syncSingleDealDTO.getParentDepartmentId());
TabHaobanDepartment department = departmentService.selectById(syncSingleDealDTO.getDepartmentId()); departmentService.edit(EntityUtil.changeEntityByJSON(DepartmentDTO.class, department));
if (!department.getParentDepartmentId().equals(syncSingleDealDTO.getParentDepartmentId())) { }
department.setParentDepartmentId(syncSingleDealDTO.getParentDepartmentId()); });
departmentService.edit(EntityUtil.changeEntityByJSON(DepartmentDTO.class, department)); }
}
}); /**
} * 执行新增同步
*
/** * @param taskId
* 执行新增同步 * @param wxEnterpriseId
* * @param addList
* @param taskId */
* @param wxEnterpriseId private void dealAddSync(String taskId, String wxEnterpriseId, List<SyncSingleDealDTO> addList) {
* @param addList
*/ Map<String, String> pMap = addList.stream().collect(Collectors.toMap(SyncSingleDealDTO::getRelatedId, SyncSingleDealDTO::getParentDepartmentId));
private void dealAddSync(String taskId, String wxEnterpriseId, List<SyncSingleDealDTO> addList) { //获取企业与分组map
Map<String, List<String>> eidListMap = addList.stream().filter(dto -> {
Map<String, String> pMap = addList.stream().collect(Collectors.toMap(SyncSingleDealDTO::getRelatedId, SyncSingleDealDTO::getParentDepartmentId)); String departmentId = dto.getDepartmentId();
//获取企业与分组map TabHaobanDepartment department = departmentService.selectById(departmentId);
Map<String, List<String>> eidListMap = addList.stream().filter(dto -> { if (department != null) {
String departmentId = dto.getDepartmentId(); return false;
TabHaobanDepartment department = departmentService.selectById(departmentId); }
if (department != null) { Integer storeFlag = dto.getStoreFlag();
return false; return !storeFlag.equals(1);
} }).collect(Collectors.groupingBy(SyncSingleDealDTO::getEnterpriseId
Integer storeFlag = dto.getStoreFlag(); , Collectors.mapping(SyncSingleDealDTO::getRelatedId, Collectors.toList())));
return !storeFlag.equals(1);
}).collect(Collectors.groupingBy(SyncSingleDealDTO::getEnterpriseId //放入预处理表
, Collectors.mapping(SyncSingleDealDTO::getRelatedId, Collectors.toList()))); eidListMap.forEach((k, v) -> {
//获取所有分组列表
//放入预处理表 List<StoreGroupDTO> groupDTOList = storeGroupService.listStoreGroupAndChildren(v.toArray(new String[]{}), k);
eidListMap.forEach((k, v) -> { List<String> hasKey = new ArrayList<>();
//获取所有分组列表 List<TabHaobanPreDealLog> dealList = groupDTOList.stream().filter(dto -> {
List<StoreGroupDTO> groupDTOList = storeGroupService.listStoreGroupAndChildren(v.toArray(new String[]{}), k); return !hasKey.contains(dto.getStoreGroupId());
List<String> hasKey = new ArrayList<>(); }).map(storeGroupDTO -> {
List<TabHaobanPreDealLog> dealList = groupDTOList.stream().filter(dto -> { TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
return !hasKey.contains(dto.getStoreGroupId()); dealLog.setDataId(storeGroupDTO.getStoreGroupId());
}).map(storeGroupDTO -> { if (pMap.containsKey(storeGroupDTO.getStoreGroupId())) {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog(); dealLog.setpDataId(pMap.get(storeGroupDTO.getStoreGroupId()));
dealLog.setDataId(storeGroupDTO.getStoreGroupId()); } else {
if (pMap.containsKey(storeGroupDTO.getStoreGroupId())) { dealLog.setpDataId(storeGroupDTO.getParentGroupId());
dealLog.setpDataId(pMap.get(storeGroupDTO.getStoreGroupId())); }
} else { dealLog.setDataType(PreDealTypeEnum.dept.getVal());
dealLog.setpDataId(storeGroupDTO.getParentGroupId()); dealLog.setStatusFlag(0);
} dealLog.setTaskId(taskId);
dealLog.setDataType(PreDealTypeEnum.dept.getVal()); dealLog.setEnterpriseId(storeGroupDTO.getEnterpriseId());
dealLog.setStatusFlag(0); dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setTaskId(taskId); return dealLog;
dealLog.setEnterpriseId(storeGroupDTO.getEnterpriseId()); }).collect(Collectors.toList());
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog; preDealService.insert(dealList);
}).collect(Collectors.toList()); });
preDealService.insert(dealList); //处理门店信息
}); List<TabHaobanPreDealLog> storeList = addList.stream().filter(dto -> {
return dto.getStoreFlag() == 1;
//处理门店信息 }).map(dto -> {
List<TabHaobanPreDealLog> storeList = addList.stream().filter(dto -> { TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
return dto.getStoreFlag() == 1; dealLog.setDataId(dto.getRelatedId());
}).map(dto -> { dealLog.setpDataId(dto.getParentDepartmentId());
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog(); dealLog.setDataType(1);
dealLog.setDataId(dto.getRelatedId()); dealLog.setStatusFlag(0);
dealLog.setpDataId(dto.getParentDepartmentId()); dealLog.setEnterpriseId(dto.getEnterpriseId());
dealLog.setDataType(1); dealLog.setTaskId(taskId);
dealLog.setStatusFlag(0); dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setEnterpriseId(dto.getEnterpriseId()); return dealLog;
dealLog.setTaskId(taskId); }).collect(Collectors.toList());
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog; preDealService.insert(storeList);
}).collect(Collectors.toList()); }
preDealService.insert(storeList); /**
} * 初始化部门
*
/** * @param taskId
* 初始化部门 * @param wxEnterpriseId
* * @param addList
* @param taskId */
* @param wxEnterpriseId private void dealDepartmentInit(String taskId, String wxEnterpriseId, List<SyncSingleDealDTO> addList) {
* @param addList Set<String> addListMid = addList.stream().filter(dto -> dto.getStoreFlag().equals(0)).map(dto -> dto.getRelatedId()).collect(Collectors.toSet());
*/ if (CollectionUtils.isNotEmpty(addListMid)) {
private void dealDepartmentInit(String taskId, String wxEnterpriseId, List<SyncSingleDealDTO> addList) { dealDepartmentToMq(taskId, addListMid, SyncTaskStatusEnum.group_sync);
Set<String> addListMid = addList.stream().filter(dto -> dto.getStoreFlag().equals(0)).map(dto -> dto.getRelatedId()).collect(Collectors.toSet()); } else {
if (CollectionUtils.isNotEmpty(addListMid)) { addListMid = addList.stream().filter(dto -> dto.getStoreFlag().equals(1)).map(dto -> dto.getRelatedId()).collect(Collectors.toSet());
dealDepartmentToMq(taskId, addListMid, SyncTaskStatusEnum.group_sync); dealDepartmentToMq(taskId, addListMid, SyncTaskStatusEnum.store_sync);
} else { }
addListMid = addList.stream().filter(dto -> dto.getStoreFlag().equals(1)).map(dto -> dto.getRelatedId()).collect(Collectors.toSet()); }
dealDepartmentToMq(taskId, addListMid, SyncTaskStatusEnum.store_sync);
} /**
} * 放入mq处理部门数据
*
/** * @param taskId
* 放入mq处理部门数据 * @param dealList
* */
* @param taskId private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
* @param dealList //预处理分组任务
*/ syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) { List<String> listRet = dealList.stream().map(relationId -> {
//预处理分组任务 DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal()); dealParamMqDTO.setTaskId(taskId);
List<String> listRet = dealList.stream().map(relationId -> { dealParamMqDTO.setData(relationId);
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO(); dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
dealParamMqDTO.setTaskId(taskId); return JSONObject.toJSONString(dealParamMqDTO);
dealParamMqDTO.setData(relationId); }).collect(Collectors.toList());
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
return JSONObject.toJSONString(dealParamMqDTO); GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
}).collect(Collectors.toList()); try {
clientInstance.sendBatchMessages("departmentSyncDealMq", listRet);
GicMQClient clientInstance = GICMQClientUtil.getClientInstance(); } catch (Exception e) {
try { logger.info("发送失败:{},{}", taskId, JSONObject.toJSONString(listRet));
clientInstance.sendBatchMessages("departmentSyncDealMq", listRet); e.printStackTrace();
} catch (Exception e) { }
logger.info("发送失败:{},{}", taskId, JSONObject.toJSONString(listRet)); }
e.printStackTrace();
}
} public String lockTask(String wxEnterpriseId, String taskId) {
String key = LOCK_KEY + wxEnterpriseId;
Object cache = RedisUtil.getCache(key);
public String lockTask(String wxEnterpriseId, String taskId) { if (null == cache) {
String key = LOCK_KEY + wxEnterpriseId; RedisUtil.setCache(key, taskId, 5L, TimeUnit.DAYS);
Object cache = RedisUtil.getCache(key); return taskId;
if (null == cache) { }
RedisUtil.setCache(key, taskId, 5L, TimeUnit.DAYS); return null;
return taskId; }
}
return null; @Override
} public boolean closeTask(String wxEnterpriseId) {
String taskId = getTaskLock(wxEnterpriseId);
@Override if (taskId != null) {
public boolean closeTask(String wxEnterpriseId) { syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal());
String taskId = getTaskLock(wxEnterpriseId); unlockTask(wxEnterpriseId);
if (taskId != null) { }
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal()); return true;
unlockTask(wxEnterpriseId); }
}
return true; @Override
} public void unlockTask(String wxEnterpriseId) {
String key = LOCK_KEY + wxEnterpriseId;
@Override String taskId = (String) RedisUtil.getCache(key);
public void unlockTask(String wxEnterpriseId) { if (StringUtils.isNotBlank(taskId)) {
String key = LOCK_KEY + wxEnterpriseId; TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
String taskId = (String) RedisUtil.getCache(key); if (syncTask.getStatusFlag().equals(SyncTaskStatusEnum.compute.getVal())) {
if (StringUtils.isNotBlank(taskId)) { String sKey = LOCK_SUCCESS_KEY + wxEnterpriseId;
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId); RedisUtil.setCache(sKey, taskId);
if (syncTask.getStatusFlag().equals(SyncTaskStatusEnum.compute.getVal())) { }
String sKey = LOCK_SUCCESS_KEY + wxEnterpriseId; }
RedisUtil.setCache(sKey, taskId); RedisUtil.delCache(key);
} }
}
RedisUtil.delCache(key); @Override
} public String getTaskLock(String wxEnterpriseId) {
String key = LOCK_KEY + wxEnterpriseId;
@Override return (String) RedisUtil.getCache(key);
public String getTaskLock(String wxEnterpriseId) { }
String key = LOCK_KEY + wxEnterpriseId;
return (String) RedisUtil.getCache(key); @Override
} public SyncCheckDTO getTaskCheck(String wxEnterpriseId) {
String taskId = getTaskLock(wxEnterpriseId);
@Override SyncCheckDTO syncCheckDTO = new SyncCheckDTO();
public SyncCheckDTO getTaskCheck(String wxEnterpriseId) { String sKey = LOCK_SUCCESS_KEY + wxEnterpriseId;
String taskId = getTaskLock(wxEnterpriseId); if (null == taskId) {
SyncCheckDTO syncCheckDTO = new SyncCheckDTO(); taskId = (String) RedisUtil.getCache(sKey);
String sKey = LOCK_SUCCESS_KEY + wxEnterpriseId; RedisUtil.delCache(sKey);
if (null == taskId) { }
taskId = (String) RedisUtil.getCache(sKey); if (null == taskId) {
RedisUtil.delCache(sKey); return syncCheckDTO;
} }
if (null == taskId) { TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
return syncCheckDTO; syncCheckDTO.setSyncStatus(syncTask.getStatusFlag());
}
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId); PreDealLogInfoDTO dealLogInfoDTO = preDealService.getLastPreDataByTaskId(taskId);
syncCheckDTO.setSyncStatus(syncTask.getStatusFlag()); if (dealLogInfoDTO == null) {
RedisUtil.delCache(sKey);
PreDealLogInfoDTO dealLogInfoDTO = preDealService.getLastPreDataByTaskId(taskId); return syncCheckDTO;
if (dealLogInfoDTO == null) { }
RedisUtil.delCache(sKey); //30分钟内没执行就重试 并在一天内
return syncCheckDTO; Date date = DateUtils.addMinutes(new Date(), -30);
} Date dayDate = DateUtils.addDays(new Date(), -1);
//30分钟内没执行就重试 并在一天内
Date date = DateUtils.addMinutes(new Date(), -30); if (dealLogInfoDTO != null && dealLogInfoDTO.getUpdateTime() != null
Date dayDate = DateUtils.addDays(new Date(), -1); && dealLogInfoDTO.getCreateTime() != null
&& dealLogInfoDTO.getUpdateTime().before(date)
if (dealLogInfoDTO != null && dealLogInfoDTO.getUpdateTime() != null && syncTask.getUpdateTime().before(date)
&& dealLogInfoDTO.getCreateTime() != null && syncTask.getCreateTime().after(dayDate)) {
&& dealLogInfoDTO.getUpdateTime().before(date) logger.info("重试:{}", taskId);
&& syncTask.getUpdateTime().before(date) syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal());
&& syncTask.getCreateTime().after(dayDate)) { reDealDepartment(taskId, -1);
logger.info("重试:{}", taskId); return syncCheckDTO;
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal()); }
reDealDepartment(taskId, -1);
return syncCheckDTO;
} int totalCount = preDealService.countByTaskId(taskId, -1, -1);
int groupErrCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.dept.getVal(), PreDealStatusEnum.exception.getVal());
int storeErrCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.store.getVal(), PreDealStatusEnum.exception.getVal());
int totalCount = preDealService.countByTaskId(taskId, -1, -1); int clerkErrCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.exception.getVal());
int groupErrCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.dept.getVal(), PreDealStatusEnum.exception.getVal()); int preCount = preDealService.countByTaskId(taskId, -1, PreDealStatusEnum.pre.getVal());
int storeErrCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.store.getVal(), PreDealStatusEnum.exception.getVal());
int clerkErrCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.exception.getVal()); syncCheckDTO.setTotalDeal(totalCount);
int preCount = preDealService.countByTaskId(taskId, -1, PreDealStatusEnum.pre.getVal()); syncCheckDTO.setGroupErrCount(groupErrCount);
syncCheckDTO.setStoreErrCount(storeErrCount);
syncCheckDTO.setTotalDeal(totalCount); syncCheckDTO.setStaffErrCount(clerkErrCount);
syncCheckDTO.setGroupErrCount(groupErrCount); syncCheckDTO.setHasDeal(totalCount - preCount);
syncCheckDTO.setStoreErrCount(storeErrCount); return syncCheckDTO;
syncCheckDTO.setStaffErrCount(clerkErrCount); }
syncCheckDTO.setHasDeal(totalCount - preCount);
return syncCheckDTO; @Override
} public Page<SyncTaskDTO> listSyncTask(String wxEnterpriseId, BasePageInfo pageInfo) {
Page<SyncTaskDTO> page = syncTaskService.listTaskPage(wxEnterpriseId, pageInfo);
@Override if (CollectionUtils.isEmpty(page.getResult())) {
public Page<SyncTaskDTO> listSyncTask(String wxEnterpriseId, BasePageInfo pageInfo) { return page;
Page<SyncTaskDTO> page = syncTaskService.listTaskPage(wxEnterpriseId, pageInfo); }
if (CollectionUtils.isEmpty(page.getResult())) { List<SyncTaskDTO> result = page.getResult();
return page; for (SyncTaskDTO dto : result) {
} String addUser = dto.getAddUser();
List<SyncTaskDTO> result = page.getResult(); TabHaobanStaff haobanStaff = staffService.selectById(addUser);
for (SyncTaskDTO dto : result) { if (null != haobanStaff) {
String addUser = dto.getAddUser(); dto.setUserName(haobanStaff.getStaffName());
TabHaobanStaff haobanStaff = staffService.selectById(addUser); } else {
if (null != haobanStaff) { dto.setUserName("系统管理员");
dto.setUserName(haobanStaff.getStaffName()); }
} else { }
dto.setUserName("系统管理员"); return page;
} }
}
return page; @Override
} public Page<PreDealLogInfoDTO> listSyncTaskDetail(String wxEnterpriseId, String taskId, BasePageInfo pageInfo) {
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
@Override Page<PreDealLogInfoDTO> page = preDealService.listExceptionByTaskId(taskId, pageInfo);
public Page<PreDealLogInfoDTO> listSyncTaskDetail(String wxEnterpriseId, String taskId, BasePageInfo pageInfo) { if (CollectionUtils.isEmpty(page.getResult())) {
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId); return page;
Page<PreDealLogInfoDTO> page = preDealService.listExceptionByTaskId(taskId, pageInfo); }
if (CollectionUtils.isEmpty(page.getResult())) { //gic同步微信
return page; if (syncTask.getTaskType().equals(0)) {
} List<PreDealLogInfoDTO> result = page.getResult();
//gic同步微信 for (PreDealLogInfoDTO dto : result) {
if (syncTask.getTaskType().equals(0)) { if (dto.getDataType().equals(PreDealTypeEnum.dept.getVal())) {
List<PreDealLogInfoDTO> result = page.getResult(); StoreGroupDTO midGroup = storeGroupService.getStoreGroupById(dto.getDataId());
for (PreDealLogInfoDTO dto : result) { if (midGroup != null) {
if (dto.getDataType().equals(PreDealTypeEnum.dept.getVal())) { dto.setDataName(midGroup.getStoreGroupName());
StoreGroupDTO midGroup = storeGroupService.getStoreGroupById(dto.getDataId()); dto.setChainName(midGroup.getStoreGroupNameLevel());
if (midGroup != null) { }
dto.setDataName(midGroup.getStoreGroupName()); } else if (dto.getDataType().equals(PreDealTypeEnum.store.getVal())) {
dto.setChainName(midGroup.getStoreGroupNameLevel()); StoreDTO store = storeService.getStore(dto.getDataId());
} if (null != store) {
} else if (dto.getDataType().equals(PreDealTypeEnum.store.getVal())) { dto.setDataName(store.getStoreName());
StoreDTO store = storeService.getStore(dto.getDataId()); dto.setChainName(store.getStoreGroupName());
if (null != store) { dto.setDataCode(store.getStoreCode());
dto.setDataName(store.getStoreName()); }
dto.setChainName(store.getStoreGroupName()); } else if (dto.getDataType().equals(PreDealTypeEnum.clerk.getVal())) {
dto.setDataCode(store.getStoreCode()); ClerkDTO clerkDTO = clerkService.getClerkByClerkId(dto.getDataId());
} if (null != clerkDTO) {
} else if (dto.getDataType().equals(PreDealTypeEnum.clerk.getVal())) { dto.setDataName(clerkDTO.getClerkName());
ClerkDTO clerkDTO = clerkService.getClerkByClerkId(dto.getDataId()); dto.setChainName(clerkDTO.getStoreName());
if (null != clerkDTO) { dto.setDataCode(clerkDTO.getClerkCode());
dto.setDataName(clerkDTO.getClerkName()); }
dto.setChainName(clerkDTO.getStoreName()); }
dto.setDataCode(clerkDTO.getClerkCode()); }
} } else if (syncTask.getTaskType().equals(2)) {
} List<PreDealLogInfoDTO> result = page.getResult();
} for (PreDealLogInfoDTO dto : result) {
} else if (syncTask.getTaskType().equals(2)) { dto.setDataCode(dto.getDataId());
List<PreDealLogInfoDTO> result = page.getResult(); TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(dto.getpDataId(), wxEnterpriseId);
for (PreDealLogInfoDTO dto : result) { if (staff != null) {
dto.setDataCode(dto.getDataId()); dto.setDataName(staff.getStaffName());
TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(dto.getpDataId(), wxEnterpriseId); }
if (staff != null) { }
dto.setDataName(staff.getStaffName()); } else {
} List<PreDealLogInfoDTO> result = page.getResult();
} for (PreDealLogInfoDTO dto : result) {
} else { dto.setDataCode(dto.getDataId());
List<PreDealLogInfoDTO> result = page.getResult(); dto.setDataName(dto.getDataContent());
for (PreDealLogInfoDTO dto : result) { }
dto.setDataCode(dto.getDataId()); }
dto.setDataName(dto.getDataContent()); return page;
} }
}
return page;
} @Override
public String dealQywxDepartment(String taskId, String wxEnterpriseId) {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
@Override SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(qwDTO.getWxEnterpriseId(), SecretTypeEnum.CUSTOMIZED_APP.getVal());
public String dealQywxDepartment(String taskId, String wxEnterpriseId) { if (null == secretSetting || secretSetting.getCheckFlag() == 0) {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; logger.info("没有配置secret");
SecretSettingDTO secretSetting = secretSettingService.getSecretSetting(qwDTO.getWxEnterpriseId(), SecretTypeEnum.CUSTOMIZED_APP.getVal()); syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal());
if (null == secretSetting || secretSetting.getCheckFlag() == 0) { unlockTask(wxEnterpriseId);
logger.info("没有配置secret"); return "没有配置secret";
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal()); }
unlockTask(wxEnterpriseId); List<com.gic.wechat.api.dto.qywx.DepartmentDTO> list = qywxDepartmentApiService.listSelfDepartment(qwDTO.getThirdCorpid(), secretSetting.getSecretVal(), 1);
return "没有配置secret"; if (CollectionUtils.isEmpty(list)) {
} logger.info("没有数据同步");
List<com.gic.wechat.api.dto.qywx.DepartmentDTO> list = qywxDepartmentApiService.listSelfDepartment(qwDTO.getThirdCorpid(), secretSetting.getSecretVal(), 1); syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal());
if (CollectionUtils.isEmpty(list)) { unlockTask(wxEnterpriseId);
logger.info("没有数据同步"); return "没有数据同步或权限没设置全部";
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_close.getVal()); }
unlockTask(wxEnterpriseId); List<TabHaobanPreDealLog> dealLogList = list.stream().map(dto -> {
return "没有数据同步或权限没设置全部"; TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
} dealLog.setDataId(dto.getId().toString());
List<TabHaobanPreDealLog> dealLogList = list.stream().map(dto -> { dealLog.setpDataId(dto.getParentid().toString());
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog(); dealLog.setDataType(0);
dealLog.setDataId(dto.getId().toString()); dealLog.setStatusFlag(0);
dealLog.setpDataId(dto.getParentid().toString()); dealLog.setTaskId(taskId);
dealLog.setDataType(0); dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setStatusFlag(0); dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setTaskId(taskId); return dealLog;
dealLog.setDataContent(JSONObject.toJSONString(dto)); }).collect(Collectors.toList());
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog; preDealService.insert(dealLogList);
}).collect(Collectors.toList()); HashSet<String> hashSet = new HashSet<>();
hashSet.add("1");
preDealService.insert(dealLogList); dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.group_sync);
HashSet<String> hashSet = new HashSet<>(); return null;
hashSet.add("1"); }
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.group_sync);
return null;
} @Override
public void cleanDiffrence(String wxEnterpriseId, String taskId) {
List<TabHaobanPreDealLog> groupList = preDealService.listByTaskId(taskId, PreDealTypeEnum.dept.getVal(), PreDealStatusEnum.computed.getVal());
@Override List<TabHaobanPreDealLog> clerkList = preDealService.listByTaskId(taskId, PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.computed.getVal());
public void cleanDiffrence(String wxEnterpriseId, String taskId) {
List<TabHaobanPreDealLog> groupList = preDealService.listByTaskId(taskId, PreDealTypeEnum.dept.getVal(), PreDealStatusEnum.computed.getVal()); //清空staff
List<TabHaobanPreDealLog> clerkList = preDealService.listByTaskId(taskId, PreDealTypeEnum.clerk.getVal(), PreDealStatusEnum.computed.getVal()); if (CollectionUtils.isNotEmpty(clerkList)) {
List<String> clerkIds = clerkList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toList());
//清空staff List<StaffDTO> retLists = staffService.listByUserIdsAndWxEnterpriseId(clerkIds, wxEnterpriseId);
if (CollectionUtils.isNotEmpty(clerkList)) { List<String> staffIds = retLists.stream().map(StaffDTO::getStaffId).collect(Collectors.toList());
List<String> clerkIds = clerkList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(staffIds)) {
List<StaffDTO> retLists = staffService.listByUserIdsAndWxEnterpriseId(clerkIds, wxEnterpriseId); List<String> delStaffIds = staffService.listDelUserStaffId(wxEnterpriseId, staffIds);
List<String> staffIds = retLists.stream().map(StaffDTO::getStaffId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(delStaffIds)) {
if (CollectionUtils.isNotEmpty(staffIds)) { logger.info("没有要删除的用户:{}--{}", wxEnterpriseId, taskId);
List<String> delStaffIds = staffService.listDelUserStaffId(wxEnterpriseId, staffIds); } else {
if (CollectionUtils.isEmpty(delStaffIds)) { staffClerkRelationService.cleanStaffClerk(wxEnterpriseId, delStaffIds);
logger.info("没有要删除的用户:{}--{}", wxEnterpriseId, taskId); staffService.cleanStaff(wxEnterpriseId, delStaffIds);
} else { staffDepartmentRelatedService.cleanStaffDepartment(wxEnterpriseId, delStaffIds);
staffClerkRelationService.cleanStaffClerk(wxEnterpriseId, delStaffIds); }
staffService.cleanStaff(wxEnterpriseId, delStaffIds); }
staffDepartmentRelatedService.cleanStaffDepartment(wxEnterpriseId, delStaffIds); }
}
} //清空cleak
} if (CollectionUtils.isNotEmpty(groupList)) {
List<String> groupIdList = groupList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toList());
//清空cleak departmentService.cleanDepartment(wxEnterpriseId, groupIdList);
if (CollectionUtils.isNotEmpty(groupList)) { }
List<String> groupIdList = groupList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toList());
departmentService.cleanDepartment(wxEnterpriseId, groupIdList); RedisUtil.delLocalCache("department-list-cache-" + wxEnterpriseId);
}
}
RedisUtil.delLocalCache("department-list-cache-" + wxEnterpriseId);
} @Override
public String createWxFriendTask(String wxEnterpriseId, String taskName, String staffId, String desc) {
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask();
@Override tabHaobanSyncTask.setAddUser(staffId);
public String createWxFriendTask(String wxEnterpriseId, String taskName, String staffId, String desc) { tabHaobanSyncTask.setTaskName(taskName);
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask(); tabHaobanSyncTask.setTaskDesc(desc);
tabHaobanSyncTask.setAddUser(staffId); tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId);
tabHaobanSyncTask.setTaskName(taskName); tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal());
tabHaobanSyncTask.setTaskDesc(desc); tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID());
tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId); tabHaobanSyncTask.setTaskType(2);
tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal()); syncTaskService.createTask(tabHaobanSyncTask);
tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID()); lockTask(wxEnterpriseId, tabHaobanSyncTask.getTaskId());
tabHaobanSyncTask.setTaskType(2); return tabHaobanSyncTask.getTaskId();
syncTaskService.createTask(tabHaobanSyncTask); }
lockTask(wxEnterpriseId, tabHaobanSyncTask.getTaskId());
return tabHaobanSyncTask.getTaskId(); @Override
} public void dealWxFriendClerk(String taskId, String wxEnterpriseId) {
List<TabHaobanStaff> list = this.staffMapper.listByWxEnterpriseId(wxEnterpriseId) ;
@Override List<TabHaobanPreDealLog> dealLogList = list.stream().map(dto -> {
public void dealWxFriendClerk(String taskId, String wxEnterpriseId) { TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
//List<TabHaobanStaffClerkRelation> relationList = staffClerkRelationService.listByWxEnterpriseId(wxEnterpriseId); dealLog.setDataId(dto.getStaffId());
List<TabHaobanStaff> list = this.staffMapper.listByWxEnterpriseId(wxEnterpriseId) ; dealLog.setpDataId(dto.getStaffId());
List<TabHaobanClerkMainStoreRelated> mainStoreList = clerkMainStoreRelatedService.listByWxEnterpriseId(wxEnterpriseId); dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal());
Map<String, TabHaobanClerkMainStoreRelated> map = mainStoreList.stream().collect(Collectors.toMap(TabHaobanClerkMainStoreRelated::getStaffId, s -> s)); dealLog.setStatusFlag(0);
List<TabHaobanPreDealLog> dealLogList = list.stream().map(dto -> { dealLog.setTaskId(taskId);
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog(); dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setDataId(dto.getWxUserId()); dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setpDataId(dto.getStaffId()); return dealLog;
dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal()); }).collect(Collectors.toList());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId); preDealService.insert(dealLogList);
dealLog.setDataContent(JSONObject.toJSONString(dto)); HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealLog.setWxEnterpriseId(wxEnterpriseId); dealFriendToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync);
return dealLog; }
}).collect(Collectors.toList());
@Override
preDealService.insert(dealLogList); public String createWxFriendTaskSingle(String wxEnterpriseId, String taskName, String staffId, String staffName, int syncTaskType) {
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet()); String lockKey = FRIEND_LOCK + "_lock_" + staffId;
dealFriendToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync); String staffLockKey = FRIEND_LOCK + staffId;
} RedisUtil.lock(lockKey, 2L);
@Override Object cache = RedisUtil.getCache(staffLockKey);
public String createWxFriendTaskSingle(String wxEnterpriseId, String taskName, String staffId, String staffName, int syncTaskType) { if (null != cache) {
String lockKey = FRIEND_LOCK + "_lock_" + staffId; RedisUtil.unlock(lockKey);
String staffLockKey = FRIEND_LOCK + staffId; logger.info("限制此操作,lockKey={}",staffLockKey);
RedisUtil.lock(lockKey, 2L); return null;
}
Object cache = RedisUtil.getCache(staffLockKey); TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask();
if (null != cache) { tabHaobanSyncTask.setAddUser(staffId);
RedisUtil.unlock(lockKey); tabHaobanSyncTask.setTaskName(SyncTaskTypeEnum.getTaskName(syncTaskType));
logger.info("限制此操作,lockKey={}",staffLockKey); tabHaobanSyncTask.setTaskDesc(staffName);
return null; tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId);
} tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal());
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask(); tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID());
tabHaobanSyncTask.setAddUser(staffId); tabHaobanSyncTask.setTaskType(syncTaskType);
tabHaobanSyncTask.setTaskName(SyncTaskTypeEnum.getTaskName(syncTaskType)); syncTaskService.createTask(tabHaobanSyncTask);
tabHaobanSyncTask.setTaskDesc(staffName); RedisUtil.setCache(staffLockKey, tabHaobanSyncTask.getTaskId(), 1L, TimeUnit.HOURS);
tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId); RedisUtil.unlock(lockKey);
tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal()); return tabHaobanSyncTask.getTaskId();
tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID()); }
tabHaobanSyncTask.setTaskType(syncTaskType);
syncTaskService.createTask(tabHaobanSyncTask);
RedisUtil.setCache(staffLockKey, tabHaobanSyncTask.getTaskId(), 1L, TimeUnit.HOURS); @Override
RedisUtil.unlock(lockKey); public void dealWxFriendClerkSingle(String taskId, String wxUserId, String staffId, String wxEnterpriseId) {
return tabHaobanSyncTask.getTaskId(); TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
} // 改成使用staffid
dealLog.setDataId(staffId);
dealLog.setpDataId(staffId);
@Override dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal());
public void dealWxFriendClerkSingle(String taskId, String wxUserId, String staffId, String wxEnterpriseId) { dealLog.setStatusFlag(0);
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog(); dealLog.setTaskId(taskId);
// 改成使用staffid dealLog.setDataContent("刷新" + staffId);
dealLog.setDataId(staffId); dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setpDataId(staffId); List<TabHaobanPreDealLog> dealLogList = new ArrayList<TabHaobanPreDealLog>();
dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal()); dealLogList.add(dealLog);
dealLog.setStatusFlag(0); preDealService.insert(dealLogList);
dealLog.setTaskId(taskId); HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealLog.setDataContent("刷新" + staffId); dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync);
dealLog.setWxEnterpriseId(wxEnterpriseId); }
List<TabHaobanPreDealLog> dealLogList = new ArrayList<TabHaobanPreDealLog>();
dealLogList.add(dealLog); @Override
preDealService.insert(dealLogList); public void dealWxFriendStore(String taskId, String storeId, String wxEnterpriseId) {
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet()); List<StaffClerkRelationDTO> clerkRelationDTOS = staffClerkRelationService.listBindByStoreId(wxEnterpriseId, storeId);
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync); if (CollectionUtils.isEmpty(clerkRelationDTOS)) {
} logger.info("没有要刷新的:{},{}", wxEnterpriseId, storeId);
return;
@Override }
public void dealWxFriendStore(String taskId, String storeId, String wxEnterpriseId) { logger.info("查询到需要刷新的导购={},storeId={}",clerkRelationDTOS.size(),storeId);
List<StaffClerkRelationDTO> clerkRelationDTOS = staffClerkRelationService.listBindByStoreId(wxEnterpriseId, storeId); List<TabHaobanPreDealLog> dealLogList = clerkRelationDTOS.stream().map(dto -> {
if (CollectionUtils.isEmpty(clerkRelationDTOS)) { TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
logger.info("没有要刷新的:{},{}", wxEnterpriseId, storeId); dealLog.setDataId(dto.getStaffId());
return; dealLog.setpDataId(dto.getStaffId());
} dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal());
logger.info("查询到需要刷新的导购={},storeId={}",clerkRelationDTOS.size(),storeId); dealLog.setStatusFlag(0);
List<TabHaobanPreDealLog> dealLogList = clerkRelationDTOS.stream().map(dto -> { dealLog.setTaskId(taskId);
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog(); dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setDataId(dto.getStaffId()); return dealLog;
dealLog.setpDataId(dto.getStaffId()); }).collect(Collectors.toList());
dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal()); preDealService.insert(dealLogList);
dealLog.setStatusFlag(0); Set<String> hashSet = dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealLog.setTaskId(taskId); dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync);
dealLog.setWxEnterpriseId(wxEnterpriseId); }
return dealLog;
}).collect(Collectors.toList()); @Override
preDealService.insert(dealLogList); public void quartWxFriendClerk(String res) {
Set<String> hashSet = dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet()); List<TabHaobanSyncTask> taskList = syncTaskService.listTaskByType(2);
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.friend_clerk_sync); if (CollectionUtils.isNotEmpty(taskList)) {
} for (TabHaobanSyncTask tabHaobanSyncTask : taskList) {
dealWxFriendClerk(tabHaobanSyncTask.getTaskId(), tabHaobanSyncTask.getWxEnterpriseId());
@Override }
public void quartWxFriendClerk(String res) { }
List<TabHaobanSyncTask> taskList = syncTaskService.listTaskByType(2); }
if (CollectionUtils.isNotEmpty(taskList)) {
for (TabHaobanSyncTask tabHaobanSyncTask : taskList) { /**
dealWxFriendClerk(tabHaobanSyncTask.getTaskId(), tabHaobanSyncTask.getWxEnterpriseId()); * 放入mq处理部门数据
} *
} * @param taskId
} * @param dealList
*/
/** private void dealFriendToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
* 放入mq处理部门数据 //预处理分组任务
* syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
* @param taskId List<String> listRet = dealList.stream().map(relationId -> {
* @param dealList DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
*/ dealParamMqDTO.setTaskId(taskId);
private void dealFriendToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) { dealParamMqDTO.setData(relationId);
//预处理分组任务 dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal()); return JSONObject.toJSONString(dealParamMqDTO);
List<String> listRet = dealList.stream().map(relationId -> { }).collect(Collectors.toList());
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO(); GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
dealParamMqDTO.setTaskId(taskId); try {
dealParamMqDTO.setData(relationId); clientInstance.sendBatchMessages("friendSyncDealMq", listRet);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal()); } catch (Exception e) {
return JSONObject.toJSONString(dealParamMqDTO); logger.info("发送失败:{},{}", taskId, JSONObject.toJSONString(listRet), e);
}).collect(Collectors.toList()); }
GicMQClient clientInstance = GICMQClientUtil.getClientInstance(); }
try {
clientInstance.sendBatchMessages("friendSyncDealMq", listRet); @Override
} catch (Exception e) { public boolean getFreshFriendSyncTask(String wxEnterpriseId, String staffId) {
logger.info("发送失败:{},{}", taskId, JSONObject.toJSONString(listRet), e); String staffLockKey = FRIEND_LOCK + staffId;
} Object cache = RedisUtil.getCache(staffLockKey);
} return null != cache;
}
@Override
public boolean getFreshFriendSyncTask(String wxEnterpriseId, String staffId) { @Override
String staffLockKey = FRIEND_LOCK + staffId; public String createTagTask(String wxEnterpriseId, String addUser, String memberTagId) {
Object cache = RedisUtil.getCache(staffLockKey); String lockKey = FRIEND_TAG_LOCK + "_lock_" + memberTagId;
return null != cache; String staffLockKey = FRIEND_TAG_LOCK + memberTagId;
} RedisUtil.lock(lockKey, 2L);
@Override Object cache = RedisUtil.getCache(staffLockKey);
public String createTagTask(String wxEnterpriseId, String addUser, String memberTagId) { if (null != cache) {
String lockKey = FRIEND_TAG_LOCK + "_lock_" + memberTagId; RedisUtil.unlock(lockKey);
String staffLockKey = FRIEND_TAG_LOCK + memberTagId; return null;
RedisUtil.lock(lockKey, 2L); }
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask();
Object cache = RedisUtil.getCache(staffLockKey); tabHaobanSyncTask.setAddUser(addUser);
if (null != cache) { tabHaobanSyncTask.setTaskName(SyncTaskTypeEnum.MEMBER_TAG.getTaskName());
RedisUtil.unlock(lockKey); tabHaobanSyncTask.setTaskDesc(memberTagId);
return null; tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId);
} tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal());
TabHaobanSyncTask tabHaobanSyncTask = new TabHaobanSyncTask(); tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID());
tabHaobanSyncTask.setAddUser(addUser); tabHaobanSyncTask.setTaskType(SyncTaskTypeEnum.MEMBER_TAG.getType());
tabHaobanSyncTask.setTaskName(SyncTaskTypeEnum.MEMBER_TAG.getTaskName()); syncTaskService.createTask(tabHaobanSyncTask);
tabHaobanSyncTask.setTaskDesc(memberTagId); RedisUtil.setCache(staffLockKey, tabHaobanSyncTask.getTaskId(), 1L, TimeUnit.HOURS);
tabHaobanSyncTask.setWxEnterpriseId(wxEnterpriseId); RedisUtil.unlock(lockKey);
tabHaobanSyncTask.setStatusFlag(SyncTaskStatusEnum.init.getVal()); return tabHaobanSyncTask.getTaskId();
tabHaobanSyncTask.setTaskId(ToolUtil.randomUUID()); }
tabHaobanSyncTask.setTaskType(SyncTaskTypeEnum.MEMBER_TAG.getType());
syncTaskService.createTask(tabHaobanSyncTask); @Override
RedisUtil.setCache(staffLockKey, tabHaobanSyncTask.getTaskId(), 1L, TimeUnit.HOURS); public void dealTagTask(String wxEnterpriseId, String enterpriseId, List<String> tagIds, String taskId) {
RedisUtil.unlock(lockKey); TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
return tabHaobanSyncTask.getTaskId(); if (CollectionUtils.isEmpty(tagIds)) {
} syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
return;
@Override }
public void dealTagTask(String wxEnterpriseId, String enterpriseId, List<String> tagIds, String taskId) { List<TabHaobanPreDealLog> dealLogList = tagIds.stream().map(tagId -> {
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId); TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
if (CollectionUtils.isEmpty(tagIds)) { dealLog.setDataId(tagId);
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal()); dealLog.setpDataId(syncTask.getTaskDesc());
return; dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal());
} dealLog.setStatusFlag(0);
List<TabHaobanPreDealLog> dealLogList = tagIds.stream().map(tagId -> { dealLog.setTaskId(taskId);
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog(); dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLog.setDataId(tagId); return dealLog;
dealLog.setpDataId(syncTask.getTaskDesc()); }).collect(Collectors.toList());
dealLog.setDataType(PreDealTypeEnum.friend_clerk.getVal()); preDealService.insert(dealLogList);
dealLog.setStatusFlag(0); Set<String> hashSet = dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealLog.setTaskId(taskId); dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.tag);
dealLog.setWxEnterpriseId(wxEnterpriseId); }
return dealLog; }
}).collect(Collectors.toList());
preDealService.insert(dealLogList);
Set<String> hashSet = dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.tag);
}
}
package com.gic.haoban.manage.service.service.out.impl; package com.gic.haoban.manage.service.service.out.impl;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
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.GICMQClientUtil;
import com.gic.commons.util.ToolUtil; import com.gic.commons.util.ToolUtil;
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.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.QywxTagApiService; import com.gic.haoban.manage.api.service.QywxTagApiService;
import com.gic.haoban.manage.service.config.Config; import com.gic.haoban.manage.service.config.Config;
import com.gic.haoban.manage.service.entity.*; import com.gic.haoban.manage.service.entity.*;
import com.gic.haoban.manage.service.pojo.QywxSyncTagFormatPojo; import com.gic.haoban.manage.service.pojo.QywxSyncTagFormatPojo;
import com.gic.haoban.manage.service.service.ExternalClerkRelatedService; import com.gic.haoban.manage.service.service.ExternalClerkRelatedService;
import com.gic.haoban.manage.service.service.QywxTagService; import com.gic.haoban.manage.service.service.QywxTagService;
import com.gic.haoban.manage.service.service.StaffService; import com.gic.haoban.manage.service.service.StaffService;
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.member.tag.api.dto.MemberTagItemDTO; import com.gic.member.tag.api.dto.MemberTagItemDTO;
import com.gic.member.tag.api.service.MemberTagItemApiService; import com.gic.member.tag.api.service.MemberTagItemApiService;
import com.gic.mq.sdk.GicMQClient; import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil; import com.gic.redis.data.util.RedisUtil;
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;
import com.gic.wechat.api.dto.qywx.response.QywxGetCorpTagListDTO; import com.gic.wechat.api.dto.qywx.response.QywxGetCorpTagListDTO;
import com.gic.wechat.api.dto.qywx.response.QywxResponseDTO; import com.gic.wechat.api.dto.qywx.response.QywxResponseDTO;
import com.gic.wechat.api.service.qywx.QywxSuiteApiService; import com.gic.wechat.api.service.qywx.QywxSuiteApiService;
import com.gic.wechat.api.service.qywx.QywxUserApiService; import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.slf4j.LoggerFactory.getLogger; import static org.slf4j.LoggerFactory.getLogger;
/** /**
* Created 2021/6/21. * Created 2021/6/21.
* *
* @author hua * @author hua
*/ */
@Service @Service
public class QywxTagApiServiceImpl implements QywxTagApiService { public class QywxTagApiServiceImpl implements QywxTagApiService {
private static final Logger logger = getLogger(QywxTagApiServiceImpl.class); private static final Logger logger = getLogger(QywxTagApiServiceImpl.class);
/** /**
* 限制次数 * 限制次数
*/ */
private static final Integer MAX_TIMES = 3; private static final Integer MAX_TIMES = 3;
@Autowired @Autowired
private QywxSuiteApiService qywxSuiteApiService; private QywxSuiteApiService qywxSuiteApiService;
@Autowired @Autowired
private Config config; private Config config;
@Autowired @Autowired
private WxEnterpriseService wxEnterpriseService; private WxEnterpriseService wxEnterpriseService;
@Autowired @Autowired
private QywxTagService qywxTagService; private QywxTagService qywxTagService;
@Autowired @Autowired
private QywxUserApiService qywxUserApiService; private QywxUserApiService qywxUserApiService;
@Autowired @Autowired
private ExternalClerkRelatedService externalClerkRelatedService; private ExternalClerkRelatedService externalClerkRelatedService;
@Autowired @Autowired
private MemberTagService memberTagService; private MemberTagService memberTagService;
@Autowired @Autowired
private QywxTagSyncApiService qywxTagSyncApiService; private QywxTagSyncApiService qywxTagSyncApiService;
@Autowired @Autowired
private MemberTagItemApiService memberTagItemApiService; private MemberTagItemApiService memberTagItemApiService;
@Autowired @Autowired
private StaffService staffService; private StaffService staffService;
@Override @Override
public void pullQywxTag(String wxEnterpriseId) { public void pullQywxTag(String wxEnterpriseId) {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
if (null == qwDTO) { if (null == qwDTO) {
logger.info("企业标签所在企业不存在"); logger.info("企业标签所在企业不存在");
return; return;
} }
QywxGetCorpTagListDTO corpTagListResp = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), null, -1); QywxGetCorpTagListDTO corpTagListResp = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), null, -1);
if (corpTagListResp.getErrcode() != 0) { if (corpTagListResp.getErrcode() != 0) {
logger.info("企业微信标签有问题:{}", wxEnterpriseId); logger.info("企业微信标签有问题:{}", wxEnterpriseId);
return; return;
} }
//拉取保存所有标签 //拉取保存所有标签
List<QywxTagGroupDTO> tagGroup = corpTagListResp.getTagGroup(); List<QywxTagGroupDTO> tagGroup = corpTagListResp.getTagGroup();
for (QywxTagGroupDTO groupDTO : tagGroup) { for (QywxTagGroupDTO groupDTO : tagGroup) {
qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseId, groupDTO); qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseId, groupDTO);
} }
} }
@Override @Override
public ServiceResponse syncTagToQywx(String wxEnterpriseId, String enterpriseId, QywxTagInfoDTO infoDTO, List<QywxTagItemDTO> items) { public ServiceResponse syncTagToQywx(String wxEnterpriseId, String enterpriseId, QywxTagInfoDTO infoDTO, List<QywxTagItemDTO> items) {
ServiceResponse ret = new ServiceResponse(); ServiceResponse ret = new ServiceResponse();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
//调用企业微信接口保存 //调用企业微信接口保存
QywxGetCorpTagListDTO resp = this.saveQywxTag(qwDTO.getThirdCorpid(), infoDTO, items); QywxGetCorpTagListDTO resp = this.saveQywxTag(qwDTO.getThirdCorpid(), infoDTO, items);
if (resp.getErrcode() != 0 && CollectionUtils.isEmpty(resp.getTagGroup())) { if (resp.getErrcode() != 0 && CollectionUtils.isEmpty(resp.getTagGroup())) {
logger.info("同步失败:{}", JSONObject.toJSONString(resp)); logger.info("同步失败:{}", JSONObject.toJSONString(resp));
ret.setCode(resp.getErrcode()); ret.setCode(resp.getErrcode());
ret.setMessage(resp.getErrmsg()); ret.setMessage(resp.getErrmsg());
return ret; return ret;
} }
//拉取保存所有标签 //拉取保存所有标签
List<QywxTagGroupDTO> tagGroup = resp.getTagGroup(); List<QywxTagGroupDTO> tagGroup = resp.getTagGroup();
QywxTagGroupDTO groupDTO = tagGroup.get(0); QywxTagGroupDTO groupDTO = tagGroup.get(0);
//保存企业微信标签信息 //保存企业微信标签信息
Pair<TabQywxTag, List<TabQywxTagItem>> savePair = qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseId, groupDTO); Pair<TabQywxTag, List<TabQywxTagItem>> savePair = qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseId, groupDTO);
if (null == savePair) { if (null == savePair) {
logger.info("保存失败:{}", JSONObject.toJSONString(groupDTO)); logger.info("保存失败:{}", JSONObject.toJSONString(groupDTO));
ret.setCode(1); ret.setCode(1);
ret.setMessage("保存企业微信标签失败"); ret.setMessage("保存企业微信标签失败");
return ret; return ret;
} }
//保存关联关系 //保存关联关系
saveRelation(wxEnterpriseId, enterpriseId, infoDTO, items, savePair); saveRelation(wxEnterpriseId, enterpriseId, infoDTO, items, savePair);
return ret; return ret;
} }
/** /**
* 保存标签的关联关系 * 保存标签的关联关系
* *
* @param wxEnterpriseId * @param wxEnterpriseId
* @param enterpriseId * @param enterpriseId
* @param infoDTO * @param infoDTO
*/ */
private void saveRelation(String wxEnterpriseId, String enterpriseId, QywxTagInfoDTO infoDTO, List<QywxTagItemDTO> items, Pair<TabQywxTag, List<TabQywxTagItem>> localQywxTagPair) { private void saveRelation(String wxEnterpriseId, String enterpriseId, QywxTagInfoDTO infoDTO, List<QywxTagItemDTO> items, Pair<TabQywxTag, List<TabQywxTagItem>> localQywxTagPair) {
Map<String, QywxTagItemDTO> orgMap = items.stream().collect(Collectors.toMap(item -> item.getQywxTagName(), dto -> dto)); Map<String, QywxTagItemDTO> orgMap = items.stream().collect(Collectors.toMap(item -> item.getQywxTagName(), dto -> dto));
//设置关联关系 //设置关联关系
TabQywxTag groupKey = localQywxTagPair.getKey(); TabQywxTag groupKey = localQywxTagPair.getKey();
List<TabQywxTagItem> tabQywxTagItems = localQywxTagPair.getRight(); List<TabQywxTagItem> tabQywxTagItems = localQywxTagPair.getRight();
List<TabQywxTagRelation> saveRelationList = new ArrayList<>(); List<TabQywxTagRelation> saveRelationList = new ArrayList<>();
//如果存在qywxGroupKey 说明已经创建过了 //如果存在qywxGroupKey 说明已经创建过了
if (StringUtils.isBlank(infoDTO.getQywxGroupKey())) { if (StringUtils.isBlank(infoDTO.getQywxGroupKey())) {
TabQywxTagRelation groupRelation = new TabQywxTagRelation(); TabQywxTagRelation groupRelation = new TabQywxTagRelation();
groupRelation.setEnterpriseId(enterpriseId); groupRelation.setEnterpriseId(enterpriseId);
groupRelation.setMemberTagId(infoDTO.getMemberTagId()); groupRelation.setMemberTagId(infoDTO.getMemberTagId());
groupRelation.setQywxTagId(groupKey.getQywxTagId()); groupRelation.setQywxTagId(groupKey.getQywxTagId());
groupRelation.setRelationType(QywxTagRelationTypeEnum.TAG_GROUP.getType()); groupRelation.setRelationType(QywxTagRelationTypeEnum.TAG_GROUP.getType());
groupRelation.setStatusFlag(1); groupRelation.setStatusFlag(1);
groupRelation.setSyncFlag(QywxTagRelationSyncFlagEnum.PRE.getType()); groupRelation.setSyncFlag(QywxTagRelationSyncFlagEnum.PRE.getType());
groupRelation.setQywxTagRelationId(ToolUtil.randomUUID()); groupRelation.setQywxTagRelationId(ToolUtil.randomUUID());
groupRelation.setWxEnterpriseId(wxEnterpriseId); groupRelation.setWxEnterpriseId(wxEnterpriseId);
saveRelationList.add(groupRelation); saveRelationList.add(groupRelation);
} }
List<TabQywxTagRelation> itemList = tabQywxTagItems.stream().map(tab -> { List<TabQywxTagRelation> itemList = tabQywxTagItems.stream().map(tab -> {
QywxTagItemDTO orgItem = orgMap.get(tab.getQywxTagName()); QywxTagItemDTO orgItem = orgMap.get(tab.getQywxTagName());
TabQywxTagRelation itemRelation = new TabQywxTagRelation(); TabQywxTagRelation itemRelation = new TabQywxTagRelation();
itemRelation.setWxEnterpriseId(wxEnterpriseId); itemRelation.setWxEnterpriseId(wxEnterpriseId);
itemRelation.setQywxTagRelationId(ToolUtil.randomUUID()); itemRelation.setQywxTagRelationId(ToolUtil.randomUUID());
itemRelation.setSyncFlag(QywxTagRelationSyncFlagEnum.PRE.getType()); itemRelation.setSyncFlag(QywxTagRelationSyncFlagEnum.PRE.getType());
itemRelation.setStatusFlag(1); itemRelation.setStatusFlag(1);
itemRelation.setRelationType(QywxTagRelationTypeEnum.TAG_ITEM.getType()); itemRelation.setRelationType(QywxTagRelationTypeEnum.TAG_ITEM.getType());
itemRelation.setQywxTagId(groupKey.getQywxTagId()); itemRelation.setQywxTagId(groupKey.getQywxTagId());
itemRelation.setMemberTagId(infoDTO.getMemberTagId()); itemRelation.setMemberTagId(infoDTO.getMemberTagId());
itemRelation.setEnterpriseId(enterpriseId); itemRelation.setEnterpriseId(enterpriseId);
itemRelation.setQywxTagItemId(tab.getQywxTagItemId()); itemRelation.setQywxTagItemId(tab.getQywxTagItemId());
itemRelation.setTagItemId(orgItem.getQywxTagKey()); itemRelation.setTagItemId(orgItem.getQywxTagKey());
return itemRelation; return itemRelation;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
saveRelationList.addAll(itemList); saveRelationList.addAll(itemList);
qywxTagService.saveQywxRelation(saveRelationList); qywxTagService.saveQywxRelation(saveRelationList);
} }
/** /**
* 调用企业微信接口 保存标签 * 调用企业微信接口 保存标签
* *
* @param wxEnterpriseDTO * @param wxEnterpriseDTO
* @param infoDTO * @param infoDTO
* @param items * @param items
* @return * @return
*/ */
private QywxGetCorpTagListDTO saveQywxTag(String corpid, QywxTagInfoDTO infoDTO, List<QywxTagItemDTO> items) { private QywxGetCorpTagListDTO saveQywxTag(String corpid, QywxTagInfoDTO infoDTO, List<QywxTagItemDTO> items) {
QywxTagGroupDTO qywxTagGroupDTO = new QywxTagGroupDTO(); QywxTagGroupDTO qywxTagGroupDTO = new QywxTagGroupDTO();
qywxTagGroupDTO.setGroupName("GIC" + infoDTO.getQywxGroupName()); qywxTagGroupDTO.setGroupName("GIC" + infoDTO.getQywxGroupName());
qywxTagGroupDTO.setOrder(infoDTO.getOrder()); qywxTagGroupDTO.setOrder(infoDTO.getOrder());
qywxTagGroupDTO.setGroupId(infoDTO.getQywxGroupKey()); qywxTagGroupDTO.setGroupId(infoDTO.getQywxGroupKey());
List<QywxTagDTO> tagItems = items.stream().map(item -> { List<QywxTagDTO> tagItems = items.stream().map(item -> {
QywxTagDTO qywxTagDTO = new QywxTagDTO(); QywxTagDTO qywxTagDTO = new QywxTagDTO();
qywxTagDTO.setName(item.getQywxTagName()); qywxTagDTO.setName(item.getQywxTagName());
qywxTagDTO.setOrder(item.getOrder()); qywxTagDTO.setOrder(item.getOrder());
return qywxTagDTO; return qywxTagDTO;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
qywxTagGroupDTO.setTag(tagItems); qywxTagGroupDTO.setTag(tagItems);
return qywxSuiteApiService.saveCorpTag(corpid, config.getWxSuiteid(), qywxTagGroupDTO); return qywxSuiteApiService.saveCorpTag(corpid, config.getWxSuiteid(), qywxTagGroupDTO);
} }
@Override @Override
public ServiceResponse closeSync(String wxEnterpriseId, String memberTagId) { public ServiceResponse closeSync(String wxEnterpriseId, String memberTagId) {
ServiceResponse resp = new ServiceResponse(); ServiceResponse resp = new ServiceResponse();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
List<TabQywxTagRelation> tagRelations = qywxTagService.listQywxTagRelationByMemberTagId(wxEnterpriseId, memberTagId); List<TabQywxTagRelation> tagRelations = qywxTagService.listQywxTagRelationByMemberTagId(wxEnterpriseId, memberTagId);
if (CollectionUtils.isEmpty(tagRelations)) { if (CollectionUtils.isEmpty(tagRelations)) {
return resp; return resp;
} }
TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(wxEnterpriseId, tagRelations.get(0).getQywxTagId()); TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(wxEnterpriseId, tagRelations.get(0).getQywxTagId());
//关闭同步 //关闭同步
qywxTagService.closeSync(wxEnterpriseId, memberTagId); qywxTagService.closeSync(wxEnterpriseId, memberTagId);
List<String> delIds = new ArrayList<>(); List<String> delIds = new ArrayList<>();
delIds.add(tabQywxTag.getQywxGroupKey()); delIds.add(tabQywxTag.getQywxGroupKey());
QywxResponseDTO responseDTO = qywxSuiteApiService.delCorpTag(qwDTO.getThirdCorpid(), config.getWxSuiteid(), delIds, 0); QywxResponseDTO responseDTO = qywxSuiteApiService.delCorpTag(qwDTO.getThirdCorpid(), config.getWxSuiteid(), delIds, 0);
logger.info("关闭同步:{}", JSONObject.toJSONString(responseDTO)); logger.info("关闭同步:{}", JSONObject.toJSONString(responseDTO));
if (responseDTO.getErrcode() != 0) { if (responseDTO.getErrcode() != 0) {
resp.setMessage(responseDTO.getErrmsg()); resp.setMessage(responseDTO.getErrmsg());
resp.setCode(responseDTO.getErrcode()); resp.setCode(responseDTO.getErrcode());
return resp; return resp;
} }
qywxTagService.delQywxTag(tabQywxTag.getQywxGroupKey(), wxEnterpriseId); qywxTagService.delQywxTag(tabQywxTag.getQywxGroupKey(), wxEnterpriseId);
return resp; return resp;
} }
@Override @Override
public ServiceResponse delGicTagItem(String wxEnterpriseId, String tagItemId) { public ServiceResponse delGicTagItem(String wxEnterpriseId, String tagItemId) {
ServiceResponse resp = new ServiceResponse(); ServiceResponse resp = new ServiceResponse();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
TabQywxTagRelation qywxTagRelation = qywxTagService.getQywxTagRelationByTagItemId(wxEnterpriseId, tagItemId); TabQywxTagRelation qywxTagRelation = qywxTagService.getQywxTagRelationByTagItemId(wxEnterpriseId, tagItemId);
if (null == qywxTagRelation) { if (null == qywxTagRelation) {
resp.setMessage("没有同步,无需删除"); resp.setMessage("没有同步,无需删除");
return resp; return resp;
} }
TabQywxTagItem qywxTagItem = qywxTagService.getQywxTagItemById(wxEnterpriseId, qywxTagRelation.getQywxTagItemId()); TabQywxTagItem qywxTagItem = qywxTagService.getQywxTagItemById(wxEnterpriseId, qywxTagRelation.getQywxTagItemId());
List<String> delIds = new ArrayList<>(); List<String> delIds = new ArrayList<>();
delIds.add(qywxTagItem.getQywxTagKey()); delIds.add(qywxTagItem.getQywxTagKey());
QywxResponseDTO responseDTO = qywxSuiteApiService.delCorpTag(qwDTO.getThirdCorpid(), config.getWxSuiteid(), delIds, 1); QywxResponseDTO responseDTO = qywxSuiteApiService.delCorpTag(qwDTO.getThirdCorpid(), config.getWxSuiteid(), delIds, 1);
logger.info("删除标签项:{}", JSONObject.toJSONString(responseDTO)); logger.info("删除标签项:{}", JSONObject.toJSONString(responseDTO));
if (responseDTO.getErrcode() != 0) { if (responseDTO.getErrcode() != 0) {
resp.setMessage(responseDTO.getErrmsg()); resp.setMessage(responseDTO.getErrmsg());
resp.setCode(responseDTO.getErrcode()); resp.setCode(responseDTO.getErrcode());
return resp; return resp;
} }
//删除标签项 以及同步关系 //删除标签项 以及同步关系
qywxTagService.delQywxTagItemById(wxEnterpriseId, qywxTagItem.getQywxTagItemId()); qywxTagService.delQywxTagItemById(wxEnterpriseId, qywxTagItem.getQywxTagItemId());
qywxTagService.changeTagRelationStatus(qywxTagRelation.getQywxTagRelationId(), 0); qywxTagService.changeTagRelationStatus(qywxTagRelation.getQywxTagRelationId(), 0);
return resp; return resp;
} }
@Override @Override
public List<QywxTagRelationDTO> listAllByWxEnterpriseId(String wxEnterpriseId) { public List<QywxTagRelationDTO> listAllByWxEnterpriseId(String wxEnterpriseId) {
List<TabQywxTagRelation> ret = qywxTagService.listAllQywxRelation(wxEnterpriseId); List<TabQywxTagRelation> ret = qywxTagService.listAllQywxRelation(wxEnterpriseId);
return EntityUtil.changeEntityListByJSON(QywxTagRelationDTO.class, ret); return EntityUtil.changeEntityListByJSON(QywxTagRelationDTO.class, ret);
} }
@Override @Override
public void addQywxTag(QywxTagCallbackDTO callbackDTO) { public void addQywxTag(QywxTagCallbackDTO callbackDTO) {
logger.info("企业微信新增标签回调:{}", JSONObject.toJSONString(callbackDTO)); logger.info("企业微信新增标签回调:{}", JSONObject.toJSONString(callbackDTO));
if (!config.getWxSuiteid().equals(callbackDTO.getSuiteId())) { if (!config.getWxSuiteid().equals(callbackDTO.getSuiteId())) {
logger.info("非第三方回调"); logger.info("非第三方回调");
return; return;
} }
TabHaobanWxEnterprise wxEnterpriseDto = wxEnterpriseService.getEnterpriseBycorpId(callbackDTO.getAuthCorpId()); TabHaobanWxEnterprise wxEnterpriseDto = wxEnterpriseService.getEnterpriseBycorpId(callbackDTO.getAuthCorpId());
if (null == wxEnterpriseDto) { if (null == wxEnterpriseDto) {
logger.info("企业不存在:{}", callbackDTO.getAuthCorpId()); logger.info("企业不存在:{}", callbackDTO.getAuthCorpId());
return; return;
} }
QywxTagRelationTypeEnum relationTypeEnum = QywxTagRelationTypeEnum.getByTagType(callbackDTO.getTagType()); QywxTagRelationTypeEnum relationTypeEnum = QywxTagRelationTypeEnum.getByTagType(callbackDTO.getTagType());
if (relationTypeEnum == null) { if (relationTypeEnum == null) {
logger.error("未找到对应关系,{}", callbackDTO.getTagType()); logger.error("未找到对应关系,{}", callbackDTO.getTagType());
return; return;
} }
String wxEnterpriseId = wxEnterpriseDto.getWxEnterpriseId() ; String wxEnterpriseId = wxEnterpriseDto.getWxEnterpriseId() ;
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
//标签组 //标签组
if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_GROUP.getTagType())) { if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_GROUP.getTagType())) {
logger.info("新增标签组无需操作:{}", callbackDTO.getTagId()); logger.info("新增标签组无需操作:{}", callbackDTO.getTagId());
List<String> ids = new ArrayList<>(); List<String> ids = new ArrayList<>();
ids.add(callbackDTO.getTagId()); ids.add(callbackDTO.getTagId());
QywxGetCorpTagListDTO tagDetail = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), ids, QywxTagRelationTypeEnum.TAG_GROUP.getType()); QywxGetCorpTagListDTO tagDetail = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), ids, QywxTagRelationTypeEnum.TAG_GROUP.getType());
if (tagDetail.getErrcode() != 0) { if (tagDetail.getErrcode() != 0) {
logger.info("没有关联,无需操作:{}", JSONObject.toJSONString(tagDetail)); logger.info("没有关联,无需操作:{}", JSONObject.toJSONString(tagDetail));
return; return;
} }
QywxTagGroupDTO qywxTagGroupDTO = tagDetail.getTagGroup().get(0); QywxTagGroupDTO qywxTagGroupDTO = tagDetail.getTagGroup().get(0);
//保存标签项 //保存标签项
qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), qywxTagGroupDTO); qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), qywxTagGroupDTO);
//标签项 //标签项
} else if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_ITEM.getTagType())) { } else if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_ITEM.getTagType())) {
//查找对应的标签组 如果标签组关联了 //查找对应的标签组 如果标签组关联了
List<String> ids = new ArrayList<>(); List<String> ids = new ArrayList<>();
ids.add(callbackDTO.getTagId()); ids.add(callbackDTO.getTagId());
QywxGetCorpTagListDTO tagDetail = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), ids, QywxTagRelationTypeEnum.TAG_ITEM.getType()); QywxGetCorpTagListDTO tagDetail = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), ids, QywxTagRelationTypeEnum.TAG_ITEM.getType());
if (tagDetail.getErrcode() != 0) { if (tagDetail.getErrcode() != 0) {
logger.info("查询失败,无需操作:{}", JSONObject.toJSONString(tagDetail)); logger.info("查询失败,无需操作:{}", JSONObject.toJSONString(tagDetail));
return; return;
} }
if (CollectionUtils.isEmpty(tagDetail.getTagGroup())) { if (CollectionUtils.isEmpty(tagDetail.getTagGroup())) {
logger.info("标签组不存在:{}", JSONObject.toJSONString(tagDetail)); logger.info("标签组不存在:{}", JSONObject.toJSONString(tagDetail));
return; return;
} }
QywxTagGroupDTO qywxTagGroupDTO = tagDetail.getTagGroup().get(0); QywxTagGroupDTO qywxTagGroupDTO = tagDetail.getTagGroup().get(0);
//保存标签项 //保存标签项
qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), qywxTagGroupDTO); qywxTagService.saveQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), qywxTagGroupDTO);
} }
} }
@Override @Override
public void delQywxTag(QywxTagCallbackDTO callbackDTO) { public void delQywxTag(QywxTagCallbackDTO callbackDTO) {
logger.info("企业微信删除标签回调:{}", JSONObject.toJSONString(callbackDTO)); logger.info("企业微信删除标签回调:{}", JSONObject.toJSONString(callbackDTO));
if (!config.getWxSuiteid().equals(callbackDTO.getSuiteId())) { if (!config.getWxSuiteid().equals(callbackDTO.getSuiteId())) {
logger.info("非第三方回调"); logger.info("非第三方回调");
return; return;
} }
TabHaobanWxEnterprise wxEnterpriseDto = wxEnterpriseService.getEnterpriseBycorpId(callbackDTO.getAuthCorpId()); TabHaobanWxEnterprise wxEnterpriseDto = wxEnterpriseService.getEnterpriseBycorpId(callbackDTO.getAuthCorpId());
if (null == wxEnterpriseDto) { if (null == wxEnterpriseDto) {
logger.info("企业不存在:{}", callbackDTO.getAuthCorpId()); logger.info("企业不存在:{}", callbackDTO.getAuthCorpId());
return; return;
} }
QywxTagRelationTypeEnum relationTypeEnum = QywxTagRelationTypeEnum.getByTagType(callbackDTO.getTagType()); QywxTagRelationTypeEnum relationTypeEnum = QywxTagRelationTypeEnum.getByTagType(callbackDTO.getTagType());
if (relationTypeEnum == null) { if (relationTypeEnum == null) {
logger.error("未找到对应关系,{}", callbackDTO.getTagType()); logger.error("未找到对应关系,{}", callbackDTO.getTagType());
return; return;
} }
//标签组 //标签组
if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_GROUP.getTagType())) { if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_GROUP.getTagType())) {
TabQywxTag qywxGroupKey = qywxTagService.getQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId()); TabQywxTag qywxGroupKey = qywxTagService.getQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId());
if (null == qywxGroupKey) { if (null == qywxGroupKey) {
logger.info("原型不存在,不需要处理"); logger.info("原型不存在,不需要处理");
return; return;
} }
List<TabQywxTagRelation> relations = qywxTagService.listQywxTagRelationByQywxTagId(wxEnterpriseDto.getWxEnterpriseId(), qywxGroupKey.getQywxTagId()); List<TabQywxTagRelation> relations = qywxTagService.listQywxTagRelationByQywxTagId(wxEnterpriseDto.getWxEnterpriseId(), qywxGroupKey.getQywxTagId());
//没有同步的关系 删除保存企业微信标签 //没有同步的关系 删除保存企业微信标签
if (CollectionUtils.isEmpty(relations)) { if (CollectionUtils.isEmpty(relations)) {
logger.info("删除保存的企业微信标签"); logger.info("删除保存的企业微信标签");
qywxTagService.delQywxTag(callbackDTO.getTagId(), wxEnterpriseDto.getWxEnterpriseId()); qywxTagService.delQywxTag(callbackDTO.getTagId(), wxEnterpriseDto.getWxEnterpriseId());
return; return;
} }
TabQywxTagRelation relation = relations.stream().findFirst().get(); TabQywxTagRelation relation = relations.stream().findFirst().get();
logger.info("删除标签组 关闭同步:{}", relation.getMemberTagId()); logger.info("删除标签组 关闭同步:{}", relation.getMemberTagId());
//删除同步 关闭同步 //删除同步 关闭同步
qywxTagService.closeSync(wxEnterpriseDto.getWxEnterpriseId(), relation.getMemberTagId()); qywxTagService.closeSync(wxEnterpriseDto.getWxEnterpriseId(), relation.getMemberTagId());
qywxTagService.delQywxTag(callbackDTO.getTagId(), wxEnterpriseDto.getWxEnterpriseId()); qywxTagService.delQywxTag(callbackDTO.getTagId(), wxEnterpriseDto.getWxEnterpriseId());
saveCloseTask(qywxGroupKey.getQywxGroupName().substring(3), "-1", relation.getWxEnterpriseId(), relation.getEnterpriseId()); saveCloseTask(qywxGroupKey.getQywxGroupName().substring(3), "-1", relation.getWxEnterpriseId(), relation.getEnterpriseId());
//标签项 //标签项
} else if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_ITEM.getTagType())) { } else if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_ITEM.getTagType())) {
TabQywxTagRelation qywxTagRelation = qywxTagService.getQywxTagRelationByQywxKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId(), QywxTagRelationTypeEnum.TAG_ITEM.getType()); TabQywxTagRelation qywxTagRelation = qywxTagService.getQywxTagRelationByQywxKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId(), QywxTagRelationTypeEnum.TAG_ITEM.getType());
if (null == qywxTagRelation) { if (null == qywxTagRelation) {
logger.info("没有关联,无需操作"); logger.info("没有关联,无需操作");
qywxTagService.delQywxTagItemById(wxEnterpriseDto.getWxEnterpriseId(), qywxTagRelation.getQywxTagItemId()); qywxTagService.delQywxTagItemById(wxEnterpriseDto.getWxEnterpriseId(), qywxTagRelation.getQywxTagItemId());
return; return;
} }
logger.info("删除标签 关闭同步:{}", qywxTagRelation.getMemberTagId()); logger.info("删除标签 关闭同步:{}", qywxTagRelation.getMemberTagId());
//删除同步 关闭同步 //删除同步 关闭同步
this.closeSync(wxEnterpriseDto.getWxEnterpriseId(), qywxTagRelation.getMemberTagId()); this.closeSync(wxEnterpriseDto.getWxEnterpriseId(), qywxTagRelation.getMemberTagId());
TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(qywxTagRelation.getWxEnterpriseId(), qywxTagRelation.getQywxTagId()); TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(qywxTagRelation.getWxEnterpriseId(), qywxTagRelation.getQywxTagId());
saveCloseTask(tabQywxTag.getQywxGroupName(), "-1", qywxTagRelation.getWxEnterpriseId(), qywxTagRelation.getEnterpriseId()); saveCloseTask(tabQywxTag.getQywxGroupName(), "-1", qywxTagRelation.getWxEnterpriseId(), qywxTagRelation.getEnterpriseId());
} }
} }
private void saveCloseTask(String tagName, String staffId, String wxEnterpriseId, String enterpriseId) { private void saveCloseTask(String tagName, String staffId, String wxEnterpriseId, String enterpriseId) {
String content = tagName + "-关闭标签同步成功"; String content = tagName + "-关闭标签同步成功";
qywxTagSyncApiService.saveCloseTask(staffId, wxEnterpriseId, enterpriseId, content, QywxTaskStatusEnum.ALL_SUCCESS.getType()); qywxTagSyncApiService.saveCloseTask(staffId, wxEnterpriseId, enterpriseId, content, QywxTaskStatusEnum.ALL_SUCCESS.getType());
} }
@Override @Override
public void editQywxTag(QywxTagCallbackDTO callbackDTO) { public void editQywxTag(QywxTagCallbackDTO callbackDTO) {
logger.info("企业微信修改标签回调:{}", JSONObject.toJSONString(callbackDTO)); logger.info("企业微信修改标签回调:{}", JSONObject.toJSONString(callbackDTO));
if (!config.getWxSuiteid().equals(callbackDTO.getSuiteId())) { if (!config.getWxSuiteid().equals(callbackDTO.getSuiteId())) {
logger.info("非第三方回调"); logger.info("非第三方回调");
return; return;
} }
TabHaobanWxEnterprise wxEnterpriseDto = wxEnterpriseService.getEnterpriseBycorpId(callbackDTO.getAuthCorpId()); TabHaobanWxEnterprise wxEnterpriseDto = wxEnterpriseService.getEnterpriseBycorpId(callbackDTO.getAuthCorpId());
if (null == wxEnterpriseDto) { if (null == wxEnterpriseDto) {
logger.info("企业不存在:{}", callbackDTO.getAuthCorpId()); logger.info("企业不存在:{}", callbackDTO.getAuthCorpId());
return; return;
} }
QywxTagRelationTypeEnum relationTypeEnum = QywxTagRelationTypeEnum.getByTagType(callbackDTO.getTagType()); QywxTagRelationTypeEnum relationTypeEnum = QywxTagRelationTypeEnum.getByTagType(callbackDTO.getTagType());
if (relationTypeEnum == null) { if (relationTypeEnum == null) {
logger.error("未找到对应关系,{}", callbackDTO.getTagType()); logger.error("未找到对应关系,{}", callbackDTO.getTagType());
return; return;
} }
String wxEnterpriseId = wxEnterpriseDto.getWxEnterpriseId() ; String wxEnterpriseId = wxEnterpriseDto.getWxEnterpriseId() ;
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
//标签组 //标签组
if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_GROUP.getTagType())) { if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_GROUP.getTagType())) {
//判断是否存在关联 存在需要同步回去 //判断是否存在关联 存在需要同步回去
TabQywxTagRelation relaton = qywxTagService.getQywxTagRelationByQywxKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId(), QywxTagRelationTypeEnum.TAG_GROUP.getType()); TabQywxTagRelation relaton = qywxTagService.getQywxTagRelationByQywxKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId(), QywxTagRelationTypeEnum.TAG_GROUP.getType());
if (null == relaton) { if (null == relaton) {
logger.info("原型不存在,不需要处理"); logger.info("原型不存在,不需要处理");
return; return;
} }
//名称同步回去 //名称同步回去
TabQywxTag qywxGroupKey = qywxTagService.getQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId()); TabQywxTag qywxGroupKey = qywxTagService.getQywxTagByQywxGroupKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId());
QywxTagDTO qywxTagDTO = new QywxTagDTO(); QywxTagDTO qywxTagDTO = new QywxTagDTO();
qywxTagDTO.setId(callbackDTO.getTagId()); qywxTagDTO.setId(callbackDTO.getTagId());
qywxTagDTO.setName(qywxGroupKey.getQywxGroupName()); qywxTagDTO.setName(qywxGroupKey.getQywxGroupName());
qywxTagDTO.setOrder(qywxGroupKey.getOrder()); qywxTagDTO.setOrder(qywxGroupKey.getOrder());
qywxSuiteApiService.editCorpTagNameOrOrder(qwDTO.getThirdCorpid(), config.getWxSuiteid(), qywxTagDTO); qywxSuiteApiService.editCorpTagNameOrOrder(qwDTO.getThirdCorpid(), config.getWxSuiteid(), qywxTagDTO);
//标签项 //标签项
} else if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_ITEM.getTagType())) { } else if (Objects.equals(relationTypeEnum.getTagType(), QywxTagRelationTypeEnum.TAG_ITEM.getTagType())) {
TabQywxTagItem qywxTagItem = qywxTagService.getQywxTagItemByQywxItemKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId()); TabQywxTagItem qywxTagItem = qywxTagService.getQywxTagItemByQywxItemKey(wxEnterpriseDto.getWxEnterpriseId(), callbackDTO.getTagId());
if (null == qywxTagItem) { if (null == qywxTagItem) {
logger.info("没有关联,无需操作"); logger.info("没有关联,无需操作");
return; return;
} }
List<TabQywxTagRelation> relations = qywxTagService.listQywxTagRelationByQywxTagId(wxEnterpriseDto.getWxEnterpriseId(), qywxTagItem.getQywxTagId()); List<TabQywxTagRelation> relations = qywxTagService.listQywxTagRelationByQywxTagId(wxEnterpriseDto.getWxEnterpriseId(), qywxTagItem.getQywxTagId());
if (CollectionUtils.isEmpty(relations)) { if (CollectionUtils.isEmpty(relations)) {
logger.info("直接删除标签项"); logger.info("直接删除标签项");
qywxTagService.delQywxTagItemById(wxEnterpriseDto.getWxEnterpriseId(), qywxTagItem.getQywxTagItemId()); qywxTagService.delQywxTagItemById(wxEnterpriseDto.getWxEnterpriseId(), qywxTagItem.getQywxTagItemId());
return; return;
} }
//名称同步回去 //名称同步回去
QywxTagDTO qywxTagDTO = new QywxTagDTO(); QywxTagDTO qywxTagDTO = new QywxTagDTO();
qywxTagDTO.setId(callbackDTO.getTagId()); qywxTagDTO.setId(callbackDTO.getTagId());
qywxTagDTO.setName(qywxTagItem.getQywxTagName()); qywxTagDTO.setName(qywxTagItem.getQywxTagName());
qywxTagDTO.setOrder(qywxTagItem.getOrder()); qywxTagDTO.setOrder(qywxTagItem.getOrder());
qywxSuiteApiService.editCorpTagNameOrOrder(qwDTO.getThirdCorpid(), config.getWxSuiteid(), qywxTagDTO); qywxSuiteApiService.editCorpTagNameOrOrder(qwDTO.getThirdCorpid(), config.getWxSuiteid(), qywxTagDTO);
} }
} }
@Override @Override
public ServiceResponse syncFriendTagToQywxByExternalUserId(String wxEnterpriseId, String enterpriseId, String externalUserId, List<String> tagItemIds) { public ServiceResponse syncFriendTagToQywxByExternalUserId(String wxEnterpriseId, String enterpriseId, String externalUserId, List<String> tagItemIds) {
logger.info("同步好友标签到企业微信:{},{},{},{}", wxEnterpriseId, enterpriseId, externalUserId, JSONObject.toJSONString(tagItemIds)); logger.info("同步好友标签到企业微信:{},{},{},{}", wxEnterpriseId, enterpriseId, externalUserId, JSONObject.toJSONString(tagItemIds));
ServiceResponse resp = new ServiceResponse(); ServiceResponse resp = new ServiceResponse();
//获取需要同步的标签 //获取需要同步的标签
QywxSyncTagFormatPojo syncTagFormat = listSyncTagItems(wxEnterpriseId); QywxSyncTagFormatPojo syncTagFormat = listSyncTagItems(wxEnterpriseId);
if (syncTagFormat == null) { if (syncTagFormat == null) {
logger.info("没有需要同步的标签"); logger.info("没有需要同步的标签");
resp.setCode(2); resp.setCode(2);
resp.setMessage("没有要同步的标签"); resp.setMessage("没有要同步的标签");
return resp; return resp;
} }
//该会员要同步的打的企业微信标签 该商户下 //该会员要同步的打的企业微信标签 该商户下
Set<String> entQywxTagKeys = tagItemIds.stream().filter(tagItemId -> syncTagFormat.getGicToQywxTagItemIdMap().containsKey(tagItemId)) Set<String> entQywxTagKeys = tagItemIds.stream().filter(tagItemId -> syncTagFormat.getGicToQywxTagItemIdMap().containsKey(tagItemId))
.map(tagItemId -> syncTagFormat.getGicToQywxTagItemIdMap().get(tagItemId)).collect(Collectors.toSet()); .map(tagItemId -> syncTagFormat.getGicToQywxTagItemIdMap().get(tagItemId)).collect(Collectors.toSet());
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
//查询外部联系人 //查询外部联系人
String wxSuiteid = config.getWxSuiteid(); String wxSuiteid = config.getWxSuiteid();
String externalUseridInfo = qywxUserApiService.getExternalUseridInfo(qwDTO.getThirdCorpid(), wxSuiteid, externalUserId); String externalUseridInfo = qywxUserApiService.getExternalUseridInfo(qwDTO.getThirdCorpid(), wxSuiteid, externalUserId);
if (StringUtils.isBlank(externalUseridInfo)) { if (StringUtils.isBlank(externalUseridInfo)) {
logger.info("好友不存在"); logger.info("好友不存在");
resp.setCode(3); resp.setCode(3);
resp.setMessage("好友不存在"); resp.setMessage("好友不存在");
return resp; return resp;
} else if (externalUseridInfo.equals("1")) { } else if (externalUseridInfo.equals("1")) {
logger.info("限制次数"); logger.info("限制次数");
resp.setCode(45033); resp.setCode(45033);
resp.setMessage("getExternalUseridInfo接口次数限制"); resp.setMessage("getExternalUseridInfo接口次数限制");
return resp; return resp;
} }
Map<String, Set<String>> externalTagMap = getExternalTagMap(externalUseridInfo, wxEnterpriseId); Map<String, Set<String>> externalTagMap = getExternalTagMap(externalUseridInfo, wxEnterpriseId);
if (null == externalTagMap) { if (null == externalTagMap) {
logger.info("没有好友需要同步"); logger.info("没有好友需要同步");
resp.setCode(5); resp.setCode(5);
resp.setMessage("没有好友需要同步"); resp.setMessage("没有好友需要同步");
return resp; return resp;
} }
//商户下设置同步的企业微信标签keys //商户下设置同步的企业微信标签keys
Set<String> entQywxTagSyncKeys = syncTagFormat.getEntQywxTagKeysMap().get(enterpriseId); Set<String> entQywxTagSyncKeys = syncTagFormat.getEntQywxTagKeysMap().get(enterpriseId);
if (CollectionUtils.isEmpty(entQywxTagSyncKeys)) { if (CollectionUtils.isEmpty(entQywxTagSyncKeys)) {
logger.info("该商户下没有标签"); logger.info("该商户下没有标签");
resp.setCode(6); resp.setCode(6);
resp.setMessage("该商户下没有标签"); resp.setMessage("该商户下没有标签");
return resp; return resp;
} }
//同步好友 //同步好友
externalTagMap.forEach((wxUserId, haveTagKes) -> { externalTagMap.forEach((wxUserId, haveTagKes) -> {
//该用户在该商户下打的标签 //该用户在该商户下打的标签
Sets.SetView<String> entHasSetQywxTagKeys = Sets.intersection(haveTagKes, entQywxTagSyncKeys); Sets.SetView<String> entHasSetQywxTagKeys = Sets.intersection(haveTagKes, entQywxTagSyncKeys);
//获取需要打的标签 //获取需要打的标签
Sets.SetView<String> needSetTags = Sets.difference(entQywxTagKeys, entHasSetQywxTagKeys); Sets.SetView<String> needSetTags = Sets.difference(entQywxTagKeys, entHasSetQywxTagKeys);
//需要删除的标签 //需要删除的标签
Sets.SetView<String> needDelTags = Sets.difference(entHasSetQywxTagKeys, entQywxTagKeys); Sets.SetView<String> needDelTags = Sets.difference(entHasSetQywxTagKeys, entQywxTagKeys);
logger.info("该用户打标签:{}",wxUserId); logger.info("该用户打标签:{}",wxUserId);
if (CollectionUtils.isEmpty(needDelTags) && CollectionUtils.isEmpty(needSetTags)) { if (CollectionUtils.isEmpty(needDelTags) && CollectionUtils.isEmpty(needSetTags)) {
logger.info("不需要操作:{},{}", wxUserId, externalUserId); logger.info("不需要操作:{},{}", wxUserId, externalUserId);
return; return;
} }
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("corpid", qwDTO.getThirdCorpid()); jsonObject.put("corpid", qwDTO.getThirdCorpid());
jsonObject.put("suiteId", wxSuiteid); jsonObject.put("suiteId", wxSuiteid);
jsonObject.put("wxUserId", wxUserId); jsonObject.put("wxUserId", wxUserId);
jsonObject.put("externalUserId", externalUserId); jsonObject.put("externalUserId", externalUserId);
if (CollectionUtils.isNotEmpty(needSetTags)) { if (CollectionUtils.isNotEmpty(needSetTags)) {
jsonObject.put("needSetTags", StringUtils.join(needSetTags, ",")); jsonObject.put("needSetTags", StringUtils.join(needSetTags, ","));
} }
if (CollectionUtils.isNotEmpty(needDelTags)) { if (CollectionUtils.isNotEmpty(needDelTags)) {
jsonObject.put("needDelTags", StringUtils.join(needDelTags, ",")); jsonObject.put("needDelTags", StringUtils.join(needDelTags, ","));
} }
GicMQClient clientInstance = GICMQClientUtil.getClientInstance(); GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try { try {
logger.info("qywxMarkTagMq 该用户打标签:{}",jsonObject.toJSONString()); logger.info("qywxMarkTagMq 该用户打标签:{}",jsonObject.toJSONString());
clientInstance.sendMessage("qywxMarkTagMq", jsonObject.toJSONString()); clientInstance.sendMessage("qywxMarkTagMq", jsonObject.toJSONString());
} catch (Exception e) { } catch (Exception e) {
logger.info("企微标签同步qywxMarkTagMq发送失败:{}", e.getMessage(), e); logger.info("企微标签同步qywxMarkTagMq发送失败:{}", e.getMessage(), e);
} }
}); });
return resp; return resp;
} }
/** /**
* 获取以及同步的标签序列表 * 获取以及同步的标签序列表
*/ */
private QywxSyncTagFormatPojo listSyncTagItems(String wxEnterpriseId) { private QywxSyncTagFormatPojo listSyncTagItems(String wxEnterpriseId) {
QywxSyncTagFormatPojo pojo = new QywxSyncTagFormatPojo(); QywxSyncTagFormatPojo pojo = new QywxSyncTagFormatPojo();
List<TabQywxTagRelation> relations = qywxTagService.listAllQywxRelation(wxEnterpriseId); List<TabQywxTagRelation> relations = qywxTagService.listAllQywxRelation(wxEnterpriseId);
if (CollectionUtils.isEmpty(relations)) { if (CollectionUtils.isEmpty(relations)) {
return null; return null;
} }
//企业微信标签key 关联对应的 gic标签关系 //企业微信标签key 关联对应的 gic标签关系
Map<String, TabQywxTagRelation> relationMap = relations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_ITEM.getType()).collect(Collectors.toMap(dto -> dto.getQywxTagItemId(), dto -> dto)); Map<String, TabQywxTagRelation> relationMap = relations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_ITEM.getType()).collect(Collectors.toMap(dto -> dto.getQywxTagItemId(), dto -> dto));
if (MapUtils.isEmpty(relationMap)) { if (MapUtils.isEmpty(relationMap)) {
return null; return null;
} }
List<String> syncTagItemsIds = relationMap.keySet().stream().collect(Collectors.toList()); List<String> syncTagItemsIds = relationMap.keySet().stream().collect(Collectors.toList());
//同步的标签项 //同步的标签项
List<TabQywxTagItem> tagItems = qywxTagService.listQywxTagItemByIds(wxEnterpriseId, syncTagItemsIds); List<TabQywxTagItem> tagItems = qywxTagService.listQywxTagItemByIds(wxEnterpriseId, syncTagItemsIds);
//企业微信标签id 对应的标签 //企业微信标签id 对应的标签
Map<String, TabQywxTagItem> qywxTagItemMap = tagItems.stream().collect(Collectors.toMap(dto -> dto.getQywxTagItemId(), dto -> dto)); Map<String, TabQywxTagItem> qywxTagItemMap = tagItems.stream().collect(Collectors.toMap(dto -> dto.getQywxTagItemId(), dto -> dto));
//企业微信标签与gic标签id的对应关系 //企业微信标签与gic标签id的对应关系
Map<String, String> qywxToGicTagItemIdMap = syncTagItemsIds.stream().collect(Collectors.toMap(qywxTagId -> qywxTagItemMap.get(qywxTagId).getQywxTagKey(), qywxTagId -> relationMap.get(qywxTagId).getTagItemId())); Map<String, String> qywxToGicTagItemIdMap = syncTagItemsIds.stream().collect(Collectors.toMap(qywxTagId -> qywxTagItemMap.get(qywxTagId).getQywxTagKey(), qywxTagId -> relationMap.get(qywxTagId).getTagItemId()));
//gic标签与企业微信标签id的对应关系 //gic标签与企业微信标签id的对应关系
Map<String, String> gicToQywxTagItemIdMap = syncTagItemsIds.stream().collect(Collectors.toMap(qywxTagId -> relationMap.get(qywxTagId).getTagItemId(), qywxTagId -> qywxTagItemMap.get(qywxTagId).getQywxTagKey())); Map<String, String> gicToQywxTagItemIdMap = syncTagItemsIds.stream().collect(Collectors.toMap(qywxTagId -> relationMap.get(qywxTagId).getTagItemId(), qywxTagId -> qywxTagItemMap.get(qywxTagId).getQywxTagKey()));
//gic商户对应的已经同步的gic标签项列表 //gic商户对应的已经同步的gic标签项列表
Map<String, Set<String>> entGicTagItemIdMap = relations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_ITEM.getType()) Map<String, Set<String>> entGicTagItemIdMap = relations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_ITEM.getType())
.collect(Collectors.groupingBy(dto -> dto.getEnterpriseId(), Collectors.mapping(dto -> dto.getTagItemId(), Collectors.toSet()))); .collect(Collectors.groupingBy(dto -> dto.getEnterpriseId(), Collectors.mapping(dto -> dto.getTagItemId(), Collectors.toSet())));
//gic商户对应的已经同步的企业微信表亲列表 //gic商户对应的已经同步的企业微信表亲列表
Map<String, Set<String>> entQywxTagKeysMap = relations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_ITEM.getType()) Map<String, Set<String>> entQywxTagKeysMap = relations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_ITEM.getType())
.collect(Collectors.groupingBy(dto -> dto.getEnterpriseId(), Collectors.mapping(dto -> gicToQywxTagItemIdMap.get(dto.getTagItemId()), Collectors.toSet()))); .collect(Collectors.groupingBy(dto -> dto.getEnterpriseId(), Collectors.mapping(dto -> gicToQywxTagItemIdMap.get(dto.getTagItemId()), Collectors.toSet())));
pojo.setEntGicTagItemIdMap(entGicTagItemIdMap); pojo.setEntGicTagItemIdMap(entGicTagItemIdMap);
pojo.setEntQywxTagKeysMap(entQywxTagKeysMap); pojo.setEntQywxTagKeysMap(entQywxTagKeysMap);
pojo.setGicToQywxTagItemIdMap(gicToQywxTagItemIdMap); pojo.setGicToQywxTagItemIdMap(gicToQywxTagItemIdMap);
pojo.setQywxToGicTagItemIdMap(qywxToGicTagItemIdMap); pojo.setQywxToGicTagItemIdMap(qywxToGicTagItemIdMap);
return pojo; return pojo;
} }
@Override @Override
public ServiceResponse syncQywxTagToGicByExternalUserId(String wxEnterpriseId, String externalUserId, String wxUserId) { public ServiceResponse syncQywxTagToGicByExternalUserId(String wxEnterpriseId, String externalUserId, String wxUserId) {
//刷新标签的时候不允许同步 //刷新标签的时候不允许同步
ServiceResponse resp = new ServiceResponse(); ServiceResponse resp = new ServiceResponse();
//所有以及关联同步的标签 //所有以及关联同步的标签
QywxSyncTagFormatPojo syncTagFormatPojo = listSyncTagItems(wxEnterpriseId); QywxSyncTagFormatPojo syncTagFormatPojo = listSyncTagItems(wxEnterpriseId);
if (syncTagFormatPojo == null) { if (syncTagFormatPojo == null) {
logger.info("没有需要同步的标签,wxUserId:{},externalUserId:{},wxId:{}", wxUserId, externalUserId, wxEnterpriseId); logger.info("没有需要同步的标签,wxUserId:{},externalUserId:{},wxId:{}", wxUserId, externalUserId, wxEnterpriseId);
resp.setMessage("没有需要同步的标签"); resp.setMessage("没有需要同步的标签");
return resp; return resp;
} }
//企业微信同步的标签key //企业微信同步的标签key
Set<String> qywxTagKeys = syncTagFormatPojo.getQywxToGicTagItemIdMap().keySet(); Set<String> qywxTagKeys = syncTagFormatPojo.getQywxToGicTagItemIdMap().keySet();
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
//查询外部联系人 //查询外部联系人
String externalUseridInfo = qywxUserApiService.getExternalUseridInfo(qwDTO.getThirdCorpid() , config.getWxSuiteid(), externalUserId); String externalUseridInfo = qywxUserApiService.getExternalUseridInfo(qwDTO.getThirdCorpid() , config.getWxSuiteid(), externalUserId);
if (StringUtils.isBlank(externalUseridInfo)) { if (StringUtils.isBlank(externalUseridInfo)) {
logger.info("好友不存在"); logger.info("好友不存在");
resp.setCode(2); resp.setCode(2);
resp.setMessage("好友不存在"); resp.setMessage("好友不存在");
return resp; return resp;
} else if (externalUseridInfo.equals("1")) { } else if (externalUseridInfo.equals("1")) {
logger.info("限制次数"); logger.info("限制次数");
resp.setCode(45033); resp.setCode(45033);
resp.setMessage("限制次数"); resp.setMessage("限制次数");
return resp; return resp;
} }
Map<String, Set<String>> externalTagMap = getExternalTagMap(externalUseridInfo, wxEnterpriseId); Map<String, Set<String>> externalTagMap = getExternalTagMap(externalUseridInfo, wxEnterpriseId);
if (MapUtils.isEmpty(externalTagMap)) { if (MapUtils.isEmpty(externalTagMap)) {
logger.info("该用户没有不存在好友关系,获取不到关联导购打的标签,:externalUseridInfo:{}", externalUseridInfo); logger.info("该用户没有不存在好友关系,获取不到关联导购打的标签,:externalUseridInfo:{}", externalUseridInfo);
resp.setMessage("该用户没有不存在好友关系,获取不到关联导购打的标签"); resp.setMessage("该用户没有不存在好友关系,获取不到关联导购打的标签");
return resp; return resp;
} }
//当前操作用户企业打的标签 //当前操作用户企业打的标签
Set<String> staffChangeTagKeys = externalTagMap.get(wxUserId); Set<String> staffChangeTagKeys = externalTagMap.get(wxUserId);
if (CollectionUtils.isEmpty(staffChangeTagKeys)) { if (CollectionUtils.isEmpty(staffChangeTagKeys)) {
logger.info("该用户没有不存在好友关系,获取不到关联导购打的标签,wxUserId:{}", wxUserId); logger.info("该用户没有不存在好友关系,获取不到关联导购打的标签,wxUserId:{}", wxUserId);
resp.setMessage("该用户没有不存在好友关系,获取不到关联导购打的标签"); resp.setMessage("该用户没有不存在好友关系,获取不到关联导购打的标签");
return resp; return resp;
} }
Sets.SetView<String> staffHasSetTagKeys = Sets.intersection(staffChangeTagKeys, qywxTagKeys); Sets.SetView<String> staffHasSetTagKeys = Sets.intersection(staffChangeTagKeys, qywxTagKeys);
//获取该外部联系人的所有会员 //获取该外部联系人的所有会员
List<TabHaobanExternalClerkRelated> clerkRelateds = externalClerkRelatedService.listExternalByExternalUserid(wxEnterpriseId, externalUserId); List<TabHaobanExternalClerkRelated> clerkRelateds = externalClerkRelatedService.listExternalByExternalUserid(wxEnterpriseId, externalUserId);
if (CollectionUtils.isEmpty(clerkRelateds)) { if (CollectionUtils.isEmpty(clerkRelateds)) {
logger.info("该用户没关联对应的好友:{}", externalUserId); logger.info("该用户没关联对应的好友:{}", externalUserId);
resp.setMessage("该用户没关联对应的好友"); resp.setMessage("该用户没关联对应的好友");
return resp; return resp;
} }
//企业下的企业微信标签对应关系 //企业下的企业微信标签对应关系
Map<String, Set<String>> entQywxTagKeysMap = syncTagFormatPojo.getEntQywxTagKeysMap(); Map<String, Set<String>> entQywxTagKeysMap = syncTagFormatPojo.getEntQywxTagKeysMap();
Map<String, Set<String>> entGicTagItemIdMap = syncTagFormatPojo.getEntGicTagItemIdMap(); Map<String, Set<String>> entGicTagItemIdMap = syncTagFormatPojo.getEntGicTagItemIdMap();
List<String> hasSaveMemberId = new ArrayList<>(); List<String> hasSaveMemberId = new ArrayList<>();
for (TabHaobanExternalClerkRelated clerkRelated : clerkRelateds) { for (TabHaobanExternalClerkRelated clerkRelated : clerkRelateds) {
logger.info("需要处理的好友:{}", JSONObject.toJSONString(clerkRelated)); logger.info("需要处理的好友:{}", JSONObject.toJSONString(clerkRelated));
//该会员在该企业已经同步 无需同步 //该会员在该企业已经同步 无需同步
if (hasSaveMemberId.contains(clerkRelated.getMemberId())) { if (hasSaveMemberId.contains(clerkRelated.getMemberId())) {
continue; continue;
} }
hasSaveMemberId.add(clerkRelated.getMemberId()); hasSaveMemberId.add(clerkRelated.getMemberId());
//该会员所在企业下 配置的同步的标签列表 //该会员所在企业下 配置的同步的标签列表
Set<String> entQywxSyncTagKeys = entQywxTagKeysMap.get(clerkRelated.getEnterpriseId()); Set<String> entQywxSyncTagKeys = entQywxTagKeysMap.get(clerkRelated.getEnterpriseId());
Set<String> entQywxSyncTagItemIds = entGicTagItemIdMap.get(clerkRelated.getEnterpriseId()); Set<String> entQywxSyncTagItemIds = entGicTagItemIdMap.get(clerkRelated.getEnterpriseId());
if (CollectionUtils.isEmpty(entQywxSyncTagKeys)) { if (CollectionUtils.isEmpty(entQywxSyncTagKeys)) {
logger.info("该企业下没有配置需要同步的:{},{}", externalUserId, clerkRelated.getEnterpriseId()); logger.info("该企业下没有配置需要同步的:{},{}", externalUserId, clerkRelated.getEnterpriseId());
continue; continue;
} }
String memberId = externalClerkRelatedService.checkAndUpdateMemberByUnonId(clerkRelated.getEnterpriseId(), clerkRelated.getMemberId(), clerkRelated.getUnionid()); String memberId = externalClerkRelatedService.checkAndUpdateMemberByUnonId(clerkRelated.getEnterpriseId(), clerkRelated.getMemberId(), clerkRelated.getUnionid());
if (null == memberId) { if (null == memberId) {
logger.info("会员不存在:{}", externalUserId); logger.info("会员不存在:{}", externalUserId);
continue; continue;
} }
//该会员打的标签 //该会员打的标签
List<MemberTagDTO> gicItems = memberTagService.listMemberTag(clerkRelated.getEnterpriseId(), memberId); List<MemberTagDTO> gicItems = memberTagService.listMemberTag(clerkRelated.getEnterpriseId(), memberId);
Set<String> noSyncTagItemIds = new HashSet<>(); Set<String> noSyncTagItemIds = new HashSet<>();
if (!CollectionUtils.isEmpty(gicItems)) { if (!CollectionUtils.isEmpty(gicItems)) {
noSyncTagItemIds = gicItems.stream().filter(item -> !entQywxSyncTagItemIds.contains(item.getTagsId())).map(dto -> dto.getTagsId()).collect(Collectors.toSet()); noSyncTagItemIds = gicItems.stream().filter(item -> !entQywxSyncTagItemIds.contains(item.getTagsId())).map(dto -> dto.getTagsId()).collect(Collectors.toSet());
logger.info("没有同步的标签:{}", JSONObject.toJSONString(noSyncTagItemIds)); logger.info("没有同步的标签:{}", JSONObject.toJSONString(noSyncTagItemIds));
} }
//该企业下会员需要设置的标签 //该企业下会员需要设置的标签
Sets.SetView<String> entMemberNeedSetQywxKeys = Sets.intersection(staffHasSetTagKeys, entQywxSyncTagKeys); Sets.SetView<String> entMemberNeedSetQywxKeys = Sets.intersection(staffHasSetTagKeys, entQywxSyncTagKeys);
Set<String> saveTagIds = entMemberNeedSetQywxKeys.stream().map(qywxKey -> syncTagFormatPojo.getQywxToGicTagItemIdMap().get(qywxKey)).collect(Collectors.toSet()); Set<String> saveTagIds = entMemberNeedSetQywxKeys.stream().map(qywxKey -> syncTagFormatPojo.getQywxToGicTagItemIdMap().get(qywxKey)).collect(Collectors.toSet());
saveTagIds.addAll(noSyncTagItemIds); saveTagIds.addAll(noSyncTagItemIds);
logger.info("该企业会员需要打的标签:{}", JSONObject.toJSONString(entMemberNeedSetQywxKeys)); logger.info("该企业会员需要打的标签:{}", JSONObject.toJSONString(entMemberNeedSetQywxKeys));
//更新标签 会自动同步 //更新标签 会自动同步
if (CollectionUtils.isEmpty(saveTagIds)) { if (CollectionUtils.isEmpty(saveTagIds)) {
saveMemberTags(new HashSet<>(), clerkRelated.getEnterpriseId(), memberId, clerkRelated.getClerkId()); saveMemberTags(new HashSet<>(), clerkRelated.getEnterpriseId(), memberId, clerkRelated.getClerkId());
} else { } else {
saveMemberTags(saveTagIds, clerkRelated.getEnterpriseId(), memberId, clerkRelated.getClerkId()); saveMemberTags(saveTagIds, clerkRelated.getEnterpriseId(), memberId, clerkRelated.getClerkId());
} }
} }
return resp; return resp;
} }
private void saveMemberTags(Set<String> tagItemIds, String enterpriseId, String memberId, String clerkId) { private void saveMemberTags(Set<String> tagItemIds, String enterpriseId, String memberId, String clerkId) {
List<MemberTagDTO> list = tagItemIds.stream().map(tagId -> { List<MemberTagDTO> list = tagItemIds.stream().map(tagId -> {
MemberTagDTO memberTagDTO = new MemberTagDTO(); MemberTagDTO memberTagDTO = new MemberTagDTO();
memberTagDTO.setTagsId(tagId); memberTagDTO.setTagsId(tagId);
memberTagDTO.setEnterpriseId(enterpriseId); memberTagDTO.setEnterpriseId(enterpriseId);
memberTagDTO.setMemberId(memberId); memberTagDTO.setMemberId(memberId);
memberTagDTO.setClerkId(clerkId); memberTagDTO.setClerkId(clerkId);
return memberTagDTO; return memberTagDTO;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
logger.info("会员打标签:{}", JSONObject.toJSONString(list)); logger.info("会员打标签:{}", JSONObject.toJSONString(list));
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
logger.info("会员打标签list为空"); logger.info("会员打标签list为空");
return; return;
} }
memberTagService.saveOrUpdateMemberTagHB(enterpriseId, list, memberId); memberTagService.saveOrUpdateMemberTagHB(enterpriseId, list, memberId);
} }
/** /**
* 获取企业微信的外部联系人的所有联系关系 * 获取企业微信的外部联系人的所有联系关系
* *
* @param externalUseridInfo * @param externalUseridInfo
* @return * @return
*/ */
private Map<String, Set<String>> getExternalTagMap(String externalUseridInfo, String wxEnterpriseId) { private Map<String, Set<String>> getExternalTagMap(String externalUseridInfo, String wxEnterpriseId) {
logger.info("externalUseridInfo:{}", externalUseridInfo); logger.info("externalUseridInfo:{}", externalUseridInfo);
Map<String, Set<String>> ret = new HashMap<>(); Map<String, Set<String>> ret = new HashMap<>();
JSONObject jsonObject = JSONObject.parseObject(externalUseridInfo); JSONObject jsonObject = JSONObject.parseObject(externalUseridInfo);
if (!jsonObject.containsKey("follow_user")) { if (!jsonObject.containsKey("follow_user")) {
logger.info("没有相关的好友"); logger.info("没有相关的好友");
return null; return null;
} }
JSONArray followUser = jsonObject.getJSONArray("follow_user"); JSONArray followUser = jsonObject.getJSONArray("follow_user");
for (int i = 0; i < followUser.size(); i++) { for (int i = 0; i < followUser.size(); i++) {
JSONObject midUser = followUser.getJSONObject(i); JSONObject midUser = followUser.getJSONObject(i);
String wxUserId = midUser.getString("userid"); String wxUserId = midUser.getString("userid");
//做兼容 //做兼容
TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId); /* TabHaobanStaff staff = staffService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if (staff != null) { if (staff != null) {
logger.info("旧wxUserId:{}", wxUserId); logger.info("旧wxUserId:{}", wxUserId);
wxUserId = staff.getWxUserId(); wxUserId = staff.getWxUserId();
logger.info("新wxUserId:{}", wxUserId); logger.info("新wxUserId:{}", wxUserId);
} }*/
Set<String> midTagIds = new HashSet<>(); Set<String> midTagIds = new HashSet<>();
if (!midUser.containsKey("tags")) { if (!midUser.containsKey("tags")) {
ret.put(wxUserId, midTagIds); ret.put(wxUserId, midTagIds);
continue; continue;
} }
JSONArray tags = midUser.getJSONArray("tags"); JSONArray tags = midUser.getJSONArray("tags");
for (int n = 0; n < tags.size(); n++) { for (int n = 0; n < tags.size(); n++) {
JSONObject tagMid = tags.getJSONObject(n); JSONObject tagMid = tags.getJSONObject(n);
String tagId = tagMid.getString("tag_id"); String tagId = tagMid.getString("tag_id");
String tagType = tagMid.getString("type"); String tagType = tagMid.getString("type");
if (tagType.equals("1")) { if (tagType.equals("1")) {
midTagIds.add(tagId); midTagIds.add(tagId);
} }
} }
ret.put(wxUserId, midTagIds); ret.put(wxUserId, midTagIds);
} }
return ret; return ret;
} }
@Override @Override
public void changeQywxTagStatus(String memberTagId, String wxEnterpriseId, int status) { public void changeQywxTagStatus(String memberTagId, String wxEnterpriseId, int status) {
qywxTagService.changeRelationSyncFlagByMemberTagId(wxEnterpriseId, memberTagId, status); qywxTagService.changeRelationSyncFlagByMemberTagId(wxEnterpriseId, memberTagId, status);
} }
@Override @Override
public boolean saveRelation(String wxEnterpriseId, String enterpriseId, List<String> memberTagIds) { public boolean saveRelation(String wxEnterpriseId, String enterpriseId, List<String> memberTagIds) {
if (CollectionUtils.isEmpty(memberTagIds)) { if (CollectionUtils.isEmpty(memberTagIds)) {
return false; return false;
} }
return false; return false;
} }
@Override @Override
public ServiceResponse renameQywxTag(String wxEnterpriseId, String id, String name, Integer type) { public ServiceResponse renameQywxTag(String wxEnterpriseId, String id, String name, Integer type) {
ServiceResponse resp = new ServiceResponse(); ServiceResponse resp = new ServiceResponse();
String renameQywxKey = null; String renameQywxKey = null;
Long order = null; Long order = null;
String relationId = null; String relationId = null;
//标签组 //标签组
if (type == QywxTagRelationTypeEnum.TAG_GROUP.getType()) { if (type == QywxTagRelationTypeEnum.TAG_GROUP.getType()) {
TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(wxEnterpriseId, id); TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(wxEnterpriseId, id);
if (null == tabQywxTag) { if (null == tabQywxTag) {
resp.setMessage("没有关联无需处理"); resp.setMessage("没有关联无需处理");
return resp; return resp;
} }
renameQywxKey = tabQywxTag.getQywxGroupKey(); renameQywxKey = tabQywxTag.getQywxGroupKey();
order = tabQywxTag.getOrder(); order = tabQywxTag.getOrder();
name = "GIC" + name; name = "GIC" + name;
relationId = tabQywxTag.getQywxTagId(); relationId = tabQywxTag.getQywxTagId();
} else if (type == QywxTagRelationTypeEnum.TAG_ITEM.getType()) { } else if (type == QywxTagRelationTypeEnum.TAG_ITEM.getType()) {
TabQywxTagItem qywxTagItem = qywxTagService.getQywxTagItemById(wxEnterpriseId, id); TabQywxTagItem qywxTagItem = qywxTagService.getQywxTagItemById(wxEnterpriseId, id);
if (null == qywxTagItem) { if (null == qywxTagItem) {
resp.setMessage("没有关联无需处理"); resp.setMessage("没有关联无需处理");
return resp; return resp;
} }
renameQywxKey = qywxTagItem.getQywxTagKey(); renameQywxKey = qywxTagItem.getQywxTagKey();
order = qywxTagItem.getOrder(); order = qywxTagItem.getOrder();
relationId = qywxTagItem.getQywxTagItemId(); relationId = qywxTagItem.getQywxTagItemId();
} }
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
//名称同步回去 //名称同步回去
QywxTagDTO qywxTagDTO = new QywxTagDTO(); QywxTagDTO qywxTagDTO = new QywxTagDTO();
qywxTagDTO.setId(renameQywxKey); qywxTagDTO.setId(renameQywxKey);
qywxTagDTO.setName(name); qywxTagDTO.setName(name);
qywxTagDTO.setOrder(order); qywxTagDTO.setOrder(order);
QywxResponseDTO responseDTO = qywxSuiteApiService.editCorpTagNameOrOrder(qwDTO.getThirdCorpid(), config.getWxSuiteid(), qywxTagDTO); QywxResponseDTO responseDTO = qywxSuiteApiService.editCorpTagNameOrOrder(qwDTO.getThirdCorpid(), config.getWxSuiteid(), qywxTagDTO);
logger.info("同步名称:{}", JSONObject.toJSONString(responseDTO)); logger.info("同步名称:{}", JSONObject.toJSONString(responseDTO));
if (responseDTO.getErrcode() != 0) { if (responseDTO.getErrcode() != 0) {
resp.setMessage(responseDTO.getErrmsg()); resp.setMessage(responseDTO.getErrmsg());
resp.setCode(responseDTO.getErrcode()); resp.setCode(responseDTO.getErrcode());
} }
qywxTagService.saveQywxTagOrTagItemName(relationId, name, type); qywxTagService.saveQywxTagOrTagItemName(relationId, name, type);
return resp; return resp;
} }
@Override @Override
public List<QywxTagRelationDTO> listQywxTagRelationByMemberTagId(String wxEnterpriseId, String memberTagId) { public List<QywxTagRelationDTO> listQywxTagRelationByMemberTagId(String wxEnterpriseId, String memberTagId) {
List<TabQywxTagRelation> tagRelations = qywxTagService.listQywxTagRelationByMemberTagId(wxEnterpriseId, memberTagId); List<TabQywxTagRelation> tagRelations = qywxTagService.listQywxTagRelationByMemberTagId(wxEnterpriseId, memberTagId);
return EntityUtil.changeEntityListByJSON(QywxTagRelationDTO.class, tagRelations); return EntityUtil.changeEntityListByJSON(QywxTagRelationDTO.class, tagRelations);
} }
@Override @Override
public QywxTagRelationDTO getQywxTagRelationByRelationId(String relationId) { public QywxTagRelationDTO getQywxTagRelationByRelationId(String relationId) {
TabQywxTagRelation tagRelation = qywxTagService.getQywxTagRelationById(relationId); TabQywxTagRelation tagRelation = qywxTagService.getQywxTagRelationById(relationId);
return EntityUtil.changeEntityByJSON(QywxTagRelationDTO.class, tagRelation); return EntityUtil.changeEntityByJSON(QywxTagRelationDTO.class, tagRelation);
} }
@Override @Override
public QywxTagInfoDTO getQywxTagByQywxTagId(String qywxTagId) { public QywxTagInfoDTO getQywxTagByQywxTagId(String qywxTagId) {
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 @Override
public void updateQywxTagRelationSyncStatusByTagItemId(String wxEnterpriseId, String tagItemId) { public void updateQywxTagRelationSyncStatusByTagItemId(String wxEnterpriseId, String tagItemId) {
qywxTagService.changeRelationSyncFlagByTagItemId(wxEnterpriseId, tagItemId, 2); qywxTagService.changeRelationSyncFlagByTagItemId(wxEnterpriseId, tagItemId, 2);
} }
@Override @Override
public void checkQywxSync(String params) { public void checkQywxSync(String params) {
List<TabHaobanWxEnterprise> wxEnterprises = wxEnterpriseService.listAll(); List<TabHaobanWxEnterprise> wxEnterprises = wxEnterpriseService.listAll();
wxEnterprises.forEach(wxEnterprise -> { wxEnterprises.forEach(wxEnterprise -> {
logger.info("企业:{}", wxEnterprise.getWxEnterpriseId()); logger.info("企业:{}", wxEnterprise.getWxEnterpriseId());
try { try {
List<TabQywxTagRelation> tagRelations = qywxTagService.listAllQywxRelation(wxEnterprise.getWxEnterpriseId()); List<TabQywxTagRelation> tagRelations = qywxTagService.listAllQywxRelation(wxEnterprise.getWxEnterpriseId());
if (CollectionUtils.isEmpty(tagRelations)) { if (CollectionUtils.isEmpty(tagRelations)) {
logger.info("无需校验: 没有要同步的企业"); logger.info("无需校验: 没有要同步的企业");
return; return;
} }
QywxSyncTagFormatPojo pojo = this.listSyncTagItems(wxEnterprise.getWxEnterpriseId()); QywxSyncTagFormatPojo pojo = this.listSyncTagItems(wxEnterprise.getWxEnterpriseId());
List<TabQywxTagRelation> qywxTagRelations = tagRelations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_GROUP.getType()).collect(Collectors.toList()); List<TabQywxTagRelation> qywxTagRelations = tagRelations.stream().filter(dto -> dto.getRelationType() == QywxTagRelationTypeEnum.TAG_GROUP.getType()).collect(Collectors.toList());
for (TabQywxTagRelation qywxTagRelation : qywxTagRelations) { for (TabQywxTagRelation qywxTagRelation : qywxTagRelations) {
Map<String, Object> map = checkQywxSyncByQywxTag(qywxTagRelation, wxEnterprise, pojo); Map<String, Object> map = checkQywxSyncByQywxTag(qywxTagRelation, wxEnterprise, pojo);
if (MapUtils.isNotEmpty(map)) { if (MapUtils.isNotEmpty(map)) {
logger.error("企微与好办同步标签不相同:{}", JSON.toJSONString(map)); logger.error("企微与好办同步标签不相同:{}", JSON.toJSONString(map));
} }
} }
} catch (Exception e) { } catch (Exception e) {
logger.info("校验异常:{}", e); logger.info("校验异常:{}", e);
} }
}); });
} }
/** /**
* 校验 * 校验
* *
* @param relation * @param relation
* @param wxEnterprise * @param wxEnterprise
*/ */
private LinkedHashMap<String, Object> checkQywxSyncByQywxTag(TabQywxTagRelation relation, TabHaobanWxEnterprise wxEnterprise, QywxSyncTagFormatPojo pojo) { private LinkedHashMap<String, Object> checkQywxSyncByQywxTag(TabQywxTagRelation relation, TabHaobanWxEnterprise wxEnterprise, QywxSyncTagFormatPojo pojo) {
LinkedHashMap<String, Object> ret = new LinkedHashMap<>(); LinkedHashMap<String, Object> ret = new LinkedHashMap<>();
boolean flag = false; boolean flag = false;
ret.put("hb标签id", relation.getQywxTagId()); ret.put("hb标签id", relation.getQywxTagId());
TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(relation.getWxEnterpriseId(), relation.getQywxTagId()); TabQywxTag tabQywxTag = qywxTagService.getQywxTagByQywxTagId(relation.getWxEnterpriseId(), relation.getQywxTagId());
if (null == tabQywxTag) { if (null == tabQywxTag) {
logger.info("数据库不存在该企业微信标签:{}", relation.getQywxTagId()); logger.info("数据库不存在该企业微信标签:{}", relation.getQywxTagId());
ret.put("描述", "标签数据库不存在:" + relation.getTagItemId()); ret.put("描述", "标签数据库不存在:" + relation.getTagItemId());
return ret; return ret;
} }
ret.put("名称(标签)", tabQywxTag.getQywxGroupName()); ret.put("名称(标签)", tabQywxTag.getQywxGroupName());
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(relation.getWxEnterpriseId()) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(relation.getWxEnterpriseId()) ;
List<String> ids = new ArrayList<>(); List<String> ids = new ArrayList<>();
ids.add(tabQywxTag.getQywxGroupKey()); ids.add(tabQywxTag.getQywxGroupKey());
QywxGetCorpTagListDTO tagDetail = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), ids, QywxTagRelationTypeEnum.TAG_GROUP.getType()); QywxGetCorpTagListDTO tagDetail = qywxSuiteApiService.getCorpTagList(qwDTO.getThirdCorpid(), config.getWxSuiteid(), ids, QywxTagRelationTypeEnum.TAG_GROUP.getType());
if (tagDetail.getErrcode() != 0) { if (tagDetail.getErrcode() != 0) {
logger.info("查询失败,无需操作:{}", JSONObject.toJSONString(tagDetail)); logger.info("查询失败,无需操作:{}", JSONObject.toJSONString(tagDetail));
ret.put("描述", "查询失败:" + tagDetail.getErrmsg()); ret.put("描述", "查询失败:" + tagDetail.getErrmsg());
return ret; return ret;
} }
if (CollectionUtils.isEmpty(tagDetail.getTagGroup())) { if (CollectionUtils.isEmpty(tagDetail.getTagGroup())) {
logger.info("标签组不存在:{}", JSONObject.toJSONString(tagDetail)); logger.info("标签组不存在:{}", JSONObject.toJSONString(tagDetail));
ret.put("描述", "标签组不存在:" + tabQywxTag.getQywxGroupName()); ret.put("描述", "标签组不存在:" + tabQywxTag.getQywxGroupName());
return ret; return ret;
} }
//获取该标签已经绑定的标签项key //获取该标签已经绑定的标签项key
Map<String, String> qywxToGicTagItemIdMap = pojo.getQywxToGicTagItemIdMap(); Map<String, String> qywxToGicTagItemIdMap = pojo.getQywxToGicTagItemIdMap();
List<TabQywxTagItem> gicQywxSyncTagItems = qywxTagService.listByQywxTagId(wxEnterprise.getWxEnterpriseId(), relation.getQywxTagId()); List<TabQywxTagItem> gicQywxSyncTagItems = qywxTagService.listByQywxTagId(wxEnterprise.getWxEnterpriseId(), relation.getQywxTagId());
Map<String, String> gicQywxTagNameMap = gicQywxSyncTagItems.stream().filter(tab -> qywxToGicTagItemIdMap.containsKey(tab.getQywxTagKey())).collect(Collectors.toMap(mid -> mid.getQywxTagKey(), mid -> mid.getQywxTagName())); Map<String, String> gicQywxTagNameMap = gicQywxSyncTagItems.stream().filter(tab -> qywxToGicTagItemIdMap.containsKey(tab.getQywxTagKey())).collect(Collectors.toMap(mid -> mid.getQywxTagKey(), mid -> mid.getQywxTagName()));
if (CollectionUtils.isEmpty(gicQywxSyncTagItems)) { if (CollectionUtils.isEmpty(gicQywxSyncTagItems)) {
logger.info("gic同步企业微信标签异常"); logger.info("gic同步企业微信标签异常");
ret.put("描述", "gic同步企业微信标签异常:" + tabQywxTag.getQywxGroupName()); ret.put("描述", "gic同步企业微信标签异常:" + tabQywxTag.getQywxGroupName());
return ret; return ret;
} }
Set<String> gicQywxKeysSet = gicQywxTagNameMap.keySet(); Set<String> gicQywxKeysSet = gicQywxTagNameMap.keySet();
//获取企业微信的标签项key //获取企业微信的标签项key
QywxTagGroupDTO qywxTagGroupDTO = tagDetail.getTagGroup().get(0); QywxTagGroupDTO qywxTagGroupDTO = tagDetail.getTagGroup().get(0);
List<QywxTagDTO> tagItems = qywxTagGroupDTO.getTag(); List<QywxTagDTO> tagItems = qywxTagGroupDTO.getTag();
if (CollectionUtils.isEmpty(tagItems)) { if (CollectionUtils.isEmpty(tagItems)) {
ret.put("描述", "企业微信标签项空:" + tabQywxTag.getQywxGroupName()); ret.put("描述", "企业微信标签项空:" + tabQywxTag.getQywxGroupName());
return ret; return ret;
} }
Map<String, QywxTagDTO> qywxTagDTOMap = tagItems.stream().collect(Collectors.toMap(dto -> dto.getId(), dto -> dto)); Map<String, QywxTagDTO> qywxTagDTOMap = tagItems.stream().collect(Collectors.toMap(dto -> dto.getId(), dto -> dto));
Set<String> qywxKeysSet = qywxTagDTOMap.keySet(); Set<String> qywxKeysSet = qywxTagDTOMap.keySet();
//gic没有同步的标签项 //gic没有同步的标签项
Map<String, String> gicToQywxTagItemIdMap = pojo.getGicToQywxTagItemIdMap(); Map<String, String> gicToQywxTagItemIdMap = pojo.getGicToQywxTagItemIdMap();
List<MemberTagItemDTO> gicTagItems = memberTagItemApiService.getItemListByTagId(relation.getMemberTagId()); List<MemberTagItemDTO> gicTagItems = memberTagItemApiService.getItemListByTagId(relation.getMemberTagId());
Set<MemberTagItemDTO> noSyncTags = gicTagItems.stream().filter(dto -> !gicToQywxTagItemIdMap.containsKey(dto.getTagItemId())).collect(Collectors.toSet()); Set<MemberTagItemDTO> noSyncTags = gicTagItems.stream().filter(dto -> !gicToQywxTagItemIdMap.containsKey(dto.getTagItemId())).collect(Collectors.toSet());
//在gic存在 企业微信不存在 //在gic存在 企业微信不存在
Sets.SetView<String> qywxUnHaves = Sets.difference(gicQywxKeysSet, qywxKeysSet); Sets.SetView<String> qywxUnHaves = Sets.difference(gicQywxKeysSet, qywxKeysSet);
//企业微信存在 gic不存在 //企业微信存在 gic不存在
Sets.SetView<String> gicUnHaves = Sets.difference(qywxKeysSet, gicQywxKeysSet); Sets.SetView<String> gicUnHaves = Sets.difference(qywxKeysSet, gicQywxKeysSet);
ret.put("现企微标签项", tagItems.stream().map(dto -> dto.getName()).collect(Collectors.joining("],[", "[", "]"))); ret.put("现企微标签项", tagItems.stream().map(dto -> dto.getName()).collect(Collectors.joining("],[", "[", "]")));
ret.put("现gic标签项", gicTagItems.stream().map(dto -> dto.getTagItemName()).collect(Collectors.joining("],[", "[", "]"))); ret.put("现gic标签项", gicTagItems.stream().map(dto -> dto.getTagItemName()).collect(Collectors.joining("],[", "[", "]")));
//企业微信缺少 //企业微信缺少
if (!CollectionUtils.isEmpty(qywxUnHaves)) { if (!CollectionUtils.isEmpty(qywxUnHaves)) {
flag = true; flag = true;
ret.put("标签项缺少(企微)", qywxUnHaves.stream().map(mid -> gicQywxTagNameMap.get(mid)).collect(Collectors.joining("],[", "[", "]"))); ret.put("标签项缺少(企微)", qywxUnHaves.stream().map(mid -> gicQywxTagNameMap.get(mid)).collect(Collectors.joining("],[", "[", "]")));
} }
//未同步标签项 //未同步标签项
if (!CollectionUtils.isEmpty(noSyncTags)) { if (!CollectionUtils.isEmpty(noSyncTags)) {
flag = true; flag = true;
ret.put("标签项未同步", noSyncTags.stream().map(mid -> mid.getTagItemName()).collect(Collectors.joining("],[", "[", "]"))); ret.put("标签项未同步", noSyncTags.stream().map(mid -> mid.getTagItemName()).collect(Collectors.joining("],[", "[", "]")));
} }
//gic缺少 //gic缺少
if (!CollectionUtils.isEmpty(gicUnHaves)) { if (!CollectionUtils.isEmpty(gicUnHaves)) {
flag = true; flag = true;
ret.put("标签项缺少(gic)", gicUnHaves.stream().map(id -> qywxTagDTOMap.get(id).getName()).collect(Collectors.joining("],[", "[", "]"))); ret.put("标签项缺少(gic)", gicUnHaves.stream().map(id -> qywxTagDTOMap.get(id).getName()).collect(Collectors.joining("],[", "[", "]")));
} }
if (flag) { if (flag) {
return ret; return ret;
} }
return null; return null;
} }
@Override @Override
public void qywxMarkTag(String param) { public void qywxMarkTag(String param) {
if (StringUtils.isBlank(param)) { if (StringUtils.isBlank(param)) {
logger.info("标签数据为空"); logger.info("标签数据为空");
return; return;
} }
logger.info("企微标签同步:{}",param); logger.info("企微标签同步:{}",param);
JSONObject jsonObject = JSON.parseObject(param); JSONObject jsonObject = JSON.parseObject(param);
String corpid = jsonObject.getString("corpid"); String corpid = jsonObject.getString("corpid");
String suiteId = jsonObject.getString("suiteId"); String suiteId = jsonObject.getString("suiteId");
String wxUserId = jsonObject.getString("wxUserId"); String wxUserId = jsonObject.getString("wxUserId");
String externalUserId = jsonObject.getString("externalUserId"); String externalUserId = jsonObject.getString("externalUserId");
String needSetTags = jsonObject.getString("needSetTags"); String needSetTags = jsonObject.getString("needSetTags");
String needDelTags = jsonObject.getString("needDelTags"); String needDelTags = jsonObject.getString("needDelTags");
String key = "HAOBAN:QYWX:TAG:" + wxUserId + externalUserId; String key = "HAOBAN:QYWX:TAG:" + wxUserId + externalUserId;
Integer currentTimes = Convert.toInt(RedisUtil.getCache(key), 0); Integer currentTimes = Convert.toInt(RedisUtil.getCache(key), 0);
if (currentTimes > MAX_TIMES) { if (currentTimes > MAX_TIMES) {
logger.error("企微打标签超过最大次数,key:{}", key); logger.error("企微打标签超过最大次数,key:{}", key);
return; return;
} }
List<String> needSetTagList = new ArrayList<>(); List<String> needSetTagList = new ArrayList<>();
List<String> needDelTagList = new ArrayList<>(); List<String> needDelTagList = new ArrayList<>();
if (StringUtils.isNotBlank(needSetTags)) { if (StringUtils.isNotBlank(needSetTags)) {
needSetTagList = Arrays.asList(needSetTags.split(",")); needSetTagList = Arrays.asList(needSetTags.split(","));
} }
if (StringUtils.isNotBlank(needDelTags)) { if (StringUtils.isNotBlank(needDelTags)) {
needDelTagList = Arrays.asList(needDelTags.split(",")); needDelTagList = Arrays.asList(needDelTags.split(","));
} }
QywxResponseDTO responseDTO = qywxUserApiService.markTag(corpid, suiteId, wxUserId, externalUserId, needSetTagList, needDelTagList); QywxResponseDTO responseDTO = qywxUserApiService.markTag(corpid, suiteId, wxUserId, externalUserId, needSetTagList, needDelTagList);
logger.info("操作返回:{}", JSONObject.toJSONString(responseDTO)); logger.info("操作返回:{}", JSONObject.toJSONString(responseDTO));
if (responseDTO.getErrcode() != 0) { if (responseDTO.getErrcode() != 0) {
logger.info("权限不对,重试三次:{},{}", wxUserId, externalUserId); logger.info("权限不对,重试三次:{},{}", wxUserId, externalUserId);
GicMQClient clientInstance = GICMQClientUtil.getClientInstance(); GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try { try {
clientInstance.sendMessage("qywxMarkTagMq", jsonObject.toJSONString(), 30); clientInstance.sendMessage("qywxMarkTagMq", jsonObject.toJSONString(), 30);
} catch (Exception e) { } catch (Exception e) {
logger.info("企微标签同步qywxMarkTagMq发送失败:{}", e.getMessage(), e); logger.info("企微标签同步qywxMarkTagMq发送失败:{}", e.getMessage(), e);
} }
RedisUtil.setCache(key, currentTimes + 1, 2L, TimeUnit.HOURS); RedisUtil.setCache(key, currentTimes + 1, 2L, TimeUnit.HOURS);
} }
} }
} }
...@@ -836,6 +836,9 @@ public class StaffApiServiceImpl implements StaffApiService { ...@@ -836,6 +836,9 @@ public class StaffApiServiceImpl implements StaffApiService {
//获取微信信息 //获取微信信息
String wxUserId = staff.getWxUserId(); String wxUserId = staff.getWxUserId();
if(qwDTO.needOpenUserIdDk()) {
wxUserId = staff.getWxOpenUseId() ;
}
UserDTO user = qywxUserApiService.getSelfWorkWxUser(qwDTO.getDkCorpid(), secretSetting.getSecretVal(), wxUserId); UserDTO user = qywxUserApiService.getSelfWorkWxUser(qwDTO.getDkCorpid(), secretSetting.getSecretVal(), wxUserId);
if (null == user) { if (null == user) {
logger.info("企业微信用户不存在:wxEnterpriseId:{}:wxUserId:{}", wxEnterpriseId, wxUserId); logger.info("企业微信用户不存在:wxEnterpriseId:{}:wxUserId:{}", wxEnterpriseId, wxUserId);
......
...@@ -373,7 +373,7 @@ public class HmLinkApiServiceImpl implements HmLinkApiService { ...@@ -373,7 +373,7 @@ public class HmLinkApiServiceImpl implements HmLinkApiService {
remarkMap.put("dthmKey", dthmKey); remarkMap.put("dthmKey", dthmKey);
if (null != dthmKey) { if (null != dthmKey) {
WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ; WxEnterpriseQwDTO qwDTO = this.wxEnterpriseService.getQwInfo(wxEnterpriseId) ;
ServiceResponse<String> addResp = this.addQrcode(hm, dthmKey, qwDTO.getThirdCorpid(), retDTO); ServiceResponse<String> addResp = this.addQrcode(hm, dthmKey, qwDTO, retDTO);
if (!addResp.isSuccess()) { if (!addResp.isSuccess()) {
remarkMap.put("sm", "创建动态活码失败,取单人活码"); remarkMap.put("sm", "创建动态活码失败,取单人活码");
if (StringUtils.isBlank(hm.getWxQrcode())) { if (StringUtils.isBlank(hm.getWxQrcode())) {
...@@ -425,7 +425,7 @@ public class HmLinkApiServiceImpl implements HmLinkApiService { ...@@ -425,7 +425,7 @@ public class HmLinkApiServiceImpl implements HmLinkApiService {
} }
// 创建活码 // 创建活码
private ServiceResponse<String> addQrcode(HmQrcodeBO hm, String key, String corpid, HmLinkWxaDTO retDTO) { private ServiceResponse<String> addQrcode(HmQrcodeBO hm, String key, WxEnterpriseQwDTO qwDTO, HmLinkWxaDTO retDTO) {
String limitQrcode = this.limitIp(hm); String limitQrcode = this.limitIp(hm);
if (StringUtils.isNotEmpty(limitQrcode)) { if (StringUtils.isNotEmpty(limitQrcode)) {
return ServiceResponse.failure(HaoBanErrCode.ERR_OTHER.getCode(), "超限制数"); return ServiceResponse.failure(HaoBanErrCode.ERR_OTHER.getCode(), "超限制数");
...@@ -439,11 +439,15 @@ public class HmLinkApiServiceImpl implements HmLinkApiService { ...@@ -439,11 +439,15 @@ public class HmLinkApiServiceImpl implements HmLinkApiService {
paramsDTO.setState("DT" + key); paramsDTO.setState("DT" + key);
TabHaobanStaff tabHaobanStaff = staffService.selectById(hm.getStaffId()); TabHaobanStaff tabHaobanStaff = staffService.selectById(hm.getStaffId());
if (tabHaobanStaff != null) { if (tabHaobanStaff != null) {
paramsDTO.setUser(Arrays.asList(tabHaobanStaff.getWxUserId())); if(qwDTO.needOpenUserId3th()) {
paramsDTO.setUser(Arrays.asList(tabHaobanStaff.getWxOpenUseId()));
}else {
paramsDTO.setUser(Arrays.asList(tabHaobanStaff.getWxUserId()));
}
} }
QywxExternalcontactResultDTO wxResp = qywxUserApiService.addContactWay(corpid, config.getWxSuiteid(), QywxExternalcontactResultDTO wxResp = qywxUserApiService.addContactWay(qwDTO.getThirdCorpid(), config.getWxSuiteid(),
paramsDTO); paramsDTO);
log.info("创建动态活码参数corpid={},app={},param={},返回={}", corpid, config.getWxSuiteid(), JSON.toJSONString(paramsDTO), log.info("创建动态活码参数corpid={},app={},param={},返回={}", qwDTO.getThirdCorpid(), config.getWxSuiteid(), JSON.toJSONString(paramsDTO),
JSON.toJSONString(wxResp)); JSON.toJSONString(wxResp));
if (null != wxResp && 0 == wxResp.getErrcode()) { if (null != wxResp && 0 == wxResp.getErrcode()) {
retDTO.setHmQrcode(wxResp.getQr_code()); retDTO.setHmQrcode(wxResp.getQr_code());
...@@ -452,7 +456,7 @@ public class HmLinkApiServiceImpl implements HmLinkApiService { ...@@ -452,7 +456,7 @@ public class HmLinkApiServiceImpl implements HmLinkApiService {
qo.setWxConfigId(wxResp.getConfig_id()); qo.setWxConfigId(wxResp.getConfig_id());
qo.setWxQrcode(wxResp.getQr_code()); qo.setWxQrcode(wxResp.getQr_code());
qo.setRelationId(key); qo.setRelationId(key);
qo.setCorpid(corpid); qo.setCorpid(qwDTO.getThirdCorpid());
this.hmQrcodeTempService.save(qo); this.hmQrcodeTempService.save(qo);
return ServiceResponse.success(wxResp.getQr_code()); return ServiceResponse.success(wxResp.getQr_code());
} }
......
...@@ -30,133 +30,7 @@ ...@@ -30,133 +30,7 @@
haoban_friend_flag, external_head_url, status_flag, handover_transfer_id, takeover_time, haoban_friend_flag, external_head_url, status_flag, handover_transfer_id, takeover_time,
transfer_status, transfer_time, create_time, update_time transfer_status, transfer_time, create_time, update_time
</sql> </sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from tab_haoban_handover_external
where handover_external_id = #{handoverExternalId,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from tab_haoban_handover_external
where handover_external_id = #{handoverExternalId,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="com.gic.haoban.manage.service.entity.TabHandoverExternal">
insert into tab_haoban_handover_external (handover_external_id, wx_enterprise_id,
staff_id, user_id, external_user_id,
external_user_name,relation_id, haoban_friend_flag, external_head_url,
status_flag, handover_transfer_id, takeover_time,
transfer_status, transfer_time, create_time,
update_time)
values (#{handoverExternalId,jdbcType=VARCHAR}, #{wxEnterpriseId,jdbcType=VARCHAR},
#{staffId,jdbcType=VARCHAR}, #{userId,jdbcType=VARCHAR}, #{externalUserId,jdbcType=VARCHAR},
#{externalUserName,jdbcType=VARCHAR},#{relationId}, #{haobanFriendFlag,jdbcType=INTEGER}, #{externalHeadUrl,jdbcType=VARCHAR},
#{statusFlag,jdbcType=INTEGER}, #{handoverTransferId,jdbcType=VARCHAR}, #{takeoverTime,jdbcType=TIMESTAMP},
#{transferStatus}, #{transferTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP},
#{updateTime,jdbcType=TIMESTAMP})
</insert>
<insert id="insertSelective" parameterType="com.gic.haoban.manage.service.entity.TabHandoverExternal">
insert into tab_haoban_handover_external
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="handoverExternalId != null">
handover_external_id,
</if>
<if test="wxEnterpriseId != null">
wx_enterprise_id,
</if>
<if test="staffId != null">
staff_id,
</if>
<if test="userId != null">
user_id,
</if>
<if test="externalUserId != null">
external_user_id,
</if>
<if test="externalUserName != null">
external_user_name,
</if>
<if test="relationId != null">
relation_id,
</if>
<if test="haobanFriendFlag != null">
haoban_friend_flag,
</if>
<if test="externalHeadUrl != null">
external_head_url,
</if>
<if test="statusFlag != null">
status_flag,
</if>
<if test="handoverTransferId != null">
handover_transfer_id,
</if>
<if test="takeoverTime != null">
takeover_time,
</if>
<if test="transferStatus != null">
transfer_status,
</if>
<if test="transferTime != null">
transfer_time,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="handoverExternalId != null">
#{handoverExternalId,jdbcType=VARCHAR},
</if>
<if test="wxEnterpriseId != null">
#{wxEnterpriseId,jdbcType=VARCHAR},
</if>
<if test="staffId != null">
#{staffId,jdbcType=VARCHAR},
</if>
<if test="userId != null">
#{userId,jdbcType=VARCHAR},
</if>
<if test="externalUserId != null">
#{externalUserId,jdbcType=VARCHAR},
</if>
<if test="externalUserName != null">
#{externalUserName,jdbcType=VARCHAR},
</if>
<if test="relationId != null">
#{relationId,jdbcType=VARCHAR},
</if>
<if test="haobanFriendFlag != null">
#{haobanFriendFlag,jdbcType=INTEGER},
</if>
<if test="externalHeadUrl != null">
#{externalHeadUrl,jdbcType=VARCHAR},
</if>
<if test="statusFlag != null">
#{statusFlag,jdbcType=INTEGER},
</if>
<if test="handoverTransferId != null">
#{handoverTransferId,jdbcType=VARCHAR},
</if>
<if test="takeoverTime != null">
#{takeoverTime,jdbcType=TIMESTAMP},
</if>
<if test="transferStatus != null">
#{transferStatus},
</if>
<if test="transferTime != null">
#{transferTime,jdbcType=TIMESTAMP},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.gic.haoban.manage.service.entity.TabHandoverExternal"> <update id="updateByPrimaryKeySelective" parameterType="com.gic.haoban.manage.service.entity.TabHandoverExternal">
update tab_haoban_handover_external update tab_haoban_handover_external
<set> <set>
...@@ -208,25 +82,6 @@ ...@@ -208,25 +82,6 @@
</set> </set>
where handover_external_id = #{handoverExternalId,jdbcType=VARCHAR} where handover_external_id = #{handoverExternalId,jdbcType=VARCHAR}
</update> </update>
<update id="updateByPrimaryKey" parameterType="com.gic.haoban.manage.service.entity.TabHandoverExternal">
update tab_haoban_handover_external
set wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR},
staff_id = #{staffId,jdbcType=VARCHAR},
user_id = #{userId,jdbcType=VARCHAR},
external_user_id = #{externalUserId,jdbcType=VARCHAR},
external_user_name = #{externalUserName,jdbcType=VARCHAR},
relation_id = #{relationId,jdbcType=VARCHAR},
haoban_friend_flag = #{haobanFriendFlag,jdbcType=INTEGER},
external_head_url = #{externalHeadUrl,jdbcType=VARCHAR},
status_flag = #{statusFlag,jdbcType=INTEGER},
handover_transfer_id = #{handoverTransferId,jdbcType=VARCHAR},
takeover_time = #{takeoverTime,jdbcType=TIMESTAMP},
transfer_status = #{transferStatus},
transfer_time = #{transferTime,jdbcType=TIMESTAMP},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where handover_external_id = #{handoverExternalId,jdbcType=VARCHAR}
</update>
<insert id="insertBatch"> <insert id="insertBatch">
insert into tab_haoban_handover_external (handover_external_id, wx_enterprise_id, insert into tab_haoban_handover_external (handover_external_id, wx_enterprise_id,
......
...@@ -1225,6 +1225,9 @@ public class ClerkController extends WebBaseController { ...@@ -1225,6 +1225,9 @@ public class ClerkController extends WebBaseController {
return RestResponse.failure(String.valueOf(code), HaoBanErrCode.ERR_400002.getMsg()); return RestResponse.failure(String.valueOf(code), HaoBanErrCode.ERR_400002.getMsg());
} }
String wxUserId = staffDTO.getWxUserId(); String wxUserId = staffDTO.getWxUserId();
if(qwDTO.needOpenUserId3th()) {
wxUserId = staffDTO.getWxOpenUseId() ;
}
String openid = qywxUserApiService.getSelfOpenIdByUserId(qwDTO.getThirdCorpid(), config.getWxSuiteid(), wxUserId); String openid = qywxUserApiService.getSelfOpenIdByUserId(qwDTO.getThirdCorpid(), config.getWxSuiteid(), wxUserId);
if (StringUtils.isBlank(openid)) { if (StringUtils.isBlank(openid)) {
int code = HaoBanErrCode.ERR_600003.getCode(); int code = HaoBanErrCode.ERR_600003.getCode();
......
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