Commit f7d128e4 by 吴博

feat: [1006901] 外链拓展

parent d6416d3f
......@@ -43,6 +43,7 @@ import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.reader.ReaderConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.copyright.biz.BookAuthServeBiz;
import com.pcloud.book.group.biz.WeworkTeacherBiz;
import com.pcloud.book.group.dto.WxWorkTeacherDTO;
import com.pcloud.book.group.enums.AppAndProductTypeEnum;
......@@ -53,9 +54,10 @@ import com.pcloud.book.applet.dto.GroupActivity4AppletDTO;
import com.pcloud.book.util.common.CommonUtils;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.book.util.properties.BookProps;
import com.pcloud.channelcenter.base.constants.MessageFromTypeEnum;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.constant.LinkServeConstant;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.enums.AppTypeEnum;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
......@@ -139,6 +141,8 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
private ReaderConsr readerConsr;
@Autowired
private BookProps bookProps;
@Autowired
private BookAuthServeBiz bookAuthServeBiz;
@Override
@ParamLog("通过ID查询单条数据")
......@@ -582,7 +586,7 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
appletRecordDTO.setCoverImg(Optional.ofNullable(bookDtoMap.get(appletRecordDTO.getBookId())).map(BookDto::getCoverImg).orElse(""));
}
//填充作品信息
fillProduct4Record(productDtoMap, productDtoMapFuture, appletRecordDTO);
fillProduct4Record(productDtoMap, productDtoMapFuture, appletRecordDTO, wechatUserId);
} else if (Objects.equals(AppletRecordTypeEnum.APP.value, appletRecordDTO.getRecordType())) {
if ("ANSWER".equals(appletRecordDTO.getTypeCode())) {
appletRecordDTO.setBookName(Optional.ofNullable(bookDtoMap.get(appletRecordDTO.getBookId())).map(BookDto::getBookName).orElse(""));
......@@ -767,28 +771,35 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
appletAppOrProductDTO.setServeType(AppAndProductTypeEnum.APP.value);
appletAppOrProductDTO.setServeId(appletRecordDTO.getFromId());
//优化跳转
if (AppTypeEnum.ARTICLE.value.equals(appletAppOrProductDTO.getServeTypeCode())) {
if (appDto != null && !StringUtil.isEmpty(appDto.getTurnUrl())) {
if (appDto.getTurnUrl().contains("5rs.me/") || appDto.getTurnUrl().contains("raysgo.com/") || appDto.getTurnUrl().contains("raysyun.com/")
|| null == wechatUserId) {
appletAppOrProductDTO.setResultUrl(appDto.getTurnUrl());
} else {
Long sceneId = CommonUtils.getSceneId(appletAppOrProductDTO.getResultUrl());
if (null != sceneId) {
//外链跳转到指定中间页
String jumpUrl = BookProps.getProductDomain() + "transfer?offId" + accountSettingDto.getAccountSettingId() + "&appId=" + appDto.getAppId() + "&url=" +
URLEncoder.encode(appDto.getTurnUrl()) + "&sceneId=" + sceneId + "&wechatUserId=" + wechatUserId;
appletAppOrProductDTO.setResultUrl(jumpUrl);
try {
if (LinkServeConstant.APPLINK.contains(appletAppOrProductDTO.getServeTypeCode())) {
if (appDto != null && !StringUtil.isEmpty(appDto.getTurnUrl())) {
if (appDto.getTurnUrl().contains("5rs.me/") || appDto.getTurnUrl().contains("raysgo.com/") || appDto.getTurnUrl().contains("raysyun.com/")
|| null == wechatUserId) {
appletAppOrProductDTO.setResultUrl(appDto.getTurnUrl());
} else {
Long sceneId = CommonUtils.getSceneId(appletAppOrProductDTO.getResultUrl());
if (null != sceneId) {
// 判断版权保护
Map<String, Boolean> bookAuthMap = bookAuthServeBiz.listIsOpen4ServeIdsAndQrcode(sceneId, Lists.newArrayList(appDto.getAppId()));
if (CollUtil.isEmpty(bookAuthMap) || null == bookAuthMap.get(MessageFromTypeEnum.APP.value + appDto.getAppId()) || false == bookAuthMap.get(MessageFromTypeEnum.APP.value + appDto.getAppId())) {
//外链跳转到指定中间页
String jumpUrl = BookProps.getProductDomain() + "transfer?offId" + accountSettingDto.getAccountSettingId() + "&appId=" + appDto.getAppId() + "&url=" +
URLEncoder.encode(appDto.getTurnUrl()) + "&sceneId=" + sceneId + "&wechatUserId=" + wechatUserId;
appletAppOrProductDTO.setResultUrl(jumpUrl);
}
}
}
}
}
}
} catch (Exception e) {
LOGGER.error("填充外链失败:{}",e.getMessage());
}
appletRecordDTO.setAppletAppOrProductDTO(appletAppOrProductDTO);
}
private void fillProduct4Record(Map<Long, ProductDto> productDtoMap, Future<Map<Long, ProductDto>> productDtoMapFuture, AppletRecordDTO appletRecordDTO) {
private void fillProduct4Record(Map<Long, ProductDto> productDtoMap, Future<Map<Long, ProductDto>> productDtoMapFuture, AppletRecordDTO appletRecordDTO, Long wechatUserId) {
try {
productDtoMap = productDtoMapFuture.get();
} catch (InterruptedException | ExecutionException e) {
......@@ -798,7 +809,7 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
appletRecordDTO.setSourceDelete(YesOrNoNumEnum.YES.getValue());
return;
}
AccountSettingDto accountSettingDto;
AccountSettingDto accountSettingDto = null;
ProductDto productDto = productDtoMap.get(appletRecordDTO.getFromId());
AppletAppOrProductDTO appletAppOrProductDTO = new AppletAppOrProductDTO();
if (productDto == null || YesOrNoNumEnum.YES.getValue().equals(productDto.getIsDelete())) {
......@@ -843,6 +854,35 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
}
appletAppOrProductDTO.setServeType(AppAndProductTypeEnum.PRODUCT.value);
appletAppOrProductDTO.setServeId(appletRecordDTO.getFromId());
//优化跳转
try {
if (LinkServeConstant.PRODUCTLINK.contains(appletAppOrProductDTO.getServeTypeCode())) {
if (productDto != null && !StringUtil.isEmpty(productDto.getSkipUrl()) && null != accountSettingDto) {
Double adviserPrice = CollUtil.isNotEmpty(productDto.getSpecification()) ? productDto.getSpecification().get(0).getAdvisePrice(): 0D;
//原存在逻辑不处理
if (productDto.getSkipUrl().contains("5rs.me/") || productDto.getSkipUrl().contains("raysgo.com/") || productDto.getSkipUrl().contains("raysyun.com/")) {
appletAppOrProductDTO.setResultUrl(productDto.getSkipUrl());
} else if (null != wechatUserId && adviserPrice.equals(0D)){
Long sceneId = CommonUtils.getSceneId(appletAppOrProductDTO.getResultUrl());
if (null != sceneId) {
// 判断版权保护
Map<String, Boolean> bookAuthMap = bookAuthServeBiz.listIsOpen4ServeIdsAndQrcode(sceneId, Lists.newArrayList(productDto.getProductId()));
if (CollUtil.isEmpty(bookAuthMap) || null == bookAuthMap.get(MessageFromTypeEnum.PRODUCT.value + productDto.getProductId()) || false == bookAuthMap.get(MessageFromTypeEnum.PRODUCT.value + productDto.getProductId())) {
//外链跳转到指定中间页
String jumpUrl = BookProps.getProductDomain() + "transfer?offId" + accountSettingDto.getAccountSettingId() + "&url=" +
URLEncoder.encode(productDto.getSkipUrl()) + "&sceneId=" + sceneId + "&wechatUserId=" + wechatUserId + "&productId=" + productDto.getProductId() ;
appletAppOrProductDTO.setResultUrl(jumpUrl);
}
}
}
}
}
} catch (Exception e) {
LOGGER.error("填充外链失败:{}", e.getMessage());
}
appletRecordDTO.setAppletAppOrProductDTO(appletAppOrProductDTO);
}
......
......@@ -47,6 +47,7 @@ import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.consumer.user.MerchantConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.consumer.wxwork.WxworkConsr;
import com.pcloud.book.copyright.biz.BookAuthServeBiz;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.biz.ResourcePageBiz;
......@@ -97,7 +98,6 @@ import com.pcloud.book.group.entity.ResourceRecomManage;
import com.pcloud.book.group.enums.PageLandingPageTypeEnum;
import com.pcloud.book.group.enums.ResourcePageFixtureTypeEnum;
import com.pcloud.book.group.mapper.ResourcePageShareMapper;
import com.pcloud.book.group.enums.ResourcePageFixtureTypeEnum;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.CrmContactQrcodeVO;
import com.pcloud.book.group.vo.RecommendServeVO;
......@@ -119,6 +119,7 @@ import com.pcloud.book.skill.biz.PcloudGroupActivityBiz;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.book.util.common.YesOrNoEnums;
import com.pcloud.book.util.properties.BookProps;
import com.pcloud.channelcenter.base.constants.MessageFromTypeEnum;
import com.pcloud.channelcenter.qrcode.dto.BookSceneIdListDTO;
import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO;
import com.pcloud.channelcenter.qrcode.dto.OwnMessageDTO;
......@@ -129,12 +130,12 @@ import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.channelcenter.wechat.entity.AccountSetting;
import com.pcloud.channelcenter.wechat.entity.Message;
import com.pcloud.combinedmarketing.memberActivity.dto.ActivityBaseInfoWithPriceDTO;
import com.pcloud.common.constant.LinkServeConstant;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.AdviserTaskConstants;
import com.pcloud.common.core.constant.MQTopicProducer;
import com.pcloud.common.core.constant.ProductTypeConstant;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.enums.AppTypeEnum;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
......@@ -306,6 +307,8 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
private ResourcePageModelDao resourcePageModelDao;
@Autowired
private ResourceConsr resourceConsr;
@Autowired
private BookAuthServeBiz bookAuthServeBiz;
@Value("${book.share.defaultTitle}")
......@@ -3912,7 +3915,7 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
fillSelfPic(resourcePageItemVOList);
//填充跳转地址
try {
fillJumpUrl(resourcePageItemVOList, wechatUserId, resourcePageId, officialAccountsId);
fillJumpUrl(resourcePageItemVOList, wechatUserId, resourcePageId, officialAccountsId,bookId, adviserId, channelId);
} catch (Exception e) {
log.error("book.fillJumpUrl失败");
}
......@@ -3931,37 +3934,102 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
return resourceColumnAndServeVOS;
}
private void fillJumpUrl(List<ResourcePageItemVO> resourcePageItemVOList, Long wechatUserId, Long resourcePageId, Long officialAccountsId) {
private void fillJumpUrl(List<ResourcePageItemVO> resourcePageItemVOList, Long wechatUserId, Long resourcePageId, Long officialAccountsId, Long bookId, Long adviserId, Long channelId) {
if (CollUtil.isEmpty(resourcePageItemVOList)) {
return;
}
List<ResourcePageItemVO> resourcePageItemVOS = resourcePageItemVOList.stream().filter(e -> AppTypeEnum.ARTICLE.value.equals(e.getTypeCode())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(resourcePageItemVOS)) {
ResourcePage byId = resourcePageDao.getById(resourcePageId);
if (null == byId || null == byId.getSceneId()) {
return;
List<Long> serveIds = resourcePageItemVOList.stream().map(f -> f.getServeId()).collect(Collectors.toList());
List<Long> appIds = resourcePageItemVOList.stream().filter(e -> MessageFromTypeEnum.APP.value.equals(e.getServeType()) &&
LinkServeConstant.APPLINK.contains(e.getTypeCode())).map(f -> f.getServeId()).collect(Collectors.toList());
List<Long> productIds = resourcePageItemVOList.stream().filter(e -> MessageFromTypeEnum.PRODUCT.value.equals(e.getServeType()) &&
LinkServeConstant.PRODUCTLINK.contains(e.getTypeCode())).map(f -> f.getServeId()).collect(Collectors.toList());
if (CollUtil.isEmpty(appIds) && CollUtil.isEmpty(productIds)) {
return;
}
Map<Long, ProductDto> productDtoMap = new HashMap<>();
CompletableFuture<Map<Long, ProductDto>> productDtoMapFuture = null;
Map<Long, AppDto> appDtoMap = new HashMap<>();
CompletableFuture<Map<Long, AppDto>> appDtoMappFuture = null;
Map<String, Boolean> bookAuthMap = null;
CompletableFuture<Map<String, Boolean>> bookAuthMapFuture = null;
ResourcePage byId = resourcePageDao.getById(resourcePageId);
if (null == byId || null == byId.getSceneId()) {
return;
}
if(CollUtil.isNotEmpty(appIds)) {
appDtoMappFuture = CompletableFuture.supplyAsync(() -> appConsr.mapByIds4AuditPass(appIds), ThreadPoolUtils.FILL_APPLET_RECORD);
}
if(CollUtil.isNotEmpty(productIds)) {
productDtoMapFuture = CompletableFuture.supplyAsync(() -> productConsr.getProBasesByIds(productIds), ThreadPoolUtils.FILL_APPLET_RECORD);
}
if(CollUtil.isNotEmpty(serveIds)) {
bookAuthMapFuture = CompletableFuture.supplyAsync(() -> bookAuthServeBiz.listIsOpen4ServeIdsAndBookId(bookId,adviserId, channelId, serveIds), ThreadPoolUtils.FILL_APPLET_RECORD);
}
if(CollUtil.isNotEmpty(serveIds)) {
try {
bookAuthMap = bookAuthMapFuture.get();
} catch (InterruptedException | ExecutionException e) {
log.warn("获取书刊信息失败 [BookBizImpl.getAdviserBook] ERR:{}", e.getMessage(), e);
}
List<Long> appIds = resourcePageItemVOS.stream().map(e -> e.getServeId()).collect(Collectors.toList());
Map<Long, AppDto> appDtoMap = appConsr.mapByIds(appIds);
resourcePageItemVOS.stream().forEach(e -> {
if (AppTypeEnum.ARTICLE.value.equals(e.getTypeCode()) && CollUtil.isNotEmpty(appDtoMap) && null != appDtoMap.get(e.getServeId())) {
AppDto appDto = appDtoMap.get(e.getServeId());
}
if(CollUtil.isNotEmpty(appIds)) {
try {
appDtoMap = appDtoMappFuture.get();
} catch (InterruptedException | ExecutionException e) {
log.warn("获取书刊信息失败 [BookBizImpl.getAdviserBook] ERR:{}", e.getMessage(), e);
}
Map<Long, AppDto> finalAppDtoMap = appDtoMap;
Map<String, Boolean> finalBookAuthMap = bookAuthMap;
resourcePageItemVOList.stream().forEach(e -> {
if (MessageFromTypeEnum.APP.value.equals(e.getServeType()) &&LinkServeConstant.APPLINK.contains(e.getTypeCode()) &&
CollUtil.isNotEmpty(finalAppDtoMap) && null != finalAppDtoMap.get(e.getServeId())) {
AppDto appDto = finalAppDtoMap.get(e.getServeId());
if (appDto != null && !StringUtil.isEmpty(appDto.getTurnUrl())) {
if (appDto.getTurnUrl().contains("5rs.me/") || appDto.getTurnUrl().contains("raysgo.com/") || appDto.getTurnUrl().contains("raysyun.com/")
|| null == wechatUserId) {
e.setResultUrl(appDto.getTurnUrl());
} else {
//外链跳转到指定中间页
String jumpUrl = BookProps.getProductDomain() + "transfer?offId" + officialAccountsId + "&appId=" + appDto.getAppId() + "&url=" +
URLEncoder.encode(appDto.getTurnUrl()) + "&sceneId=" + byId.getSceneId() + "&wechatUserId=" + wechatUserId;
e.setResultUrl(jumpUrl);
if (CollUtil.isEmpty(finalBookAuthMap) || null == finalBookAuthMap.get(MessageFromTypeEnum.APP.value + appDto.getAppId()) || false == finalBookAuthMap.get(MessageFromTypeEnum.APP.value + appDto.getAppId())) {
//外链跳转到指定中间页
String jumpUrl = BookProps.getProductDomain() + "transfer?offId" + officialAccountsId + "&appId=" + appDto.getAppId() + "&url=" +
URLEncoder.encode(appDto.getTurnUrl()) + "&sceneId=" + byId.getSceneId() + "&wechatUserId=" + wechatUserId;
e.setResultUrl(jumpUrl);
}
}
}
}
});
}
if(CollUtil.isNotEmpty(productIds)) {
try {
productDtoMap = productDtoMapFuture.get();
} catch (InterruptedException | ExecutionException e) {
log.warn("获取书刊信息失败 [BookBizImpl.getAdviserBook] ERR:{}", e.getMessage(), e);
}
Map<Long, ProductDto> finalProductDtoMap = productDtoMap;
Map<String, Boolean> finalBookAuthMap1 = bookAuthMap;
resourcePageItemVOList.stream().forEach(e -> {
if ( MessageFromTypeEnum.PRODUCT.value.equals(e.getServeType()) && LinkServeConstant.PRODUCTLINK.contains(e.getTypeCode()) &&
CollUtil.isNotEmpty(finalProductDtoMap) && null != finalProductDtoMap.get(e.getServeId())) {
ProductDto productDto = finalProductDtoMap.get(e.getServeId());
if (productDto != null && !StringUtil.isEmpty(productDto.getSkipUrl())) {
Double adviserPrice = CollUtil.isNotEmpty(productDto.getSpecification()) ? productDto.getSpecification().get(0).getAdvisePrice(): 0;
if (productDto.getSkipUrl().contains("5rs.me/") || productDto.getSkipUrl().contains("raysgo.com/") || productDto.getSkipUrl().contains("raysyun.com/")) {
e.setResultUrl(productDto.getSkipUrl());
} else if (null != wechatUserId && adviserPrice.equals(0D) ){
if (CollUtil.isEmpty(finalBookAuthMap1) || null == finalBookAuthMap1.get(MessageFromTypeEnum.PRODUCT.value + e.getServeId()) || false == finalBookAuthMap1.get(MessageFromTypeEnum.PRODUCT.value + e.getServeId())) {
//外链跳转到指定中间页
String jumpUrl = BookProps.getProductDomain() + "transfer?offId" + officialAccountsId + "&" + "&url=" +
URLEncoder.encode(productDto.getSkipUrl()) + "&sceneId=" + byId.getSceneId() + "&wechatUserId=" + wechatUserId + "&productId=" + e.getServeId() ;
e.setResultUrl(jumpUrl);
}
}
}
}
});
}
}
@Override
......@@ -4068,7 +4136,11 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
}
fillSelfPic(resourcePageItemVOList);
//填充跳转地址
fillJumpUrl(resourcePageItemVOList, wechatUserId, resourcePageId, officialAccountsId);
try {
fillJumpUrl(resourcePageItemVOList, wechatUserId, resourcePageId, officialAccountsId, bookId, adviserId, channelId);
} catch (Exception e) {
log.error("fillJumpUrl失败:{}",e.getMessage());
}
return serveVOS;
}
......
......@@ -63,7 +63,7 @@ public class ThreadPoolUtils {
new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setNameFormat("send-notify-pool-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy());
public static final ExecutorService FILL_APPLET_RECORD = new ThreadPoolExecutor(8,8,0L, TimeUnit.SECONDS,
public static final ExecutorService FILL_APPLET_RECORD = new ThreadPoolExecutor(16,64,0L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setNameFormat("fill-applet-record-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy());
......
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