提交 ec6930d7 作者: 沈振路

查询替换链接的时候过滤之前已执行的链接【未测试】

上级 7c9da8b7
package com.yaoyaozw.customer.service.impl; package com.yaoyaozw.customer.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yaoyaozw.customer.dto.AcquisitionExceptionHandleParam; import com.yaoyaozw.customer.dto.AcquisitionExceptionHandleParam;
import com.yaoyaozw.customer.entity.AuthorizerInfo; import com.yaoyaozw.customer.entity.AuthorizerInfo;
...@@ -11,21 +12,29 @@ import com.yaoyaozw.customer.service.AuthorizerInfoService; ...@@ -11,21 +12,29 @@ import com.yaoyaozw.customer.service.AuthorizerInfoService;
import com.yaoyaozw.customer.service.CompanyAcquisitionLinkService; import com.yaoyaozw.customer.service.CompanyAcquisitionLinkService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class CompanyAcquisitionLinkServiceImpl implements CompanyAcquisitionLinkService { public class CompanyAcquisitionLinkServiceImpl implements CompanyAcquisitionLinkService {
public static final String ACQUISITION_REPLACE_RECORD = "operate:customer:acquisition:exception:replace:record";
@Resource @Resource
private MaterialCommonMapper materialCommonMapper; private MaterialCommonMapper materialCommonMapper;
@Resource @Resource
private CompanyAcquisitionLinkMapper companyAcquisitionLinkMapper; private CompanyAcquisitionLinkMapper companyAcquisitionLinkMapper;
@Resource @Resource
private AuthorizerInfoService authorizerInfoService; private AuthorizerInfoService authorizerInfoService;
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Override @Override
public String checkAndSearchTargetReferral(String sourceReferral, Long targetAuthId) { public String checkAndSearchTargetReferral(String sourceReferral, Long targetAuthId) {
...@@ -76,7 +85,32 @@ public class CompanyAcquisitionLinkServiceImpl implements CompanyAcquisitionLink ...@@ -76,7 +85,32 @@ public class CompanyAcquisitionLinkServiceImpl implements CompanyAcquisitionLink
log.error("公众号:{} 无法获取可替换的链接", acquisitionInfo.getAuthAppId()); log.error("公众号:{} 无法获取可替换的链接", acquisitionInfo.getAuthAppId());
return null; return null;
} }
// TODO: 2025/5/26 排除当天已经轮转过的链接 try {
// 查询替换记录
Object recordVal = redisTemplate.opsForHash().get(ACQUISITION_REPLACE_RECORD, acquisitionInfo.getAuthAppId());
List<String> allExecutedLinkIds = new ArrayList<>();
if (recordVal != null) {
List<String> executedLinkIds = JSONUtil.toList(JSONUtil.parseArray(recordVal), String.class);
// 收集已执行记录
allExecutedLinkIds.addAll(executedLinkIds);
// 顾虑掉已经执行过替换的链接
List<CompanyAcquisitionLink> afterFilterAvailableAcquisitionList = availableAcquisitionList.stream().filter(v -> !executedLinkIds.contains(v.getLinkId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(afterFilterAvailableAcquisitionList)) {
// 如果筛选之后还有值,则使用筛选之后的列表
availableAcquisitionList = afterFilterAvailableAcquisitionList;
} else {
// 如果筛选之后没有值了,清除缓存从头再来
redisTemplate.opsForHash().delete(ACQUISITION_REPLACE_RECORD, acquisitionInfo.getAuthAppId());
TimeUnit.SECONDS.sleep(1);
}
}
// 记录当前的异常链接,存入缓存
allExecutedLinkIds.add(acquisitionInfo.getLinkId());
redisTemplate.opsForHash().put(ACQUISITION_REPLACE_RECORD, acquisitionInfo.getAuthAppId(), JSONUtil.toJsonStr(allExecutedLinkIds));
} catch (Exception e) {
log.error("公众号:{} 原链接Id:{} 过滤已执行链接异常:", acquisitionInfo.getAuthAppId(), acquisitionInfo.getLinkId(), e);
}
return new AcquisitionExceptionHandleParam(authorizerInfo, acquisitionInfo.getLinkUrl(), availableAcquisitionList.get(0).getLinkUrl()); return new AcquisitionExceptionHandleParam(authorizerInfo, acquisitionInfo.getLinkUrl(), availableAcquisitionList.get(0).getLinkUrl());
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论