From 78ebea470d2ce9eb10c612c800eed09ccb2c6c7a Mon Sep 17 00:00:00 2001 From: buerjun Date: Mon, 3 Jul 2023 11:43:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=8E=A8=E8=8D=90=E6=A1=88?= =?UTF-8?q?=E4=BE=8B=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=982?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CasesServiceImpl.java | 132 ++++++------------ .../service/impl/CasesServiceImplTest.java | 2 +- 2 files changed, 44 insertions(+), 90 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java index 136c5ef6..52291ad0 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/impl/CasesServiceImpl.java @@ -25,6 +25,8 @@ import com.xboe.school.vo.CasesVo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -326,99 +328,51 @@ public class CasesServiceImpl implements ICasesService { @Override public PageList queryRecommendPageCasesV2(CasePageVo caseVo) { - PageList page = null; - QueryBuilder query=QueryBuilder.from("CasesRecommendPushRecord a, Cases b"); - query.addFields("b"); - query.addFilter(FieldFilters.eqField("a.caseId", "b.id")); - query.addFilter(FieldFilters.eq("b.deleted",false)); - query.addFilter(FieldFilters.eq("a.pushUserId",caseVo.getUserId())); - List likes = new ArrayList(); - String keyword = caseVo.getKeyWord(); - likes.add(FieldFilters.like("b.title", LikeMatchMode.ANYWHERE, keyword)); - likes.add(FieldFilters.like("b.authorName", LikeMatchMode.ANYWHERE, keyword)); - likes.add(FieldFilters.like("b.keyword1", LikeMatchMode.ANYWHERE, keyword)); - likes.add(FieldFilters.like("b.keyword2", LikeMatchMode.ANYWHERE, keyword)); - likes.add(FieldFilters.like("b.keyword3", LikeMatchMode.ANYWHERE, keyword)); - likes.add(FieldFilters.like("b.keyword4", LikeMatchMode.ANYWHERE, keyword)); - likes.add(FieldFilters.like("b.keyword5", LikeMatchMode.ANYWHERE, keyword)); - List filters = new ArrayList<>(); + PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex() - 1, caseVo.getPageSize()); + Page cases = casesRecordDao.queryList(pageRequest,caseVo); + PageList pageList = new PageList<>(); + pageList.setCount((int) cases.getTotalElements()); + pageList.setPageSize(cases.getSize()); + List content = cases.getContent(); + List caseIds = content.stream().map(Cases::getId).collect(Collectors.toList()); + String userId = caseVo.getUserId(); + if (CollUtil.isNotEmpty(caseIds)) { + QueryBuilder recommendCasesQuery = QueryBuilder.from(CasesRecommendPushRecord.class); + recommendCasesQuery.addField("new CasesRecommendPushRecord(recommendId,caseId)"); + List subFilters = new ArrayList<>(); + subFilters.add(FieldFilters.eq("pushUserId", userId)); + subFilters.add(FieldFilters.in("caseId", caseIds)); + subFilters.add(FieldFilters.eq("pushStatus", 3)); + subFilters.add(FieldFilters.eq("deleted", Boolean.FALSE)); - if (StringUtil.isNotBlank(caseVo.getKeyWord())) { - filters.add(FieldFilters.or(likes)); - } - //创建时间过滤 - List years = caseVo.getYears(); - if (CollUtil.isNotEmpty(years)) { - filters.add(new CustomFieldInFilter("YEAR(b.sysCreateTime)", "b.sysCreateTime", years)); - } -//增加只是查询有附件的 - filters.add(FieldFilters.isNotNull("b.filePath")); - filters.add(FieldFilters.ne("b.filePath", "")); - - String majorType = caseVo.getMajorType(); - if (StringUtil.isNotBlank(majorType)) { - List casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ",")); - if (CollUtil.isNotEmpty(casesTypes)) { - List caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList()); - query.addFilter(FieldFilters.in("b.id", caseIds)); - } else { - return page; - } - } - List orgDomainDtos = caseVo.getOrgDomainDtos(); - IFieldFilter orgDomain = null; - if (CollUtil.isNotEmpty(orgDomainDtos)) { - for (int i = 0; i < orgDomainDtos.size(); i++) { - OrgDomainDto domainDto = orgDomainDtos.get(i); - String orgDomainParent = domainDto.getParent(); - IFieldFilter itemFilter = FieldFilters.eq("b.orgDomainParent", orgDomainParent); - List orgDomainParent2 = domainDto.getChildren(); - if (CollUtil.isNotEmpty(orgDomainParent2)) { - List seconds = orgDomainParent2.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); - IFieldFilter orgDomainParentFilter = FieldFilters.in("b.orgDomainParent2", seconds); - itemFilter = FieldFilters.and(itemFilter, orgDomainParentFilter); - } - for (OrgDomainDto orgDomainDto : orgDomainParent2) { - List orgDomainParent3 = orgDomainDto.getChildren(); - if (CollUtil.isNotEmpty(orgDomainParent3)) { - List thirds = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); - IFieldFilter orgDomainParent3Filter = FieldFilters.eq("b.orgDomainParent3", thirds); - itemFilter = FieldFilters.and(itemFilter, orgDomainParent3Filter); - } - } - if (i == 0) { - orgDomain = itemFilter; - } else { - orgDomain = FieldFilters.or(orgDomain, itemFilter); + QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters) + .addOrder("sysCreateTime", OrderDirection.DESC) + .addGroupBy("caseId"); + List pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder()); + if (CollUtil.isNotEmpty(pushRecords)) { + List rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).collect(Collectors.toList()); + QueryBuilder builder = QueryBuilder.from(CasesRecommend.class); + List recommendFilters = new ArrayList<>(); + recommendFilters.add(FieldFilters.eq("deleted", Boolean.FALSE)); + recommendFilters.add(FieldFilters.in("id", rIds)); + builder.addFilters(recommendFilters); + List recommands = casesRecommendDao.findList(builder.builder()); + if (CollUtil.isNotEmpty(recommands)) { + Map collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), item->item)); + content.forEach(it -> { + CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId())); + if (Objects.nonNull(one)) { + CasesRecommend recommend = collect.get(one.getRecommendId()); + it.setBreCommend(1); + it.setRecommendOrgName(recommend.getRecommendOrgName()); + it.setSysCreateTime(recommend.getRecommendTime()); + } + }); } } } - if (Objects.nonNull(orgDomain)) { - filters.add(orgDomain); - } - - if (StringUtils.isNotBlank(caseVo.getCaseType())) { - filters.add(FieldFilters.eq("b.caseType", caseVo.getCaseType())); - } - OrderCondition order = null; - if (StringUtils.isNotBlank(caseVo.getOrderField())) { - if (caseVo.getOrderAsc() == null || caseVo.getOrderAsc()) { - order = OrderCondition.asc(caseVo.getOrderField()); - } else { - order = OrderCondition.desc(caseVo.getOrderField()); - } - } else { - order = OrderCondition.desc("a.pushTime"); - } - - query.addFilters(filters); - query.addGroupBy("b.id"); - query.addOrder(order); -// query.addOrder(OrderCondition.rand()); - query.setPageIndex(caseVo.getPageIndex()); - query.setPageSize(caseVo.getPageSize()); - page = casesDao.findPage(query.builder()); - return page; + pageList.setList(content); + return pageList; } public static void main(String[] args) { diff --git a/servers/boe-server-all/src/test/java/com/xboe/module/boecase/service/impl/CasesServiceImplTest.java b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/service/impl/CasesServiceImplTest.java index 7d626bf7..9dfc8ac4 100644 --- a/servers/boe-server-all/src/test/java/com/xboe/module/boecase/service/impl/CasesServiceImplTest.java +++ b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/service/impl/CasesServiceImplTest.java @@ -41,7 +41,7 @@ class CasesServiceImplTest { @Test void queryRecommendPageCasesV2() throws JsonProcessingException { - String jsonStr = "{\"pageIndex\":1,\"pageSize\":5,\"majorType\":\"\",\"orderAsc\":false,\"excellent\":false,\"orgDomainDtos\":[],\"caseType\":\"\",\"authorName\":\"\",\"notInIds\":[],\"type\":\"recommend\",\"userId\":\"\",\"parent\":\"\",\"children\":[],\"name\":\"\",\"years\":[2023]}\n"; + String jsonStr = "{\"pageIndex\":1,\"pageSize\":5,\"majorType\":\"\",\"orderAsc\":false,\"excellent\":false,\"orgDomainDtos\":[],\"caseType\":\"\",\"authorName\":\"\",\"notInIds\":[],\"type\":\"recommend\",\"userId\":\"\",\"parent\":\"\",\"children\":[],\"name\":\"\",\"years\":[2023]}"; ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); CasePageVo pageVo = mapper.readValue(jsonStr, CasePageVo.class);