Commit 6acec12c by 朱亚洁

feat:[1003195]小程序书刊列表排序优先级优化

parent 592a43e3
...@@ -6,6 +6,7 @@ import com.pcloud.book.advertising.biz.GroupTagBiz; ...@@ -6,6 +6,7 @@ import com.pcloud.book.advertising.biz.GroupTagBiz;
import com.pcloud.book.advertising.biz.LinkRevertBiz; import com.pcloud.book.advertising.biz.LinkRevertBiz;
import com.pcloud.book.advertising.dto.BrandDataDTO4Channel; import com.pcloud.book.advertising.dto.BrandDataDTO4Channel;
import com.pcloud.book.advertising.service.AdvertisingSpaceService; import com.pcloud.book.advertising.service.AdvertisingSpaceService;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.group.service.BookGroupService; import com.pcloud.book.group.service.BookGroupService;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
...@@ -49,6 +50,8 @@ public class AdvertisingSpaceServiceImpl implements AdvertisingSpaceService { ...@@ -49,6 +50,8 @@ public class AdvertisingSpaceServiceImpl implements AdvertisingSpaceService {
private BookGroupService bookGroupService; private BookGroupService bookGroupService;
@Autowired @Autowired
private AdvertisingBrandDataBiz advertisingBrandDataBiz; private AdvertisingBrandDataBiz advertisingBrandDataBiz;
@Autowired
private ESBookAndAdviserBiz esBookAndAdviserBiz;
/** /**
* 每日凌晨计算昨日广告位收益 * 每日凌晨计算昨日广告位收益
...@@ -61,6 +64,8 @@ public class AdvertisingSpaceServiceImpl implements AdvertisingSpaceService { ...@@ -61,6 +64,8 @@ public class AdvertisingSpaceServiceImpl implements AdvertisingSpaceService {
linkRevertBiz.addYesterdaySendStatistic(); linkRevertBiz.addYesterdaySendStatistic();
//新增读者数量 //新增读者数量
bookGroupService.addUserCount4RightsSetting(); bookGroupService.addUserCount4RightsSetting();
//es书刊数据统计
esBookAndAdviserBiz.addAllBookAndAdviserToES();
} }
@ApiOperation("发送广告计划") @ApiOperation("发送广告计划")
......
...@@ -99,6 +99,9 @@ public class BrowseRecordConsr { ...@@ -99,6 +99,9 @@ public class BrowseRecordConsr {
List<Long> bookIds) { List<Long> bookIds) {
LOGGER.info("【分析引擎(消)】图书的:扫描量、读者量、浏览量,<START>.[adviserIds]=" + adviserIds + "channelIds=" + channelIds LOGGER.info("【分析引擎(消)】图书的:扫描量、读者量、浏览量,<START>.[adviserIds]=" + adviserIds + "channelIds=" + channelIds
+ "bookIds=" + bookIds); + "bookIds=" + bookIds);
if (ListUtils.isEmpty(bookIds)){
return new HashMap<>();
}
Map<String, List<Long>> bookAdviserChannelIdMap = new HashMap<>(); Map<String, List<Long>> bookAdviserChannelIdMap = new HashMap<>();
bookAdviserChannelIdMap.put("adviserIds", adviserIds); bookAdviserChannelIdMap.put("adviserIds", adviserIds);
bookAdviserChannelIdMap.put("channelIds", channelIds); bookAdviserChannelIdMap.put("channelIds", channelIds);
......
package com.pcloud.book.consumer.trade; package com.pcloud.book.consumer.trade;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil; import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.facade.tradecenter.dto.BookGroupSaleSearchDto; import com.pcloud.facade.tradecenter.dto.BookGroupSaleSearchDto;
import com.pcloud.facade.tradecenter.dto.BookIncomeQueryVo;
import com.pcloud.facade.tradecenter.dto.ClassifyPayDetailDto; import com.pcloud.facade.tradecenter.dto.ClassifyPayDetailDto;
import com.pcloud.facade.tradecenter.dto.GroupIncomeSearchDto; import com.pcloud.facade.tradecenter.dto.GroupIncomeSearchDto;
import com.pcloud.facade.tradecenter.dto.GroupMoneyDto; import com.pcloud.facade.tradecenter.dto.GroupMoneyDto;
import com.pcloud.facade.tradecenter.dto.IncomeBackDto;
import com.pcloud.facade.tradecenter.dto.OrderSearchDto; import com.pcloud.facade.tradecenter.dto.OrderSearchDto;
import com.pcloud.facade.tradecenter.dto.ProductSaleDetailDto; import com.pcloud.facade.tradecenter.dto.ProductSaleDetailDto;
import com.pcloud.facade.tradecenter.dto.QrGroupBuyDetailDto; import com.pcloud.facade.tradecenter.dto.QrGroupBuyDetailDto;
...@@ -221,4 +224,23 @@ public class TradeConsr { ...@@ -221,4 +224,23 @@ public class TradeConsr {
} }
return null; return null;
} }
@ParamLog("获取图书收益")
public Map<String, IncomeBackDto> getBookIncome(List<BookIncomeQueryVo> bookIncomeQueryVos, String date)throws BizException {
Map<String, IncomeBackDto> incomeMap = null;
if (ListUtils.isEmpty(bookIncomeQueryVos)){
return incomeMap;
}
try {
ResponseEntity<ResponseDto<Map<String, IncomeBackDto>>> responseTemp = orderFormService.getBookIncome(bookIncomeQueryVos, date);
incomeMap = ResponseHandleUtil.parseMapResponse(responseTemp, String.class, IncomeBackDto.class);
} catch (Exception e) {
LOGGER.error("[消TRADECENTER.orderFormService.getBookIncome]出现异常,信息为:"+ e.getMessage(), e);
throw new BookBizException(BookBizException.ERROR, "ERROR TRADECENTER");
}
if (incomeMap == null) {
return new HashMap<String, IncomeBackDto>();
}
return incomeMap;
}
} }
package com.pcloud.book.es.biz.impl; package com.pcloud.book.es.biz.impl;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
import com.pcloud.book.applet.biz.AppletUserBookcaseBiz; import com.pcloud.book.applet.biz.AppletUserBookcaseBiz;
import com.pcloud.book.book.constant.BookConstant; import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.book.dao.BookDao; import com.pcloud.book.book.dao.BookDao;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr; import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.trade.TradeConsr;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz; import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.es.entity.ESBookAndAdviser; import com.pcloud.book.es.entity.ESBookAndAdviser;
import com.pcloud.book.es.repository.BookAndAdviserRepository; import com.pcloud.book.es.repository.BookAndAdviserRepository;
...@@ -14,6 +17,8 @@ import com.pcloud.book.util.properties.BookProps; ...@@ -14,6 +17,8 @@ import com.pcloud.book.util.properties.BookProps;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.facade.tradecenter.dto.BookIncomeQueryVo;
import com.pcloud.facade.tradecenter.dto.IncomeBackDto;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
...@@ -27,10 +32,14 @@ import org.springframework.data.domain.Sort; ...@@ -27,10 +32,14 @@ import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -55,6 +64,10 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz { ...@@ -55,6 +64,10 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
private QrcodeSceneConsr qrcodeSceneConsr; private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired @Autowired
private BookGroupBiz bookGroupBiz; private BookGroupBiz bookGroupBiz;
@Autowired
private BrowseRecordConsr browseRecordConsr;
@Autowired
private TradeConsr tradeConsr;
@ParamLog("导入全部book和bookAdviser") @ParamLog("导入全部book和bookAdviser")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -86,17 +99,37 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz { ...@@ -86,17 +99,37 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
private void fillInfo(List<ESBookAndAdviser> list, List<Long> bookIds){ private void fillInfo(List<ESBookAndAdviser> list, List<Long> bookIds){
//书刊访问量 //书刊访问量
Map<String, Integer> userCountMap = appletUserBookcaseBiz.mapBookUserCountList(bookIds); // Map<String, Integer> userCountMap = appletUserBookcaseBiz.mapBookUserCountList(bookIds);
//书刊资源数量(二维码) //书刊资源数量(二维码)
Map<String, Integer> resourceCountMap = qrcodeSceneConsr.mapServeCount4Applet(bookIds); Map<String, Integer> resourceCountMap = qrcodeSceneConsr.mapServeCount4Applet(bookIds);
//书刊资源数量(社群书) //书刊资源数量(社群书)
Map<String, Integer> bookGroupResourceCountMap = bookGroupBiz.mapServeCount4Applet(bookIds); Map<String, Integer> bookGroupResourceCountMap = bookGroupBiz.mapServeCount4Applet(bookIds);
Set<Long> searchBookIds = new HashSet<>();
Set<Long> channelIds = new HashSet<>();
Set<Long> adviserIds = new HashSet<>();
List<BookIncomeQueryVo> bookIncomeQueryVos = new ArrayList<BookIncomeQueryVo>();
for (ESBookAndAdviser esBookAndAdviser : list){
if (esBookAndAdviser.getIsFundSupport()==1){//统计基金书数据
searchBookIds.add(Long.valueOf(esBookAndAdviser.getBookId()));
channelIds.add(Long.valueOf(esBookAndAdviser.getChannelId()));
adviserIds.add(Long.valueOf(esBookAndAdviser.getAdviserId()));
BookIncomeQueryVo bookIncomeQueryVo = new BookIncomeQueryVo();
bookIncomeQueryVo.setBookId(Long.valueOf(esBookAndAdviser.getBookId()));
bookIncomeQueryVo.setChannelId(Long.valueOf(esBookAndAdviser.getChannelId()));
bookIncomeQueryVo.setAdviserId(Long.valueOf(esBookAndAdviser.getAdviserId()));
bookIncomeQueryVos.add(bookIncomeQueryVo);
}
}
//书刊扫码量浏览量
Map<String, BrowseCacheRecordDto> bookSvUvPvMap = browseRecordConsr.getBookSvUvPv(new ArrayList<>(adviserIds),new ArrayList<>(channelIds),new ArrayList<>(searchBookIds));
// 获取书刊累计收益(销售额)
Map<String, IncomeBackDto> bookIncomeMap = tradeConsr.getBookIncome(bookIncomeQueryVos, null);
for (ESBookAndAdviser bookAndAdviser : list){ for (ESBookAndAdviser bookAndAdviser : list){
String key = bookAndAdviser.getBookId() + "-" + bookAndAdviser.getAdviserId() + "-" + bookAndAdviser.getChannelId(); String key = bookAndAdviser.getBookId() + "-" + bookAndAdviser.getAdviserId() + "-" + bookAndAdviser.getChannelId();
Integer resourceCount=0; Integer resourceCount=0;
if (!MapUtils.isEmpty(userCountMap) && userCountMap.containsKey(key)){ // if (!MapUtils.isEmpty(userCountMap) && userCountMap.containsKey(key)){
bookAndAdviser.setBookUserCount(userCountMap.get(key)); // bookAndAdviser.setBookUserCount(userCountMap.get(key));
} // }
if (!MapUtils.isEmpty(resourceCountMap) && resourceCountMap.containsKey(key)){ if (!MapUtils.isEmpty(resourceCountMap) && resourceCountMap.containsKey(key)){
resourceCount = resourceCountMap.get(key); resourceCount = resourceCountMap.get(key);
} }
...@@ -104,6 +137,24 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz { ...@@ -104,6 +137,24 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
resourceCount = resourceCount + bookGroupResourceCountMap.get(key); resourceCount = resourceCount + bookGroupResourceCountMap.get(key);
} }
bookAndAdviser.setResourceCount(resourceCount); bookAndAdviser.setResourceCount(resourceCount);
//统计基金书数据
BigDecimal fundBookValue = BigDecimal.ZERO;
if (bookAndAdviser.getIsFundSupport()==1) {
Long scanCount = 0L;
Long browseCounts= 0L;
if(!MapUtils.isEmpty(bookSvUvPvMap) && bookSvUvPvMap.containsKey(key)){
BrowseCacheRecordDto browseCacheRecordDto = bookSvUvPvMap.get(key);
scanCount = browseCacheRecordDto.getScanCount() == null?0L:browseCacheRecordDto.getScanCount();
browseCounts = browseCacheRecordDto.getBrowseCounts()==null?0L:browseCacheRecordDto.getBrowseCounts();
}
BigDecimal income = BigDecimal.ZERO;
IncomeBackDto incomeBack = bookIncomeMap.get(bookAndAdviser.getBookId()+"_"+bookAndAdviser.getChannelId()+"_"+bookAndAdviser.getAdviserId());
if (null!=incomeBack){
income=incomeBack.getIncome()==null?new BigDecimal(0):incomeBack.getIncome();
}
fundBookValue = income.multiply(new BigDecimal(10)).add(new BigDecimal(scanCount*3)).add(new BigDecimal(browseCounts));
}
bookAndAdviser.setFundBookValue(fundBookValue == null?BigDecimal.ZERO:fundBookValue);
} }
} }
...@@ -231,7 +282,8 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz { ...@@ -231,7 +282,8 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
} else if (!ListUtils.isEmpty(graLabelIds) || !ListUtils.isEmpty(subLabelIds)) { } else if (!ListUtils.isEmpty(graLabelIds) || !ListUtils.isEmpty(subLabelIds)) {
boolQueryBuilder.must(must1); boolQueryBuilder.must(must1);
} }
Sort sort = new Sort(Sort.Direction.DESC, "bookUserCount", "resourceCount", "isAdviserBook", "lastModifiedDate", "bookId"); //基金书
Sort sort = new Sort(Sort.Direction.DESC, "isFundSupport", "fundBookValue", "resourceCount", "isAdviserBook", "lastModifiedDate", "bookId");
PageRequest pageRequest = new PageRequest(currentPage, numPerPage, sort); PageRequest pageRequest = new PageRequest(currentPage, numPerPage, sort);
Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest); Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
return search; return search;
......
...@@ -11,6 +11,7 @@ import org.springframework.data.elasticsearch.annotations.FieldIndex; ...@@ -11,6 +11,7 @@ import org.springframework.data.elasticsearch.annotations.FieldIndex;
import org.springframework.data.elasticsearch.annotations.FieldType; import org.springframework.data.elasticsearch.annotations.FieldType;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
/** /**
...@@ -136,4 +137,13 @@ public class ESBookAndAdviser { ...@@ -136,4 +137,13 @@ public class ESBookAndAdviser {
* 书刊资源数量 * 书刊资源数量
*/ */
private Integer resourceCount; private Integer resourceCount;
/**
* 是否基金支持
*/
private Integer isFundSupport;
/**
* 基金书访问量公式(GMV*10+扫码*3+浏览量)
*/
private BigDecimal fundBookValue;
} }
...@@ -2284,11 +2284,14 @@ ...@@ -2284,11 +2284,14 @@
IF(A.VER_LABEL_ID is NULL, 0, A.VER_LABEL_ID) verLabelId, IF(A.VER_LABEL_ID is NULL, 0, A.VER_LABEL_ID) verLabelId,
IF(A.vol_label_id is NULL, 0, A.vol_label_id) volLabelId, IF(A.vol_label_id is NULL, 0, A.vol_label_id) volLabelId,
G.id bookGroupId, G.id bookGroupId,
G.join_group_type joinGroupType G.join_group_type joinGroupType,
IF((BF.BOOK_FUND_ID>0 OR f.IS_FREEZE = 1),1,0) isFundSupport
FROM FROM
BOOK B BOOK B
LEFT JOIN BOOK_ADVISER A ON A.BOOK_ID = B.BOOK_ID and A.IS_MAIN_EDITOR=1 LEFT JOIN BOOK_ADVISER A ON A.BOOK_ID = B.BOOK_ID and A.IS_MAIN_EDITOR=1
LEFT JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID AND G.IS_DELETE = 0 LEFT JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID AND G.IS_DELETE = 0
LEFT JOIN BOOK_FUND BF ON BF.BOOK_ID = A.BOOK_ID AND BF.END_TIME <![CDATA[ > ]]> NOW() AND BF.START_TIME <![CDATA[ < ]]> NOW()
LEFT JOIN book_freeze f ON B.BOOK_ID = f.BOOK_ID
WHERE B.BOOK_ID>#{maxId} WHERE B.BOOK_ID>#{maxId}
GROUP BY B.BOOK_ID GROUP BY B.BOOK_ID
limit #{offset} limit #{offset}
...@@ -2317,11 +2320,14 @@ ...@@ -2317,11 +2320,14 @@
IF(A.VER_LABEL_ID is NULL, 0, A.VER_LABEL_ID) verLabelId, IF(A.VER_LABEL_ID is NULL, 0, A.VER_LABEL_ID) verLabelId,
IF(A.vol_label_id is NULL, 0, A.vol_label_id) volLabelId, IF(A.vol_label_id is NULL, 0, A.vol_label_id) volLabelId,
G.id bookGroupId, G.id bookGroupId,
G.join_group_type joinGroupType G.join_group_type joinGroupType,
IF((BF.BOOK_FUND_ID>0 OR f.IS_FREEZE = 1),1,0) isFundSupport
FROM FROM
BOOK B BOOK B
LEFT JOIN BOOK_ADVISER A ON A.BOOK_ID = B.BOOK_ID and A.IS_MAIN_EDITOR=1 LEFT JOIN BOOK_ADVISER A ON A.BOOK_ID = B.BOOK_ID and A.IS_MAIN_EDITOR=1
LEFT JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID AND G.IS_DELETE = 0 LEFT JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID AND G.IS_DELETE = 0
LEFT JOIN BOOK_FUND BF ON BF.BOOK_ID = A.BOOK_ID AND BF.END_TIME <![CDATA[ > ]]> NOW() AND BF.START_TIME <![CDATA[ < ]]> NOW()
LEFT JOIN book_freeze f ON B.BOOK_ID = f.BOOK_ID
WHERE B.BOOK_ID in WHERE B.BOOK_ID in
<foreach collection="bookIds" index="i" item="item" open="(" separator="," close=")"> <foreach collection="bookIds" index="i" item="item" open="(" separator="," close=")">
${item} ${item}
......
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