Commit 6acec12c by 朱亚洁

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

parent 592a43e3
......@@ -6,6 +6,7 @@ import com.pcloud.book.advertising.biz.GroupTagBiz;
import com.pcloud.book.advertising.biz.LinkRevertBiz;
import com.pcloud.book.advertising.dto.BrandDataDTO4Channel;
import com.pcloud.book.advertising.service.AdvertisingSpaceService;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.group.service.BookGroupService;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto;
......@@ -49,6 +50,8 @@ public class AdvertisingSpaceServiceImpl implements AdvertisingSpaceService {
private BookGroupService bookGroupService;
@Autowired
private AdvertisingBrandDataBiz advertisingBrandDataBiz;
@Autowired
private ESBookAndAdviserBiz esBookAndAdviserBiz;
/**
* 每日凌晨计算昨日广告位收益
......@@ -61,6 +64,8 @@ public class AdvertisingSpaceServiceImpl implements AdvertisingSpaceService {
linkRevertBiz.addYesterdaySendStatistic();
//新增读者数量
bookGroupService.addUserCount4RightsSetting();
//es书刊数据统计
esBookAndAdviserBiz.addAllBookAndAdviserToES();
}
@ApiOperation("发送广告计划")
......
......@@ -99,6 +99,9 @@ public class BrowseRecordConsr {
List<Long> bookIds) {
LOGGER.info("【分析引擎(消)】图书的:扫描量、读者量、浏览量,<START>.[adviserIds]=" + adviserIds + "channelIds=" + channelIds
+ "bookIds=" + bookIds);
if (ListUtils.isEmpty(bookIds)){
return new HashMap<>();
}
Map<String, List<Long>> bookAdviserChannelIdMap = new HashMap<>();
bookAdviserChannelIdMap.put("adviserIds", adviserIds);
bookAdviserChannelIdMap.put("channelIds", channelIds);
......
package com.pcloud.book.consumer.trade;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
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.GroupIncomeSearchDto;
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.ProductSaleDetailDto;
import com.pcloud.facade.tradecenter.dto.QrGroupBuyDetailDto;
......@@ -221,4 +224,23 @@ public class TradeConsr {
}
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;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
import com.pcloud.book.applet.biz.AppletUserBookcaseBiz;
import com.pcloud.book.book.constant.BookConstant;
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.trade.TradeConsr;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.es.entity.ESBookAndAdviser;
import com.pcloud.book.es.repository.BookAndAdviserRepository;
......@@ -14,6 +17,8 @@ import com.pcloud.book.util.properties.BookProps;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.utils.ListUtils;
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.elasticsearch.index.query.BoolQueryBuilder;
......@@ -27,10 +32,14 @@ import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component;
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.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
......@@ -55,6 +64,10 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired
private BookGroupBiz bookGroupBiz;
@Autowired
private BrowseRecordConsr browseRecordConsr;
@Autowired
private TradeConsr tradeConsr;
@ParamLog("导入全部book和bookAdviser")
@Transactional(rollbackFor = Exception.class)
......@@ -86,17 +99,37 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
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> 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){
String key = bookAndAdviser.getBookId() + "-" + bookAndAdviser.getAdviserId() + "-" + bookAndAdviser.getChannelId();
Integer resourceCount=0;
if (!MapUtils.isEmpty(userCountMap) && userCountMap.containsKey(key)){
bookAndAdviser.setBookUserCount(userCountMap.get(key));
}
// if (!MapUtils.isEmpty(userCountMap) && userCountMap.containsKey(key)){
// bookAndAdviser.setBookUserCount(userCountMap.get(key));
// }
if (!MapUtils.isEmpty(resourceCountMap) && resourceCountMap.containsKey(key)){
resourceCount = resourceCountMap.get(key);
}
......@@ -104,6 +137,24 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
resourceCount = resourceCount + bookGroupResourceCountMap.get(key);
}
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 {
} else if (!ListUtils.isEmpty(graLabelIds) || !ListUtils.isEmpty(subLabelIds)) {
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);
Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
return search;
......
......@@ -11,6 +11,7 @@ import org.springframework.data.elasticsearch.annotations.FieldIndex;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
......@@ -136,4 +137,13 @@ public class ESBookAndAdviser {
* 书刊资源数量
*/
private Integer resourceCount;
/**
* 是否基金支持
*/
private Integer isFundSupport;
/**
* 基金书访问量公式(GMV*10+扫码*3+浏览量)
*/
private BigDecimal fundBookValue;
}
......@@ -2284,11 +2284,14 @@
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,
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
BOOK B
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_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}
GROUP BY B.BOOK_ID
limit #{offset}
......@@ -2317,11 +2320,14 @@
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,
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
BOOK B
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_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
<foreach collection="bookIds" index="i" item="item" open="(" separator="," close=")">
${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