解决推荐案例报错问题2

This commit is contained in:
buerjun
2023-07-03 11:43:36 +08:00
parent a0135ecdd1
commit 78ebea470d
2 changed files with 44 additions and 90 deletions

View File

@@ -25,6 +25,8 @@ import com.xboe.school.vo.CasesVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; 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 org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -326,99 +328,51 @@ public class CasesServiceImpl implements ICasesService {
@Override @Override
public PageList<Cases> queryRecommendPageCasesV2(CasePageVo caseVo) { public PageList<Cases> queryRecommendPageCasesV2(CasePageVo caseVo) {
PageList<Cases> page = null; PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex() - 1, caseVo.getPageSize());
QueryBuilder query=QueryBuilder.from("CasesRecommendPushRecord a, Cases b"); Page<Cases> cases = casesRecordDao.queryList(pageRequest,caseVo);
query.addFields("b"); PageList<Cases> pageList = new PageList<>();
query.addFilter(FieldFilters.eqField("a.caseId", "b.id")); pageList.setCount((int) cases.getTotalElements());
query.addFilter(FieldFilters.eq("b.deleted",false)); pageList.setPageSize(cases.getSize());
query.addFilter(FieldFilters.eq("a.pushUserId",caseVo.getUserId())); List<Cases> content = cases.getContent();
List<IFieldFilter> likes = new ArrayList<IFieldFilter>(); List<String> caseIds = content.stream().map(Cases::getId).collect(Collectors.toList());
String keyword = caseVo.getKeyWord(); String userId = caseVo.getUserId();
likes.add(FieldFilters.like("b.title", LikeMatchMode.ANYWHERE, keyword)); if (CollUtil.isNotEmpty(caseIds)) {
likes.add(FieldFilters.like("b.authorName", LikeMatchMode.ANYWHERE, keyword)); QueryBuilder recommendCasesQuery = QueryBuilder.from(CasesRecommendPushRecord.class);
likes.add(FieldFilters.like("b.keyword1", LikeMatchMode.ANYWHERE, keyword)); recommendCasesQuery.addField("new CasesRecommendPushRecord(recommendId,caseId)");
likes.add(FieldFilters.like("b.keyword2", LikeMatchMode.ANYWHERE, keyword)); List<IFieldFilter> subFilters = new ArrayList<>();
likes.add(FieldFilters.like("b.keyword3", LikeMatchMode.ANYWHERE, keyword)); subFilters.add(FieldFilters.eq("pushUserId", userId));
likes.add(FieldFilters.like("b.keyword4", LikeMatchMode.ANYWHERE, keyword)); subFilters.add(FieldFilters.in("caseId", caseIds));
likes.add(FieldFilters.like("b.keyword5", LikeMatchMode.ANYWHERE, keyword)); subFilters.add(FieldFilters.eq("pushStatus", 3));
List<IFieldFilter> filters = new ArrayList<>(); subFilters.add(FieldFilters.eq("deleted", Boolean.FALSE));
if (StringUtil.isNotBlank(caseVo.getKeyWord())) { QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters)
filters.add(FieldFilters.or(likes)); .addOrder("sysCreateTime", OrderDirection.DESC)
} .addGroupBy("caseId");
//创建时间过滤 List<CasesRecommendPushRecord> pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder());
List<Object> years = caseVo.getYears(); if (CollUtil.isNotEmpty(pushRecords)) {
if (CollUtil.isNotEmpty(years)) { List<String> rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).collect(Collectors.toList());
filters.add(new CustomFieldInFilter("YEAR(b.sysCreateTime)", "b.sysCreateTime", years)); QueryBuilder builder = QueryBuilder.from(CasesRecommend.class);
} List<IFieldFilter> recommendFilters = new ArrayList<>();
//增加只是查询有附件的 recommendFilters.add(FieldFilters.eq("deleted", Boolean.FALSE));
filters.add(FieldFilters.isNotNull("b.filePath")); recommendFilters.add(FieldFilters.in("id", rIds));
filters.add(FieldFilters.ne("b.filePath", "")); builder.addFilters(recommendFilters);
List<CasesRecommend> recommands = casesRecommendDao.findList(builder.builder());
String majorType = caseVo.getMajorType(); if (CollUtil.isNotEmpty(recommands)) {
if (StringUtil.isNotBlank(majorType)) { Map<String, CasesRecommend> collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), item->item));
List<CasesMajorType> casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ",")); content.forEach(it -> {
if (CollUtil.isNotEmpty(casesTypes)) { CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId()));
List<String> caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList()); if (Objects.nonNull(one)) {
query.addFilter(FieldFilters.in("b.id", caseIds)); CasesRecommend recommend = collect.get(one.getRecommendId());
} else { it.setBreCommend(1);
return page; it.setRecommendOrgName(recommend.getRecommendOrgName());
} it.setSysCreateTime(recommend.getRecommendTime());
} }
List<OrgDomainDto> 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<OrgDomainDto> orgDomainParent2 = domainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent2)) {
List<String> 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<OrgDomainDto> orgDomainParent3 = orgDomainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent3)) {
List<String> 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);
} }
} }
} }
if (Objects.nonNull(orgDomain)) { pageList.setList(content);
filters.add(orgDomain); return pageList;
}
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;
} }
public static void main(String[] args) { public static void main(String[] args) {

View File

@@ -41,7 +41,7 @@ class CasesServiceImplTest {
@Test @Test
void queryRecommendPageCasesV2() throws JsonProcessingException { 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(); ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
CasePageVo pageVo = mapper.readValue(jsonStr, CasePageVo.class); CasePageVo pageVo = mapper.readValue(jsonStr, CasePageVo.class);