@@ -1,8 +1,10 @@
package com.ai.da.service.impl ;
import com.ai.da.common.config.exception.BusinessException ;
import com.ai.da.common.constant.CommonConstant ;
import com.ai.da.common.context.UserContext ;
import com.ai.da.common.response.PageBaseResponse ;
import com.ai.da.common.response.ResultEnum ;
import com.ai.da.common.utils.CopyUtil ;
import com.ai.da.common.utils.MinioUtil ;
import com.ai.da.common.utils.RedisUtil ;
@@ -133,6 +135,10 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
if ( ! CollectionUtils . isEmpty ( portfoliosSameName ) ) {
throw new BusinessException ( " The title of the published work has been used. " ) ;
}
// 判断用户是否参与#RCAworkshop_2024的活动
if ( Objects . isNull ( portfolioDTO . getId ( ) ) & & hasParticipatedRCAWorkshop ( authPrincipalVo . getId ( ) , portfolioDTO . getTagsDTO ( ) ) ) {
throw new BusinessException ( " you.have.participated.in.the.event " , ResultEnum . PROMPT . getCode ( ) ) ;
}
if ( file ! = null & & file . getOriginalFilename ( ) ! = null ) {
Long portfolioId ;
String upload = minioUtil . upload ( " aida-canvas " , String . valueOf ( authPrincipalVo . getId ( ) ) , file ) ;
@@ -299,6 +305,12 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
resultPortfolioId = portfolio . getId ( ) ;
portfolioId = portfolio . getId ( ) ;
}
// id不为空 表示更新发布;为空,表示新发布
if ( ! Objects . isNull ( portfolioDTO . getId ( ) ) ) {
portfolioId = portfolioDTO . getId ( ) ;
// 删除作品的所有与标签的关联关系
portfolioTagsMapper . deleteByPortfolioId ( portfolioId ) ;
}
// 记录作品添加的标签
if ( ! portfolioDTO . getTagsDTO ( ) . isEmpty ( ) ) {
addTagsForPortfolio ( portfolioDTO . getTagsDTO ( ) , portfolioId ) ;
@@ -456,15 +468,17 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
}
}
List < Portfolio > topThree = new ArrayList < > ( ) ;
List < Long > excludeIds = new ArrayList < > ( ) ; // 存放需要排除的 ID 列表
if ( ! Objects . isNull ( query . getTagId ( ) ) & & ! query . getTagId ( ) . equals ( 0L ) ) {
return queryPortfolioByTag ( null , query . getTagId ( ) , query . getPage ( ) , query . getSize ( ) ) ;
}
/*List<Portfolio> topThree = new ArrayList<>();
List<Long> excludeIds = new ArrayList<>(); // 存放需要排除的 ID 列表
// 获取前三点赞和前三浏览的作品集,并将其排除在分页查询之外
if (query.getPage() == 1 && (query.getGetMyPortfolio() != 1 || query.getGetLikePortfolio() != 1)) {
// 获取前三点赞的作品集 ID
List<Long> topThreeLike = getTopThreeLikeFromRedis(RedisUtil.PORTFOLIO_LIKE_KEY);
List<Long> topThreeView = getTopThreeViewFromRedis(RedisUtil.PORTFOLIO_VIEW_KEY, topThreeLike);
// 获取前三点赞的作品集
if (!CollectionUtils.isEmpty(topThreeLike)) {
QueryWrapper<Portfolio> queryLike = new QueryWrapper<>();
@@ -473,7 +487,6 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
topThree.addAll(topThreeLikePortfolio);
excludeIds.addAll(topThreeLike); // 添加到排除 ID 列表
}
// 获取前三浏览的作品集
if (!CollectionUtils.isEmpty(topThreeView)) {
QueryWrapper<Portfolio> queryView = new QueryWrapper<>();
@@ -483,11 +496,10 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
excludeIds.addAll(topThreeView); // 添加到排除 ID 列表
}
}
// 在正常分页查询中排除前三点赞和前三浏览的作品集
if (!CollectionUtils.isEmpty(excludeIds)) {
qw.lambda().notIn(Portfolio::getId, excludeIds);
}
}*/
// 按更新时间排序
qw . lambda ( ) . orderByDesc ( Portfolio : : getUpdateDate ) ;
@@ -495,12 +507,12 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
// 执行分页查询
IPage < Portfolio > page = portfolioMapper . selectPage ( new Page < > ( query . getPage ( ) , query . getSize ( ) ) , qw ) ;
// 如果前三点赞和浏览不为空,将它们添加到分页查询的结果最前面
/* // 如果前三点赞和浏览不为空,将它们添加到分页查询的结果最前面
if (!topThree.isEmpty()) {
List<Portfolio> records = page.getRecords();
records.addAll(0, topThree); // 添加到查询结果的开头
page.setRecords(records);
}
}*/
// 将 Portfolio 转换为 PortfolioVO 并进行相关处理
IPage < PortfolioVO > convert = page . convert ( ( Function < Portfolio , PortfolioVO > ) portfolio - > {
@@ -523,7 +535,6 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
return PageBaseResponse . success ( convert ) ;
}
@Override
public PortfolioVO detail ( PortfolioDTO portfolioDTO ) {
AuthPrincipalVo userHolder = UserContext . getUserHolder ( ) ;
@@ -963,6 +974,9 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
throw new BusinessException ( " You do not have the permission to delete portfolio. " ) ;
}
portfolioMapper . deleteById ( id ) ;
// 删除作品与标签的关联记录
portfolioTagsMapper . deleteByPortfolioId ( id ) ;
return Boolean . TRUE ;
}
@@ -1063,33 +1077,32 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
return null ;
}
// 验证该用户是否已参加活动
public Boolean hasParticipatedRCAWorkshop ( Long accountId , List < TagsDTO > tags ) {
List < String > collect = tags . stream ( ) . map ( Tags : : getTagName ) . collect ( Collectors . toList ( ) ) ;
if ( ! collect . contains ( CommonConstant . RCA_WORKSHOP_TAG ) ) {
return false ;
} else {
List < Portfolio > byTag = baseMapper . getByTag ( accountId , CommonConstant . RCA_WORKSHOP_TAG ) ;
return ! byTag . isEmpty ( ) ;
}
}
public void addTagsForPortfolio ( List < TagsDTO > tagsDTOS , Long portfolioId ) {
// 遍历数组, 添加到t_portfolio_tags表中, 没有id的tag, 添加到t_tags表中
// todo 1、如何处理重复的tag
tagsDTOS . forEach ( tag - > {
PortfolioTags portfolioTags = new PortfolioTags ( ) ;
Long tagId ;
if ( Objects . isNull ( tag . getId ( ) ) ) {
Tags newT ag = new Tags ( ) ;
String tagName = tag . getTagName ( ) ;
/*if (tagName.startsWith("#")){
tagName = tagName.replace("#", "");
}*/
newTag . setTagName ( tagName ) ;
newTag . setCreateTime ( LocalDateTime . now ( ) ) ;
tagsService . save ( newTag ) ;
portfolioTags . setTagId ( newTag . getId ( ) ) ;
Tags t ags = tagsService . addTag ( tag . getTagName ( ) ) ;
tagId = tags . getId ( ) ;
} else {
portfolioTags . setTagId ( tag . getId ( ) ) ;
tagId = tag . getId ( ) ;
}
portfolioTags. setPortfolioId ( portfolioId ) ;
portfolioTags . setCreateTime ( LocalDateTime . now ( ) ) ;
portfolioTagsMapper . insert ( portfolioTags ) ;
portfolioTagsMapper . insertIgnore ( portfolioId , tagId , LocalDateTime . now ( ) ) ;
} ) ;
}
public List < PortfolioVO > queryPortfolioByTag ( String tagName , Long tagId ) {
ArrayList < PortfolioVO > portfolioVOS = new ArrayList < > ( ) ;
public PageBaseResponse < PortfolioVO > queryPortfolioByTag ( String tagName , Long tagId , Integer page , Integer size ) {
long bestMatchTagId ;
if ( Objects . isNull ( tagId ) ) {
@@ -1108,9 +1121,11 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
QueryWrapper < Portfolio > qw = new QueryWrapper < > ( ) ;
qw . in ( " id " , portfolioIdList ) ;
List < Portfolio > portfolios = baseMapper . selectList ( qw ) ;
Page < Portfolio > portfolioPage = baseMapper . selectPage ( new Page < > ( page , size ) , qw ) ;
// List<Portfolio> portfolios = baseMapper.selectList(qw);
p ortfolios . forEach ( portfolio - > {
// 将 P ortfolio 转换为 PortfolioVO 并进行相关处理
IPage < PortfolioVO > convert = portfolioPage . convert ( ( Function < Portfolio , PortfolioVO > ) portfolio - > {
if ( portfolio ! = null ) {
PortfolioVO vo = CopyUtil . copyObject ( portfolio , PortfolioVO . class ) ;
Canvas canvas = canvasMapper . selectById ( vo . getCanvasId ( ) ) ;
@@ -1122,9 +1137,10 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
if ( vo . getOriginal ( ) = = 0 ) {
vo . setOriginalUserName ( accountMapper . selectById ( vo . getOriginalAccountId ( ) ) . getUserName ( ) ) ;
}
portfolioVOS . add ( vo ) ;
return vo ;
}
return null ;
} ) ;
return portfolioVOS ;
return PageBaseResponse . success ( convert ) ;
}
}