案例萃取,案例代码优化,不涉及大的逻辑修改

This commit is contained in:
yang
2024-09-13 14:54:09 +08:00
parent 40eebd7e86
commit 339ee671a1
11 changed files with 105 additions and 49 deletions

View File

@@ -281,7 +281,10 @@ public class ThirdApi {
JSONUtil.toBean(resp, SyncExamScoreBean.class).success(); JSONUtil.toBean(resp, SyncExamScoreBean.class).success();
} }
public UserDynamicResult getAllUserdynamicList2(UserdynamicParam userdynamicParam, String token) { /**
* 获取案例浏览记录
*/
public UserDynamicResult getAllUserdynamicListOfCaseRead(UserdynamicParam userdynamicParam, String token) {
String s = buildFormData(userdynamicParam); String s = buildFormData(userdynamicParam);
String resp = Optional.ofNullable(HttpRequest String resp = Optional.ofNullable(HttpRequest
.post(userdynamicListUrl) .post(userdynamicListUrl)

View File

@@ -5,7 +5,9 @@ import lombok.Getter;
import static com.xboe.constants.CacheName.*; import static com.xboe.constants.CacheName.*;
/**
* 案例排行榜类型
*/
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum CasesRankEnum { public enum CasesRankEnum {

View File

@@ -638,6 +638,7 @@ public class CasesApi extends ApiBaseController {
/** /**
* 不同专业分类下排行榜刷新 * 不同专业分类下排行榜刷新
* 注意定时统计任务是在本月月初执行的而上榜时间是在上个月最后一天23:59:59
*/ */
@PostMapping("/refreshViewsRankOfMajor") @PostMapping("/refreshViewsRankOfMajor")
public JsonResponse<Boolean> refreshViewsRankOfMajor() { public JsonResponse<Boolean> refreshViewsRankOfMajor() {
@@ -694,7 +695,7 @@ public class CasesApi extends ApiBaseController {
/** /**
* 不同专业月热度榜查询所需时间检索数据 * 所有上榜的的(专业ID-时间), 用于下拉框.优化可将majorName一并查询返回为List<List<Entity>> todo by anyone
*/ */
@GetMapping("/queryAllTimePopularityOfMajor") @GetMapping("/queryAllTimePopularityOfMajor")
public JsonResponse<Map<Long, List<String>>> queryAllTimePopularityOfMajor() { public JsonResponse<Map<Long, List<String>>> queryAllTimePopularityOfMajor() {

View File

@@ -417,6 +417,42 @@ public class Cases extends BaseEntity {
super.setId(id); super.setId(id);
this.title=title; this.title=title;
} }
public Cases(String id,String title,String summary,String coverUrl,String authorId,String authorName,LocalDateTime sysCreateTime,Integer breCommend,Integer views,Integer comments,Integer praises,Integer shares,Integer favorites,Boolean deleted
,String sysCreateBy,String sysCreateAid){
this.title=title;
super.setId(id);
this.authorId=authorId;
this.authorName=authorName;
super.setSysCreateTime(sysCreateTime);
super.setSysCreateAid(sysCreateAid);
super.setSysCreateBy(sysCreateBy);
this.summary=summary;
this.coverUrl=coverUrl;
this.breCommend=breCommend;
this.views=views;
this.comments=comments;
this.praises=praises;
this.shares=shares;
this.favorites=favorites;
super.setDeleted(deleted);
}
public Cases(String title) {
this.title = title;
}
public Cases(String title,String authorName, int comments, int views, int praises, int shares, int favorites, Long recommends1, int cites, String confidentialityLevel) {
this.title = title;
this.views = views;
this.praises = praises;
this.shares = shares;
this.favorites = favorites;
this.recommends1 = recommends1;
this.cites = cites;
this.comments = comments;
this.authorName = authorName;
this.confidentialityLevel = confidentialityLevel;
}
public Cases(String id,String title,String summary,String coverUrl,String authorId,String authorName,LocalDateTime sysCreateTime,Integer breCommend,Integer views,Integer comments,Integer praises,Integer shares,Integer favorites,Boolean deleted public Cases(String id,String title,String summary,String coverUrl,String authorId,String authorName,LocalDateTime sysCreateTime,Integer breCommend,Integer views,Integer comments,Integer praises,Integer shares,Integer favorites,Boolean deleted
,String sysCreateBy,String sysCreateAid,String keyword1,String keyword2,String keyword3,String keyword4,String keyword5){ ,String sysCreateBy,String sysCreateAid,String keyword1,String keyword2,String keyword3,String keyword4,String keyword5){
this.title=title; this.title=title;
@@ -441,21 +477,4 @@ public class Cases extends BaseEntity {
this.keyword5=keyword5; this.keyword5=keyword5;
super.setDeleted(deleted); super.setDeleted(deleted);
} }
public Cases(String title) {
this.title = title;
}
public Cases(String title,String authorName, int comments, int views, int praises, int shares, int favorites, Long recommends1, int cites, String confidentialityLevel) {
this.title = title;
this.views = views;
this.praises = praises;
this.shares = shares;
this.favorites = favorites;
this.recommends1 = recommends1;
this.cites = cites;
this.comments = comments;
this.authorName = authorName;
this.confidentialityLevel = confidentialityLevel;
}
} }

View File

@@ -54,6 +54,12 @@ public class CasesRecommend extends BaseEntity {
public CasesRecommend() { public CasesRecommend() {
} }
public CasesRecommend(String id, String recommendOrgName) {
this.setId(id);
this.recommendOrgName = recommendOrgName;
}
public CasesRecommend(String id, String recommendOrgName,LocalDateTime recommendTime) { public CasesRecommend(String id, String recommendOrgName,LocalDateTime recommendTime) {
this.setId(id); this.setId(id);
this.recommendOrgName = recommendOrgName; this.recommendOrgName = recommendOrgName;

View File

@@ -30,7 +30,6 @@ import com.xboe.orm.CustomFieldInFilter;
import com.xboe.school.vo.CasesVo; import com.xboe.school.vo.CasesVo;
import com.xboe.standard.enums.BoedxResourceType; import com.xboe.standard.enums.BoedxResourceType;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@@ -46,6 +45,7 @@ import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@@ -1163,11 +1163,15 @@ public class CasesServiceImpl implements ICasesService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void refreshViewsRankOfMajor(){ public void refreshViewsRankOfMajor(){
// LocalDateTime riseRankTime = LocalDateTime.now().withDayOfMonth(1).minusDays(1).toLocalDate().atTime(23, 59, 59); // 上月最后一天的结束时间 // 获取上个月的第一天的00:00
LocalDateTime riseRankTime = LocalDateTime.now().minusMonths(1).minusDays(1).toLocalDate().atTime(23, 59, 59); // 上月最后一天的结束时间 // LocalDateTime firstDayOfLastMonth = LocalDateTime.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()).toLocalDate().atStartOfDay();
int count = casesRankDao.sqlCount("SELECT count(1) FROM boe_cases_rank WHERE deleted=0 AND rise_rank_time = ?1", riseRankTime); // 获取上个月的最后一天的23:59:59,将其设置为上榜时间。注意定时统计任务是在本月月初执行的而上榜时间是在上个月最后一天23:59:59
LocalDateTime lastDayOfLastMonth = LocalDateTime.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).toLocalDate().atTime(23, 59, 59); // 设置为当天的几乎结束时刻
int count = casesRankDao.sqlCount("SELECT count(1) FROM boe_cases_rank WHERE deleted=0 AND rise_rank_time = ?1" , lastDayOfLastMonth);
if (count > 0){ if (count > 0){
return; log.info("已生成上个月排行榜数据,本次不执行");
throw new RuntimeException("已生成上个月排行榜数据,请将上月排行榜数据删除");
} }
//获取案例当月排名 //获取案例当月排名
@@ -1184,7 +1188,7 @@ public class CasesServiceImpl implements ICasesService {
casesRank.setCaseId(Long.valueOf(Array.get(o, 0).toString())); casesRank.setCaseId(Long.valueOf(Array.get(o, 0).toString()));
casesRank.setMajorId(Long.valueOf(Array.get(o, 1).toString())); casesRank.setMajorId(Long.valueOf(Array.get(o, 1).toString()));
casesRank.setMonthlyIncrement(Integer.parseInt(Array.get(o, 2).toString())); casesRank.setMonthlyIncrement(Integer.parseInt(Array.get(o, 2).toString()));
casesRank.setRiseRankTime(riseRankTime); casesRank.setRiseRankTime(lastDayOfLastMonth);
return casesRank; return casesRank;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// 根据专业分类进行分组 // 根据专业分类进行分组
@@ -1202,8 +1206,9 @@ public class CasesServiceImpl implements ICasesService {
lastMonthRank.addAll(sortedCaseList); lastMonthRank.addAll(sortedCaseList);
}); });
casesRankDao.saveList(lastMonthRank);
casesRankDao.saveList(lastMonthRank);
// 重置上月观看量last_month_views
casesDao.sqlUpdate("update boe_cases set last_month_views=views where deleted=0"); casesDao.sqlUpdate("update boe_cases set last_month_views=views where deleted=0");
} }
@@ -1446,35 +1451,25 @@ public class CasesServiceImpl implements ICasesService {
if (StringUtils.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
token = request.getHeader("token"); token = request.getHeader("token");
} }
UserDynamicResult userDynamicResult = thirdApi.getAllUserdynamicList2(userdynamicParam, token); // 获取案例浏览记录
UserDynamicResult userDynamicResult = thirdApi.getAllUserdynamicListOfCaseRead(userdynamicParam, token);
List<UserDynamic> allUserdynamicList = userDynamicResult.getList(); List<UserDynamic> allUserdynamicList = userDynamicResult.getList();
List<String> collect = allUserdynamicList.stream().map(UserDynamic::getContentId).distinct().collect(Collectors.toList()); List<String> collect = allUserdynamicList.stream().map(UserDynamic::getContentId).distinct().collect(Collectors.toList());
// 查询案例信息
List<Cases> caseList = this.ids(collect, accountId); List<Cases> caseList = this.ids(collect, accountId);
Map<String, Cases> map = caseList.stream().collect(Collectors.toMap(Cases::getId, cases -> cases)); Map<String, Cases> map = caseList.stream().collect(Collectors.toMap(Cases::getId, cases -> cases));
// 组合案例信息与浏览记录
List<CasesBrowsingHistoryVo> batchHistoryVoList = allUserdynamicList.stream().map(userDynamic -> { List<CasesBrowsingHistoryVo> batchHistoryVoList = allUserdynamicList.stream().map(userDynamic -> {
CasesBrowsingHistoryVo browsingHistoryVo = new CasesBrowsingHistoryVo(); CasesBrowsingHistoryVo browsingHistoryVo = new CasesBrowsingHistoryVo();
// 注意两者存在重名属性如ID会出现覆盖。CasesBrowsingHistoryVo中的ID是案例IDbrowsingHistoryId是UserDynamic的ID
browsingHistoryVo.setBrowsingHistoryId(userDynamic.getId()); browsingHistoryVo.setBrowsingHistoryId(userDynamic.getId());
browsingHistoryVo.setContentInfo(userDynamic.getContentInfo()); browsingHistoryVo.setContentInfo(userDynamic.getContentInfo());
browsingHistoryVo.setEventTime(userDynamic.getEventTime()); browsingHistoryVo.setEventTime(userDynamic.getEventTime());
browsingHistoryVo.setContentId(userDynamic.getContentId()); browsingHistoryVo.setContentId(userDynamic.getContentId());
browsingHistoryVo.setId(null);
if (map.containsKey(userDynamic.getContentId())){ if (map.containsKey(userDynamic.getContentId())){
// 确保copy案例时不会覆盖数据 // 重名属性如IDcopy会出现覆盖。
try { BeanUtils.copyProperties(map.get(userDynamic.getContentId()),browsingHistoryVo);
// 检查并复制第二次
Map<String, Object> srcMap = PropertyUtils.describe(map.get(userDynamic.getContentId()));
for (String key : srcMap.keySet()) {
if (PropertyUtils.getProperty(browsingHistoryVo, key) == null) { // 只有当目标对象的属性为null时才复制
PropertyUtils.setProperty(browsingHistoryVo, key, srcMap.get(key));
}
}
} catch (Exception e){
log.error("browsingHistoryVo copy error", e);
throw new RuntimeException(e);
}
} }
return browsingHistoryVo; return browsingHistoryVo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
@@ -1498,7 +1493,6 @@ public class CasesServiceImpl implements ICasesService {
// 定义日期时间的格式 // 定义日期时间的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy-MM"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy-MM");
Map<Long, List<String>> collect = list.stream().collect(Collectors.groupingBy Map<Long, List<String>> collect = list.stream().collect(Collectors.groupingBy
(CasesRank::getMajorId, Collectors.mapping(casesRank -> casesRank.getRiseRankTime().format(formatter), Collectors.toList()))); (CasesRank::getMajorId, Collectors.mapping(casesRank -> casesRank.getRiseRankTime().format(formatter), Collectors.toList())));

View File

@@ -4,9 +4,14 @@ import lombok.Data;
@Data @Data
public class CaseRankingVo { public class CaseRankingVo {
/**
* 案例id
*/
private String caseId; private String caseId;
/**
* 案例标题
*/
private String caseTitle; private String caseTitle;
} }

View File

@@ -6,12 +6,24 @@ import java.time.LocalDateTime;
@Data @Data
public class CaseViewRankingItemVo { public class CaseViewRankingItemVo {
/**
* 分类id
*/
private String majorId; private String majorId;
/**
* 分类名称
*/
private String majorName; private String majorName;
/**
* 上榜时间目前默认为一月中的最后一天的23:59:59
*/
private LocalDateTime riseRankTime; private LocalDateTime riseRankTime;
/**
* 标签名称
*/
private String tagName; private String tagName;
} }

View File

@@ -8,17 +8,23 @@ import java.time.LocalDateTime;
@Data @Data
public class CasesBrowsingHistoryVo extends Cases{ public class CasesBrowsingHistoryVo extends Cases{
/**
* 浏览记录id
* */
private String browsingHistoryId; private String browsingHistoryId;
/** /**
* 动态内容 * 案例标题
* */ * */
private String contentInfo; private String contentInfo;
/**
* 事件时间查看案例时有定时接口触发名为sendeventTime为该时间
* */
private LocalDateTime eventTime; private LocalDateTime eventTime;
/** /**
* 内容id * 案例ID
* */ * */
private String contentId; private String contentId;

View File

@@ -18,6 +18,9 @@ public class CasesQueryRecommendRankVo {
*/ */
private String caseTitle; private String caseTitle;
/**
* 案例作者
*/
private String caseAuthor; private String caseAuthor;
/** /**

View File

@@ -9,9 +9,14 @@ import java.time.LocalDateTime;
@Data @Data
public class FavoriteCaseOfIndexVo extends Cases{ public class FavoriteCaseOfIndexVo extends Cases{
/**
* 收藏id
*/
private String favoriteId; private String favoriteId;
/**
* 收藏时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime favoriteTime; private LocalDateTime favoriteTime;