From ae4382441ac786707f31451061d2e7f600f5c880 Mon Sep 17 00:00:00 2001 From: buerjun Date: Thu, 29 Jun 2023 16:19:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E8=8D=90=E5=88=97=E8=A1=A8=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/boecase/dao/CasesRecordDao.java | 32 ++--- .../com/xboe/module/boecase/entity/Cases.java | 26 ++++ .../service/impl/CasesServiceImpl.java | 136 ++++++------------ .../boecase/dao/CasesRecordDaoTest.java | 15 ++ 4 files changed, 99 insertions(+), 110 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java index 09c11042..f633b194 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRecordDao.java @@ -18,43 +18,37 @@ import org.springframework.stereotype.Repository; @Repository public interface CasesRecordDao extends JpaRepository, JpaSpecificationExecutor { - @Query(nativeQuery = true, value = "select b.id,b.sys_create_aid,b.sys_create_by,b.sys_create_time,b.deleted,b.sys_update_by,b.sys_update_time,b.sys_version," + - "b.excellent_time,b.excellent,b.case_value,b.readers,b.keyword5,b.keyword4,b.keyword3,b.keyword2,b.keyword1,b.case_theme_description,b.case_theme" + - ",b.case_type2,b.case_type1,b.case_type,b.case_owner_org,b.case_specialty_sequence,b.case_other_contributor,b.case_owner_phone,b.case_owner_department" + - ",b.case_owner,b.case_flow,b.case_scope,b.is_leadership_plan,b.case_channel,b.email,b.contact_number,b.department,b.drafter,b.end_time,b.drafting_time," + - "b.confidentiality_level,b.approval_number,b.major_type,b.org_domain_parent3,b.org_domain_parent2,b.org_domain_parent,b.org_domain,b.summary,b.cites,b.recommends," + - "b.favorites,b.shares,b.praises,b.comments,b.views,b.status,b.top_time,b.is_top,b.recommend_time,b.bre_commend,b.cover_url,b.author_name,b.author_id,b.file_name" + - ",b.file_path,b.content,b.company_id,b.title" + - " from boe_cases_recommend_push_record a LEFT JOIN boe_cases b on a.case_id = b.id and b.deleted=0 " + - " where a.deleted=0 and a.push_user_id= :#{#condition.userId}" + - " and if(:#{#condition.keyWord} is not null,b.title like CONCAT('%',:#{#condition.keyWord},'%')" + + @Query(nativeQuery = true, value = "select b.*" + + " from boe_cases_recommend_push_record a INNER JOIN boe_cases b on a.case_id = b.id" + + " where b.deleted=0 and a.push_status = 3 and a.push_user_id= :#{#condition.userId}" + + " and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" + - " and if(coalesce(:#{#condition.years},null) is null OR YEAR(b.sys_create_time) in (:#{#condition.years}))" + - " and if(:#{#condition.majorType} !='' ,b.major_type = :#{#condition.majorType},1=1) " + + " and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" + + " and if(IFNULL(:#{#condition.majorType},'') !='',b.major_type = :#{#condition.majorType},1=1) " + " and if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" + " and if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" + " and if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" + " group by b.id order by a.sys_create_time DESC", - countQuery = "select count(*)" + - " from boe_cases_recommend_push_record a LEFT JOIN boe_cases b on a.case_id = b.id and b.deleted=0 " + - " where a.deleted=0 and a.push_user_id= :#{#condition.userId}" + - " and if(:#{#condition.keyWord} is not null,b.title like CONCAT('%',:#{#condition.keyWord},'%')" + + countQuery = "select count(*) FROM (select b.*" + + " from boe_cases_recommend_push_record a INNER JOIN boe_cases b on a.case_id = b.id " + + " where b.deleted=0 and a.push_status = 3 and a.push_user_id= :#{#condition.userId}" + + " and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" + " or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" + - " and :#{#condition.yearsEmpty} = false OR YEAR(b.sys_create_time) in (:#{#condition.years})" + - " and if(:#{#condition.majorType} !='' ,b.major_type = :#{#condition.majorType},1=1) " + + " and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" + + " and if(IFNULL(:#{#condition.majorType},'') !='' ,b.major_type = :#{#condition.majorType},1=1) " + " and if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" + " and if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" + " and if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" + - " group by b.id") + " group by b.id) as b") Page queryList(Pageable pageable, @Param("condition") CasePageVo casePage); } 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 df6ef6e0..a2f12514 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 @@ -267,6 +267,32 @@ public class Cases extends BaseEntity { @Transient private String recommendOrgName; + @Transient + private Long recommendId; + + public Long getRecommendId() { + return recommendId; + } + + public void setRecommendId(Long recommendId) { + this.recommendId = recommendId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } public Cases() { 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 e73cda3c..d33e018e 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 @@ -293,7 +293,7 @@ public class CasesServiceImpl implements ICasesService { 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("pushStatus", 3)); subFilters.add(FieldFilters.eq("deleted", Boolean.FALSE)); QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters) @@ -332,99 +332,53 @@ 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("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())); + content.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); + } + }); } } } - 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("b.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) { @@ -933,7 +887,7 @@ public class CasesServiceImpl implements ICasesService { String accountId = current.getAccountId(); List result = new ArrayList<>(); try { - String hql = "select a.caseId FROM CasesRecommendPushRecord a left join Cases b ON a.caseId = b.id WHERE a.pushUserId=?1 and b.deleted = false group by a.caseId ORDER By a.pushTime DESC"; + String hql = "select a.caseId FROM CasesRecommendPushRecord a left join Cases b ON a.caseId = b.id WHERE a.pushUserId=?1 and a.pushStatus=4 and b.deleted = false group by a.caseId ORDER By a.pushTime DESC"; List listFields = casesRecommendDao.findListFields(hql, CASE_LEN, ListUtil.toList(accountId)); List caseIds = new ArrayList<>(); if (CollUtil.isNotEmpty(listFields)) { diff --git a/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesRecordDaoTest.java b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesRecordDaoTest.java index 5dec4da4..05aca682 100644 --- a/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesRecordDaoTest.java +++ b/servers/boe-server-all/src/test/java/com/xboe/module/boecase/dao/CasesRecordDaoTest.java @@ -1,5 +1,8 @@ package com.xboe.module.boecase.dao; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import com.xboe.module.boecase.dto.CasePageVo; import com.xboe.module.boecase.entity.Cases; import org.junit.jupiter.api.Test; @@ -7,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.test.context.ActiveProfiles; import static org.junit.jupiter.api.Assertions.*; @@ -18,4 +22,15 @@ class CasesRecordDaoTest { @Autowired private CasesRecordDao casesRecordDao; + @Test + void queryList() throws JsonProcessingException { + PageRequest of = PageRequest.of(0, 10); + String jsonStr = "{\"pageIndex\":1,\"pageSize\":10,\"orderField\":\"excellent\",\"majorType\":\"\",\"orgDomainDtos\":[],\"orderAsc\":false,\"excellent\":true,\"breCommend\":true,\"caseType\":\"\",\"authorName\":\"\",\"notInIds\":[],\"type\":\"recommend\",\"userId\":\"\",\"parent\":\"\",\"children\":[],\"name\":\"\",\"years\":[2023,2022,2020,2021]}"; + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); + CasePageVo pageVo = mapper.readValue(jsonStr, CasePageVo.class); + pageVo.setUserId("965341999643234304"); + Page cases = casesRecordDao.queryList(of, pageVo); + System.out.println(cases); + } } \ No newline at end of file