查询推荐人

This commit is contained in:
Boolean
2023-06-23 17:20:16 +08:00
parent 555039fbcf
commit 989f8ec113
4 changed files with 96 additions and 51 deletions

View File

@@ -109,6 +109,7 @@ public class CasesApi extends ApiBaseController {
public JsonResponse<PageList<Cases>> queryCaseBreV2(@Validated @RequestBody CasePageVo req){ public JsonResponse<PageList<Cases>> queryCaseBreV2(@Validated @RequestBody CasePageVo req){
String type = req.getType(); String type = req.getType();
PageList<Cases> views; PageList<Cases> views;
req.setUserId(getCurrent().getAccountId());
if (type.equals("recommend")) { if (type.equals("recommend")) {
views = casesService.queryRecommendPageCasesV2(req); views = casesService.queryRecommendPageCasesV2(req);
} else { } else {

View File

@@ -261,6 +261,9 @@ public class Cases extends BaseEntity {
@Transient @Transient
private List<String> majorIds; private List<String> majorIds;
@Transient
private String recommendOrgName;
public Cases() { public Cases() {

View File

@@ -91,5 +91,11 @@ public class CasesRecommendPushRecord extends BaseEntity {
@Column(name = "remark") @Column(name = "remark")
private String remark; private String remark;
public CasesRecommendPushRecord() {
}
public CasesRecommendPushRecord(String recommendId,String caseId) {
this.recommendId = recommendId;
this.caseId = caseId;
}
} }

View File

@@ -4,17 +4,17 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.split.SplitIter; import cn.hutool.core.text.split.SplitIter;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.xboe.common.OrderCondition; import com.xboe.common.OrderCondition;
import com.xboe.common.OrderDirection;
import com.xboe.common.PageList; import com.xboe.common.PageList;
import com.xboe.common.utils.IDGenerator; import com.xboe.common.utils.IDGenerator;
import com.xboe.common.utils.StringUtil; import com.xboe.common.utils.StringUtil;
import com.xboe.core.orm.*; import com.xboe.core.orm.*;
import com.xboe.module.boecase.dao.CasesDao; import com.xboe.module.boecase.dao.*;
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.dto.*; import com.xboe.module.boecase.dto.*;
import com.xboe.module.boecase.entity.Cases; import com.xboe.module.boecase.entity.Cases;
import com.xboe.module.boecase.entity.CasesMajorType; 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.boecase.service.ICasesService;
import com.xboe.module.dict.dao.SysDictionaryDao; import com.xboe.module.dict.dao.SysDictionaryDao;
import com.xboe.module.dict.entity.DictItem; import com.xboe.module.dict.entity.DictItem;
@@ -22,6 +22,7 @@ import com.xboe.orm.CustomFieldInFilter;
import com.xboe.school.vo.CasesVo; 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.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -31,10 +32,8 @@ import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays; import java.util.function.Function;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@@ -57,8 +56,11 @@ public class CasesServiceImpl implements ICasesService {
@Resource @Resource
private CasesMajorTypeRepoDao casesMajorTypeRepoDao; private CasesMajorTypeRepoDao casesMajorTypeRepoDao;
@PersistenceContext @Autowired
private EntityManager entityManager; private CasesRecommendPushRecordDao casesRecommendPushRecordDao;
@Autowired
private CasesRecommendDao casesRecommendDao;
/** /**
* 案例分页查询,用于门户的查询 * 案例分页查询,用于门户的查询
@@ -178,11 +180,11 @@ public class CasesServiceImpl implements ICasesService {
public PageList<Cases> queryPageCasesV2(CasePageVo caseVo) { public PageList<Cases> queryPageCasesV2(CasePageVo caseVo) {
String keyword = caseVo.getKeyWord(); String keyword = caseVo.getKeyWord();
QueryBuilder query=QueryBuilder.from(Cases.class); QueryBuilder query = QueryBuilder.from(Cases.class);
PageList<Cases> page=null; PageList<Cases> page = null;
List<IFieldFilter> filters = new ArrayList<>(); List<IFieldFilter> filters = new ArrayList<>();
filters.add(FieldFilters.eq("deleted",false)); filters.add(FieldFilters.eq("deleted", false));
List<IFieldFilter> likes=new ArrayList<IFieldFilter>(); List<IFieldFilter> likes = new ArrayList<IFieldFilter>();
likes.add(FieldFilters.like("title", LikeMatchMode.ANYWHERE, caseVo.getKeyWord())); likes.add(FieldFilters.like("title", LikeMatchMode.ANYWHERE, caseVo.getKeyWord()));
likes.add(FieldFilters.like("authorName", 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("keyword1", LikeMatchMode.ANYWHERE, caseVo.getKeyWord()));
@@ -195,37 +197,37 @@ public class CasesServiceImpl implements ICasesService {
filters.add(FieldFilters.notIn("id", notInIds)); filters.add(FieldFilters.notIn("id", notInIds));
} }
if(StringUtil.isNotBlank(caseVo.getKeyWord())) { if (StringUtil.isNotBlank(caseVo.getKeyWord())) {
filters.add(FieldFilters.or(likes)); filters.add(FieldFilters.or(likes));
} }
//创建时间过滤 //创建时间过滤
List<Object> years = caseVo.getYears(); List<Object> years = caseVo.getYears();
if (CollUtil.isNotEmpty(years)) { 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.isNotNull("filePath"));
filters.add(FieldFilters.ne("filePath","")); filters.add(FieldFilters.ne("filePath", ""));
String majorType = caseVo.getMajorType(); String majorType = caseVo.getMajorType();
if(StringUtil.isNotBlank(majorType)){ if (StringUtil.isNotBlank(majorType)) {
List<CasesMajorType> casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ",")); List<CasesMajorType> casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ","));
if(CollUtil.isNotEmpty(casesTypes)){ if (CollUtil.isNotEmpty(casesTypes)) {
List<String> caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList()); List<String> caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList());
query.addFilter(FieldFilters.in("id",caseIds)); query.addFilter(FieldFilters.in("id", caseIds));
}else { } else {
return page; return page;
} }
} }
List<OrgDomainDto> orgDomainDtos = caseVo.getOrgDomainDtos(); List<OrgDomainDto> orgDomainDtos = caseVo.getOrgDomainDtos();
IFieldFilter orgDomain = null; IFieldFilter orgDomain = null;
if(CollUtil.isNotEmpty(orgDomainDtos)){ if (CollUtil.isNotEmpty(orgDomainDtos)) {
for (int i = 0; i < orgDomainDtos.size(); i++) { for (int i = 0; i < orgDomainDtos.size(); i++) {
OrgDomainDto domainDto = orgDomainDtos.get(i); OrgDomainDto domainDto = orgDomainDtos.get(i);
String orgDomainParent = domainDto.getParent(); String orgDomainParent = domainDto.getParent();
IFieldFilter itemFilter = FieldFilters.eq("orgDomainParent",orgDomainParent); IFieldFilter itemFilter = FieldFilters.eq("orgDomainParent", orgDomainParent);
List<OrgDomainDto> orgDomainParent2 = domainDto.getChildren(); List<OrgDomainDto> orgDomainParent2 = domainDto.getChildren();
if (CollUtil.isNotEmpty(orgDomainParent2)) { if (CollUtil.isNotEmpty(orgDomainParent2)) {
List<String> seconds = orgDomainParent2.stream().map(OrgDomainDto::getParent).collect(Collectors.toList()); List<String> 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; orgDomain = itemFilter;
} else { } else {
orgDomain = FieldFilters.or(orgDomain, itemFilter); orgDomain = FieldFilters.or(orgDomain, itemFilter);
@@ -252,33 +254,26 @@ public class CasesServiceImpl implements ICasesService {
filters.add(orgDomain); filters.add(orgDomain);
} }
if(StringUtils.isNotBlank(caseVo.getCaseType())){ if (StringUtils.isNotBlank(caseVo.getCaseType())) {
filters.add(FieldFilters.eq("caseType",caseVo.getCaseType())); filters.add(FieldFilters.eq("caseType", caseVo.getCaseType()));
} }
if(caseVo.getBreCommend()!=null){ if (caseVo.getIsTop() != null && caseVo.getIsTop()) {
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("isTop"));
query.addOrder(OrderCondition.desc("topTime")); query.addOrder(OrderCondition.desc("topTime"));
} }
//如果选择的是优秀案例,那么这里就按优秀案例的试试排序 //如果选择的是优秀案例,那么这里就按优秀案例的试试排序
if(caseVo.getExcellent()!=null){ if (caseVo.getExcellent() != null) {
filters.add(FieldFilters.eq("excellent",caseVo.getExcellent())); filters.add(FieldFilters.eq("excellent", caseVo.getExcellent()));
} }
OrderCondition order=null; OrderCondition order = null;
if(StringUtils.isNotBlank(caseVo.getOrderField())) { if (StringUtils.isNotBlank(caseVo.getOrderField())) {
if(caseVo.getOrderAsc()==null || caseVo.getOrderAsc()) { if (caseVo.getOrderAsc() == null || caseVo.getOrderAsc()) {
order=OrderCondition.asc(caseVo.getOrderField()); order = OrderCondition.asc(caseVo.getOrderField());
}else { } else {
order=OrderCondition.desc(caseVo.getOrderField()); order = OrderCondition.desc(caseVo.getOrderField());
} }
}else { } else {
order=OrderCondition.desc("sysCreateTime"); order = OrderCondition.desc("sysCreateTime");
} }
query.addFilters(filters); query.addFilters(filters);
@@ -287,6 +282,46 @@ public class CasesServiceImpl implements ICasesService {
query.setPageIndex(caseVo.getPageIndex()); query.setPageIndex(caseVo.getPageIndex());
query.setPageSize(caseVo.getPageSize()); query.setPageSize(caseVo.getPageSize());
page = casesDao.findPage(query.builder()); page = casesDao.findPage(query.builder());
List<Cases> list = page.getList();
if (CollUtil.isNotEmpty(list)) {
List<String> caseIds = list.stream().map(Cases::getId).collect(Collectors.toList());
QueryBuilder recommendCasesQuery = QueryBuilder.from(CasesRecommendPushRecord.class);
recommendCasesQuery.addField("new CasesRecommendPushRecord(recommendId,caseId)");
List<IFieldFilter> 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<CasesRecommendPushRecord> pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder());
if (CollUtil.isNotEmpty(pushRecords)) {
List<String> rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).collect(Collectors.toList());
QueryBuilder builder = QueryBuilder.from(CasesRecommend.class);
builder.addField("new CasesRecommend(id,recommendOrgName)");
List<IFieldFilter> recommendFilters = new ArrayList<>();
recommendFilters.add(FieldFilters.eq("deleted", Boolean.FALSE));
recommendFilters.add(FieldFilters.in("id", rIds));
builder.addFilters(recommendFilters);
List<CasesRecommend> recommands = casesRecommendDao.findList(builder.builder());
if (CollUtil.isNotEmpty(recommands)) {
Map<String, String> 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; return page;
} }