Commit a4be9759 by 田超

Merge branch 'feature/book_search_app_0204' into 'master'

feat:[none] 小程序查询增加V2版本接口(搜索编辑端创建并且有资源的书)

See merge request rays/pcloud-book!1188
parents 902cf10b 7b0485fc
...@@ -3,31 +3,11 @@ ...@@ -3,31 +3,11 @@
*/ */
package com.pcloud.book.book.biz; package com.pcloud.book.book.biz;
import com.pcloud.book.book.dto.AdviserBookInfoDTO; import com.pcloud.book.book.dto.*;
import com.pcloud.book.book.dto.BookAdviserUpdateTimeDTO;
import com.pcloud.book.book.dto.BookAssocCount;
import com.pcloud.book.book.dto.BookDetialDTO;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookInfo4AnlysicsDTO;
import com.pcloud.book.book.dto.BookInfoAnalysicsDTO;
import com.pcloud.book.book.dto.BookInfoAndAuthStatusDTO;
import com.pcloud.book.book.dto.BookUniqueNumberDTO;
import com.pcloud.book.book.dto.CreateBookResultVO;
import com.pcloud.book.book.dto.CreateBookVO;
import com.pcloud.book.book.dto.MapResourceTotalCountDTO;
import com.pcloud.book.book.dto.EditionAnalysisResultVO;
import com.pcloud.book.book.dto.QrcodeServeDto;
import com.pcloud.book.book.dto.RelateAdviserVO;
import com.pcloud.book.book.entity.Book; import com.pcloud.book.book.entity.Book;
import com.pcloud.book.book.entity.BookLabel; import com.pcloud.book.book.entity.BookLabel;
import com.pcloud.book.book.entity.SeriesBookRecord; import com.pcloud.book.book.entity.SeriesBookRecord;
import com.pcloud.book.book.vo.BookInfo4ScanCount; import com.pcloud.book.book.vo.*;
import com.pcloud.book.book.vo.BookLabelVO;
import com.pcloud.book.book.vo.BookQualifyVO;
import com.pcloud.book.book.vo.BookSaleVO;
import com.pcloud.book.book.vo.ListNoAuthBookParam;
import com.pcloud.book.book.vo.ListNoAuthGroupBookParam;
import com.pcloud.book.book.vo.SearchBookVO;
import com.pcloud.book.book.vo.request.BookInfo4ScanCountRequestVO; import com.pcloud.book.book.vo.request.BookInfo4ScanCountRequestVO;
import com.pcloud.book.book.vo.request.BookQualifyInfoVO; import com.pcloud.book.book.vo.request.BookQualifyInfoVO;
import com.pcloud.book.book.vo.request.BookSearchParamVO; import com.pcloud.book.book.vo.request.BookSearchParamVO;
...@@ -194,31 +174,6 @@ public interface BookBiz { ...@@ -194,31 +174,6 @@ public interface BookBiz {
Map<String,BookDto> listDetailByIds(BookDetialDTO bookDetialDTO)throws BizException; Map<String,BookDto> listDetailByIds(BookDetialDTO bookDetialDTO)throws BizException;
/** /**
* 获取书籍列表
*
* @param isbn
* @param bookName
* 图书名称
* @param publish
* 出版社
* @param fundName
* 基金名称
* @param serialNumber
* 序列号
* @param isCurrentMonth
* 是否当前月
* @param currentPage
* 当前页
* @param numPerPage
* 每页条数
*
* @return
* @throws BizException
*/
PageBeanNew<BookDto> getListPage(String isbn, String bookName, String publish, String fundName, String serialNumber,
Integer isCurrentMonth, Integer currentPage, Integer numPerPage) throws BizException;
/**
* 获取书籍列表(编辑) * 获取书籍列表(编辑)
* *
* @param paramMap * @param paramMap
......
package com.pcloud.book.book.facade.impl;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
/**
* ES同步Controller,开发人员初始化es数据使用
*/
@RestController
@RequestMapping(value = "applet/search")
public class AppletSearchSwitchController {
private static final String KEY = "applet:book:search:v2";
@GetMapping("switch")
public ResponseDto<?> use(@RequestParam("use") Boolean use,
@RequestParam("time") Integer time) {
if (Optional.ofNullable(use).orElse(false)) {
int dur = Optional.ofNullable(time).orElse(5 * 60);
JedisClusterUtils.set(KEY, "true", dur);
return new ResponseDto<>("小程序图书搜索开始使用V2版本, 时长=" + (dur / 60) + "分钟");
} else {
JedisClusterUtils.del(KEY);
return new ResponseDto<>("小程序图书搜索切回V1版本");
}
}
public static boolean useV2Search() {
return JedisClusterUtils.exists(KEY);
}
}
...@@ -5,32 +5,19 @@ package com.pcloud.book.book.facade.impl; ...@@ -5,32 +5,19 @@ package com.pcloud.book.book.facade.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookBiz; import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.biz.BookLabelBiz; import com.pcloud.book.book.biz.BookLabelBiz;
import com.pcloud.book.book.biz.impl.BookElasticSearchBizImpl; import com.pcloud.book.book.biz.impl.BookElasticSearchBizImpl;
import com.pcloud.book.book.dto.AdviserBookInfoDTO; import com.pcloud.book.book.dto.*;
import com.pcloud.book.book.dto.BookAssocCount;
import com.pcloud.book.book.dto.BookDetialDTO;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.CreateBookVO;
import com.pcloud.book.book.dto.MapResourceTotalCountDTO;
import com.pcloud.book.book.dto.RelateAdviserVO;
import com.pcloud.book.book.entity.Book; import com.pcloud.book.book.entity.Book;
import com.pcloud.book.book.entity.SeriesBookRecord; import com.pcloud.book.book.entity.SeriesBookRecord;
import com.pcloud.book.book.facade.BookFacade; import com.pcloud.book.book.facade.BookFacade;
import com.pcloud.book.book.vo.BookInfo4ScanCount; import com.pcloud.book.book.vo.*;
import com.pcloud.book.book.vo.BookQualifyVO;
import com.pcloud.book.book.vo.ListNoAuthBookParam;
import com.pcloud.book.book.vo.ListNoAuthGroupBookParam;
import com.pcloud.book.book.vo.SearchBookVO;
import com.pcloud.book.book.vo.request.BookInfo4ScanCountRequestVO; import com.pcloud.book.book.vo.request.BookInfo4ScanCountRequestVO;
import com.pcloud.book.book.vo.request.BookQualifyInfoVO; import com.pcloud.book.book.vo.request.BookQualifyInfoVO;
import com.pcloud.book.book.vo.request.BookSearchParamVO; import com.pcloud.book.book.vo.request.BookSearchParamVO;
import com.pcloud.book.book.dto.BookUniqueNumberDTO;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto; import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
import com.pcloud.book.elasticsearch7.constants.SwitchKey;
import com.pcloud.book.elasticsearch7.search.domain.dto.param.PlatformSearchDto; import com.pcloud.book.elasticsearch7.search.domain.dto.param.PlatformSearchDto;
import com.pcloud.common.core.constant.SystemCode; import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
...@@ -43,33 +30,17 @@ import com.pcloud.common.permission.PermissionCode.ServerPermissionCode; ...@@ -43,33 +30,17 @@ import com.pcloud.common.permission.PermissionCode.ServerPermissionCode;
import com.pcloud.common.permission.PermissionException; import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.SessionUtil; import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.cookie.Cookie; import com.pcloud.common.utils.cookie.Cookie;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.message.enums.IsSystem; import com.pcloud.wechatgroup.message.enums.IsSystem;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParseException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import java.util.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/** /**
* @描述:书籍接口实现类 * @描述:书籍接口实现类
...@@ -267,7 +238,6 @@ public class BookFacadeImpl implements BookFacade { ...@@ -267,7 +238,6 @@ public class BookFacadeImpl implements BookFacade {
throw BookBizException.PAGE_PARAM_DELETION; throw BookBizException.PAGE_PARAM_DELETION;
} }
if (JedisClusterUtils.exists(SwitchKey.PLATFORM_SEARCH_ELASTICSEARCH)) {
PlatformSearchDto param = new PlatformSearchDto(); PlatformSearchDto param = new PlatformSearchDto();
param.setPublish(publish); param.setPublish(publish);
param.setFundName(fundName); param.setFundName(fundName);
...@@ -280,10 +250,6 @@ public class BookFacadeImpl implements BookFacade { ...@@ -280,10 +250,6 @@ public class BookFacadeImpl implements BookFacade {
param.setPageSize(numPerPage); param.setPageSize(numPerPage);
return new ResponseDto<>(bookElasticSearchBiz.getListPage(param)); return new ResponseDto<>(bookElasticSearchBiz.getListPage(param));
} else {
return new ResponseDto<>(bookBiz.getListPage(isbn, bookName, publish, fundName,
serialNumber, isCurrentMonth, currentPage, numPerPage));
}
} }
/** /**
......
...@@ -20,6 +20,8 @@ public interface ESBookAndAdviserBiz { ...@@ -20,6 +20,8 @@ public interface ESBookAndAdviserBiz {
Page<ESBookAndAdviser> getESAdviserBooks4Applet(String grayStatus, String keyword, List<Long> templetIds, List<Long> graLabelIds, List<Long> subLabelIds, Integer currentPage, Integer numPerPage, List<Long> scecondTempletIds, Integer isAdviserBook, List<Long> adviserIds, Long agentId); Page<ESBookAndAdviser> getESAdviserBooks4Applet(String grayStatus, String keyword, List<Long> templetIds, List<Long> graLabelIds, List<Long> subLabelIds, Integer currentPage, Integer numPerPage, List<Long> scecondTempletIds, Integer isAdviserBook, List<Long> adviserIds, Long agentId);
Page<ESBookAndAdviser> getESAdviserBooks4AppletV2(String grayStatus, String keyword, List<Long> templetIds, List<Long> graLabelIds, List<Long> subLabelIds, Integer currentPage, Integer numPerPage, List<Long> scecondTempletIds, List<Long> adviserIds, Long agentId);
void deleteAdviserBooks4ES(); void deleteAdviserBooks4ES();
void deleteChoosedAdviserBooks4ES(String keyword); void deleteChoosedAdviserBooks4ES(String keyword);
......
...@@ -379,6 +379,66 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz { ...@@ -379,6 +379,66 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
} }
@Override @Override
public Page<ESBookAndAdviser> getESAdviserBooks4AppletV2(String grayStatus, String keyword, List<Long> templetIds, List<Long> graLabelIds,
List<Long> subLabelIds, Integer currentPage, Integer numPerPage, List<Long> scecondTempletIds, List<Long> adviserIds, Long agentId) {
long start = System.currentTimeMillis();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("isBookDelete", 0))
.filter(QueryBuilders.termQuery("isBookAdviserDelete", 0))
.filter(QueryBuilders.termQuery("isAdviserBook", 1))
.filter(QueryBuilders.rangeQuery("resourceCount").gt(0));
if (CollectionUtils.isNotEmpty(templetIds)) {
boolQueryBuilder.filter(QueryBuilders.termsQuery("templetId", templetIds));
}
if (agentId != null) {
boolQueryBuilder.filter(QueryBuilders.termsQuery("adviserId", adviserIds));
}
//(年级&&科目)||二级分类
BoolQueryBuilder must1 = QueryBuilders.boolQuery()
.filter(ListUtils.isEmpty(graLabelIds) ? QueryBuilders.boolQuery() : QueryBuilders.termsQuery("graLabelId", graLabelIds))
.filter(ListUtils.isEmpty(subLabelIds) ? QueryBuilders.boolQuery() : QueryBuilders.termsQuery("subLabelId", subLabelIds));
BoolQueryBuilder must2 = QueryBuilders.boolQuery().filter(ListUtils.isEmpty(scecondTempletIds) ? QueryBuilders.boolQuery() : QueryBuilders.termsQuery("secondTempletId", scecondTempletIds));
BoolQueryBuilder should2 = QueryBuilders.boolQuery().should(must1).should(must2);
// 审核通过之后屏蔽掉测试编辑的书刊
BoolQueryBuilder adviserIdBuilder = getAdviserIdBuilder(grayStatus);
boolQueryBuilder.must(adviserIdBuilder);
if (isIsbn(keyword)) {
boolQueryBuilder.must(QueryBuilders.termsQuery("isbn", keyword));
} else if (StringUtils.isNotBlank(keyword)) {
MatchQueryBuilder mqb = QueryBuilders.matchQuery("ikBookName", keyword).minimumShouldMatch("75%");
boolQueryBuilder.must(mqb);
}
if (!ListUtils.isEmpty(scecondTempletIds)) {
if (ListUtils.isEmpty(graLabelIds) && ListUtils.isEmpty(subLabelIds)) {
boolQueryBuilder.must(must2);
} else {
boolQueryBuilder.must(should2);
}
} else if (!ListUtils.isEmpty(graLabelIds) || !ListUtils.isEmpty(subLabelIds)) {
boolQueryBuilder.must(must1);
}
// 排序:因为涉及分词,故而_score固定放在第一位
Sort sort = new Sort(Sort.Direction.DESC, "_score", "isApproval", "isFundSupport", "fundBookValue", "resourceCount", "isAdviserBook", "lastModifiedDate", "bookId");
if(StringUtil.isEmpty(keyword)){
sort = new Sort(Sort.Direction.DESC, "isApproval", "_score", "isFundSupport", "fundBookValue", "resourceCount", "isAdviserBook", "lastModifiedDate", "bookId");
}
PageRequest pageRequest = new PageRequest(currentPage, numPerPage, sort);
Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
log.info("es.search({})==>{},total={},cost={}",
StringUtils.replaceEach(boolQueryBuilder.toString(), new String[]{"\n", " ", " : "}, new String[]{"", "", ":"}),
search, search.getTotalElements(), (System.currentTimeMillis() - start));
return search;
}
@Override
public void deleteAdviserBooks4ES() { public void deleteAdviserBooks4ES() {
Page<ESBookAndAdviser> search = getEsBookAndAdvisers(); Page<ESBookAndAdviser> search = getEsBookAndAdvisers();
while (search.getContent().size() > 0){ while (search.getContent().size() > 0){
......
...@@ -80,5 +80,32 @@ public class ESBookAndAdviserBizTest { ...@@ -80,5 +80,32 @@ public class ESBookAndAdviserBizTest {
sw.stop(); sw.stop();
} }
@Test
public void testV2() {
StopWatch sw = new StopWatch();
sw.start();
String keyword = "语文";
Page<ESBookAndAdviser> p = esBookAndAdviserBiz.getESAdviserBooks4Applet(null,
keyword, null, null, null,
0, 100,
null, null, null, null);
log.info("key:{},count:{},cost:{},==>{}", keyword, p.getTotalElements(), sw.getTime(), StringUtils.join(IKAnalyzerUtil.analyzerText(keyword), " "));
p.forEach((baa) -> log.info(JSON.toJSONString(baa)));
sw.reset();
sw.start();
p = esBookAndAdviserBiz.getESAdviserBooks4AppletV2(null,
keyword, null, null, null,
0, 100,
null, null, null);
log.info("key:{},count:{},cost:{},==>{}", keyword, p.getTotalElements(), sw.getTime(), StringUtils.join(IKAnalyzerUtil.analyzerText(keyword), " "));
p.forEach((baa) -> log.info(JSON.toJSONString(baa)));
sw.stop();
}
} }
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