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 6e813b6c..edbfb3f1 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 @@ -109,6 +109,7 @@ public class CasesApi extends ApiBaseController { public JsonResponse> queryCaseBreV2(@Validated @RequestBody CasePageVo req){ String type = req.getType(); PageList views; + req.setUserId(getCurrent().getAccountId()); if (type.equals("recommend")) { views = casesService.queryRecommendPageCasesV2(req); } else { 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 05039700..3c1e367b 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 @@ -261,6 +261,9 @@ public class Cases extends BaseEntity { @Transient private List majorIds; + @Transient + private String recommendOrgName; + public Cases() { diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java index 8761d514..49b83179 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/entity/CasesRecommendPushRecord.java @@ -91,5 +91,11 @@ public class CasesRecommendPushRecord extends BaseEntity { @Column(name = "remark") private String remark; + public CasesRecommendPushRecord() { + } + public CasesRecommendPushRecord(String recommendId,String caseId) { + this.recommendId = recommendId; + this.caseId = caseId; + } } 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 2308008e..2b70a315 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 @@ -4,17 +4,17 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.text.split.SplitIter; import cn.hutool.core.util.StrUtil; import com.xboe.common.OrderCondition; +import com.xboe.common.OrderDirection; import com.xboe.common.PageList; import com.xboe.common.utils.IDGenerator; import com.xboe.common.utils.StringUtil; import com.xboe.core.orm.*; -import com.xboe.module.boecase.dao.CasesDao; -import com.xboe.module.boecase.dao.CasesMajorTypeDao; -import com.xboe.module.boecase.dao.CasesMajorTypeRepoDao; -import com.xboe.module.boecase.dao.CasesRecordDao; +import com.xboe.module.boecase.dao.*; import com.xboe.module.boecase.dto.*; import com.xboe.module.boecase.entity.Cases; import com.xboe.module.boecase.entity.CasesMajorType; +import com.xboe.module.boecase.entity.CasesRecommend; +import com.xboe.module.boecase.entity.CasesRecommendPushRecord; import com.xboe.module.boecase.service.ICasesService; import com.xboe.module.dict.dao.SysDictionaryDao; import com.xboe.module.dict.entity.DictItem; @@ -22,6 +22,7 @@ import com.xboe.orm.CustomFieldInFilter; 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; @@ -31,10 +32,8 @@ import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.transaction.Transactional; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; @Slf4j @@ -57,8 +56,11 @@ public class CasesServiceImpl implements ICasesService { @Resource private CasesMajorTypeRepoDao casesMajorTypeRepoDao; - @PersistenceContext - private EntityManager entityManager; + @Autowired + private CasesRecommendPushRecordDao casesRecommendPushRecordDao; + + @Autowired + private CasesRecommendDao casesRecommendDao; /** * 案例分页查询,用于门户的查询 @@ -178,11 +180,11 @@ public class CasesServiceImpl implements ICasesService { public PageList queryPageCasesV2(CasePageVo caseVo) { String keyword = caseVo.getKeyWord(); - QueryBuilder query=QueryBuilder.from(Cases.class); - PageList page=null; + QueryBuilder query = QueryBuilder.from(Cases.class); + PageList page = null; List filters = new ArrayList<>(); - filters.add(FieldFilters.eq("deleted",false)); - List likes=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())); @@ -195,37 +197,37 @@ public class CasesServiceImpl implements ICasesService { filters.add(FieldFilters.notIn("id", notInIds)); } - if(StringUtil.isNotBlank(caseVo.getKeyWord())) { + if (StringUtil.isNotBlank(caseVo.getKeyWord())) { filters.add(FieldFilters.or(likes)); } //创建时间过滤 List years = caseVo.getYears(); if (CollUtil.isNotEmpty(years)) { - filters.add(new CustomFieldInFilter("YEAR(sysCreateTime)","sysCreateTime",years)); + filters.add(new CustomFieldInFilter("YEAR(sysCreateTime)", "sysCreateTime", years)); } //增加只是查询有附件的 filters.add(FieldFilters.isNotNull("filePath")); - filters.add(FieldFilters.ne("filePath","")); + filters.add(FieldFilters.ne("filePath", "")); String majorType = caseVo.getMajorType(); - if(StringUtil.isNotBlank(majorType)){ + if (StringUtil.isNotBlank(majorType)) { List casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ",")); - if(CollUtil.isNotEmpty(casesTypes)){ + if (CollUtil.isNotEmpty(casesTypes)) { List caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList()); - query.addFilter(FieldFilters.in("id",caseIds)); - }else { + query.addFilter(FieldFilters.in("id", caseIds)); + } else { return page; } } List orgDomainDtos = caseVo.getOrgDomainDtos(); IFieldFilter orgDomain = null; - if(CollUtil.isNotEmpty(orgDomainDtos)){ + 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("orgDomainParent",orgDomainParent); + IFieldFilter itemFilter = FieldFilters.eq("orgDomainParent", orgDomainParent); List orgDomainParent2 = domainDto.getChildren(); if (CollUtil.isNotEmpty(orgDomainParent2)) { List seconds = orgDomainParent2.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); @@ -241,7 +243,7 @@ public class CasesServiceImpl implements ICasesService { } } - if (i==0) { + if (i == 0) { orgDomain = itemFilter; } else { orgDomain = FieldFilters.or(orgDomain, itemFilter); @@ -252,33 +254,26 @@ public class CasesServiceImpl implements ICasesService { filters.add(orgDomain); } - if(StringUtils.isNotBlank(caseVo.getCaseType())){ - filters.add(FieldFilters.eq("caseType",caseVo.getCaseType())); + 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()) { + if (caseVo.getIsTop() != null && caseVo.getIsTop()) { query.addOrder(OrderCondition.desc("isTop")); query.addOrder(OrderCondition.desc("topTime")); } //如果选择的是优秀案例,那么这里就按优秀案例的试试排序 - if(caseVo.getExcellent()!=null){ - filters.add(FieldFilters.eq("excellent",caseVo.getExcellent())); + if (caseVo.getExcellent() != null) { + 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()); + 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"); + } else { + order = OrderCondition.desc("sysCreateTime"); } query.addFilters(filters); @@ -287,19 +282,59 @@ public class CasesServiceImpl implements ICasesService { query.setPageIndex(caseVo.getPageIndex()); query.setPageSize(caseVo.getPageSize()); page = casesDao.findPage(query.builder()); + List list = page.getList(); + if (CollUtil.isNotEmpty(list)) { + List caseIds = list.stream().map(Cases::getId).collect(Collectors.toList()); + QueryBuilder recommendCasesQuery = QueryBuilder.from(CasesRecommendPushRecord.class); + recommendCasesQuery.addField("new CasesRecommendPushRecord(recommendId,caseId)"); + List subFilters = new ArrayList<>(); + subFilters.add(FieldFilters.eq("pushUserId", caseVo.getUserId())); + subFilters.add(FieldFilters.in("caseId", caseIds)); + subFilters.add(FieldFilters.eq("pushStatus", 4)); + subFilters.add(FieldFilters.eq("deleted", Boolean.FALSE)); + + QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters) + .addOrder("sysCreateTime", OrderDirection.DESC) + .addGroupBy("recommendId"); + 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); + builder.addField("new CasesRecommend(id,recommendOrgName)"); + 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(), v -> v.getRecommendOrgName())); + list.forEach(it -> { + CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId())); + if (Objects.nonNull(one)) { + String recommendOrgName = collect.get(one.getRecommendId()); + it.setBreCommend(1); + it.setRecommendOrgName(recommendOrgName); + } else { + it.setBreCommend(0); + } + }); + } + } + + } return page; } @Override public PageList queryRecommendPageCasesV2(CasePageVo caseVo) { - PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex(), caseVo.getPageSize()); - Page cases = casesRecordDao.queryList(pageRequest, caseVo); - PageList pageList = new PageList<>(); - pageList.setCount((int) cases.getTotalElements()); - pageList.setPageSize(cases.getSize()); - pageList.setList(cases.getContent()); - return pageList; + PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex(), caseVo.getPageSize()); + Page cases = casesRecordDao.queryList(pageRequest, caseVo); + PageList pageList = new PageList<>(); + pageList.setCount((int) cases.getTotalElements()); + pageList.setPageSize(cases.getSize()); + pageList.setList(cases.getContent()); + return pageList; } /**