Commit d4098cc9 by 田超

Merge branch 'feature/es_rebuild_1229' into 'master'

feat:[none] 重建book es索引,平台查询切es查询

See merge request rays/pcloud-book!1133
parents ceebb5b2 2e28198c
......@@ -18,6 +18,8 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<pcloud-book-elasticsearch-api.version>1.0.1-SNAPSHOT</pcloud-book-elasticsearch-api.version>
</properties>
<dependencies>
......@@ -320,6 +322,12 @@
</exclusions>
</dependency>
<dependency>
<groupId>com.pcloud.book.elasticsearch</groupId>
<artifactId>pcloud-book-elasticsearch-api</artifactId>
<version>${pcloud-book-elasticsearch-api.version}</version>
</dependency>
</dependencies>
<build>
......
package com.pcloud.book.book.biz.impl;
import com.pcloud.book.base.enums.BookFreezeEnum;
import com.pcloud.book.book.dao.BookTypeDao;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookFundDto;
import com.pcloud.book.book.dto.BookTypeDto;
import com.pcloud.book.consumer.book.elasticsearch.BookElasticSearchConsr;
import com.pcloud.book.consumer.user.PartyConsr;
import com.pcloud.book.elasticsearch7.entity.Es7Book;
import com.pcloud.book.elasticsearch7.entity.Es7BookFreeze;
import com.pcloud.book.elasticsearch7.search.domain.dto.param.PlatformSearchDto;
import com.pcloud.book.util.common.Converter;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.universe.commons.paging.Pagination;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class BookElasticSearchBizImpl {
@Autowired
private PartyConsr partyConsr;
@Autowired
private BookTypeDao bookTypeDao;
@Autowired
private BookElasticSearchConsr bookElasticSearchConsr;
public PageBeanNew<BookDto> getListPage(PlatformSearchDto dto) throws BizException {
Pagination<Es7Book> esResult = bookElasticSearchConsr.search(dto);
List<BookDto> bookList = new ArrayList<>();
// 获取平台端所有账号用户名
if (CollectionUtils.isNotEmpty(esResult.getList())) {
Map<Long, String> pcloudUserMap = partyConsr.getAllUserLoginName(0L, SystemCode.pcloud.code);
Map<String, BookTypeDto> typeCodeMap = bookTypeDao.getTypeCodeMap();
esResult.getList().forEach((esBook) -> bookList.add(doBookProcess(esBook, pcloudUserMap, typeCodeMap)));
}
PageBeanNew<BookDto> result = new PageBeanNew<>();
result.setCurrentPage(esResult.getCurrentPage());
result.setNumPerPage(esResult.getPageSize());
result.setRecordList(bookList);
result.setTotalCount((int) esResult.getTotalCount());
return result;
}
private BookDto doBookProcess(Es7Book esBook, Map<Long, String> pcloudUserMap, Map<String, BookTypeDto> typeCodeMap) {
BookDto bookDto = Converter.convert(esBook);
Integer freezeStatus = BookFreezeEnum.WAIT_FREEZE.value;
boolean isFundSupport = false;
Es7BookFreeze bf = findOneByOrderFreezetime(esBook.getBookFreezeList());
String transferor = bf == null ? null : bf.getTransferor();
if (CollectionUtils.isNotEmpty(bookDto.getBookFunds())) {
for (BookFundDto bookFundDto : bookDto.getBookFunds()) {
transferor = Optional.ofNullable(transferor).orElseGet(bookFundDto::getTransferor);
Date startTime = bookFundDto.getStartTime();
Date endTime = bookFundDto.getEndTime();
if (new Date().before(startTime)) {
bookFundDto.setButton(2);
freezeStatus = BookFreezeEnum.NO_FREEZE.value;
} else if (new Date().after(startTime) && new Date().before(endTime)) {
bookFundDto.setButton(1);
freezeStatus = BookFreezeEnum.NO_FREEZE.value;
} else {
bookFundDto.setButton(0);
}
bookFundDto.setOperateUserName(MapUtils.getString(pcloudUserMap,
bookFundDto.getLastModifiedUser(),
bookFundDto.getOperateUserName()));
if (new Date().before(endTime)) {
isFundSupport = true;
}
}
bookDto.setIsHaveFund(true);
}
bookDto.setTransferor(transferor);
bookDto.setIsFundSupport(isFundSupport);
bookDto.setFreezeStatus(BooleanUtils.toIntegerObject(findFreezedRecord(esBook.getBookFreezeList()) == null,
freezeStatus, BookFreezeEnum.FREEZE.value));
bookDto.setIsHaveAdviser(esBook.getIsAdviserBook() && !esBook.getIsBookAdviserDelete());
BookTypeDto bookTypeDto = MapUtils.getObject(typeCodeMap, bookDto.getTypeCode());
bookDto.setTypeName(Optional.ofNullable(bookTypeDto).orElseGet(BookTypeDto::new).getTypeName());
return bookDto;
}
private Es7BookFreeze findOneByOrderFreezetime(List<Es7BookFreeze> fs) {
if (CollectionUtils.isEmpty(fs)) {
return null;
}
fs.sort(Comparator.comparing(Es7BookFreeze::getFreezetime).reversed());
return fs.get(0);
}
private Es7BookFreeze findFreezedRecord(List<Es7BookFreeze> fs) {
if (CollectionUtils.isEmpty(fs)) {
return null;
}
return fs.stream().filter((f) -> f.getIsFreeze() == BookFreezeEnum.FREEZE.value.intValue())
.findFirst().orElse(null);
}
}
......@@ -8,6 +8,7 @@ import com.google.common.collect.Lists;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.biz.BookLabelBiz;
import com.pcloud.book.book.biz.impl.BookElasticSearchBizImpl;
import com.pcloud.book.book.dto.AdviserBookInfoDTO;
import com.pcloud.book.book.dto.BookAssocCount;
import com.pcloud.book.book.dto.BookDetialDTO;
......@@ -26,6 +27,8 @@ import com.pcloud.book.book.vo.request.BookQualifyInfoVO;
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.elasticsearch7.constants.SwitchKey;
import com.pcloud.book.elasticsearch7.search.domain.dto.param.PlatformSearchDto;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
......@@ -37,6 +40,7 @@ import com.pcloud.common.permission.PermissionCode.ServerPermissionCode;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.ListUtils;
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.string.StringUtil;
......@@ -79,6 +83,9 @@ public class BookFacadeImpl implements BookFacade {
@Autowired
private BookLabelBiz bookLabelBiz;
@Autowired
private BookElasticSearchBizImpl bookElasticSearchBiz;
/**
* 创建书籍
*/
......@@ -256,8 +263,24 @@ public class BookFacadeImpl implements BookFacade {
if (currentPage == null || numPerPage == null || currentPage < 0 || numPerPage < 0) {
throw BookBizException.PAGE_PARAM_DELETION;
}
return new ResponseDto<>(bookBiz.getListPage(isbn, bookName, publish, fundName,
serialNumber, isCurrentMonth, currentPage, numPerPage));
if (JedisClusterUtils.exists(SwitchKey.PLATFORM_SEARCH_ELASTICSEARCH)) {
PlatformSearchDto param = new PlatformSearchDto();
param.setPublish(publish);
param.setFundName(fundName);
param.setBookName(bookName);
param.setIsbn(isbn);
param.setSerialNumber(serialNumber);
param.setIsCurrentMonth(isCurrentMonth);
// 页面起始为0,故+1
param.setCurrentPage(currentPage + 1);
param.setPageSize(numPerPage);
return new ResponseDto<>(bookElasticSearchBiz.getListPage(param));
} else {
return new ResponseDto<>(bookBiz.getListPage(isbn, bookName, publish, fundName,
serialNumber, isCurrentMonth, currentPage, numPerPage));
}
}
/**
......
package com.pcloud.book.consumer.book.elasticsearch;
import com.pcloud.book.elasticsearch7.entity.Es7Book;
import com.pcloud.book.elasticsearch7.search.domain.dto.param.PlatformSearchDto;
import com.pcloud.book.elasticsearch7.search.facade.PlatformBookSearchFacade;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.universe.commons.paging.Pagination;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* book elasticsearch
*/
@Component
public class BookElasticSearchConsr {
/**
* logger
*/
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private PlatformBookSearchFacade platformBookSearchFacade;
public Pagination<Es7Book> search(PlatformSearchDto dto) {
try {
ResponseDto<Pagination<Es7Book>> r = platformBookSearchFacade.search(dto);
return r.getData();
} catch (Exception e) {
logger.error("platform book es search exception.", e);
}
return new Pagination<>();
}
}
package com.pcloud.book.util.common;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookFundDto;
import com.pcloud.book.elasticsearch7.entity.Es7Book;
import com.pcloud.book.elasticsearch7.entity.Es7BookFund;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.cglib.beans.BeanCopier;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Converter {
private Converter() {}
private static final BeanCopier BOOK_COPIER = BeanCopier.create(Es7Book.class, BookDto.class, false);
private static final BeanCopier FUND_COPIER = BeanCopier.create(Es7BookFund.class, BookFundDto.class, false);
public static BookDto convert(Es7Book book) {
if (book == null) {
return null;
}
BookDto dto = new BookDto();
BOOK_COPIER.copy(book, dto, null);
if (CollectionUtils.isNotEmpty(book.getBookFundList())) {
List<BookFundDto> funds = new ArrayList<>();
book.getBookFundList().forEach((f) -> {
BookFundDto fundDto = new BookFundDto();
FUND_COPIER.copy(f, fundDto, null);
funds.add(fundDto);
});
funds.sort(Comparator.comparing(BookFundDto::getStartTime).reversed());
dto.setBookFunds(funds);
}
return dto;
}
}
package com.pcloud.book.test;
import com.alibaba.fastjson.JSON;
import com.pcloud.book.BookApplication;
import com.pcloud.book.elasticsearch7.entity.Es7Book;
import com.pcloud.book.elasticsearch7.search.domain.dto.param.PlatformSearchDto;
import com.pcloud.book.elasticsearch7.search.facade.PlatformBookSearchFacade;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.universe.commons.paging.Pagination;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {BookApplication.class})
public class PlatformBookSearchFacadeTest {
@Autowired
private PlatformBookSearchFacade platformBookSearchFacade;
@Test
public void testSearch() {
PlatformSearchDto dto = new PlatformSearchDto();
dto.setFundName(" 上海基金");
ResponseDto<Pagination<Es7Book>> r = platformBookSearchFacade.search(dto);
log.info(JSON.toJSONString(r));
}
}
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