From 39ba96f141ff9b70da09abe1a6a56b8ef519891e Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Sat, 14 Sep 2024 16:26:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=88=E4=BE=8B=E8=90=83=E5=8F=96=EF=BC=8C?= =?UTF-8?q?=E6=A1=88=E4=BE=8B=E6=A0=87=E7=AD=BE=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xboe/module/boecase/api/CasesApi.java | 20 +-------- .../xboe/module/boecase/dao/CasesRankDao.java | 7 +-- .../service/impl/CasesServiceImpl.java | 44 ++++++++++++++++++- 3 files changed, 48 insertions(+), 23 deletions(-) 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 1fdce29b..a2a88716 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 @@ -132,25 +132,7 @@ public class CasesApi extends ApiBaseController { views = casesService.queryPageCasesV2(req); } - if (views != null) { - List cases = views.getList(); - if (CollUtil.isNotEmpty(cases)) { - for (Cases c : cases) { - 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()); - } - } - } - } else { + if (views == null) { views = new PageList(); views.setList(Collections.emptyList()); views.setPageSize(req.getPageSize()); diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRankDao.java b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRankDao.java index 2ad38cb2..172b4512 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRankDao.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/boecase/dao/CasesRankDao.java @@ -15,7 +15,9 @@ import java.util.stream.Collectors; @Repository @Slf4j public class CasesRankDao extends BaseDao { - + /** + * 获取类别榜记录,默认按上榜时间降序排列 + */ public List findViewsRankRecordByCaseId(String caseId) { String sql = "SELECT bdmt.name,bcvr.rise_rank_time,bcvr.rank,bcvr.major_id \n" + @@ -24,8 +26,7 @@ public class CasesRankDao extends BaseDao { "JOIN boe_dict_major_type bdmt \n" + " ON bdmt.code = bcvr.major_id \n" + "WHERE bcvr.case_id = ?1 AND bcvr.deleted=0 AND bdmt.deleted=0\n" + - "ORDER BY bcvr.sys_update_time DESC \n" + - "LIMIT 2;"; + "ORDER BY bcvr.rise_rank_time DESC;"; List list = this.sqlFindList(sql, 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 17525163..6f793320 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 @@ -416,14 +416,36 @@ public class CasesServiceImpl implements ICasesService { if (CollUtil.isEmpty(casesList)) { return casesList; } + //1.推荐案例数据处理 recommendCasesDataHandle(casesList, accountId); //2.标签处理,添加作者标签和新的案例标签 addAuthorTagAndCaseNewTag(casesList); + //3.案例类型处理 + majorTypeHandle(casesList); return casesList; } + private void majorTypeHandle(List casesList) { + if (CollUtil.isNotEmpty(casesList)) { + for (Cases c : casesList) { + 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()); + } + } + } + } + private void recommendCasesDataHandle(List casesList, String accountId) { if (StrUtil.isNotBlank(accountId)) { List caseIdList = casesList.stream().map(Cases::getId).collect(Collectors.toList()); @@ -1277,15 +1299,18 @@ public class CasesServiceImpl implements ICasesService { List> popularityOfMajor = casesRankDao.findPopularityOfMajor(pageSize, startTime, endTime, majorId); List caseIdList = popularityOfMajor.stream().map(map -> map.get("caseId").toString()).collect(Collectors.toList()); - Map collect = popularityOfMajor.stream().collect(Collectors.toMap(map -> map.get("caseId").toString(), map -> Integer.valueOf(map.get("rank").toString()))); QueryBuilder query = QueryBuilder.from(Cases.class); query.addFilter(FieldFilters.in("id",caseIdList)); query.addFilter(FieldFilters.eq("deleted",false)); List casesList = casesDao.findList(query.builder()); + //处理案例数据-通用操作 casesList = caseListCommonHandle(casesList, accountId); + //获取案例与排名的映射关系 + Map collect = popularityOfMajor.stream().collect(Collectors.toMap(map -> map.get("caseId").toString(), map -> Integer.valueOf(map.get("rank").toString()))); + //排序榜单案例顺序 Collections.sort(casesList, new Comparator() { @Override public int compare(Cases c1, Cases c2) { @@ -1294,6 +1319,23 @@ public class CasesServiceImpl implements ICasesService { return Integer.compare(order1, order2); } }); + + //排序榜单案例标签顺序 + casesList.forEach(cases -> { + List viewRankTags = cases.getViewRankTags(); + Collections.sort(viewRankTags, new Comparator() { + @Override + public int compare(CaseViewRankingItemVo o1, CaseViewRankingItemVo o2) { + // 将 majorId 等于 传参majorId 的项优先排序 + if (o1.getMajorId() == majorId && o2.getMajorId() != majorId) { + return -1; // o1 应该排在 o2 前面 + } else if (o1.getMajorId() != majorId && o2.getMajorId() == majorId) { + return 1; // o2 应该排在 o1 前面 + } + return 0; // 相同或两者都不是 传参majorId 时,保持原有顺序 + } + }); + }); return casesList; }