Commit 2ed0030a by 郑勇

bug: [none] 优化erp用的接口

parent ae95e994
......@@ -70,6 +70,7 @@ import com.pcloud.book.consumer.user.BookcaseConsr;
import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.es.entity.ESBookAndAdviser;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.biz.ResourcePageBiz;
import com.pcloud.book.group.dao.BookAppletSceneDao;
......@@ -139,9 +140,11 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.w3c.dom.NameList;
import java.math.BigDecimal;
import java.util.ArrayList;
......@@ -1025,18 +1028,22 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
@ParamLog("获取编辑书刊列表(ERP项目用)")
public PageBeanNew<ErpAdviserBookVO> listAdviserBook4Erp(String isbn, String uniqueNumber, String adviserName, Long agentId, Integer currentPage, Integer numPerPage) {
Map<String, Object> paramMap = new HashMap<>();
List<String> listName=new ArrayList<>();
if(!StringUtil.isEmpty(isbn)){
String [] nameList = isbn.trim().split("[\u00A0|\u3000|\u0020]");
listName=Lists.newArrayList(nameList);
paramMap.put("nameList", Lists.newArrayList(nameList));
}
paramMap.put("isbn", isbn);
paramMap.put("uniqueNumber", uniqueNumber);
List<Long> adviserIdList=new ArrayList<>();
if(!StringUtil.isEmpty(adviserName)) {
List<Long> adviserIds = adviserConsr.getAdviserIdsByName(adviserName);
if(CollectionUtils.isEmpty(adviserIds)) {
return new PageBeanNew<>(currentPage, numPerPage, new ArrayList<>());
}
paramMap.put("adviserIds", adviserIds);
adviserIdList=adviserIds;
}
if(agentId != null && agentId > 0){
......@@ -1047,20 +1054,61 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
if(paramMap.containsKey("adviserIds")){
List<Long> adviserIds = (List<Long>)paramMap.get("adviserIds");
adviserIds.retainAll(allAdvisers4Agent);
adviserIdList=adviserIds;
} else {
paramMap.put("adviserIds", allAdvisers4Agent);
adviserIdList=allAdvisers4Agent;
}
}
PageBeanNew<ErpAdviserBookVO> pageBeanNew = bookAdviserDao.listPageNew(new PageParam(currentPage, numPerPage), paramMap, "listAdviserBook4Erp");
List<ErpAdviserBookVO> bookVOS = pageBeanNew.getRecordList();
//PageBeanNew<ErpAdviserBookVO> pageBeanNew = bookAdviserDao.listPageNew(new PageParam(currentPage, numPerPage), paramMap, "listAdviserBook4Erp");
Page<ESBookAndAdviser> page= esBookAndAdviserBiz.getESBooks4Erp(isbn,uniqueNumber, listName,adviserIdList,currentPage,numPerPage);
if(null==page){
return new PageBeanNew<>(currentPage, numPerPage,0, new ArrayList<>());
}
if(CollUtil.isEmpty(page.getContent())){
return new PageBeanNew<>(currentPage, numPerPage,Long.valueOf(page.getTotalElements()).intValue(), new ArrayList<>());
}
List<ESBookAndAdviser> esBookAndAdvisers = page.getContent();
List<ErpAdviserBookVO> bookVOS = changeToErpBookVO(esBookAndAdvisers);
if(!CollectionUtils.isEmpty(bookVOS)) {
List<Long> adviserIds = bookVOS.stream().filter(s -> s.getAdviserId() != null).map(ErpAdviserBookVO::getAdviserId).distinct().collect(Collectors.toList());
List<Long> channelIds = bookVOS.stream().filter(s -> s.getChannelId() != null).map(ErpAdviserBookVO::getChannelId).distinct().collect(Collectors.toList());
List<Long> bookIds = bookVOS.stream().filter(s -> s.getBookId() != null).map(ErpAdviserBookVO::getBookId).distinct().collect(Collectors.toList());
Map<Long, UserLogin> userLoginInfoMap= adviserConsr.getUserLoginInfoList(adviserIds);
Map<Long, AdviserBaseInfoDto> adviserAgentMap = adviserConsr.getAdviserId2AdviserInfoDtoMap(adviserIds);
Map<Long, String> channelNameMap = channelConsr.getNamesByIdList(channelIds);
List<Long> list = bookFundBiz.listHaveFundBooks(bookIds);
Set<Long> setAdviserIds=new HashSet<>();
Set<Long> setChannelIds=new HashSet<>();
Set<Long> setBookIds=new HashSet<>();
for (ErpAdviserBookVO bookVO : bookVOS) {
addIfNonNull(setAdviserIds,bookVO.getAdviserId());
addIfNonNull(setChannelIds,bookVO.getChannelId());
addIfNonNull(setBookIds,bookVO.getBookId());
}
List<Long> adviserIds = Lists.newArrayList(setAdviserIds);
List<Long> channelIds = Lists.newArrayList(setChannelIds);
List<Long> bookIds = Lists.newArrayList(setBookIds);
Map<Long, UserLogin> userLoginInfoMap= new HashMap<>();
Map<Long, AdviserBaseInfoDto> adviserAgentMap = new HashMap<>();
Map<Long, String> channelNameMap = new HashMap<>();
Map<Long, BookDto> bookDtoMapMap = new HashMap<>();
CompletableFuture<Map<Long, UserLogin>> userLoginInfoMapFuture=CompletableFuture.supplyAsync(()->{
return adviserConsr.getUserLoginInfoList(adviserIds);
},ThreadPoolUtils.OTHER_THREAD_POOL);
CompletableFuture<Map<Long, AdviserBaseInfoDto>> adviserAgentMapFuture=CompletableFuture.supplyAsync(()->{
return adviserConsr.getAdviserId2AdviserInfoDtoMap(adviserIds);
},ThreadPoolUtils.OTHER_THREAD_POOL);
CompletableFuture<Map<Long, String>> channelNameMapFuture=CompletableFuture.supplyAsync(()->{
return channelConsr.getNamesByIdList(channelIds);
},ThreadPoolUtils.OTHER_THREAD_POOL);
CompletableFuture<Map<Long, BookDto>> bookDtoMapFuture=CompletableFuture.supplyAsync(()->{
return bookBiz.listBaseByIds(bookIds);
},ThreadPoolUtils.OTHER_THREAD_POOL);
CompletableFuture.allOf(userLoginInfoMapFuture, adviserAgentMapFuture,channelNameMapFuture,bookDtoMapFuture);
try{
userLoginInfoMap=userLoginInfoMapFuture.get(10,TimeUnit.SECONDS);
adviserAgentMap=adviserAgentMapFuture.get(10,TimeUnit.SECONDS);
channelNameMap=channelNameMapFuture.get(10,TimeUnit.SECONDS);
bookDtoMapMap=bookDtoMapFuture.get(10,TimeUnit.SECONDS);
} catch (InterruptedException | TimeoutException | ExecutionException e) {
LOGGER.error("[exportMonthReport] 并行导出word失败! err:{}", e.getMessage(), e);
}
//List<Long> list = bookFundBiz.listHaveFundBooks(bookIds);
for (ErpAdviserBookVO bookVO : bookVOS) {
Long adviserId = bookVO.getAdviserId();
if(adviserId != null && MapUtils.isNotEmpty(userLoginInfoMap) && userLoginInfoMap.containsKey(adviserId)) {
......@@ -1077,13 +1125,45 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
if(bookVO.getChannelId() != null && MapUtils.isNotEmpty(channelNameMap) && channelNameMap.containsKey(bookVO.getChannelId())) {
bookVO.setChannelName(channelNameMap.get(bookVO.getChannelId()));
}
bookVO.setIsFundSupport(false);
if(bookVO.getBookId() != null && MapUtils.isNotEmpty(bookDtoMapMap) && bookDtoMapMap.containsKey(bookVO.getBookId())) {
BookDto bookDto = bookDtoMapMap.get(bookVO.getBookId());
bookVO.setCoverImg(Optional.ofNullable(bookDto).map(a->a.getCoverImg()).orElse(null));
}
/*bookVO.setIsFundSupport(false);
if(!ListUtils.isEmpty(list) && list.contains(bookVO.getBookId())) {
bookVO.setIsFundSupport(true);
}*/
}
}
return new PageBeanNew<>(currentPage, numPerPage, (int) page.getTotalElements(), bookVOS);
}
return pageBeanNew;
private <E> void addIfNonNull(Collection<E> s, E v) {
if (v != null) {
s.add(v);
}
}
private List<ErpAdviserBookVO> changeToErpBookVO(List<ESBookAndAdviser> esBookAndAdvisers) {
List<ErpAdviserBookVO> bookDtos=new ArrayList<>();
for (ESBookAndAdviser esBookAndAdviser:esBookAndAdvisers){
ErpAdviserBookVO bookDto=new ErpAdviserBookVO();
BeanUtils.copyProperties(esBookAndAdviser, bookDto);
bookDto.setBookId(esBookAndAdviser.getBookId()==null?null:new Long(esBookAndAdviser.getBookId()));
bookDto.setBookAdviserId(esBookAndAdviser.getBookAdviserId()==null?null:new Long(esBookAndAdviser.getBookAdviserId()));
bookDto.setAdviserId(esBookAndAdviser.getAdviserId()==null?null:new Long(esBookAndAdviser.getAdviserId()));
bookDto.setChannelId(esBookAndAdviser.getChannelId()==null?null:new Long(esBookAndAdviser.getChannelId()));
bookDto.setIsbn(esBookAndAdviser.getIsbn());
bookDto.setBookName(esBookAndAdviser.getBookName());
bookDto.setUniqueNumber(null==bookDto.getBookId() ? null : StrUtil.concat(true,"BK",bookDto.getBookId().toString()));
if (null != esBookAndAdviser.getIsFundSupport() && esBookAndAdviser.getIsFundSupport()==1) {
bookDto.setIsFundSupport(true);
} else {
bookDto.setIsFundSupport(false);
}
bookDtos.add(bookDto);
}
return bookDtos;
}
/**
......
......@@ -55,4 +55,9 @@ public interface ESBookAndAdviserBiz {
* * @param null
*/
Page<ESBookAndAdviser> getESBooksOrderByChose(String keyword, List<Long> choseBookIdList, Integer currentPage, Integer numPerPage);
/**
* 获取编辑书刊列表(ERP项目用)
*/
Page<ESBookAndAdviser> getESBooks4Erp(String isbn, String uniqueNumber, List<String> listName, List<Long> adviserIdList, Integer currentPage, Integer numPerPage);
}
......@@ -36,6 +36,8 @@ import com.pcloud.common.utils.robot.WeWorkWebHookRobotUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.facade.tradecenter.dto.BookIncomeQueryVo;
import com.pcloud.facade.tradecenter.dto.IncomeBackDto;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
......@@ -43,6 +45,8 @@ import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.WildcardQueryBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -669,4 +673,40 @@ public class ESBookAndAdviserBizImpl implements ESBookAndAdviserBiz {
Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
return search;
}
@Override
public Page<ESBookAndAdviser> getESBooks4Erp(String isbn, String uniqueNumber, List<String> listName, List<Long> adviserIdList, Integer currentPage, Integer numPerPage) {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("isBookDelete", 0))
.filter(QueryBuilders.termQuery("isBookAdviserDelete",0))
.mustNot(QueryBuilders.termQuery("bookAdviserId",0));
if(StrUtil.isNotBlank(uniqueNumber)){
boolQueryBuilder.filter(wildcardQuery("bookId",StrUtil.replace(uniqueNumber,"BK","")));
}
if(StrUtil.isNotBlank(isbn)){
BoolQueryBuilder contentCondition = QueryBuilders.boolQuery();
contentCondition.should(QueryBuilders.termQuery("isbn",isbn));
contentCondition.should(wildcardQuery("bookName",isbn));
if(CollUtil.isNotEmpty(listName)){
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
for (String name : listName) {
queryBuilder.filter(wildcardQuery("bookName",name));
}
contentCondition.should(queryBuilder);
}
boolQueryBuilder.filter(contentCondition);
}
if(CollUtil.isNotEmpty(adviserIdList)){
boolQueryBuilder.filter(QueryBuilders.termsQuery("adviserId", adviserIdList));
}
Sort sort = new Sort(Sort.Direction.DESC, "createdDate", "bookId");
PageRequest pageRequest = new PageRequest(currentPage, numPerPage, sort);
Page<ESBookAndAdviser> search = bookAndAdviserRepository.search(boolQueryBuilder, pageRequest);
return search;
}
public static WildcardQueryBuilder wildcardQuery(String key, String value) {
return QueryBuilders.wildcardQuery(key, '*' + StringUtils.trim(value) + '*');
}
}
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