mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-09 02:46:50 +08:00
案例萃取,代码优化
This commit is contained in:
@@ -329,12 +329,129 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
casesList.forEach(it->{
|
casesList.forEach(it->{
|
||||||
it.setBreCommend(0);
|
it.setBreCommend(0);
|
||||||
});
|
});
|
||||||
casesList = addTags(casesList, caseVo.getUserId());
|
casesList = caseListCommonHandle(casesList, caseVo.getUserId());
|
||||||
page.setList(casesList);
|
page.setList(casesList);
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageList<Cases> queryRecommendPageCasesV2(CasePageVo caseVo) {
|
||||||
|
|
||||||
|
PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex() - 1, caseVo.getPageSize());
|
||||||
|
|
||||||
|
|
||||||
|
String majorType = caseVo.getMajorType();
|
||||||
|
if (StringUtil.isNotBlank(majorType)) {
|
||||||
|
List<CasesMajorType> casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ","));
|
||||||
|
if (CollUtil.isNotEmpty(casesTypes)) {
|
||||||
|
List<String> caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList());
|
||||||
|
caseVo.setCaseIds(caseIds);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<OrgDomainDto> orgDomainDtos = caseVo.getOrgDomainDtos();
|
||||||
|
List<String> level1 = new ArrayList<>();
|
||||||
|
List<String> level2 = new ArrayList<>();
|
||||||
|
List<String> level3 = new ArrayList<>();
|
||||||
|
if (CollUtil.isNotEmpty(orgDomainDtos)) {
|
||||||
|
for (int i = 0; i < orgDomainDtos.size(); i++) {
|
||||||
|
OrgDomainDto domainDto = orgDomainDtos.get(i);
|
||||||
|
List<OrgDomainDto> orgDomainParent2 = domainDto.getChildren();
|
||||||
|
if (CollUtil.isNotEmpty(orgDomainParent2)) {
|
||||||
|
for (OrgDomainDto orgDomainDto : orgDomainParent2) {
|
||||||
|
List<OrgDomainDto> orgDomainParent3 = orgDomainDto.getChildren();
|
||||||
|
if (CollUtil.isNotEmpty(orgDomainParent3)) {
|
||||||
|
List<String> parent = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList());
|
||||||
|
level3.addAll(parent);
|
||||||
|
} else {
|
||||||
|
String parent = orgDomainDto.getParent();
|
||||||
|
level2.add(parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String orgDomainParent = domainDto.getParent();
|
||||||
|
level1.add(orgDomainParent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
caseVo.setOrg1(level1);
|
||||||
|
caseVo.setOrg2(level2);
|
||||||
|
caseVo.setOrg3(level3);
|
||||||
|
|
||||||
|
Page<Cases> cases = casesRecordDao.queryList(pageRequest,caseVo);
|
||||||
|
PageList<Cases> pageList = new PageList<>();
|
||||||
|
pageList.setCount((int) cases.getTotalElements());
|
||||||
|
pageList.setPageSize(cases.getSize());
|
||||||
|
List<Cases> content = cases.getContent();
|
||||||
|
|
||||||
|
caseListCommonHandle(content, caseVo.getUserId());
|
||||||
|
|
||||||
|
pageList.setList(content);
|
||||||
|
return pageList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Cases> caseListCommonHandle(List<Cases> casesList, String accountId) {
|
||||||
|
if (CollUtil.isEmpty(casesList)) {
|
||||||
|
return casesList;
|
||||||
|
}
|
||||||
|
//1.推荐案例数据处理
|
||||||
|
recommendCasesDataHandle(casesList, accountId);
|
||||||
|
//2.标签处理,添加作者标签和新的案例标签
|
||||||
|
addAuthorTagAndCaseNewTag(casesList);
|
||||||
|
|
||||||
|
return casesList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recommendCasesDataHandle(List<Cases> casesList, String accountId) {
|
||||||
|
if (StrUtil.isNotBlank(accountId)) {
|
||||||
|
List<String> caseIdList = casesList.stream().map(Cases::getId).collect(Collectors.toList());
|
||||||
|
QueryBuilder queryBuilder = QueryBuilder.from(CasesRecommendPushRecord.class)
|
||||||
|
.addField("new CasesRecommendPushRecord(id,recommendId,caseId)")
|
||||||
|
.addFilters(Arrays.asList(
|
||||||
|
FieldFilters.eq("pushUserId", accountId),
|
||||||
|
FieldFilters.in("caseId", caseIdList),
|
||||||
|
FieldFilters.eq("pushStatus", 3),
|
||||||
|
FieldFilters.eq("deleted", Boolean.FALSE)
|
||||||
|
))
|
||||||
|
.addOrder("sysCreateTime", OrderDirection.DESC)
|
||||||
|
.addGroupBy("caseId");
|
||||||
|
|
||||||
|
List<CasesRecommendPushRecord> pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder());
|
||||||
|
|
||||||
|
if (CollUtil.isNotEmpty(pushRecords)) {
|
||||||
|
List<String> rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).distinct().collect(Collectors.toList());
|
||||||
|
QueryBuilder builder = QueryBuilder.from(CasesRecommend.class)
|
||||||
|
.addField("new CasesRecommend(id,recommendOrgName,recommendTime)")
|
||||||
|
.addFilters(Arrays.asList(
|
||||||
|
FieldFilters.eq("deleted", Boolean.FALSE),
|
||||||
|
FieldFilters.in("id", rIds)
|
||||||
|
));
|
||||||
|
|
||||||
|
List<CasesRecommend> recommands = casesRecommendDao.findList(builder.builder());
|
||||||
|
if (CollUtil.isNotEmpty(recommands)) {
|
||||||
|
Map<String, CasesRecommend> collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), item -> item));
|
||||||
|
casesList.forEach(it -> {
|
||||||
|
CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId()));
|
||||||
|
if (Objects.nonNull(one)) {
|
||||||
|
CasesRecommend recommend = collect.get(one.getRecommendId());
|
||||||
|
it.setBreCommend(1);
|
||||||
|
it.setRefId(one.getId());
|
||||||
|
it.setRecommendOrgName(recommend.getRecommendOrgName());
|
||||||
|
it.setSysCreateTime(recommend.getRecommendTime());
|
||||||
|
} else {
|
||||||
|
it.setBreCommend(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加案例标签、作者标签(最佳案例N篇、上榜浏览量TOP榜单N次)、案例标签(xx分类浏览量TOP、最佳案例)
|
* 添加案例标签、作者标签(最佳案例N篇、上榜浏览量TOP榜单N次)、案例标签(xx分类浏览量TOP、最佳案例)
|
||||||
*/
|
*/
|
||||||
@@ -395,65 +512,6 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageList<Cases> queryRecommendPageCasesV2(CasePageVo caseVo) {
|
|
||||||
|
|
||||||
PageRequest pageRequest = PageRequest.of(caseVo.getPageIndex() - 1, caseVo.getPageSize());
|
|
||||||
|
|
||||||
|
|
||||||
String majorType = caseVo.getMajorType();
|
|
||||||
if (StringUtil.isNotBlank(majorType)) {
|
|
||||||
List<CasesMajorType> casesTypes = casesMajorTypeRepoDao.findCasesBy(StrUtil.split(majorType, ","));
|
|
||||||
if (CollUtil.isNotEmpty(casesTypes)) {
|
|
||||||
List<String> caseIds = casesTypes.stream().map(CasesMajorType::getCaseId).collect(Collectors.toList());
|
|
||||||
caseVo.setCaseIds(caseIds);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<OrgDomainDto> orgDomainDtos = caseVo.getOrgDomainDtos();
|
|
||||||
List<String> level1 = new ArrayList<>();
|
|
||||||
List<String> level2 = new ArrayList<>();
|
|
||||||
List<String> level3 = new ArrayList<>();
|
|
||||||
if (CollUtil.isNotEmpty(orgDomainDtos)) {
|
|
||||||
for (int i = 0; i < orgDomainDtos.size(); i++) {
|
|
||||||
OrgDomainDto domainDto = orgDomainDtos.get(i);
|
|
||||||
List<OrgDomainDto> orgDomainParent2 = domainDto.getChildren();
|
|
||||||
if (CollUtil.isNotEmpty(orgDomainParent2)) {
|
|
||||||
for (OrgDomainDto orgDomainDto : orgDomainParent2) {
|
|
||||||
List<OrgDomainDto> orgDomainParent3 = orgDomainDto.getChildren();
|
|
||||||
if (CollUtil.isNotEmpty(orgDomainParent3)) {
|
|
||||||
List<String> parent = orgDomainParent3.stream().map(OrgDomainDto::getParent).collect(Collectors.toList());
|
|
||||||
level3.addAll(parent);
|
|
||||||
} else {
|
|
||||||
String parent = orgDomainDto.getParent();
|
|
||||||
level2.add(parent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
String orgDomainParent = domainDto.getParent();
|
|
||||||
level1.add(orgDomainParent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
caseVo.setOrg1(level1);
|
|
||||||
caseVo.setOrg2(level2);
|
|
||||||
caseVo.setOrg3(level3);
|
|
||||||
|
|
||||||
Page<Cases> cases = casesRecordDao.queryList(pageRequest,caseVo);
|
|
||||||
PageList<Cases> pageList = new PageList<>();
|
|
||||||
pageList.setCount((int) cases.getTotalElements());
|
|
||||||
pageList.setPageSize(cases.getSize());
|
|
||||||
List<Cases> content = cases.getContent();
|
|
||||||
|
|
||||||
addTags(content, caseVo.getUserId());
|
|
||||||
|
|
||||||
pageList.setList(content);
|
|
||||||
return pageList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
String rename = "a.name".replaceAll("\\.", "");
|
String rename = "a.name".replaceAll("\\.", "");
|
||||||
@@ -949,7 +1007,7 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
builder.addFilter(FieldFilters.in("id", ids));
|
builder.addFilter(FieldFilters.in("id", ids));
|
||||||
builder.addFields("new Cases(id,title,summary,coverUrl,authorId,authorName,sysCreateTime,breCommend,views,comments,praises,shares,favorites,deleted,sysCreateBy,sysCreateAid)");
|
builder.addFields("new Cases(id,title,summary,coverUrl,authorId,authorName,sysCreateTime,breCommend,views,comments,praises,shares,favorites,deleted,sysCreateBy,sysCreateAid)");
|
||||||
List<Cases> cases = casesDao.findList(builder.builder());
|
List<Cases> cases = casesDao.findList(builder.builder());
|
||||||
cases = addTags(cases, accountId);
|
cases = caseListCommonHandle(cases, accountId);
|
||||||
return cases;
|
return cases;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1192,67 +1250,11 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
query.addFilter(FieldFilters.eq("deleted",false));
|
query.addFilter(FieldFilters.eq("deleted",false));
|
||||||
|
|
||||||
List<Cases> casesList = casesDao.findList(query.builder());
|
List<Cases> casesList = casesDao.findList(query.builder());
|
||||||
casesList = addTags(casesList, accountId);
|
casesList = caseListCommonHandle(casesList, accountId);
|
||||||
|
|
||||||
return casesList;
|
return casesList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Cases> addTags(List<Cases> casesList, String accountId) {
|
|
||||||
if (CollUtil.isEmpty(casesList)) {
|
|
||||||
return casesList;
|
|
||||||
}
|
|
||||||
//1.推荐案例处理,获取的数据主要用于生成推荐案例标签
|
|
||||||
recommendCasesTagDataHandle(casesList, accountId);
|
|
||||||
//2.标签处理,添加作者标签和新的案例标签
|
|
||||||
addAuthorTagAndCaseNewTag(casesList);
|
|
||||||
|
|
||||||
return casesList;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void recommendCasesTagDataHandle(List<Cases> casesList, String accountId) {
|
|
||||||
if (StrUtil.isNotBlank(accountId)) {
|
|
||||||
List<String> caseIdList = casesList.stream().map(Cases::getId).collect(Collectors.toList());
|
|
||||||
QueryBuilder queryBuilder = QueryBuilder.from(CasesRecommendPushRecord.class)
|
|
||||||
.addField("new CasesRecommendPushRecord(id,recommendId,caseId)")
|
|
||||||
.addFilters(Arrays.asList(
|
|
||||||
FieldFilters.eq("pushUserId", accountId),
|
|
||||||
FieldFilters.in("caseId", caseIdList),
|
|
||||||
FieldFilters.eq("pushStatus", 3),
|
|
||||||
FieldFilters.eq("deleted", Boolean.FALSE)
|
|
||||||
))
|
|
||||||
.addOrder("sysCreateTime", OrderDirection.DESC)
|
|
||||||
.addGroupBy("caseId");
|
|
||||||
|
|
||||||
List<CasesRecommendPushRecord> pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder());
|
|
||||||
|
|
||||||
if (CollUtil.isNotEmpty(pushRecords)) {
|
|
||||||
List<String> rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).distinct().collect(Collectors.toList());
|
|
||||||
QueryBuilder builder = QueryBuilder.from(CasesRecommend.class)
|
|
||||||
.addField("new CasesRecommend(id,recommendOrgName,recommendTime)")
|
|
||||||
.addFilters(Arrays.asList(
|
|
||||||
FieldFilters.eq("deleted", Boolean.FALSE),
|
|
||||||
FieldFilters.in("id", rIds)
|
|
||||||
));
|
|
||||||
|
|
||||||
List<CasesRecommend> recommands = casesRecommendDao.findList(builder.builder());
|
|
||||||
if (CollUtil.isNotEmpty(recommands)) {
|
|
||||||
Map<String, CasesRecommend> collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), item -> item));
|
|
||||||
casesList.forEach(it -> {
|
|
||||||
CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId()));
|
|
||||||
if (Objects.nonNull(one)) {
|
|
||||||
CasesRecommend recommend = collect.get(one.getRecommendId());
|
|
||||||
it.setBreCommend(1);
|
|
||||||
it.setRefId(one.getId());
|
|
||||||
it.setRecommendOrgName(recommend.getRecommendOrgName());
|
|
||||||
it.setSysCreateTime(recommend.getRecommendTime());
|
|
||||||
} else {
|
|
||||||
it.setBreCommend(0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1396,7 +1398,7 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
List<Object[]> list = pageFields.getList();
|
List<Object[]> list = pageFields.getList();
|
||||||
// 提取出 Cases 对象,添加标签
|
// 提取出 Cases 对象,添加标签
|
||||||
List<Cases> casesList = list.stream().map(o -> (Cases) o[2]).collect(Collectors.toList());
|
List<Cases> casesList = list.stream().map(o -> (Cases) o[2]).collect(Collectors.toList());
|
||||||
casesList = addTags(casesList, accountId);
|
casesList = caseListCommonHandle(casesList, accountId);
|
||||||
Map<String, Cases> caseMap = casesList.stream().collect(Collectors.toMap(Cases::getId, Function.identity()));
|
Map<String, Cases> caseMap = casesList.stream().collect(Collectors.toMap(Cases::getId, Function.identity()));
|
||||||
|
|
||||||
PageList<FavoriteCaseDto> favoriteCaseDtoPageList = new PageList<>();
|
PageList<FavoriteCaseDto> favoriteCaseDtoPageList = new PageList<>();
|
||||||
|
|||||||
Reference in New Issue
Block a user