Commit 9d05c8c0 by 田超

Merge branch 'feature/1003754' into 'master'

feat: [1003754] 答案搜索全平台

See merge request rays/pcloud-book!1036
parents a4073cad c2cdabe1
......@@ -741,6 +741,27 @@ public class BookDto extends BaseDto {
@ApiModelProperty("出版社介绍")
private String desc;
@ApiModelProperty("是否配有答案")
private Boolean hasAnswer;
@ApiModelProperty("答案订阅状态")
private Boolean subscribeState;
public Boolean getSubscribeState() {
return subscribeState;
}
public void setSubscribeState(Boolean subscribeState) {
this.subscribeState = subscribeState;
}
public Boolean getHasAnswer() {
return hasAnswer;
}
public void setHasAnswer(Boolean hasAnswer) {
this.hasAnswer = hasAnswer;
}
public Integer getIsFuse() {
return isFuse;
}
......@@ -2199,6 +2220,18 @@ public class BookDto extends BaseDto {
", areaLabelName='" + areaLabelName + '\'' +
", volLabelName='" + volLabelName + '\'' +
", isLibraryBook=" + isLibraryBook +
", isFuse=" + isFuse +
", person='" + person + '\'' +
", tmall='" + tmall + '\'' +
", tmallWord='" + tmallWord + '\'' +
", jd='" + jd + '\'' +
", dangdang='" + dangdang + '\'' +
", pinduoduo='" + pinduoduo + '\'' +
", weixin='" + weixin + '\'' +
", logo='" + logo + '\'' +
", desc='" + desc + '\'' +
", hasAnswer=" + hasAnswer +
", subscribeState=" + subscribeState +
'}';
}
}
......@@ -63,8 +63,7 @@ public class AnswerSubscribeBizImpl implements AnswerSubscribeBiz {
AnswerSubscribe answerSubscribe = new AnswerSubscribe();
BeanUtils.copyProperties(answerSubscribeDTO, answerSubscribe);
List<AnswerSubscribe> list = answerSubscribeDao.getRecordByUserBook(answerSubscribe);
Boolean hasAnswer = hasAnswer(answerSubscribe.getBookId(), answerSubscribe.getAdviserId(), answerSubscribe.getChannelId());
if (!ListUtils.isEmpty(list) || hasAnswer) {
if (!ListUtils.isEmpty(list)) {
return;
}
answerSubscribeDao.insert(answerSubscribe);
......
......@@ -25,6 +25,7 @@ import com.pcloud.book.book.vo.AgentBookStatsDetailVO;
import com.pcloud.book.book.vo.ErpAdviserBookVO;
import com.pcloud.book.book.vo.PcloudAdviserBookVO;
import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
......@@ -292,6 +293,14 @@ public interface BookAdviserBiz {
void exportAgentBookStatsDetail(Long agentId, String name, Date startDate, Date endDate, Integer isRay);
/**
* 查书刊配套答案
* @author:zhuyajie
* @date:2020/11/4 14:46
* * @param null
*/
List<BookServeDTO> getAnswerServesByBook(Long bookId, Long adviserId, Long channelId);
/**
* 购书流程获取书籍基本信息
* @param bookId
* @param adviserId
......
......@@ -645,7 +645,7 @@ public interface BookBiz {
*/
List<Long> getBookIdsByIsbn(String isbn);
BookDto getAdviserBook(Long bookId, Long adviserId, Long channelId);
BookDto getAdviserBook(Long bookId, Long adviserId, Long channelId, Long sceneId);
/**
* 批量更新质检书籍
......@@ -710,4 +710,11 @@ public interface BookBiz {
BookDto getBaseById4Buy(Long bookId, Long adviserId, Long channelId);
void fillAgentSale(List<BookDto> bookDtos);
/**
* 答案,搜索全平台书刊
* @author:zhuyajie
* @date:2020/11/4 14:13
* * @param null
*/
List<BookDto> getESAdviserBooks4Answer(Long wechatUserId, BookSearchParamVO bookSearchParamVO);
}
......@@ -61,6 +61,7 @@ import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.rightsSetting.dao.RightsSettingDAO;
......@@ -75,6 +76,7 @@ import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.SceneCode;
import com.pcloud.common.core.constant.SendType;
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;
......@@ -1963,4 +1965,17 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
}
return getAgentQuarterDigital(DateUtil.offsetMonth(date,-3));
}
@Override
public List<BookServeDTO> getAnswerServesByBook(Long bookId, Long adviserId, Long channelId) {
List<BookServeDTO> answerList = new ArrayList<>();
List<BookServeDTO> bookServeVOS = bookGroupBiz.getBookAndBookGroupServeIds(adviserId, bookId, channelId);
bookGroupBiz.fillBookServe(bookServeVOS);
bookGroupBiz.removeCanNotBuy(bookServeVOS);
if (!ListUtils.isEmpty(bookServeVOS)) {
answerList = bookServeVOS.stream().
filter(s -> s.getServeName().contains("答案") || s.getFromType().equals(AppTypeEnum.ANSWER.value)).collect(Collectors.toList());
}
return answerList;
}
}
......@@ -3,11 +3,10 @@
*/
package com.pcloud.book.book.biz.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.alibaba.fastjson.JSONObject;
import com.pcloud.analysisengine.qrcode.dto.BookTimeSourceDto;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.appcenter.assist.dto.AssistTempletDTO;
......@@ -15,6 +14,8 @@ import com.pcloud.appcenter.base.dto.AppPriceCacheDTO;
import com.pcloud.appcenter.base.exception.AppBizException;
import com.pcloud.appcenter.cache.service.AppPriceCacheService;
import com.pcloud.book.applet.biz.AppletBookClassifyBiz;
import com.pcloud.book.applet.dao.AnswerSubscribeDao;
import com.pcloud.book.applet.entity.AnswerSubscribe;
import com.pcloud.book.applet.entity.AppletUserLabelRelation;
import com.pcloud.book.applet.enums.LabelTypeEnum;
import com.pcloud.book.base.enums.BookFreezeEnum;
......@@ -98,6 +99,7 @@ import com.pcloud.book.group.dao.BookAppletSceneDao;
import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.BookGroupServeDao;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.group.entity.BookAppletScene;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupServe;
......@@ -135,6 +137,7 @@ import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.resourcecenter.product.dto.SpecificationDto;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import com.pcloud.usercenter.party.agent.dto.SaleAgentDTO;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -167,6 +170,9 @@ import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
/**
* @描述:书籍业务层接口实现类
* @作者:songx
......@@ -280,6 +286,8 @@ public class BookBizImpl implements BookBiz {
private LabelConsr labelConsr;
@Value("${system.env}")
private String envStr;
@Autowired
private AnswerSubscribeDao answerSubscribeDao;
/**
* 创建书籍,同时建立与编辑的推广关系
......@@ -2222,10 +2230,18 @@ public class BookBizImpl implements BookBiz {
@ParamLog("获取书刊")
@Override
public BookDto getAdviserBook(Long bookId, Long adviserId, Long channelId) {
if (bookId==null){
public BookDto getAdviserBook(Long bookId, Long adviserId, Long channelId, Long sceneId) {
if (bookId==null && null==sceneId){
throw new BookBizException(BookBizException.PARAM_IS_NULL,"参数有误");
}
if (null != sceneId) {
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(sceneId);
if (null != qrcodeSceneDto) {
bookId = qrcodeSceneDto.getAdviserBookId();
channelId = qrcodeSceneDto.getChannelPartyId();
adviserId = qrcodeSceneDto.getCreatedByUserLogin();
}
}
if (adviserId==null||channelId==null||adviserId<=0||channelId<=0){
return bookDao.getBaseById(bookId);
}
......@@ -3399,4 +3415,46 @@ public class BookBizImpl implements BookBiz {
}
}
}
@Override
public List<BookDto> getESAdviserBooks4Answer(Long wechatUserId, BookSearchParamVO bookSearchParamVO) {
Long graLabelId = bookSearchParamVO.getGraLabelId();
Long subLabelId = bookSearchParamVO.getSubLabelId();
Long verLabelId = bookSearchParamVO.getVerLabelId();
Page<ESBookAndAdviser> esPage = esBookAndAdviserBiz.getESAdviserBooks4Answer(bookSearchParamVO.getGrayStatus(), bookSearchParamVO.getKeyword(),
graLabelId, subLabelId, verLabelId, 0, 3);
List<ESBookAndAdviser> esBookAndAdvisers = esPage.getContent();
if (ListUtils.isEmpty(esBookAndAdvisers)) {
return new ArrayList<>();
}
List<BookDto> bookDtos = changeToBookDto(esBookAndAdvisers);
fillOtherBookInfo(bookDtos);
for (BookDto bookDto : bookDtos) {
bookDto.setHasAnswer(false);
//标记是否有答案
List<BookServeDTO> bookServeVOS = bookGroupBiz.getBookAndBookGroupServeIds(bookDto.getAdviserId(), bookDto.getBookId(), bookDto.getChannelId());
bookGroupBiz.fillBookServe(bookServeVOS);
bookGroupBiz.removeCanNotBuy(bookServeVOS);
if (!ListUtils.isEmpty(bookServeVOS)) {
List<BookServeDTO> answerList = bookServeVOS.stream().
filter(s -> s.getServeName().contains("答案") || s.getFromType().equals(AppTypeEnum.ANSWER.value)).collect(Collectors.toList());
if (!ListUtils.isEmpty(answerList)) {
bookDto.setHasAnswer(true);
}
}
//订阅状态
Boolean subscribeState = false;
AnswerSubscribe answerSubscribe = new AnswerSubscribe();
answerSubscribe.setBookId(bookDto.getBookId());
answerSubscribe.setChannelId(bookDto.getChannelId());
answerSubscribe.setAdviserId(bookDto.getAdviserId());
answerSubscribe.setWechatUserId(wechatUserId);
List<AnswerSubscribe> list = answerSubscribeDao.getRecordByUserBook(answerSubscribe);
if (!ListUtils.isEmpty(list)) {
subscribeState = true;
}
bookDto.setSubscribeState(subscribeState);
}
return bookDtos;
}
}
......@@ -288,4 +288,10 @@ public interface BookAdviserFacade {
@RequestParam(value = "isRay", required = false) Integer isRay
) throws BizException;
@ApiOperation("获取配套答案")
@GetMapping("getAnswerServeByBook")
ResponseDto<?> getAnswerServesByBook(@RequestParam("bookId") Long bookId,
@RequestParam("adviserId") Long adviserId,
@RequestParam("channelId") Long channelId);
}
......@@ -724,9 +724,10 @@ public interface BookFacade {
@ApiOperation("获取书刊")
@GetMapping("getAdviserBook")
ResponseDto<?> getAdviserBook(
@RequestParam(value = "bookId") Long bookId,
@RequestParam(value = "adviserId") Long adviserId,
@RequestParam(value = "channelId") Long channelId
@RequestParam(value = "bookId", required = false) Long bookId,
@RequestParam(value = "adviserId", required = false) Long adviserId,
@RequestParam(value = "channelId", required = false) Long channelId,
@RequestParam(value = "sceneId", required = false) Long sceneId
) throws BizException, PermissionException;
@ApiOperation(value = "批量更新质检书刊", httpMethod = "POST")
......
......@@ -335,4 +335,11 @@ public class BookAdviserFacadeImpl implements BookAdviserFacade {
}
@Override
@GetMapping("getAnswerServesByBook")
public ResponseDto<?> getAnswerServesByBook(@RequestParam("bookId") Long bookId,
@RequestParam("adviserId") Long adviserId,
@RequestParam("channelId") Long channelId){
return new ResponseDto<>(bookAdviserBiz.getAnswerServesByBook(bookId, adviserId, channelId));
}
}
......@@ -40,6 +40,7 @@ import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.message.enums.IsSystem;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.codehaus.jackson.JsonParseException;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -1004,11 +1005,12 @@ public class BookFacadeImpl implements BookFacade {
@GetMapping("getAdviserBook")
@Override
public ResponseDto<?> getAdviserBook(
@RequestParam(value = "bookId") Long bookId,
@RequestParam(value = "adviserId") Long adviserId,
@RequestParam(value = "channelId") Long channelId
@RequestParam(value = "bookId",required = false) Long bookId,
@RequestParam(value = "adviserId", required = false) Long adviserId,
@RequestParam(value = "channelId", required = false) Long channelId,
@RequestParam(value = "sceneId", required = false) Long sceneId
) throws BizException, PermissionException {
return new ResponseDto<>(bookBiz.getAdviserBook(bookId, adviserId, channelId));
return new ResponseDto<>(bookBiz.getAdviserBook(bookId, adviserId, channelId, sceneId));
}
......@@ -1178,4 +1180,17 @@ public class BookFacadeImpl implements BookFacade {
public ResponseDto<?> checkQrcodeDetail4Erp(@RequestParam(value = "url") String url) {
return new ResponseDto<>(bookBiz.checkQrcodeDetail4Erp(url));
}
@ApiOperation("答案,搜索全平台书刊")
@PostMapping("getESAdviserBooks4Answer")
public ResponseDto<?> getESAdviserBooks4Answer(@CookieValue("userInfo") String userInfo, @RequestBody @ApiParam BookSearchParamVO bookSearchParamVO){
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(bookBiz.getESAdviserBooks4Answer(wechatUserId,bookSearchParamVO));
}
@ApiOperation("审核通过的书刊标签")
@GetMapping("getBookLabelsAll")
public ResponseDto<?> getBookLabelsAll() throws BizException, PermissionException {
return new ResponseDto<>(bookBiz.getBookLabels(0L));
}
}
......@@ -33,4 +33,9 @@ public class BookSearchParamVO {
private Integer isAdviserBook;
private Long agentId;
private Long graLabelId;
private Long subLabelId;
private Long verLabelId;
}
......@@ -22,4 +22,13 @@ public interface ESBookAndAdviserBiz {
void deleteAdviserBooks4ES();
void deleteChoosedAdviserBooks4ES(String keyword);
/**
* 答案,搜索全平台书刊
* @author:zhuyajie
* @date:2020/11/4 13:52
* * @param null
*/
Page<ESBookAndAdviser> getESAdviserBooks4Answer(String grayStatus, String keyword, Long graLabelId, Long subLabelId, Long verLabelId,
Integer currentPage, Integer numPerPage);
}
......@@ -213,6 +213,18 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
.should(QueryBuilders.termQuery("isBookAdviserDelete", 0))
.should(QueryBuilders.termQuery("isAdviserBook", 0));
// 审核通过之后屏蔽掉测试编辑的书刊
BoolQueryBuilder adviserIdBuilder = getAdviserIdBuilder(grayStatus);
boolQueryBuilder.must(should);
boolQueryBuilder.must(should1);
boolQueryBuilder.must(adviserIdBuilder);
Sort sort=new Sort(Sort.Direction.DESC, "isAdviserBook","lastModifiedDate", "bookId");
PageRequest pageRequest = new PageRequest(currentPage, numPerPage,sort);
Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
return search;
}
BoolQueryBuilder getAdviserIdBuilder(String grayStatus){
// 审核通过之后屏蔽掉测试编辑的书刊
BoolQueryBuilder adviserIdBuilder = QueryBuilders.boolQuery();
if (YesOrNoEnums.YES.getCode().equals(grayStatus)) {
if ("test".equalsIgnoreCase(BookProps.getSystemEnv())) {
......@@ -225,13 +237,7 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
adviserIdBuilder = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("adviserId", 1362));
}
}
boolQueryBuilder.must(should);
boolQueryBuilder.must(should1);
boolQueryBuilder.must(adviserIdBuilder);
Sort sort=new Sort(Sort.Direction.DESC, "isAdviserBook","lastModifiedDate", "bookId");
PageRequest pageRequest = new PageRequest(currentPage, numPerPage,sort);
Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
return search;
return adviserIdBuilder;
}
@Override
......@@ -254,27 +260,8 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
BoolQueryBuilder must2 = QueryBuilders.boolQuery().filter(ListUtils.isEmpty(scecondTempletIds) ? QueryBuilders.boolQuery() : QueryBuilders.termsQuery("secondTempletId", scecondTempletIds));
BoolQueryBuilder should2 = QueryBuilders.boolQuery().should(must1).should(must2);
// 审核通过之后屏蔽掉测试编辑的书刊
BoolQueryBuilder adviserIdBuilder = QueryBuilders.boolQuery();
if (YesOrNoEnums.YES.getCode().equals(grayStatus)) {
if ("test".equalsIgnoreCase(BookProps.getSystemEnv())) {
for (Long adviserId : BookConstant.TEST_ADVISERS){
adviserIdBuilder = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("adviserId", adviserId));
boolQueryBuilder.must(adviserIdBuilder);
}
}
if ("uat".equalsIgnoreCase(BookProps.getSystemEnv())) {
for (Long adviserId : BookConstant.UAT_ADVISERS){
adviserIdBuilder = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("adviserId", adviserId));
BoolQueryBuilder adviserIdBuilder = getAdviserIdBuilder(grayStatus);
boolQueryBuilder.must(adviserIdBuilder);
}
}
if ("pro".equalsIgnoreCase(BookProps.getSystemEnv())) {
for (Long adviserId : BookConstant.PROD_ADVISERS){
adviserIdBuilder = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery("adviserId", adviserId));
boolQueryBuilder.must(adviserIdBuilder);
}
}
}
boolQueryBuilder.must(should);
boolQueryBuilder.must(should1);
if (!ListUtils.isEmpty(scecondTempletIds)) {
......@@ -331,4 +318,26 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
return bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
}
@Override
public Page<ESBookAndAdviser> getESAdviserBooks4Answer(String grayStatus, String keyword, Long graLabelId, Long subLabelId, Long verLabelId, Integer currentPage, Integer numPerPage) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("isBookDelete", 0))
.filter(QueryBuilders.termQuery("isBookAdviserDelete", 0))
.filter(null == graLabelId ? QueryBuilders.boolQuery() : QueryBuilders.termQuery("graLabelId", graLabelId))
.filter(null == subLabelId ? QueryBuilders.boolQuery() : QueryBuilders.termQuery("subLabelId", subLabelId))
.filter(null == verLabelId ? QueryBuilders.boolQuery() : QueryBuilders.termQuery("verLabelId", verLabelId));
BoolQueryBuilder should = QueryBuilders.boolQuery()
.should(StringUtil.isEmpty(keyword) ? QueryBuilders.boolQuery() : QueryBuilders.wildcardQuery("bookName", "*" + keyword + "*"))
.should(StringUtil.isEmpty(keyword) ? QueryBuilders.boolQuery() : QueryBuilders.wildcardQuery("isbn", "*" + keyword + "*"));
// 审核通过之后屏蔽掉测试编辑的书刊
BoolQueryBuilder adviserIdBuilder = getAdviserIdBuilder(grayStatus);
boolQueryBuilder.must(adviserIdBuilder);
boolQueryBuilder.must(should);
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;
}
}
......@@ -5068,6 +5068,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
}
@Override
@ParamLog("移除不能购买的应用或作品")
public void removeCanNotBuy( List<BookServeDTO> list ) {
if (ListUtils.isEmpty(list)) {
......
......@@ -469,7 +469,7 @@ public class PcloudGroupActivityBizImpl implements PcloudGroupActivityBiz {
@Override
public GroupActivity4AppletDTO getGroupActivity4Applet(Long rightSettingId, Long adviserId, Long bookId, Long channelId, Integer readType) {
BookDto adviserBook = bookBiz.getAdviserBook(bookId, adviserId, channelId);
BookDto adviserBook = bookBiz.getAdviserBook(bookId, adviserId, channelId, null);
BookDto dto = Optional.ofNullable(adviserBook).orElseThrow(() -> new BookBizException(BookBizException.ID_NOT_EXIST, "未找到相关书刊"));
// 处理分类和标签
BaseTempletClassify baseTempletClassify = new BaseTempletClassify();
......
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