diff --git a/src/main/java/com/ai/da/common/constant/CommonConstant.java b/src/main/java/com/ai/da/common/constant/CommonConstant.java index 15372e9b..66c5e43b 100644 --- a/src/main/java/com/ai/da/common/constant/CommonConstant.java +++ b/src/main/java/com/ai/da/common/constant/CommonConstant.java @@ -59,4 +59,6 @@ public class CommonConstant { public static final List IS_SUBSCRIBE = Arrays.asList("yes", "no"); + public static final String RCA_WORKSHOP_TAG = "#RCAworkshop_2024"; + } diff --git a/src/main/java/com/ai/da/controller/PortfolioController.java b/src/main/java/com/ai/da/controller/PortfolioController.java index 983a2062..8cb2ab02 100644 --- a/src/main/java/com/ai/da/controller/PortfolioController.java +++ b/src/main/java/com/ai/da/controller/PortfolioController.java @@ -118,10 +118,10 @@ public class PortfolioController { return Response.success(portfolioService.commentDelete(commentDTO)); } - @ApiOperation(value = "按标签名查询作品") +/* @ApiOperation(value = "按标签名查询作品") @GetMapping("/queryPortfolioByTag") public Response> queryPortfolioByTag(@RequestParam(value = "tagName", required = false) String tagName, @RequestParam(value = "tagId", required = false) Long tagId) { return Response.success(portfolioService.queryPortfolioByTag(tagName, tagId)); - } + }*/ } diff --git a/src/main/java/com/ai/da/mapper/primary/PortfolioMapper.java b/src/main/java/com/ai/da/mapper/primary/PortfolioMapper.java index f1ebf39b..b088d0d2 100644 --- a/src/main/java/com/ai/da/mapper/primary/PortfolioMapper.java +++ b/src/main/java/com/ai/da/mapper/primary/PortfolioMapper.java @@ -3,6 +3,10 @@ package com.ai.da.mapper.primary; import com.ai.da.common.config.mybatis.plus.CommonMapper; import com.ai.da.mapper.primary.entity.Portfolio; +import java.util.List; + public interface PortfolioMapper extends CommonMapper { Portfolio getByIdAll(Long originalPortfolioId); + + List getByTag(Long accountId, String tagName); } diff --git a/src/main/java/com/ai/da/mapper/primary/PortfolioTagsMapper.java b/src/main/java/com/ai/da/mapper/primary/PortfolioTagsMapper.java index 79961ec7..6ece51f9 100644 --- a/src/main/java/com/ai/da/mapper/primary/PortfolioTagsMapper.java +++ b/src/main/java/com/ai/da/mapper/primary/PortfolioTagsMapper.java @@ -2,10 +2,14 @@ package com.ai.da.mapper.primary; import com.ai.da.common.config.mybatis.plus.CommonMapper; import com.ai.da.mapper.primary.entity.PortfolioTags; -import com.ai.da.mapper.primary.entity.Tags; +import java.time.LocalDateTime; public interface PortfolioTagsMapper extends CommonMapper { + void deleteByPortfolioId(Long portfolioId); + + // portfolioId与tagId建立唯一约束, 如果组合 portfolio_id 和 tag_id 已经存在,插入操作会被忽略。 + void insertIgnore(Long portfolioId, Long tagId, LocalDateTime time); } diff --git a/src/main/java/com/ai/da/mapper/primary/TagsMapper.java b/src/main/java/com/ai/da/mapper/primary/TagsMapper.java index 7c96be0a..1ac35062 100644 --- a/src/main/java/com/ai/da/mapper/primary/TagsMapper.java +++ b/src/main/java/com/ai/da/mapper/primary/TagsMapper.java @@ -2,6 +2,7 @@ package com.ai.da.mapper.primary; import com.ai.da.common.config.mybatis.plus.CommonMapper; import com.ai.da.mapper.primary.entity.Tags; +import com.ai.da.model.dto.TagsDTO; import java.util.List; import java.util.Map; @@ -11,4 +12,6 @@ public interface TagsMapper extends CommonMapper { List> getMatchingTags(String userInput); + List getTagByPortfolioId(Long portfolioId); + } diff --git a/src/main/java/com/ai/da/model/dto/QueryPortfolioPageDTO.java b/src/main/java/com/ai/da/model/dto/QueryPortfolioPageDTO.java index 8176ba00..edece347 100644 --- a/src/main/java/com/ai/da/model/dto/QueryPortfolioPageDTO.java +++ b/src/main/java/com/ai/da/model/dto/QueryPortfolioPageDTO.java @@ -2,11 +2,8 @@ package com.ai.da.model.dto; import com.ai.da.model.vo.PageQueryBaseVo; import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.List; - @Data @ApiModel("作品集分页查询") public class QueryPortfolioPageDTO extends PageQueryBaseVo { @@ -14,4 +11,6 @@ public class QueryPortfolioPageDTO extends PageQueryBaseVo { private Integer getMyPortfolio; private Integer getLikePortfolio; + + private Long tagId; } diff --git a/src/main/java/com/ai/da/model/vo/UserLikeChooseVO.java b/src/main/java/com/ai/da/model/vo/UserLikeChooseVO.java index 6c78317c..b8f9956a 100644 --- a/src/main/java/com/ai/da/model/vo/UserLikeChooseVO.java +++ b/src/main/java/com/ai/da/model/vo/UserLikeChooseVO.java @@ -1,13 +1,11 @@ package com.ai.da.model.vo; -import com.ai.da.mapper.primary.entity.Portfolio; +import com.ai.da.model.dto.PortfolioDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; -import java.util.List; - @AllArgsConstructor @Data @ApiModel("用户choose详细-响应") @@ -26,5 +24,6 @@ public class UserLikeChooseVO { private Integer beenPublished; - private Portfolio portfolio; +// private Portfolio portfolio; + private PortfolioDTO portfolioDTO; } diff --git a/src/main/java/com/ai/da/service/PortfolioService.java b/src/main/java/com/ai/da/service/PortfolioService.java index 9c2881bb..b5f1fc9d 100644 --- a/src/main/java/com/ai/da/service/PortfolioService.java +++ b/src/main/java/com/ai/da/service/PortfolioService.java @@ -44,5 +44,5 @@ public interface PortfolioService extends IService { Portfolio getByIdAll(Long originalPortfolioId); - List queryPortfolioByTag(String tagName, Long tagId); +// List queryPortfolioByTag(String tagName, Long tagId); } diff --git a/src/main/java/com/ai/da/service/TagsService.java b/src/main/java/com/ai/da/service/TagsService.java index ee9a91a6..319363f4 100644 --- a/src/main/java/com/ai/da/service/TagsService.java +++ b/src/main/java/com/ai/da/service/TagsService.java @@ -9,4 +9,6 @@ public interface TagsService extends IService { List getTags(String tagPrefix); + Tags addTag(String tagName); + } diff --git a/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java b/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java index ee0a16b0..a00e2da6 100644 --- a/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java @@ -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 topThree = new ArrayList<>(); - List excludeIds = new ArrayList<>(); // 存放需要排除的 ID 列表 + if (!Objects.isNull(query.getTagId()) && !query.getTagId().equals(0L)){ + return queryPortfolioByTag(null, query.getTagId(), query.getPage(), query.getSize()); + } + /*List topThree = new ArrayList<>(); + List excludeIds = new ArrayList<>(); // 存放需要排除的 ID 列表 // 获取前三点赞和前三浏览的作品集,并将其排除在分页查询之外 if (query.getPage() == 1 && (query.getGetMyPortfolio() != 1 || query.getGetLikePortfolio() != 1)) { // 获取前三点赞的作品集 ID List topThreeLike = getTopThreeLikeFromRedis(RedisUtil.PORTFOLIO_LIKE_KEY); List topThreeView = getTopThreeViewFromRedis(RedisUtil.PORTFOLIO_VIEW_KEY, topThreeLike); - // 获取前三点赞的作品集 if (!CollectionUtils.isEmpty(topThreeLike)) { QueryWrapper queryLike = new QueryWrapper<>(); @@ -473,7 +487,6 @@ public class PortfolioServiceImpl extends ServiceImpl queryView = new QueryWrapper<>(); @@ -483,11 +496,10 @@ public class PortfolioServiceImpl extends ServiceImpl page = portfolioMapper.selectPage(new Page<>(query.getPage(), query.getSize()), qw); - // 如果前三点赞和浏览不为空,将它们添加到分页查询的结果最前面 + /*// 如果前三点赞和浏览不为空,将它们添加到分页查询的结果最前面 if (!topThree.isEmpty()) { List records = page.getRecords(); records.addAll(0, topThree); // 添加到查询结果的开头 page.setRecords(records); - } + }*/ // 将 Portfolio 转换为 PortfolioVO 并进行相关处理 IPage convert = page.convert((Function) portfolio -> { @@ -523,7 +535,6 @@ public class PortfolioServiceImpl extends ServiceImpl tags) { + List collect = tags.stream().map(Tags::getTagName).collect(Collectors.toList()); + if (!collect.contains(CommonConstant.RCA_WORKSHOP_TAG)){ + return false; + }else { + List byTag = baseMapper.getByTag(accountId, CommonConstant.RCA_WORKSHOP_TAG); + return !byTag.isEmpty(); + } + } + public void addTagsForPortfolio(List 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 newTag = 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 tags = 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 queryPortfolioByTag(String tagName, Long tagId){ - ArrayList portfolioVOS = new ArrayList<>(); + public PageBaseResponse queryPortfolioByTag(String tagName, Long tagId, Integer page, Integer size) { long bestMatchTagId; if (Objects.isNull(tagId)){ @@ -1108,9 +1121,11 @@ public class PortfolioServiceImpl extends ServiceImpl qw = new QueryWrapper<>(); qw.in("id", portfolioIdList); - List portfolios = baseMapper.selectList(qw); + Page portfolioPage = baseMapper.selectPage(new Page<>(page, size), qw); +// List portfolios = baseMapper.selectList(qw); - portfolios.forEach(portfolio -> { + // 将 Portfolio 转换为 PortfolioVO 并进行相关处理 + IPage convert = portfolioPage.convert((Function) 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 qw = new QueryWrapper<>(); qw.lambda().eq(Portfolio::getUserLikeGroupSourceId, userGroupId); List portfolios = portfolioMapper.selectList(qw); - Portfolio portfolio = new Portfolio(); +// Portfolio portfolio = new Portfolio(); + PortfolioDTO portfolioDTO = new PortfolioDTO(); if (CollectionUtil.isNotEmpty(portfolios)) { - portfolio = portfolios.get(0); +// portfolio = portfolios.get(0); + portfolioDTO = CopyUtil.copyObject(portfolios.get(0), PortfolioDTO.class); beenPublished = 1; + portfolioDTO.setTagsDTO(tagsMapper.getTagByPortfolioId(portfolioDTO.getId())); } - return new UserLikeChooseVO(userGroupId, userLikeVOS, userLikeCollection, sex, beenPublished, portfolio); + return new UserLikeChooseVO(userGroupId, userLikeVOS, userLikeCollection, sex, beenPublished, portfolioDTO); } @Override diff --git a/src/main/resources/mapper/primary/PortfolioMapper.xml b/src/main/resources/mapper/primary/PortfolioMapper.xml index f6c9eeac..65964686 100644 --- a/src/main/resources/mapper/primary/PortfolioMapper.xml +++ b/src/main/resources/mapper/primary/PortfolioMapper.xml @@ -9,4 +9,14 @@ from portfolio where id = #{originalPortfolioId} + + + diff --git a/src/main/resources/mapper/primary/PortfolioTagsMapper.xml b/src/main/resources/mapper/primary/PortfolioTagsMapper.xml new file mode 100644 index 00000000..3d0eed86 --- /dev/null +++ b/src/main/resources/mapper/primary/PortfolioTagsMapper.xml @@ -0,0 +1,16 @@ + + + + + + DELETE + FROM t_portfolio_tags + WHERE portfolio_id = #{portfolioId}; + + + + INSERT + IGNORE INTO t_portfolio_tags (portfolio_id, tag_id, create_time) + VALUES (#{portfolioId}, #{tagId}, #{time}); + + diff --git a/src/main/resources/mapper/primary/TagsMapper.xml b/src/main/resources/mapper/primary/TagsMapper.xml index 50c3e56d..5508d558 100644 --- a/src/main/resources/mapper/primary/TagsMapper.xml +++ b/src/main/resources/mapper/primary/TagsMapper.xml @@ -9,5 +9,12 @@ ORDER BY relevance DESC; + + diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties index aa36fa05..fa348dcb 100644 --- a/src/main/resources/messages_en.properties +++ b/src/main/resources/messages_en.properties @@ -139,6 +139,7 @@ slogan.style.cannot.be.empty=Slogan style text cannot be empty. slogan.image.cannot.be.empty=Slogan image cannot be empty. questionnaire.filled.out=You have filled out the current questionnaire. user.has.no.account=The current user has no account! +you.have.participated.in.the.event=You have participated in the event. # 可能会报异常 # Informative: diff --git a/src/main/resources/messages_zh.properties b/src/main/resources/messages_zh.properties index f10a5235..6f07d92a 100644 --- a/src/main/resources/messages_zh.properties +++ b/src/main/resources/messages_zh.properties @@ -134,6 +134,7 @@ slogan.style.cannot.be.empty=标语风格文本不能为空。 slogan.image.cannot.be.empty=标语图片不能为空。 questionnaire.filled.out=您已填写过当前问卷。 user.has.no.account=当前用户没有账号。 +you.have.participated.in.the.event=您已经参与活动 # 可能会报异常 # Informative: