提交 5a006ffe 作者: 沈振路

关回多图文保存、复用

上级 f3a57d41
......@@ -11,6 +11,7 @@ import com.yaoyaozw.customer.constants.CustomerCommonConstant;
import com.yaoyaozw.customer.constants.CustomerMaterialConstant;
import com.yaoyaozw.customer.entity.CommonReferralBody;
import com.yaoyaozw.customer.entity.CustomerFollowReply;
import com.yaoyaozw.customer.entity.CustomerFollowReplyMultiNews;
import com.yaoyaozw.customer.entity.ReferralEntity;
import com.yaoyaozw.customer.feigns.ReferralFeignClient;
import com.yaoyaozw.customer.service.AuthorizerInfoService;
......@@ -130,6 +131,7 @@ public class FollowReplyComponent {
result.setHasError(false);
List<CustomerFollowReply> finalMaterialList = new ArrayList<>(sourceMaterialList.size());
List<CustomerFollowReplyMultiNews> finalMultiNewsList = new ArrayList<>();
List<ReferralEntity> finalReferralList = new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
......@@ -165,43 +167,60 @@ public class FollowReplyComponent {
continue;
}
// 处理 图文、文本 链接
List<ReferralEntity> referralEntityList = sourceMaterial.getReferralEntityList();
if (CollectionUtil.isNotEmpty(referralEntityList)) {
List<ReferralEntity> singleMaterialReferralList = new ArrayList<>(referralEntityList.size());
for (ReferralEntity sourceReferral : referralEntityList) {
try {
ReferralEntity finalReferral = getCopyReferralEntity(sourceAccountName, dateStr, targetAuth, sourceReferral);
finalReferral.setMaterialGraphicsId(entity.getId());
singleMaterialReferralList.add(finalReferral);
finalReferralList.add(finalReferral);
} catch (Exception e) {
// 获取链接出现异常, 修改状态, 修改标识
status = 0;
result.setHasError(true);
}
}
if (CollectionUtil.isNotEmpty(singleMaterialReferralList)) {
// 处理链接的后续操作
if (CustomerMaterialConstant.TENCENT_MEDIA_TYPE_NEWS.equals(entity.getType())) {
// 图文, 将链接处理结果设置到主题表中
ReferralEntity referralEntity = singleMaterialReferralList.get(0);
entity.setSourceUrl(referralEntity.getReferral());
} else if (CustomerMaterialConstant.TENCENT_MEDIA_TYPE_TEXT.equals(entity.getType())) {
// 文本, 构造H5
StringBuilder builder = new StringBuilder();
for (ReferralEntity referralEntity : singleMaterialReferralList) {
builder.append(structH5Line(false, referralEntity)).append("\n\n");
if (!CustomerMaterialConstant.TENCENT_MEDIA_TYPE_MULTI_NEWS.equals(sourceMaterial.getType())) {
// 非多图文类型 处理 图文、文本 链接
List<ReferralEntity> referralEntityList = sourceMaterial.getReferralEntityList();
if (CollectionUtil.isNotEmpty(referralEntityList)) {
List<ReferralEntity> singleMaterialReferralList = new ArrayList<>(referralEntityList.size());
for (ReferralEntity sourceReferral : referralEntityList) {
try {
ReferralEntity finalReferral = getCopyReferralEntity(sourceAccountName, dateStr, targetAuth, sourceReferral);
finalReferral.setMaterialGraphicsId(entity.getId());
singleMaterialReferralList.add(finalReferral);
finalReferralList.add(finalReferral);
} catch (Exception e) {
// 获取链接出现异常, 修改状态, 修改标识
status = 0;
result.setHasError(true);
}
entity.setContent(builder.toString().trim());
}
if (CollectionUtil.isNotEmpty(singleMaterialReferralList)) {
// 处理链接的后续操作
if (CustomerMaterialConstant.TENCENT_MEDIA_TYPE_NEWS.equals(entity.getType())) {
// 图文, 将链接处理结果设置到主题表中
ReferralEntity referralEntity = singleMaterialReferralList.get(0);
entity.setSourceUrl(referralEntity.getReferral());
} else if (CustomerMaterialConstant.TENCENT_MEDIA_TYPE_TEXT.equals(entity.getType())) {
// 文本, 构造H5
StringBuilder builder = new StringBuilder();
for (ReferralEntity referralEntity : singleMaterialReferralList) {
builder.append(structH5Line(false, referralEntity)).append("\n\n");
}
entity.setContent(builder.toString().trim());
}
}
}
}
entity.setStatus(status);
finalMaterialList.add(entity);
} else {
// 多图文
List<CustomerFollowReplyMultiNews> sourceMultiNewsList = sourceMaterial.getMultiNewsList();
for (CustomerFollowReplyMultiNews sourceMultiNews : sourceMultiNewsList) {
ReferralEntity sourceReferralEntity = sourceMultiNews.getReferralEntity();
ReferralEntity targetReferralEntity = getCopyReferralEntity(sourceAccountName, dateStr, targetAuth, sourceReferralEntity);
finalReferralList.add(targetReferralEntity);
CustomerFollowReplyMultiNews targetMultiNews = new CustomerFollowReplyMultiNews();
BeanUtil.copyProperties(sourceMultiNews, targetMultiNews, "id", "replyId", "linkUrl", "referralEntity");
targetMultiNews.setReplyId(entity.getId());
targetMultiNews.setLinkUrl(targetReferralEntity.getReferral());
finalMultiNewsList.add(targetMultiNews);
}
entity.setMultiNewsList(finalMultiNewsList);
}
entity.setStatus(status);
finalMaterialList.add(entity);
}
......
......@@ -129,6 +129,8 @@ public class CustomerFollowReply implements Serializable {
@TableField(exist = false)
private List<ReferralEntity> referralEntityList;
@TableField(exist = false)
private List<CustomerFollowReplyMultiNews> multiNewsList;
private static final long serialVersionUID = 1L;
}
......
......@@ -77,5 +77,8 @@ public class CustomerFollowReplyMultiNews implements Serializable {
private Long modifiedUser;
private static final long serialVersionUID = 1L;
@TableField(exist = false)
private ReferralEntity referralEntity;
}
......@@ -89,10 +89,7 @@ public class CustomerFollowReplyMultiNewsServiceImpl extends ServiceImpl<Custome
// 将这些多图文信息转换到缓存
List<NewsMessageReplyEntity> cacheEntityList = JSONUtil.toList(JSONUtil.parseArray(multiNewsList), NewsMessageReplyEntity.class);
redisTemplate.opsForHash().put(FOLLOW_REPLY_MULTI_NEWS_CACHE_KEY, accountEntity.getAppId(), JSONUtil.toJsonStr(cacheEntityList));
// this.saveBatch(entityList);
// referralEntityService.saveBatch(referralEntityList);
this.saveBatch(entityList);
referralEntityService.saveBatch(referralEntityList);
}
}
......@@ -18,6 +18,7 @@ import com.yaoyaozw.customer.dto.follow.FollowReplyQueryDTO;
import com.yaoyaozw.customer.dto.follow.FollowReplySaveDTO;
import com.yaoyaozw.customer.entity.CommonReferralBody;
import com.yaoyaozw.customer.entity.CustomerFollowReply;
import com.yaoyaozw.customer.entity.CustomerFollowReplyMultiNews;
import com.yaoyaozw.customer.entity.ReferralEntity;
import com.yaoyaozw.customer.mapper.CustomerFollowReplyMapper;
import com.yaoyaozw.customer.service.AuthorizerInfoService;
......@@ -37,10 +38,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -125,7 +124,7 @@ public class CustomerFollowReplyServiceImpl extends ServiceImpl<CustomerFollowRe
List<FollowReplyMultiNewsCreateDTO> multiNewsList = saveDto.getMultiNewsList();
localLog.info("appId {} follow reply has multi news size {}", saveDto.getAppid(), multiNewsList.size());
followReplyMultiNewsService.saveFollowReplyMultiNews(entity.getId(), saveDto.getAccountEntity(), saveDto.getMultiNewsList());
return new GenericsResult<>(true, "【测试】多图文关回设置成功");
// return new GenericsResult<>(true, "【测试】多图文关回设置成功");
} else if (!CustomerMaterialConstant.TENCENT_MEDIA_TYPE_TEXT.equals(entity.getType())){
// 获取书城公众号链接(图文)
ReferralEntity referralEntity;
......@@ -257,6 +256,9 @@ public class CustomerFollowReplyServiceImpl extends ServiceImpl<CustomerFollowRe
// 复用之后的结果存储到 redis
putMaterialToRedis(targetAuth.getAppId(), result.getMaterialList());
}
if (CollectionUtil.isNotEmpty(result.getMultiNewsList())) {
followReplyMultiNewsService.saveBatch(result.getMultiNewsList());
}
if (CollectionUtil.isNotEmpty(result.getReferralEntityList())) {
referralEntityService.saveBatch(result.getReferralEntityList());
}
......@@ -323,12 +325,24 @@ public class CustomerFollowReplyServiceImpl extends ServiceImpl<CustomerFollowRe
// 获取链接
List<Long> materialIdList = sourceMaterialList.stream().map(CustomerFollowReply::getId).collect(Collectors.toList());
List<ReferralEntity> referralEntityList = referralEntityService.list(new QueryWrapper<ReferralEntity>().in(ReferralEntity.COL_MATERIAL_GRAPHICS_ID, materialIdList));
// 查询是否存在多图文关回配置
List<CustomerFollowReplyMultiNews> multiNewsList = followReplyMultiNewsService.list(new QueryWrapper<CustomerFollowReplyMultiNews>().in("reply_id", materialIdList));
Map<Long, List<CustomerFollowReplyMultiNews>> multiNewsListMap = new HashMap<>(4);
if (CollectionUtil.isNotEmpty(multiNewsList)) {
// 查询这些多图文配置及其链接列表
List<Long> multiNewsIdList = multiNewsList.stream().map(CustomerFollowReplyMultiNews::getId).collect(Collectors.toList());
List<ReferralEntity> multiNewsReferralEntityList = referralEntityService.list(new QueryWrapper<ReferralEntity>().in(ReferralEntity.COL_MATERIAL_GRAPHICS_ID, multiNewsIdList));
Map<Long, ReferralEntity> referralEntityMap = multiNewsReferralEntityList.stream().collect(Collectors.toMap(ReferralEntity::getMaterialGraphicsId, Function.identity(), (o1, o2) -> o2));
// 匹配多图文与链接体
multiNewsListMap = multiNewsList.stream().peek(item -> item.setReferralEntity(referralEntityMap.get(item.getId()))).collect(Collectors.groupingBy(CustomerFollowReplyMultiNews::getReplyId));
}
localLog.info("获取到源公众号链接数据: {}条", referralEntityList.size());
Map<Long, List<ReferralEntity>> referralMap = referralEntityList.stream().collect(Collectors.groupingBy(ReferralEntity::getMaterialGraphicsId));
// 分配referral
for (CustomerFollowReply sourceEntity : sourceMaterialList) {
sourceEntity.setMultiNewsList(multiNewsListMap.get(sourceEntity.getId()));
List<ReferralEntity> referralEntities = referralMap.get(sourceEntity.getId());
if (CollectionUtil.isNotEmpty(referralEntities)) {
referralEntities = referralEntities.stream().sorted(Comparator.comparingInt(ReferralEntity::getSort)).collect(Collectors.toList());
......
package com.yaoyaozw.customer.vo.follow;
import com.yaoyaozw.customer.entity.CustomerFollowReply;
import com.yaoyaozw.customer.entity.CustomerFollowReplyMultiNews;
import com.yaoyaozw.customer.entity.ReferralEntity;
import lombok.Data;
......@@ -18,6 +19,8 @@ public class FollowReplyCopyResultVO implements Serializable {
private List<CustomerFollowReply> materialList;
private List<CustomerFollowReplyMultiNews> multiNewsList;
private List<ReferralEntity> referralEntityList;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论