diff --git a/servers/boe-server-all/src/main/java/com/xboe/enums/CasesSearchTypeEnum.java b/servers/boe-server-all/src/main/java/com/xboe/enums/CasesSearchTypeEnum.java new file mode 100644 index 00000000..c91f4fcc --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/enums/CasesSearchTypeEnum.java @@ -0,0 +1,22 @@ +package com.xboe.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * excellent 最佳案例 + * recommend 推荐 + */ +@AllArgsConstructor +@Getter +public enum CasesSearchTypeEnum { + + excellent("excellent","最佳案例"), + recommend("recommend","推荐"), + ; + + private String type; + private String name; + + +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java index 53eee909..ae8461ba 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/api/CasesApi.java @@ -111,6 +111,40 @@ public class CasesApi extends ApiBaseController { } return success(views); } + + @PostMapping("/queryListV2") + public JsonResponse> queryCaseBreV2(@RequestBody CasePageVo req){ + String type = req.getType(); + PageList views = null; + if (type.equals("recommend")) { + views = casesService.queryRecommendPageCasesV2(req); + } else { + views = casesService.queryPageCasesV2(req); + } + + if(views!=null){ + if(views.getList()!=null && !views.getList().isEmpty()){ + for (Cases c:views.getList()) { + StringBuffer stringBuffer = new StringBuffer(); + List caseId = casesMajorTypeDao.findList(FieldFilters.eq("caseId", c.getId())); + if(caseId!=null && !caseId.isEmpty()){ + for (CasesMajorType cm:caseId) { + stringBuffer.append(cm.getMajorId()); + stringBuffer.append(","); + } + } + if(stringBuffer.length()>0){ + stringBuffer.deleteCharAt(stringBuffer.length()-1); + c.setMajorType(stringBuffer.toString()); + } + + } + } + } + return success(views); + } + + /** * 案例分页搜索 是否置顶 * */ diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasePageVo.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasePageVo.java new file mode 100644 index 00000000..87e1625c --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/CasePageVo.java @@ -0,0 +1,54 @@ +package com.xboe.module.boecase.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class CasePageVo extends PageDto { + + + private String keyWord; + + private Boolean breCommend; + + private String orderField; + + private Boolean orderAsc; + + private List orgDomainDtos;//后台查询一级 + + /** + * 专业分类 + */ + private String majorType; + + /** + * 置顶 + */ + private Boolean isTop; + + private String caseType; + + /** + * 最佳案例 + */ + private Boolean excellent; + + + private String authorName; + + private List years; + + /** + * 已经返回给前端的案例需要过滤掉 + */ + private List notInIds; + + /** + * excellent 最佳案例 + * recommend 推荐 + */ + private String type; + +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/OrgDomainDto.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/OrgDomainDto.java new file mode 100644 index 00000000..ee7f58c5 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/OrgDomainDto.java @@ -0,0 +1,20 @@ +package com.xboe.module.boecase.dto; + +import lombok.Data; + +@Data +public class OrgDomainDto { + + /** + * 组织领域1级 + */ + private String orgDomainParent; + /** + * 组织领域2级 + */ + private String orgDomainParent2; + /** + * 组织领域3级 + */ + private String orgDomainParent3; +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/PageDto.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/PageDto.java new file mode 100644 index 00000000..c62be937 --- /dev/null +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dto/PageDto.java @@ -0,0 +1,10 @@ +package com.xboe.module.boecase.dto; + +import lombok.Data; + +@Data +public class PageDto { + + private int pageIndex = 1; + private int pageSize = 10; +} diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java index 38302726..ba5aec6e 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/Cases.java @@ -232,6 +232,9 @@ public class Cases extends BaseEntity { private String caseValue; + /** + * 最佳案例标识 + */ @Column(name = "excellent") private Boolean excellent; diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java index c49e7ea2..1eaf6738 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/service/ICasesService.java @@ -14,6 +14,8 @@ public interface ICasesService{ * */ PageList queryPageCases(int pageIndex, int pageSize, CaseVo caseVo); + PageList queryPageCasesV2(CasePageVo caseVo); + /** * 案例管理列表搜索 * */ @@ -97,5 +99,6 @@ public interface ICasesService{ void excellent(String id,Boolean excellent); + PageList queryRecommendPageCasesV2(CasePageVo req); } 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 b56c4e1c..aa79ba9d 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 @@ -7,6 +7,8 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.transaction.Transactional; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.xboe.common.utils.IDGenerator; import com.xboe.module.boecase.dao.CasesMajorTypeDao; import com.xboe.module.boecase.dto.*; @@ -160,6 +162,300 @@ public class CasesServiceImpl implements ICasesService { return page; } + + /** + * 案例分页查询,用于门户的查询 v2 + * */ + @Override + public PageList queryPageCasesV2(CasePageVo caseVo) { + QueryBuilder query=QueryBuilder.from(Cases.class); + PageList page=null; + List filters = new ArrayList<>(); + filters.add(FieldFilters.eq("deleted",false)); + List likes=new ArrayList(); + likes.add(FieldFilters.like("title", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("authorName", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword1", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword2", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword3", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword4", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword5", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + List notInIds = caseVo.getNotInIds(); + if (CollUtil.isNotEmpty(notInIds)) { + filters.add(FieldFilters.notIn("id", notInIds)); + } + + if(StringUtil.isNotBlank(caseVo.getKeyWord())) { + filters.add(FieldFilters.or(likes)); + } + + 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.getOrgDomainParent(); + String orgDomainParent2 = domainDto.getOrgDomainParent2(); + String orgDomainParent3 = domainDto.getOrgDomainParent3(); + List fieldFilters = new ArrayList<>(); + IFieldFilter itemFilter = null; + if (StrUtil.isNotBlank(orgDomainParent)) { + itemFilter = FieldFilters.eq("orgDomainParent",orgDomainParent); + } + if (StrUtil.isNotBlank(orgDomainParent2)) { + IFieldFilter orgDomainParentFilter = FieldFilters.eq("orgDomainParent2", orgDomainParent2); + if (Objects.nonNull(itemFilter)) { + itemFilter = FieldFilters.and(itemFilter, orgDomainParentFilter); + } else { + itemFilter = orgDomainParentFilter; + } + } + if (StrUtil.isNotBlank(orgDomainParent3)) { + IFieldFilter orgDomainParent3Filter = FieldFilters.eq("orgDomainParent3", orgDomainParent3); + if (Objects.nonNull(itemFilter)) { + itemFilter = FieldFilters.and(itemFilter, orgDomainParent3Filter); + } else { + itemFilter = orgDomainParent3Filter; + } + } + if (i==0) { + orgDomain = itemFilter; + } else { + orgDomain = FieldFilters.or(orgDomain, itemFilter); + } + } + } + if (Objects.nonNull(orgDomain)) { + filters.add(orgDomain); + } + //创建时间过滤 + List years = caseVo.getYears(); + if (CollUtil.isNotEmpty(years)) { + FieldFilters.in("YEAR(sysCreateTime)",years); + } + + //增加只是查询有附件的 + filters.add(FieldFilters.isNotNull("filePath")); + filters.add(FieldFilters.ne("filePath","")); + + if(StringUtil.isNotBlank(caseVo.getMajorType())){ + + QueryBuilder from = QueryBuilder.from(CasesMajorType.class); + //前端直接字符串拼接传,后端转化数组 + if(caseVo.getMajorType().contains(",")){ + String[] split = caseVo.getMajorType().split(","); + List strings = Arrays.asList(split); + from.addFilter(FieldFilters.in("majorId",strings)); + }else{ + from.addFilter(FieldFilters.eq("majorId",caseVo.getMajorType())); + } + from.addGroupBy("caseId"); + from.addFields("id","caseId"); +// List list = casesMajorTypeDao.findList(from.builder()); + List listFields=null; + try { + listFields = casesMajorTypeDao.findListFields(from.builder()); + } catch (Exception e) { + log.error("查询失败",e); + } + List list1 = new ArrayList<>(); + if(listFields!=null && !listFields.isEmpty()){ + for (Object[] obj:listFields) { + list1.add((String) obj[1]); + } + } + if(list1!=null &&!list1.isEmpty()){ + query.addFilter(FieldFilters.in("id",list1)); + }else { + //如果所点击的内容分类都没有案例数据,应该返回空 + return page; + } + } + + if(StringUtils.isNotBlank(caseVo.getCaseType())){ + filters.add(FieldFilters.eq("caseType",caseVo.getCaseType())); + } + if(caseVo.getBreCommend()!=null){ + if(!caseVo.getBreCommend()){ + filters.add(FieldFilters.eq("breCommend",0)); + }else { + filters.add(FieldFilters.eq("breCommend", 1)); + } + } + if(caseVo.getIsTop()!=null && caseVo.getIsTop()) { + query.addOrder(OrderCondition.desc("isTop")); + query.addOrder(OrderCondition.desc("topTime")); + } + //如果选择的是优秀案例,那么这里就按优秀案例的试试排序 + if(caseVo.getExcellent()!=null && caseVo.getExcellent()){ + filters.add(FieldFilters.eq("excellent",caseVo.getExcellent())); + } + 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("sysCreateTime"); + } + + query.addFilters(filters); + query.addOrder(order); + query.addOrder(OrderCondition.rand()); + query.setPageIndex(caseVo.getPageIndex()); + query.setPageSize(caseVo.getPageSize()); + page = casesDao.findPage(query.builder()); + + return page; + } + + @Override + public PageList queryRecommendPageCasesV2(CasePageVo caseVo) { + QueryBuilder query=QueryBuilder.from(Cases.class); + PageList page=null; + List filters = new ArrayList<>(); + filters.add(FieldFilters.eq("deleted",false)); + List likes=new ArrayList(); + likes.add(FieldFilters.like("title", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("authorName", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword1", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword2", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword3", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword4", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + likes.add(FieldFilters.like("keyword5", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); + List notInIds = caseVo.getNotInIds(); + if (CollUtil.isNotEmpty(notInIds)) { + filters.add(FieldFilters.notIn("id", notInIds)); + } + + if(StringUtil.isNotBlank(caseVo.getKeyWord())) { + filters.add(FieldFilters.or(likes)); + } + + 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.getOrgDomainParent(); + String orgDomainParent2 = domainDto.getOrgDomainParent2(); + String orgDomainParent3 = domainDto.getOrgDomainParent3(); + List fieldFilters = new ArrayList<>(); + IFieldFilter itemFilter = null; + if (StrUtil.isNotBlank(orgDomainParent)) { + itemFilter = FieldFilters.eq("orgDomainParent",orgDomainParent); + } + if (StrUtil.isNotBlank(orgDomainParent2)) { + IFieldFilter orgDomainParentFilter = FieldFilters.eq("orgDomainParent2", orgDomainParent2); + if (Objects.nonNull(itemFilter)) { + itemFilter = FieldFilters.and(itemFilter, orgDomainParentFilter); + } else { + itemFilter = orgDomainParentFilter; + } + } + if (StrUtil.isNotBlank(orgDomainParent3)) { + IFieldFilter orgDomainParent3Filter = FieldFilters.eq("orgDomainParent3", orgDomainParent3); + if (Objects.nonNull(itemFilter)) { + itemFilter = FieldFilters.and(itemFilter, orgDomainParent3Filter); + } else { + itemFilter = orgDomainParent3Filter; + } + } + if (i==0) { + orgDomain = itemFilter; + } else { + orgDomain = FieldFilters.or(orgDomain, itemFilter); + } + } + } + if (Objects.nonNull(orgDomain)) { + filters.add(orgDomain); + } + //创建时间过滤 + List years = caseVo.getYears(); + if (CollUtil.isNotEmpty(years)) { + FieldFilters.in("YEAR(sysCreateTime)",years); + } + + //增加只是查询有附件的 + filters.add(FieldFilters.isNotNull("filePath")); + filters.add(FieldFilters.ne("filePath","")); + + if(StringUtil.isNotBlank(caseVo.getMajorType())){ + + QueryBuilder from = QueryBuilder.from(CasesMajorType.class); + //前端直接字符串拼接传,后端转化数组 + if(caseVo.getMajorType().contains(",")){ + String[] split = caseVo.getMajorType().split(","); + List strings = Arrays.asList(split); + from.addFilter(FieldFilters.in("majorId",strings)); + }else{ + from.addFilter(FieldFilters.eq("majorId",caseVo.getMajorType())); + } + from.addGroupBy("caseId"); + from.addFields("id","caseId"); +// List list = casesMajorTypeDao.findList(from.builder()); + List listFields=null; + try { + listFields = casesMajorTypeDao.findListFields(from.builder()); + } catch (Exception e) { + log.error("查询失败",e); + } + List list1 = new ArrayList<>(); + if(listFields!=null && !listFields.isEmpty()){ + for (Object[] obj:listFields) { + list1.add((String) obj[1]); + } + } + if(list1!=null &&!list1.isEmpty()){ + query.addFilter(FieldFilters.in("id",list1)); + }else { + //如果所点击的内容分类都没有案例数据,应该返回空 + return page; + } + } + + if(StringUtils.isNotBlank(caseVo.getCaseType())){ + filters.add(FieldFilters.eq("caseType",caseVo.getCaseType())); + } + if(caseVo.getBreCommend()!=null){ + if(!caseVo.getBreCommend()){ + filters.add(FieldFilters.eq("breCommend",0)); + }else { + filters.add(FieldFilters.eq("breCommend", 1)); + } + } + if(caseVo.getIsTop()!=null && caseVo.getIsTop()) { + query.addOrder(OrderCondition.desc("isTop")); + query.addOrder(OrderCondition.desc("topTime")); + } + //如果选择的是优秀案例,那么这里就按优秀案例的试试排序 + if(caseVo.getExcellent()!=null && caseVo.getExcellent()){ + filters.add(FieldFilters.eq("excellent",caseVo.getExcellent())); + } + 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("sysCreateTime"); + } + + query.addFilters(filters); + query.addOrder(order); + query.addOrder(OrderCondition.rand()); + query.setPageIndex(caseVo.getPageIndex()); + query.setPageSize(caseVo.getPageSize()); + page = casesDao.findPage(query.builder()); + + return page; + } + /** * 案例分页查询,是否置顶*/ @Override @@ -647,4 +943,5 @@ public class CasesServiceImpl implements ICasesService { } + }