Commit 3cf28e59 by fudahua

导购刷新好友超时时间

parent be8586c3
package com.gic.haoban.manage.service.exception;
/**
* Created 2021/3/31.
*
* @author hua
*/
public class WxApiLimitException extends RuntimeException {
public WxApiLimitException(String message) {
super(message);
}
}
...@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONObject;
import com.gic.haoban.base.api.common.ServiceResponse; import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.*; import com.gic.haoban.manage.api.dto.*;
import com.gic.haoban.manage.api.enums.SecretTypeEnum; import com.gic.haoban.manage.api.enums.SecretTypeEnum;
import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.*; import com.gic.haoban.manage.service.service.*;
import com.gic.wechat.api.dto.qywx.QywxIinkExternalMessageDTO; import com.gic.wechat.api.dto.qywx.QywxIinkExternalMessageDTO;
import com.gic.wechat.api.dto.qywx.QywxImageExternalMessageDTO; import com.gic.wechat.api.dto.qywx.QywxImageExternalMessageDTO;
...@@ -869,10 +870,13 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA ...@@ -869,10 +870,13 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
} }
// String uJ = qywxUserApiService.getExternalUseridInfo(wxEnterprise.getCorpid(), "wwb3ef71aa8c6d9c06", externalUserId); // String uJ = qywxUserApiService.getExternalUseridInfo(wxEnterprise.getCorpid(), "wwb3ef71aa8c6d9c06", externalUserId);
String uJ = qywxUserApiService.getExternalUseridInfo(wxEnterprise.getCorpid(), config.getWxSuiteid(), externalUserId); String uJ = qywxUserApiService.getExternalUseridInfo(wxEnterprise.getCorpid(), config.getWxSuiteid(), externalUserId);
if(StringUtils.isBlank(uJ)){ if(StringUtils.isBlank(uJ)){
log.info("好友不存在"); log.info("好友不存在");
return null; return null;
} } else if (uJ.equals("1")) {
log.info("限制次数");
throw new WxApiLimitException("getExternalUseridInfo接口次数限制");
}
String name = ""; String name = "";
String createTime = ""; String createTime = "";
String avatar = ""; String avatar = "";
......
...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService; ...@@ -15,6 +15,7 @@ import com.gic.haoban.manage.api.service.ClerkMainStoreRelatedApiService;
import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService; import com.gic.haoban.manage.api.service.MemberUnionidRelatedApiService;
import com.gic.haoban.manage.api.service.StaffApiService; import com.gic.haoban.manage.api.service.StaffApiService;
import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog; import com.gic.haoban.manage.service.entity.TabHaobanPreDealLog;
import com.gic.haoban.manage.service.exception.WxApiLimitException;
import com.gic.haoban.manage.service.service.PreDealService; import com.gic.haoban.manage.service.service.PreDealService;
import com.gic.haoban.manage.service.service.StaffClerkRelationService; import com.gic.haoban.manage.service.service.StaffClerkRelationService;
import com.gic.haoban.manage.service.service.SyncTaskService; import com.gic.haoban.manage.service.service.SyncTaskService;
...@@ -61,6 +62,8 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -61,6 +62,8 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
@Autowired @Autowired
private FriendClerkSyncNewOperation friendClerkSyncNewOperation; private FriendClerkSyncNewOperation friendClerkSyncNewOperation;
private static final String TRY_AGAIN = "haoban_fresh_wx_friend_again_";
@Override @Override
public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) { public void dealSingleByMq(DealParamMqDTO dealParamMqDTO, TabHaobanPreDealLog dataPre) {
logger.info("第三方好友合并:{}", JSONObject.toJSONString(dataPre)); logger.info("第三方好友合并:{}", JSONObject.toJSONString(dataPre));
...@@ -109,7 +112,10 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -109,7 +112,10 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
//更新状态 //更新状态
preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, externalUserDTO.getMemberId(), relationKey); preDealService.updateFriendStatusByDataId(taskId, dataPre.getDataId(), PreDealStatusEnum.computed.getVal(), reason, externalUserDTO.getMemberId(), relationKey);
dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId); dealSuccess(taskId, dataPre.getDataId(), dataPre.getpDataId(), wxEnterpriseId);
} catch (WxApiLimitException e) {
logger.info("接口次数限制:{}", JSONObject.toJSONString(dataPre));
dealFlag = tryAgainToMq(dataPre);
reason = "接口重试超出限制";
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e); logger.info("同步失败:{},{}", JSONObject.toJSONString(dataPre), e);
...@@ -122,6 +128,31 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -122,6 +128,31 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
} }
} }
/**
* 重试机制
*
* @param dataPre
* @return
*/
private boolean tryAgainToMq(TabHaobanPreDealLog dataPre) {
logger.info("需要重试:{}", dataPre.getDataId());
String key = TRY_AGAIN + dataPre.getTaskId() + ":" + dataPre.getDataId();
Object cache = RedisUtil.getCache(key);
if (null == cache) {
RedisUtil.setCache(key, 1, 2L, TimeUnit.HOURS);
} else {
Integer count = Integer.valueOf(cache.toString());
RedisUtil.setCache(key, count + 1);
if (count > 4) {
return false;
}
}
HashSet<String> reTrysIds = new HashSet<>();
reTrysIds.add(dataPre.getDataId());
dealDepartmentToMq(dataPre.getTaskId(), reTrysIds, SyncTaskStatusEnum.friend_sync);
return true;
}
private String dealMerge(ExternalUserDTO externalUserDTO, TabHaobanPreDealLog dataPre) { private String dealMerge(ExternalUserDTO externalUserDTO, TabHaobanPreDealLog dataPre) {
String wxEnterpriseId = dataPre.getWxEnterpriseId(); String wxEnterpriseId = dataPre.getWxEnterpriseId();
String wxUserId = dataPre.getpDataId(); String wxUserId = dataPre.getpDataId();
...@@ -226,5 +257,29 @@ public class FriendSyncNewOperation implements BaseSyncOperation { ...@@ -226,5 +257,29 @@ public class FriendSyncNewOperation implements BaseSyncOperation {
friendClerkSyncNewOperation.checkDepartmentTask(taskId); friendClerkSyncNewOperation.checkDepartmentTask(taskId);
} }
/**
* 放入mq处理部门数据
*
* @param taskId
* @param dealList
*/
private void dealDepartmentToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum) {
//预处理分组任务
syncTaskService.updateTaskStatus(taskId, syncTaskStatusEnum.getVal());
List<String> ret = dealList.stream().map(relationId -> {
DealParamMqDTO dealParamMqDTO = new DealParamMqDTO();
dealParamMqDTO.setData(relationId);
dealParamMqDTO.setTaskId(taskId);
dealParamMqDTO.setType(syncTaskStatusEnum.getVal());
return JSONObject.toJSONString(dealParamMqDTO);
}).collect(Collectors.toList());
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendBatchMessages("departmentSyncDealMq", ret);
} catch (Exception e) {
logger.info("发送失败:{},{}", taskId);
e.printStackTrace();
}
}
} }
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