Commit 6a0c678f by 墨竹

Merge branch 'feature-0323' into developer

parents 58b45e48 6043b5bd
package com.gic.haoban.manage.service.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.dto.ClerkListDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.StoreGroupService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.base.api.common.Constant;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.DealSyncOperationApiService;
import com.gic.haoban.manage.api.service.DepartmentApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanDepartment;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.DepartmentService;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Created 2020/4/13.
*
* @author hua
*/
@Service
@Deprecated
public class ClerkSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(ClerkSyncOperation.class);
@Autowired
private DepartmentService departmentService;
@Autowired
private StoreGroupService storeGroupService;
@Autowired
private PreDealService preDealService;
@Autowired
private DepartmentApiService departmentApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private StoreService storeService;
@Autowired
private ClerkService clerkService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private DealSyncOperationApiService dealSyncOperationApiService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("成员处理:{}", JSONObject.toJSONString(dealParamMqDTO));
ClerkDTO clerkDTO = clerkService.getClerkByClerkIdNodel(dealParamMqDTO.getData());
String reason = "";
boolean dealFlag = true;
if (clerkDTO == null) {
logger.info("成员不存在:t:{},d:{}", dealParamMqDTO.getTaskId(), dealParamMqDTO.getData());
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), "成员不存在");
return;
}
//处理clerk
try {
GicClerkDTO gicClerkDTO = new GicClerkDTO();
gicClerkDTO.setNationcode(clerkDTO.getNationcode());
gicClerkDTO.setClerkCode(clerkDTO.getClerkCode());
gicClerkDTO.setPostionName(clerkDTO.getPositionName());
gicClerkDTO.setHeadImgUrl(clerkDTO.getHeadImgUrl());
gicClerkDTO.setPhoneNumber(clerkDTO.getPhoneNumber());
gicClerkDTO.setStatus(clerkDTO.getStatus());
if (!StringUtils.isBlank(clerkDTO.getClerkGender())) {
gicClerkDTO.setClerkGender(Integer.valueOf(clerkDTO.getClerkGender()));
}
gicClerkDTO.setClerkName(clerkDTO.getClerkName());
gicClerkDTO.setStoreId(clerkDTO.getStoreId());
gicClerkDTO.setEnterpriseId(clerkDTO.getEnterpriseId());
ServiceResponse response = staffApiService.saveSyncStaffByGic(gicClerkDTO);
if (response.getCode() != 1) {
reason = response.getMessage();
dealFlag = false;
}
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:", JSONObject.toJSONString(dataPre));
reason = "成员处理异常";
dealFlag = false;
} finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason);
} else {
dealSuccess(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dataPre.getWxEnterpriseId());
}
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
logger.info("成员处理失败:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
if (!b) {
logger.info("成员处理异常:t:{}, d:{}", taskId, dataId);
return;
}
checkDepartmentTask(taskId);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
logger.info("成员处理成功:t:{},d:{}", taskId, dataId);
boolean b = preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
if (!b) {
logger.info("成功修改错误!{}", dataId);
return;
}
checkDepartmentTask(taskId);
}
@Override
public void checkDepartmentTask(String taskId) {
boolean b = preDealService.checkTask(taskId, PreDealTypeEnum.clerk.getVal());
if (!b) {
return;
}
logger.info("店员同步成功:{}", taskId);
String key = "haoban_sync_clerk_task_" + taskId;
RedisUtil.lock(key, 3L);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
//同步成功 进入门店处理
if (syncTask.getStatusFlag().equals(SyncTaskStatusEnum.clerk_sync.getVal())) {
int errCount = preDealService.countByTaskId(taskId, -1, PreDealStatusEnum.exception.getVal());
if (errCount > 0) {
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_compute.getVal());
} else {
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
dealSyncOperationApiService.unlockTask(syncTask.getWxEnterpriseId());
}
}
RedisUtil.unlock(key);
}
}
package com.gic.haoban.manage.service.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@Deprecated
public class FriendClerkSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendClerkSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("dealParamMqDTO={},dataPre={}",JSON.toJSONString(dealParamMqDTO),JSON.toJSONString(dataPre));
String reason = "";
boolean dealFlag = true;
String taskId = dealParamMqDTO.getTaskId();
try {
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getDataId();
List<String> selfUserIdList = memberUnionidRelatedApiService.listSelfExterialList(wxEnterpriseId, wxUserId);
logger.info("selfUserIdList={}",selfUserIdList.size());
List<String> userIdList = memberUnionidRelatedApiService.listExterialList(wxEnterpriseId, wxUserId);
if(CollectionUtils.isEmpty(userIdList) || CollectionUtils.isEmpty(selfUserIdList)){
return;
}
memberUnionidRelatedApiService.cleanNoExsitFriend(wxEnterpriseId, wxUserId,JSON.toJSONString(userIdList));
logger.info("userIdList={}",userIdList.size());
if(CollectionUtils.isNotEmpty(selfUserIdList)){
List<TabHaobanPreDealLog> dealLogList = selfUserIdList.stream().map(externalUserId -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(externalUserId +"-"+ wxUserId);
dealLog.setpDataId(dataPre.getDataId());
dealLog.setDataType(PreDealTypeEnum.self_friend.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(dataPre.getTaskId());
dealLog.setDataContent(externalUserId);
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(dataPre.getTaskId(), hashSet, SyncTaskStatusEnum.self_friend_sync);
}
if(CollectionUtils.isNotEmpty(userIdList)){
List<TabHaobanPreDealLog> dealLogList = userIdList.stream().map(externalUserId -> {
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(externalUserId +"-"+ wxUserId);
dealLog.setpDataId(dataPre.getDataId());
dealLog.setDataType(PreDealTypeEnum.friend.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(dataPre.getTaskId());
dealLog.setDataContent(externalUserId);
dealLog.setWxEnterpriseId(wxEnterpriseId);
return dealLog;
}).collect(Collectors.toList());
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(dataPre.getTaskId(), hashSet, SyncTaskStatusEnum.friend_sync);
}
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre),e);
reason = "成员好友处理异常";
dealFlag = false;
}finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason);
} else {
dealSuccess(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), dataPre.getWxEnterpriseId());
}
// checkDepartmentTask(taskId);
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
}
@Override
public void checkDepartmentTask(String taskId) {
String key = "sync_wx_lock_";
boolean b = preDealService.checkTask(taskId, PreDealTypeEnum.friend_clerk.getVal());
if (!b) {
return;
}
logger.info("好友同步成功:{}", taskId);
TabHaobanSyncTask syncTask = syncTaskService.getSyncTask(taskId);
//同步成功 进入门店处理
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
RedisUtil.delCache(key + syncTask.getWxEnterpriseId());
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
dealList.forEach(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("departmentSyncDealMq", JSONObject.toJSONString(dealParamMqDTO));
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId, relationId);
e.printStackTrace();
}
});
}
}
package com.gic.haoban.manage.service.task;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.entity.TabHaobanSyncTask;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.redis.data.util.RedisUtil;
@Service
@Deprecated
public class FriendMergeSyncOperation implements BaseSyncOperation{
private static final Logger logger = LoggerFactory.getLogger(FriendMergeSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkService clerkService;
@Autowired
private PowerService powerService;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String reason = "";
boolean dealFlag = true;
String wxUserId = dataPre.getpDataId();
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String taskId = dealParamMqDTO.getTaskId();
String key = dataPre.getDataId();
try {
String dataContent = dataPre.getDataContent();
ExternalUserDTO pojo = JSON.parseObject(dataContent, ExternalUserDTO.class);
StaffDTO staff = staffApiService.selectByUserIdAndEnterpriseId(wxUserId, wxEnterpriseId);
if(staff == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "成员不存在");
checkDepartmentTask(taskId);
return;
}
ClerkMainStoreRelatedDTO mainStore = clerkMainStoreRelatedApiService.getWxEnterpriseIdAndStaffId(wxEnterpriseId, staff.getStaffId());
if(mainStore == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "主门店不存在");
checkDepartmentTask(taskId);
return;
}
StaffClerkRelationDTO staffClerkRelationDTO = staffClerkRelationService.getOneBindByStoreId(staff.getStaffId(),mainStore.getStoreId());
if(staffClerkRelationDTO == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "未绑定导购");
checkDepartmentTask(taskId);
return;
}
if(pojo == null){
dealException(taskId, key, null, "好友不存在");
checkDepartmentTask(taskId);
return;
}
pojo.setWxEnterpriseId(wxEnterpriseId);
pojo.setEnterpriseId(staffClerkRelationDTO.getEnterpriseId());
pojo.setStoreId(mainStore.getStoreId());
pojo.setClerkId(staffClerkRelationDTO.getClerkId());
pojo.setWxUserId(wxUserId);
pojo.setStaffId(staffClerkRelationDTO.getStaffId());
String externalUserId = pojo.getExternalUserId();
ExternalUserDTO p = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if(p == null){
dealException(taskId, key, null, "好友不存在");
checkDepartmentTask(taskId);
return;
}
pojo.setAvatar(p.getAvatar());
//新增导购和外部联系人关系
String clerkCode = staffClerkRelationDTO.getClerkCode();
ClerkDTO clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
if(clerk == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "导购不存在");
checkDepartmentTask(taskId);
return;
}
String qrcodeParam = clerk.getQrcodeParam();
if(StringUtils.isBlank(qrcodeParam)){
powerService.saveClerkQrCode(clerk.getClerkId());
clerk = clerkService.getClerkByClerkCode(staffClerkRelationDTO.getEnterpriseId(), clerkCode);
qrcodeParam = clerk.getQrcodeParam();
}
if(StringUtils.isBlank(qrcodeParam)){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "导购码不存在");
checkDepartmentTask(taskId);
return;
}
MemberDTO member = null;
if(clerk != null && StringUtils.isNotBlank(qrcodeParam)&&StringUtils.isNotBlank(pojo.getUnionId())){
member = memberOpenCardBusinessService.getMemberByQywxChannelParam(staffClerkRelationDTO.getEnterpriseId(),pojo.getUnionId(),"",pojo.getName(),pojo.getAvatar(),qrcodeParam);
}
if(member == null){
preDealService.updateStatusByDataId(taskId, key, PreDealStatusEnum.exception.getVal(), "会员不存在");
checkDepartmentTask(taskId);
return;
}
pojo.setMemberId(member.getMemberId());
String res = memberUnionidRelatedApiService.addExternal(pojo);
if(StringUtils.isBlank(res)){
dealSuccess(dealParamMqDTO.getTaskId(), dataPre.getDataId(), null, null);
}else{
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), "好友不存在");
}
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre),e);
reason = "合并处理异常";
dealFlag = false;
}finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dealParamMqDTO.getData(), dataPre.getEnterpriseId(), reason);
}
checkDepartmentTask(taskId);
}
//
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String enterpriseId, String wxEnterpriseId) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功");
}
@Override
public void checkDepartmentTask(String taskId) {
boolean b = preDealService.checkTask(taskId, PreDealTypeEnum.friend_merge.getVal());
if (!b) {
return;
}
logger.info("好友合并成功:{}", taskId);
int errorCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.friend_merge.getVal(), 3);
int errorSelfCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.self_friend.getVal(), 3);
int errorFriendCount = preDealService.countByTaskId(taskId, PreDealTypeEnum.friend.getVal(), 3);
if(errorCount > 0 || errorFriendCount > 0 || errorSelfCount > 0){
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.exception_compute.getVal());
}else{
syncTaskService.updateTaskStatus(taskId, SyncTaskStatusEnum.compute.getVal());
}
}
}
package com.gic.haoban.manage.service.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.mq.sdk.GicMQClient;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Deprecated
public class FriendSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(FriendSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String reason = "";
boolean dealFlag = true;
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId();
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent();
ExternalUserDTO pojo = memberUnionidRelatedApiService.getExternalUseridInfo(wxEnterpriseId, wxUserId, externalUserId);
if(pojo == null){
preDealService.updateStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.exception.getVal(), "好友不存在");
checkStaffTask(taskId, wxUserId);
return;
}
JSONObject json = new JSONObject();
json.put("name", pojo.getName());
json.put("externalUserId", pojo.getExternalUserId());
json.put("addCreateTime", pojo.getAddCreateTime());
dealSuccess(taskId, dataPre.getDataId(),JSON.toJSONString(json),wxEnterpriseId);
try {
checkStaffTask(taskId, wxUserId);
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre),e);
reason = "第三方好友处理异常";
dealFlag = false;
}finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getEnterpriseId(), reason);
}
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功",dataContent);
}
public void checkStaffTask(String taskId,String wxUserId) {
boolean flag = preDealService.checkStaffTaskByTaskIdAndPDataId(taskId,wxUserId);
logger.info("checkStaffTask={}",flag);
if(flag){
List<TabHaobanPreDealLog> list = preDealService.listByPDataIdAndTaskId(taskId, wxUserId);
if(CollectionUtils.isNotEmpty(list)){
Map<String,ExternalUserDTO> map = new HashMap<>();
List<TabHaobanPreDealLog> dealLogList = new ArrayList<>();
for (TabHaobanPreDealLog tabHaobanPreDealLog : list) {
String dataContent = tabHaobanPreDealLog.getDataContent();
if(StringUtils.isNotBlank(dataContent) && dataContent.startsWith("{")){
ExternalUserDTO json = JSON.parseObject(dataContent, ExternalUserDTO.class);
String addCreateTime = json.getAddCreateTime();
String name = json.getName();
String key = name +"-"+wxUserId +"-"+ addCreateTime;
String unionId = json.getUnionId();
String wxEnterpriseId = tabHaobanPreDealLog.getWxEnterpriseId();
String externalUserId = json.getExternalUserId();
ExternalUserDTO dto = map.get(key);
if(dto != null){
if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.self_friend.getVal()){
dto.setUnionId(unionId);
}else if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.friend.getVal()){
dto.setExternalUserId(externalUserId);
}
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(key);
dealLog.setpDataId(wxUserId);
dealLog.setDataType(PreDealTypeEnum.friend_merge.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLogList.add(dealLog);
}else{
map.put(key, json);
}
}
}
logger.info("dealLogList={}",JSON.toJSONString(dealLogList));
if(CollectionUtils.isNotEmpty(dealLogList)){
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.merge_friend_sync);
}
}
}
}
@Override
public void checkDepartmentTask(String taskId) {
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
dealList.forEach(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("departmentSyncDealMq", JSONObject.toJSONString(dealParamMqDTO));
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId, relationId);
e.printStackTrace();
}
});
}
}
...@@ -40,8 +40,8 @@ import java.util.stream.Collectors; ...@@ -40,8 +40,8 @@ import java.util.stream.Collectors;
* @author hua * @author hua
*/ */
@Service @Service
public class QywxClerkSyncOperation implements BaseSyncOperation { public class QywxStaffSyncOperation implements BaseSyncOperation {
private static final Logger logger = LoggerFactory.getLogger(QywxClerkSyncOperation.class); private static final Logger logger = LoggerFactory.getLogger(QywxStaffSyncOperation.class);
@Autowired @Autowired
private PreDealService preDealService; private PreDealService preDealService;
......
package com.gic.haoban.manage.service.task;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.clerk.api.dto.ClerkDTO;
import com.gic.clerk.api.service.ClerkService;
import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.dto.ClerkMainStoreRelatedDTO;
import com.gic.haoban.manage.api.dto.DealParamMqDTO;
import com.gic.haoban.manage.api.dto.ExternalUserDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;
import com.gic.haoban.manage.api.dto.StaffDTO;
import com.gic.haoban.manage.api.enums.PreDealStatusEnum;
import com.gic.haoban.manage.api.enums.PreDealTypeEnum;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;
import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService;
import com.gic.member.api.dto.MemberDTO;
import com.gic.member.api.service.MemberOpenCardBusinessService;
import com.gic.mq.sdk.GicMQClient;
@Service
@Deprecated
public class SelfFriendSyncOperation implements BaseSyncOperation{
private static final Logger logger = LoggerFactory.getLogger(SelfFriendSyncOperation.class);
@Autowired
private PreDealService preDealService;
@Autowired
private MemberUnionidRelatedApiService memberUnionidRelatedApiService;
@Autowired
private SyncTaskService syncTaskService;
@Autowired
private ClerkMainStoreRelatedApiService clerkMainStoreRelatedApiService;
@Autowired
private StaffApiService staffApiService;
@Autowired
private StaffClerkRelationService staffClerkRelationService;
@Autowired
private ClerkService clerkService;
@Autowired
private PowerService powerService;
@Autowired
private MemberOpenCardBusinessService memberOpenCardBusinessService;
@Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
String reason = "";
boolean dealFlag = true;
String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId();
String taskId = dealParamMqDTO.getTaskId();
String externalUserId = dataPre.getDataContent();
ExternalUserDTO pojo = memberUnionidRelatedApiService.getCorpSelfExternalUseridInfo(wxEnterpriseId,wxUserId, externalUserId);
if(pojo == null){
dealException(taskId, dataPre.getDataId(), null, "好友不存在");
checkStaffTask(taskId, wxUserId);
return;
}
JSONObject json = new JSONObject();
json.put("name", pojo.getName());
json.put("unionId", pojo.getUnionId());
json.put("addCreateTime", pojo.getAddCreateTime());
try {
dealSuccess(taskId, dataPre.getDataId(),json.toJSONString(),wxEnterpriseId);
checkStaffTask(taskId, wxUserId);
} catch (Exception e) {
e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre),e);
reason = "自建应用好友处理异常";
dealFlag = false;
}finally {
if (!dealFlag) {
dealException(dealParamMqDTO.getTaskId(), dataPre.getDataId(), dataPre.getEnterpriseId(), reason);
}
}
}
@Override
public void dealException(String taskId, String dataId, String enterpriseId, String reason) {
preDealService.updateStatusByDataId(taskId, dataId, PreDealStatusEnum.exception.getVal(), reason);
}
@Override
public void dealSuccess(String taskId, String dataId, String dataContent, String wxEnterpriseId) {
preDealService.updateFriendStatusByDataId(taskId, dataId, PreDealStatusEnum.computed.getVal(), "成功",dataContent);
}
public void checkStaffTask(String taskId,String wxUserId) {
boolean flag = preDealService.checkStaffTaskByTaskIdAndPDataId(taskId,wxUserId);
logger.info("checkStaffTask={}",flag);
if(flag){
List<TabHaobanPreDealLog> list = preDealService.listByPDataIdAndTaskId(taskId, wxUserId);
if(CollectionUtils.isNotEmpty(list)){
List<TabHaobanPreDealLog> dealLogList = new ArrayList<>();
Map<String,ExternalUserDTO> map = new HashMap<>();
for (TabHaobanPreDealLog tabHaobanPreDealLog : list) {
String dataContent = tabHaobanPreDealLog.getDataContent();
if(StringUtils.isNotBlank(dataContent) && dataContent.startsWith("{")){
ExternalUserDTO json = JSON.parseObject(dataContent, ExternalUserDTO.class);
String addCreateTime = json.getAddCreateTime();
String name = json.getName();
String key = name +"-" +wxUserId +"-"+ addCreateTime;
String unionId = json.getUnionId();
String wxEnterpriseId = tabHaobanPreDealLog.getWxEnterpriseId();
ExternalUserDTO dto = map.get(key);
if(dto != null){
if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.self_friend.getVal()){
dto.setUnionId(unionId);
}else if(tabHaobanPreDealLog.getDataType() == PreDealTypeEnum.friend.getVal()){
dto.setExternalUserId(tabHaobanPreDealLog.getDataId());
}
TabHaobanPreDealLog dealLog = new TabHaobanPreDealLog();
dealLog.setDataId(key);
dealLog.setpDataId(wxUserId);
dealLog.setDataType(PreDealTypeEnum.friend_merge.getVal());
dealLog.setStatusFlag(0);
dealLog.setTaskId(taskId);
dealLog.setDataContent(JSONObject.toJSONString(dto));
dealLog.setWxEnterpriseId(wxEnterpriseId);
dealLogList.add(dealLog);
}else{
map.put(key, json);
}
}
}
logger.info("dealLogList={}",JSON.toJSONString(dealLogList));
if(CollectionUtils.isNotEmpty(dealLogList)){
preDealService.insert(dealLogList);
HashSet<String> hashSet = (HashSet<String>) dealLogList.stream().map(TabHaobanPreDealLog::getDataId).collect(Collectors.toSet());
dealDepartmentToMq(taskId, hashSet, SyncTaskStatusEnum.merge_friend_sync);
}
}
}
}
@Override
public void checkDepartmentTask(String taskId) {
}
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
dealList.forEach(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("departmentSyncDealMq", JSONObject.toJSONString(dealParamMqDTO));
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId, relationId);
e.printStackTrace();
}
});
}
public static void main(String[] args) {
String res = "{'clerkId':'b160eb9a3daf4b3da936b678f1b06744','enterpriseId':'ff8080815dacd3a2015dacd3ef5c0000','externalUserId':'wm59NLDQAAY5Q4pABXAfaTJ6mORvpw','name':'hzw','storeId':'ff8080815695df44015697ada25b0102','wxEnterpriseId':'ca66a01b79474c40b3e7c7f93";
System.err.println(JSON.parseObject(res, ExternalUserDTO.class));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment