mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/per-boe/java-servers.git
synced 2025-12-10 19:36:50 +08:00
Merge branch 'refs/heads/zcwy0813-yang' into dev0525
This commit is contained in:
@@ -17,6 +17,7 @@ import com.xboe.module.boecase.vo.CasesQueryRecommendRankVo;
|
|||||||
import com.xboe.module.dict.entity.DictItem;
|
import com.xboe.module.dict.entity.DictItem;
|
||||||
import com.xboe.module.excel.ExportsExcelSenderUtil;
|
import com.xboe.module.excel.ExportsExcelSenderUtil;
|
||||||
|
|
||||||
|
import com.xboe.module.interaction.dto.FavoriteCaseDto;
|
||||||
import com.xboe.system.user.dao.UserDao;
|
import com.xboe.system.user.dao.UserDao;
|
||||||
import com.xboe.system.user.entity.User;
|
import com.xboe.system.user.entity.User;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -126,6 +127,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();
|
||||||
req.setUserId(getCurrent().getAccountId());
|
req.setUserId(getCurrent().getAccountId());
|
||||||
|
req.setUserId("965342027497607168");
|
||||||
PageList<Cases> views = null;
|
PageList<Cases> views = null;
|
||||||
if (type.equals("recommend")) {
|
if (type.equals("recommend")) {
|
||||||
views = casesService.queryRecommendPageCasesV2(req);
|
views = casesService.queryRecommendPageCasesV2(req);
|
||||||
@@ -613,7 +615,8 @@ public class CasesApi extends ApiBaseController {
|
|||||||
if (ids.isEmpty()) {
|
if (ids.isEmpty()) {
|
||||||
return badRequest("参数异常");
|
return badRequest("参数异常");
|
||||||
}
|
}
|
||||||
List<Cases> cases = casesService.ids(ids);
|
String accountId = getCurrent().getAccountId();
|
||||||
|
List<Cases> cases = casesService.ids(ids,accountId);
|
||||||
return success(cases);
|
return success(cases);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,7 +690,8 @@ public class CasesApi extends ApiBaseController {
|
|||||||
public JsonResponse<List<Cases>> queryPopularityOfMajor(@RequestParam(required = false) Integer pageSize,
|
public JsonResponse<List<Cases>> queryPopularityOfMajor(@RequestParam(required = false) Integer pageSize,
|
||||||
@RequestParam Long majorId,
|
@RequestParam Long majorId,
|
||||||
@RequestParam LocalDateTime rankMonth) {
|
@RequestParam LocalDateTime rankMonth) {
|
||||||
List<Cases> caseRankingVoList =casesService.queryPopularityOfMajor(pageSize,majorId,rankMonth);
|
String accountId = getCurrent().getAccountId();
|
||||||
|
List<Cases> caseRankingVoList =casesService.queryPopularityOfMajor(pageSize,majorId,rankMonth,accountId);
|
||||||
return success(caseRankingVoList);
|
return success(caseRankingVoList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -733,4 +737,17 @@ public class CasesApi extends ApiBaseController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询收藏
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@GetMapping("/queryFavoriteCaseOfIndex")
|
||||||
|
public JsonResponse<PageList<FavoriteCaseDto>> queryFavoriteCaseOfIndex(Integer pageIndex,Integer pageSize,String order) {
|
||||||
|
// String aid = this.getCurrent().getAccountId();
|
||||||
|
String aid = "965342027497607168";
|
||||||
|
PageList<FavoriteCaseDto> casesList = casesService.queryFavoriteCaseOfIndex(pageIndex,pageSize,order,aid);
|
||||||
|
return success(casesList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class CasesRankDao extends BaseDao<CasesRank> {
|
|||||||
|
|
||||||
public List<CasesRank> findViewsRankRecordByCaseId(String caseId) {
|
public List<CasesRank> findViewsRankRecordByCaseId(String caseId) {
|
||||||
String sql =
|
String sql =
|
||||||
"SELECT bdmt.name,bcvr.rise_rank_time,bcvr.rank \n" +
|
"SELECT bdmt.name,bcvr.rise_rank_time,bcvr.rank,bcvr.major_id \n" +
|
||||||
"FROM\n" +
|
"FROM\n" +
|
||||||
" boe_cases_rank bcvr\n" +
|
" boe_cases_rank bcvr\n" +
|
||||||
"JOIN boe_dict_major_type bdmt \n" +
|
"JOIN boe_dict_major_type bdmt \n" +
|
||||||
@@ -33,9 +33,9 @@ public class CasesRankDao extends BaseDao<CasesRank> {
|
|||||||
for (Object[] o : list) {
|
for (Object[] o : list) {
|
||||||
CasesRank casesRank = new CasesRank();
|
CasesRank casesRank = new CasesRank();
|
||||||
casesRank.setMajorName(o[0].toString());
|
casesRank.setMajorName(o[0].toString());
|
||||||
|
casesRank.setRiseRankTime(((Timestamp) o[1]).toLocalDateTime());
|
||||||
casesRank.setSysCreateTime(((Timestamp) o[1]).toLocalDateTime());
|
|
||||||
casesRank.setRank(Integer.valueOf(o[2].toString()));
|
casesRank.setRank(Integer.valueOf(o[2].toString()));
|
||||||
|
casesRank.setMajorId(Long.valueOf(o[3].toString()));
|
||||||
resultList.add(casesRank);
|
resultList.add(casesRank);
|
||||||
}
|
}
|
||||||
return resultList;
|
return resultList;
|
||||||
|
|||||||
@@ -21,50 +21,79 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
public interface CasesRecordDao extends JpaRepository<Cases, String>, JpaSpecificationExecutor<Cases> {
|
public interface CasesRecordDao extends JpaRepository<Cases, String>, JpaSpecificationExecutor<Cases> {
|
||||||
@Query(nativeQuery = true, value = "select c.* from ( select b.*" +
|
@Query(nativeQuery = true, value =
|
||||||
" from boe_cases_recommend_push_record a left JOIN boe_cases b on a.case_id = b.id" +
|
" SELECT c.* FROM ( " +
|
||||||
" where b.deleted=0 and a.push_status = 3 and a.deleted=0 and a.push_user_id= :#{#condition.userId}" +
|
" SELECT b.* " +
|
||||||
" and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" FROM boe_cases_recommend_push_record a " +
|
||||||
" or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" LEFT JOIN boe_cases b ON a.case_id = b.id " +
|
||||||
" or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" WHERE b.deleted = 0 " +
|
||||||
" or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" AND a.push_status = 5 " +
|
||||||
" or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" AND a.deleted = 0 " +
|
||||||
" or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" AND a.push_user_id = :#{#condition.userId} " +
|
||||||
" or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" +
|
" AND IF(IFNULL(:#{#condition.keyWord}, '') != '', " +
|
||||||
" and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" +
|
" b.title LIKE CONCAT('%', :#{#condition.keyWord}, '%') " +
|
||||||
" and if(:#{#condition.caseIdsEmpty}, 1=1, b.id in (:#{#condition.caseIds}))" +
|
" OR b.author_name LIKE CONCAT('%', :#{#condition.keyWord}, '%') " +
|
||||||
" and ("+
|
" OR b.keyword1 LIKE CONCAT('%', :#{#condition.keyWord}, '%') " +
|
||||||
" if(:#{#condition.allOrgEmpty}, 1=1, 1=2)" +
|
" OR b.keyword2 LIKE CONCAT('%', :#{#condition.keyWord}, '%') " +
|
||||||
" or if(:#{#condition.org1Empty}, 1=2, b.org_domain_parent in (:#{#condition.org1}))" +
|
" OR b.keyword3 LIKE CONCAT('%', :#{#condition.keyWord}, '%') " +
|
||||||
" or if(:#{#condition.org2Empty}, 1=2, b.org_domain_parent2 in (:#{#condition.org2}))" +
|
" OR b.keyword4 LIKE CONCAT('%', :#{#condition.keyWord}, '%') " +
|
||||||
" or if(:#{#condition.org3Empty}, 1=2, b.org_domain_parent3 in (:#{#condition.org3}))" +
|
" OR b.keyword5 LIKE CONCAT('%', :#{#condition.keyWord}, '%'), " +
|
||||||
")" +
|
" 1 = 1) " +
|
||||||
" and if(:#{#condition.isSysType1Empty} , 1=1, b.sys_type1 = :#{#condition.sysType1} )"+
|
" AND IF(:#{#condition.yearsEmpty}, 1 = 1, YEAR(b.sys_create_time) IN (:#{#condition.years})) " +
|
||||||
" and if(:#{#condition.isSysType2Empty} , 1=1, b.sys_type2 = :#{#condition.sysType2} )"+
|
" AND IF(:#{#condition.caseIdsEmpty}, 1 = 1, b.id IN (:#{#condition.caseIds})) " +
|
||||||
" and if(:#{#condition.isSysType3Empty} , 1=1, b.sys_type3 = :#{#condition.sysType3} )"+
|
" AND ( " +
|
||||||
" order by a.sys_create_time DESC, a.read_flag ASC) as c group by c.id",
|
" IF(:#{#condition.allOrgEmpty}, 1 = 1, 1 = 2) " +
|
||||||
countQuery = "select count(*) FROM (select c.* from ( select b.*" +
|
" OR IF(:#{#condition.org1Empty}, 1 = 2, b.org_domain_parent IN (:#{#condition.org1})) " +
|
||||||
" from boe_cases_recommend_push_record a left JOIN boe_cases b on a.case_id = b.id " +
|
" OR IF(:#{#condition.org2Empty}, 1 = 2, b.org_domain_parent2 IN (:#{#condition.org2})) " +
|
||||||
" where b.deleted=0 and a.push_status = 3 and a.deleted=0 and a.push_user_id= :#{#condition.userId}" +
|
" OR IF(:#{#condition.org3Empty}, 1 = 2, b.org_domain_parent3 IN (:#{#condition.org3})) " +
|
||||||
" and if(IFNULL(:#{#condition.keyWord},'')!='',b.title like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" ) " +
|
||||||
" or b.author_name like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" AND IF(:#{#condition.isSysType1Empty}, 1 = 1, b.sys_type1 = :#{#condition.sysType1}) " +
|
||||||
" or b.keyword1 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" AND IF(:#{#condition.isSysType2Empty}, 1 = 1, b.sys_type2 = :#{#condition.sysType2}) " +
|
||||||
" or b.keyword2 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" AND IF(:#{#condition.isSysType3Empty}, 1 = 1, b.sys_type3 = :#{#condition.sysType3}) " +
|
||||||
" or b.keyword3 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" ) AS c GROUP BY c.id " +
|
||||||
" or b.keyword4 like CONCAT('%',:#{#condition.keyWord},'%')" +
|
" ORDER BY " +
|
||||||
" or b.keyword5 like CONCAT('%',:#{#condition.keyWord},'%'),1=1)" +
|
" IF(:#{#condition.orderField}='views' and :#{#condition.orderAsc}=true,c.views, null) asc," +
|
||||||
" and if(:#{#condition.yearsEmpty},1=1, YEAR(b.sys_create_time) in (:#{#condition.years}))" +
|
" IF(:#{#condition.orderField}='views' and :#{#condition.orderAsc}=false,c.views, null) desc," +
|
||||||
" and if(:#{#condition.caseIdsEmpty}, 1=1, b.id in (:#{#condition.caseIds}))" +
|
" IF(:#{#condition.orderField}='sys_create_time' and :#{#condition.orderAsc}=true ,c.sys_create_time,null) asc," +
|
||||||
" and ("+
|
" IF(:#{#condition.orderField}='sys_create_time' and :#{#condition.orderAsc}=false , c.sys_create_time,null) desc ," +
|
||||||
" if(:#{#condition.allOrgEmpty}, 1=1, 1=2)" +
|
" IF(:#{#condition.orderField}='views' and :#{#condition.orderField}!='sys_create_time' , c.sys_create_time , null) desc",
|
||||||
" or if(:#{#condition.org1Empty}, 1=1, b.org_domain_parent in (:#{#condition.org1}))" +
|
countQuery =
|
||||||
" or if(:#{#condition.org2Empty}, 1=1, b.org_domain_parent2 in (:#{#condition.org2}))" +
|
" SELECT count(*) FROM ( " +
|
||||||
" or if(:#{#condition.org3Empty}, 1=1, b.org_domain_parent3 in (:#{#condition.org3}))" +
|
" SELECT b.* " +
|
||||||
")" +
|
" FROM boe_cases_recommend_push_record a " +
|
||||||
" and if(:#{#condition.isSysType1Empty} , 1=1, b.sys_type1 = :#{#condition.sysType1} )"+
|
" LEFT JOIN boe_cases b ON a.case_id = b.id " +
|
||||||
" and if(:#{#condition.isSysType2Empty} , 1=1, b.sys_type2 = :#{#condition.sysType2} )"+
|
" WHERE b.deleted = 0 " +
|
||||||
" and if(:#{#condition.isSysType3Empty} , 1=1, b.sys_type3 = :#{#condition.sysType3} )"+
|
" AND a.push_status = 5 " +
|
||||||
" order by a.sys_create_time DESC, a.read_flag ASC ) as c group by c.id) as d")
|
" AND a.deleted = 0 " +
|
||||||
|
" 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(:#{#condition.yearsEmpty}, 1 = 1, YEAR(b.sys_create_time) IN (:#{#condition.years})) " +
|
||||||
|
" AND IF(:#{#condition.caseIdsEmpty}, 1 = 1, b.id IN (:#{#condition.caseIds})) " +
|
||||||
|
" AND ( " +
|
||||||
|
" IF(:#{#condition.allOrgEmpty}, 1 = 1, 1 = 2) " +
|
||||||
|
" OR IF(:#{#condition.org1Empty}, 1 = 2, b.org_domain_parent IN (:#{#condition.org1})) " +
|
||||||
|
" OR IF(:#{#condition.org2Empty}, 1 = 2, b.org_domain_parent2 IN (:#{#condition.org2})) " +
|
||||||
|
" OR IF(:#{#condition.org3Empty}, 1 = 2, b.org_domain_parent3 IN (:#{#condition.org3})) " +
|
||||||
|
" ) " +
|
||||||
|
" AND IF(:#{#condition.isSysType1Empty}, 1 = 1, b.sys_type1 = :#{#condition.sysType1}) " +
|
||||||
|
" AND IF(:#{#condition.isSysType2Empty}, 1 = 1, b.sys_type2 = :#{#condition.sysType2}) " +
|
||||||
|
" AND IF(:#{#condition.isSysType3Empty}, 1 = 1, b.sys_type3 = :#{#condition.sysType3}) " +
|
||||||
|
" ) AS c GROUP BY c.id " +
|
||||||
|
" ORDER BY " +
|
||||||
|
" IF(:#{#condition.orderField}='views' and :#{#condition.orderAsc}=true,c.views, null) asc," +
|
||||||
|
" IF(:#{#condition.orderField}='views' and :#{#condition.orderAsc}=false,c.views, null) desc," +
|
||||||
|
" IF(:#{#condition.orderField}='sys_create_time' and :#{#condition.orderAsc}=true ,c.sys_create_time,null) asc," +
|
||||||
|
" IF(:#{#condition.orderField}='sys_create_time' and :#{#condition.orderAsc}=false , c.sys_create_time,null) desc," +
|
||||||
|
" IF(:#{#condition.orderField}!='views' and :#{#condition.orderField}!='sys_create_time' , c.sys_create_time , null) desc"
|
||||||
|
)
|
||||||
Page<Cases> queryList(Pageable pageable, @Param("condition") CasePageVo casePage);
|
Page<Cases> queryList(Pageable pageable, @Param("condition") CasePageVo casePage);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.xboe.module.boecase.entity;
|
|||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.xboe.core.SysConstant;
|
import com.xboe.core.SysConstant;
|
||||||
import com.xboe.core.orm.BaseEntity;
|
import com.xboe.core.orm.BaseEntity;
|
||||||
|
import com.xboe.module.boecase.vo.CaseViewRankingItemVo;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@@ -322,7 +323,7 @@ public class Cases extends BaseEntity {
|
|||||||
private String excellentTag;
|
private String excellentTag;
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
private List<String> viewRankTags;
|
private List<CaseViewRankingItemVo> viewRankTags;
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
private List<String> authorTags;
|
private List<String> authorTags;
|
||||||
|
|||||||
@@ -54,8 +54,9 @@ public class CasesRecommend extends BaseEntity {
|
|||||||
public CasesRecommend() {
|
public CasesRecommend() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public CasesRecommend(String id, String recommendOrgName) {
|
public CasesRecommend(String id, String recommendOrgName,LocalDateTime recommendTime) {
|
||||||
this.setId(id);
|
this.setId(id);
|
||||||
this.recommendOrgName = recommendOrgName;
|
this.recommendOrgName = recommendOrgName;
|
||||||
|
this.recommendTime = recommendTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.xboe.module.boecase.entity.Cases;
|
|||||||
import com.xboe.module.boecase.vo.CaseRankingVo;
|
import com.xboe.module.boecase.vo.CaseRankingVo;
|
||||||
import com.xboe.module.boecase.vo.CasesQueryRecommendRankVo;
|
import com.xboe.module.boecase.vo.CasesQueryRecommendRankVo;
|
||||||
import com.xboe.module.dict.entity.DictItem;
|
import com.xboe.module.dict.entity.DictItem;
|
||||||
|
import com.xboe.module.interaction.dto.FavoriteCaseDto;
|
||||||
import com.xboe.school.vo.CasesVo;
|
import com.xboe.school.vo.CasesVo;
|
||||||
|
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
@@ -95,7 +96,7 @@ public interface ICasesService{
|
|||||||
/**
|
/**
|
||||||
* 用于二次查询
|
* 用于二次查询
|
||||||
* */
|
* */
|
||||||
List<Cases> ids(List<String> ids);
|
List<Cases> ids(List<String> ids, String accountId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*二期 首页的推荐案例
|
*二期 首页的推荐案例
|
||||||
@@ -129,7 +130,8 @@ public interface ICasesService{
|
|||||||
|
|
||||||
List<CaseRankingVo> queryRank(Integer pageSize, Integer rankType);
|
List<CaseRankingVo> queryRank(Integer pageSize, Integer rankType);
|
||||||
|
|
||||||
List<Cases> queryPopularityOfMajor(Integer pageSize, Long majorId, LocalDateTime month);
|
List<Cases> queryPopularityOfMajor(Integer pageSize, Long majorId, LocalDateTime month, String accountId);
|
||||||
|
|
||||||
|
PageList<FavoriteCaseDto> queryFavoriteCaseOfIndex(Integer pageIndex, Integer pageSize, String order, String aid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,15 @@ import com.xboe.module.boecase.dto.*;
|
|||||||
import com.xboe.module.boecase.entity.*;
|
import com.xboe.module.boecase.entity.*;
|
||||||
import com.xboe.module.boecase.service.ICasesService;
|
import com.xboe.module.boecase.service.ICasesService;
|
||||||
import com.xboe.module.boecase.vo.CaseRankingVo;
|
import com.xboe.module.boecase.vo.CaseRankingVo;
|
||||||
|
import com.xboe.module.boecase.vo.CaseViewRankingItemVo;
|
||||||
import com.xboe.module.boecase.vo.CasesQueryRecommendRankVo;
|
import com.xboe.module.boecase.vo.CasesQueryRecommendRankVo;
|
||||||
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;
|
||||||
|
import com.xboe.module.interaction.dto.FavoriteCaseDto;
|
||||||
|
import com.xboe.module.interaction.entity.Favorites;
|
||||||
import com.xboe.orm.CustomFieldInFilter;
|
import com.xboe.orm.CustomFieldInFilter;
|
||||||
import com.xboe.school.vo.CasesVo;
|
import com.xboe.school.vo.CasesVo;
|
||||||
|
import com.xboe.standard.enums.BoedxResourceType;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -40,6 +44,7 @@ import java.time.LocalDateTime;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
@@ -330,54 +335,19 @@ 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();
|
List<Cases> casesList = page.getList();
|
||||||
list.forEach(it->{
|
casesList.forEach(it->{
|
||||||
it.setBreCommend(0);
|
it.setBreCommend(0);
|
||||||
});
|
});
|
||||||
if (CollUtil.isNotEmpty(list) && StrUtil.isNotBlank(caseVo.getUserId())) {
|
casesList = addTags(casesList, caseVo.getUserId());
|
||||||
List<String> caseIds = list.stream().map(Cases::getId).collect(Collectors.toList());
|
page.setList(casesList);
|
||||||
QueryBuilder recommendCasesQuery = QueryBuilder.from(CasesRecommendPushRecord.class);
|
|
||||||
recommendCasesQuery.addField("new CasesRecommendPushRecord(id,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", 3));
|
|
||||||
subFilters.add(FieldFilters.eq("deleted", Boolean.FALSE));
|
|
||||||
|
|
||||||
QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters)
|
|
||||||
.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);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addAuthorTagAndCaseNewTag(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加案例标签、作者标签(最佳案例N篇、上榜浏览量TOP榜单N次)、案例标签(xx分类浏览量TOP、最佳案例)
|
||||||
|
*/
|
||||||
private void addAuthorTagAndCaseNewTag(List<Cases> caseList) {
|
private void addAuthorTagAndCaseNewTag(List<Cases> caseList) {
|
||||||
if (CollUtil.isEmpty(caseList)) {
|
if (CollUtil.isEmpty(caseList)) {
|
||||||
return;
|
return;
|
||||||
@@ -393,14 +363,21 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
List<CasesRank> viewsRankRecords = casesRankDao.findViewsRankRecordByCaseId(e.getId());
|
List<CasesRank> viewsRankRecords = casesRankDao.findViewsRankRecordByCaseId(e.getId());
|
||||||
if (CollUtil.isNotEmpty(viewsRankRecords)) {
|
if (CollUtil.isNotEmpty(viewsRankRecords)) {
|
||||||
// 拼接生成浏览量排行榜的标签
|
// 拼接生成浏览量排行榜的标签
|
||||||
List<String> viewRankTags = viewsRankRecords.stream().map(casesRank -> {
|
List<CaseViewRankingItemVo> viewRankTags = viewsRankRecords.stream().map(casesRank -> {
|
||||||
String pattern = casesRank.getSysCreateTime().getMonthValue() < 10 ? "yyyy年M月" : "yyyy年MM月";
|
String pattern = casesRank.getRiseRankTime().getMonthValue() < 10 ? "yyyy年M月" : "yyyy年MM月";
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
||||||
String time = casesRank.getSysCreateTime().format(formatter);
|
String time = casesRank.getRiseRankTime().format(formatter);
|
||||||
|
|
||||||
// 2023年6月 经营管理类 浏览量 TOP1
|
// 2023年6月 经营管理类 浏览量 TOP1
|
||||||
String viewRankTag = time + casesRank.getMajorName() + "类浏览量TOP" + (casesRank.getRank() + 1);
|
String viewRankTag = time + casesRank.getMajorName() + "类浏览量TOP" + (casesRank.getRank() + 1);
|
||||||
return viewRankTag;
|
|
||||||
|
CaseViewRankingItemVo caseViewRankingItemVo = new CaseViewRankingItemVo();
|
||||||
|
caseViewRankingItemVo.setMajorId(casesRank.getMajorId());
|
||||||
|
caseViewRankingItemVo.setMajorName(casesRank.getMajorName());
|
||||||
|
caseViewRankingItemVo.setTagName(viewRankTag);
|
||||||
|
caseViewRankingItemVo.setRiseRankTime(casesRank.getRiseRankTime());
|
||||||
|
|
||||||
|
return caseViewRankingItemVo;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
e.setViewRankTags(viewRankTags);
|
e.setViewRankTags(viewRankTags);
|
||||||
|
|
||||||
@@ -480,45 +457,9 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
pageList.setCount((int) cases.getTotalElements());
|
pageList.setCount((int) cases.getTotalElements());
|
||||||
pageList.setPageSize(cases.getSize());
|
pageList.setPageSize(cases.getSize());
|
||||||
List<Cases> content = cases.getContent();
|
List<Cases> content = cases.getContent();
|
||||||
List<String> 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(id,recommendId,caseId)");
|
|
||||||
List<IFieldFilter> 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));
|
|
||||||
|
|
||||||
QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters)
|
addTags(content, caseVo.getUserId());
|
||||||
.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);
|
|
||||||
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, CasesRecommend> collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), item->item));
|
|
||||||
content.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());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
addAuthorTagAndCaseNewTag(content);
|
|
||||||
pageList.setList(content);
|
pageList.setList(content);
|
||||||
return pageList;
|
return pageList;
|
||||||
}
|
}
|
||||||
@@ -1013,11 +954,12 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Cases> ids(List<String> ids) {
|
public List<Cases> ids(List<String> ids, String accountId) {
|
||||||
QueryBuilder builder = QueryBuilder.from(Cases.class);
|
QueryBuilder builder = QueryBuilder.from(Cases.class);
|
||||||
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);
|
||||||
return cases;
|
return cases;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1246,7 +1188,7 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Cases> queryPopularityOfMajor(Integer pageSize, Long majorId, LocalDateTime month) {
|
public List<Cases> queryPopularityOfMajor(Integer pageSize, Long majorId, LocalDateTime month, String accountId) {
|
||||||
if (pageSize == null) {
|
if (pageSize == null) {
|
||||||
pageSize = 10;
|
pageSize = 10;
|
||||||
}
|
}
|
||||||
@@ -1259,51 +1201,70 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
query.addFilter(FieldFilters.in("id",caseIdList));
|
query.addFilter(FieldFilters.in("id",caseIdList));
|
||||||
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);
|
||||||
|
|
||||||
if (CollUtil.isNotEmpty(casesList)) {
|
return casesList;
|
||||||
List<String> caseIds = casesList.stream().map(Cases::getId).collect(Collectors.toList());
|
}
|
||||||
QueryBuilder recommendCasesQuery = QueryBuilder.from(CasesRecommendPushRecord.class);
|
|
||||||
recommendCasesQuery.addField("new CasesRecommendPushRecord(id,recommendId,caseId)");
|
|
||||||
List<IFieldFilter> subFilters = new ArrayList<>();
|
|
||||||
subFilters.add(FieldFilters.in("caseId", caseIds));
|
|
||||||
subFilters.add(FieldFilters.eq("pushStatus", 3));
|
|
||||||
subFilters.add(FieldFilters.eq("deleted", Boolean.FALSE));
|
|
||||||
|
|
||||||
QueryBuilder queryBuilder = recommendCasesQuery.addFilters(subFilters)
|
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)
|
.addOrder("sysCreateTime", OrderDirection.DESC)
|
||||||
.addGroupBy("caseId");
|
.addGroupBy("caseId");
|
||||||
|
|
||||||
List<CasesRecommendPushRecord> pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder());
|
List<CasesRecommendPushRecord> pushRecords = casesRecommendPushRecordDao.findList(queryBuilder.builder());
|
||||||
|
|
||||||
if (CollUtil.isNotEmpty(pushRecords)) {
|
if (CollUtil.isNotEmpty(pushRecords)) {
|
||||||
List<String> rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).distinct().collect(Collectors.toList());
|
List<String> rIds = pushRecords.stream().map(CasesRecommendPushRecord::getRecommendId).distinct().collect(Collectors.toList());
|
||||||
QueryBuilder builder = QueryBuilder.from(CasesRecommend.class);
|
QueryBuilder builder = QueryBuilder.from(CasesRecommend.class)
|
||||||
builder.addField("new CasesRecommend(id,recommendOrgName)");
|
.addField("new CasesRecommend(id,recommendOrgName,recommendTime)")
|
||||||
List<IFieldFilter> recommendFilters = new ArrayList<>();
|
.addFilters(Arrays.asList(
|
||||||
recommendFilters.add(FieldFilters.eq("deleted", Boolean.FALSE));
|
FieldFilters.eq("deleted", Boolean.FALSE),
|
||||||
recommendFilters.add(FieldFilters.in("id", rIds));
|
FieldFilters.in("id", rIds)
|
||||||
builder.addFilters(recommendFilters);
|
));
|
||||||
|
|
||||||
List<CasesRecommend> recommands = casesRecommendDao.findList(builder.builder());
|
List<CasesRecommend> recommands = casesRecommendDao.findList(builder.builder());
|
||||||
if (CollUtil.isNotEmpty(recommands)) {
|
if (CollUtil.isNotEmpty(recommands)) {
|
||||||
Map<String, String> collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), v -> v.getRecommendOrgName()));
|
Map<String, CasesRecommend> collect = recommands.stream().collect(Collectors.toMap(k -> k.getId(), item -> item));
|
||||||
casesList.forEach(it -> {
|
casesList.forEach(it -> {
|
||||||
CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId()));
|
CasesRecommendPushRecord one = CollUtil.findOne(pushRecords, (a) -> StrUtil.equals(a.getCaseId(), it.getId()));
|
||||||
if (Objects.nonNull(one)) {
|
if (Objects.nonNull(one)) {
|
||||||
String recommendOrgName = collect.get(one.getRecommendId());
|
CasesRecommend recommend = collect.get(one.getRecommendId());
|
||||||
it.setBreCommend(1);
|
it.setBreCommend(1);
|
||||||
it.setRecommendOrgName(recommendOrgName);
|
it.setRefId(one.getId());
|
||||||
|
it.setRecommendOrgName(recommend.getRecommendOrgName());
|
||||||
|
it.setSysCreateTime(recommend.getRecommendTime());
|
||||||
} else {
|
} else {
|
||||||
it.setBreCommend(0);
|
it.setBreCommend(0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addAuthorTagAndCaseNewTag(casesList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return casesList;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CasesQueryRecommendRankVo> queryRecommendRank() {
|
public List<CasesQueryRecommendRankVo> queryRecommendRank() {
|
||||||
QueryBuilder queryBuilder = QueryBuilder.from(Cases.class);
|
QueryBuilder queryBuilder = QueryBuilder.from(Cases.class);
|
||||||
@@ -1406,6 +1367,54 @@ public class CasesServiceImpl implements ICasesService {
|
|||||||
recommendRank.forEach(casesDao::update);
|
recommendRank.forEach(casesDao::update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageList<FavoriteCaseDto> queryFavoriteCaseOfIndex(Integer pageIndex, Integer pageSize, String order, String aid) {
|
||||||
|
String from = Favorites.class.getSimpleName()+" f,"+ Cases.class.getSimpleName()+" c";
|
||||||
|
QueryBuilder builder = QueryBuilder.from(from);
|
||||||
|
builder.addFields("f.id","f.sysCreateTime","c");
|
||||||
|
|
||||||
|
builder.addFilter(FieldFilters.eqField("f.objId","c.id"));
|
||||||
|
builder.addFilter(FieldFilters.eq("f.objType", BoedxResourceType.Case.value()));
|
||||||
|
builder.addFilter(FieldFilters.eq("f.sysCreateAid",aid));
|
||||||
|
builder.addFilter(FieldFilters.eq("c.deleted", false));
|
||||||
|
|
||||||
|
if ("desc".equals(order)){
|
||||||
|
builder.addOrder(OrderCondition.desc("f.sysCreateTime"));
|
||||||
|
}else if ("asc".equals(order)){
|
||||||
|
builder.addOrder(OrderCondition.asc("f.sysCreateTime"));
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.setPageIndex(pageIndex);
|
||||||
|
builder.setPageSize(pageSize);
|
||||||
|
|
||||||
|
PageList<Object[]> pageFields=null;
|
||||||
|
try {
|
||||||
|
pageFields = casesDao.findPageFields(builder.builder());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("收藏案例查询错误",e);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Object[]> list = pageFields.getList();
|
||||||
|
// 提取出 Cases 对象,添加标签
|
||||||
|
List<Cases> casesList = list.stream().map(o -> (Cases) o[2]).collect(Collectors.toList());
|
||||||
|
casesList = addTags(casesList, aid);
|
||||||
|
Map<String, Cases> caseMap = casesList.stream().collect(Collectors.toMap(Cases::getId, Function.identity()));
|
||||||
|
|
||||||
|
PageList<FavoriteCaseDto> favoriteCaseDtoPageList = new PageList<>();
|
||||||
|
favoriteCaseDtoPageList.setList(new ArrayList<>());
|
||||||
|
favoriteCaseDtoPageList.setPageSize(pageSize);
|
||||||
|
favoriteCaseDtoPageList.setCount(pageFields.getCount());
|
||||||
|
for (Object[] o: list) {
|
||||||
|
FavoriteCaseDto favoriteCaseDto = new FavoriteCaseDto();
|
||||||
|
favoriteCaseDto.setId(o[0].toString());
|
||||||
|
favoriteCaseDto.setTime(LocalDateTime.parse(o[1].toString()));
|
||||||
|
Cases cases = caseMap.get(((Cases) o[2]).getId());
|
||||||
|
favoriteCaseDto.setCases(cases);
|
||||||
|
favoriteCaseDtoPageList.getList().add(favoriteCaseDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
return favoriteCaseDtoPageList;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.xboe.module.boecase.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CaseViewRankingItemVo {
|
||||||
|
|
||||||
|
private Long majorId;
|
||||||
|
|
||||||
|
private String majorName;
|
||||||
|
|
||||||
|
private LocalDateTime riseRankTime;
|
||||||
|
|
||||||
|
private String tagName;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user