diff --git a/src/main/java/com/ai/da/controller/PortfolioController.java b/src/main/java/com/ai/da/controller/PortfolioController.java index 09e8bd39..506390da 100644 --- a/src/main/java/com/ai/da/controller/PortfolioController.java +++ b/src/main/java/com/ai/da/controller/PortfolioController.java @@ -16,6 +16,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; +import java.util.List; @Api(tags = "Portfolio模块") @Slf4j @@ -28,8 +29,8 @@ public class PortfolioController { @ApiOperation(value = "发布作品集") @PostMapping("/publish") - public Response preLogin(@RequestParam("file") MultipartFile canvas, @RequestParam("data") String data) { - return Response.success(portfolioService.publish(canvas, data)); + public Response preLogin(@RequestParam("file") MultipartFile canvas, @RequestParam("data") String data, @RequestParam("tags") List tagsDTOS) { + return Response.success(portfolioService.publish(canvas, data, tagsDTOS)); } @ApiOperation(value = "删除作品集") @@ -117,4 +118,10 @@ public class PortfolioController { public Response commentDelete(@Valid @RequestBody CommentDTO commentDTO) { return Response.success(portfolioService.commentDelete(commentDTO)); } + + @ApiOperation(value = "按标签名查询作品") + @PostMapping("/queryPortfolioByTag") + public Response> queryPortfolioByTag(@RequestParam("tagName") String tagName) { + return Response.success(portfolioService.queryPortfolioByTag(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 new file mode 100644 index 00000000..79961ec7 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/PortfolioTagsMapper.java @@ -0,0 +1,11 @@ +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; + + +public interface PortfolioTagsMapper extends CommonMapper { + + +} diff --git a/src/main/java/com/ai/da/mapper/primary/TagsMapper.java b/src/main/java/com/ai/da/mapper/primary/TagsMapper.java new file mode 100644 index 00000000..7c96be0a --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/TagsMapper.java @@ -0,0 +1,14 @@ +package com.ai.da.mapper.primary; + +import com.ai.da.common.config.mybatis.plus.CommonMapper; +import com.ai.da.mapper.primary.entity.Tags; + +import java.util.List; +import java.util.Map; + + +public interface TagsMapper extends CommonMapper { + + List> getMatchingTags(String userInput); + +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/PortfolioTags.java b/src/main/java/com/ai/da/mapper/primary/entity/PortfolioTags.java new file mode 100644 index 00000000..2e02434a --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/entity/PortfolioTags.java @@ -0,0 +1,14 @@ +package com.ai.da.mapper.primary.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@TableName("t_portfolio_tags") +@Data +public class PortfolioTags extends BaseEntity{ + private Long portfolioId; + + private Long tagId; +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/Tags.java b/src/main/java/com/ai/da/mapper/primary/entity/Tags.java new file mode 100644 index 00000000..fc7dfd90 --- /dev/null +++ b/src/main/java/com/ai/da/mapper/primary/entity/Tags.java @@ -0,0 +1,13 @@ +package com.ai.da.mapper.primary.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@TableName("t_tags") +@Data +public class Tags extends BaseEntity{ + + private String tagName; +} diff --git a/src/main/java/com/ai/da/model/dto/TagsDTO.java b/src/main/java/com/ai/da/model/dto/TagsDTO.java new file mode 100644 index 00000000..b8e5adda --- /dev/null +++ b/src/main/java/com/ai/da/model/dto/TagsDTO.java @@ -0,0 +1,6 @@ +package com.ai.da.model.dto; + +import com.ai.da.mapper.primary.entity.Tags; + +public class TagsDTO extends Tags { +} diff --git a/src/main/java/com/ai/da/service/PortfolioService.java b/src/main/java/com/ai/da/service/PortfolioService.java index b809857c..4231839c 100644 --- a/src/main/java/com/ai/da/service/PortfolioService.java +++ b/src/main/java/com/ai/da/service/PortfolioService.java @@ -9,8 +9,10 @@ import com.ai.da.model.vo.UserLikeChooseVO; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.web.multipart.MultipartFile; +import java.util.List; + public interface PortfolioService extends IService { - Boolean publish(MultipartFile canvas, String data); + Boolean publish(MultipartFile canvas, String data, List tagsDTOS); PortfolioVO update(PortfolioDTO portfolioDTO); @@ -41,4 +43,6 @@ public interface PortfolioService extends IService { Boolean delete(Long id); Portfolio getByIdAll(Long originalPortfolioId); + + List queryPortfolioByTag(String tagName); } diff --git a/src/main/java/com/ai/da/service/TagsService.java b/src/main/java/com/ai/da/service/TagsService.java new file mode 100644 index 00000000..9fd6bedf --- /dev/null +++ b/src/main/java/com/ai/da/service/TagsService.java @@ -0,0 +1,8 @@ +package com.ai.da.service; + +import com.ai.da.mapper.primary.entity.Tags; +import com.baomidou.mybatisplus.extension.service.IService; + +public interface TagsService extends IService { + +} 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 0ca763d2..ac4ba85d 100644 --- a/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java @@ -110,9 +110,18 @@ public class PortfolioServiceImpl extends ServiceImpl tagsDTOS) { AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder(); PortfolioDTO portfolioDTO = JSONObject.parseObject(data, PortfolioDTO.class); QueryWrapper existSameNameQw = new QueryWrapper<>(); @@ -123,6 +132,7 @@ public class PortfolioServiceImpl extends ServiceImpl userLikeList = userLikeService.getUserLikeList(portfolioDTO.getUserLikeGroupId()); for (UserLike userLike : userLikeList) { @@ -282,10 +293,12 @@ public class PortfolioServiceImpl extends ServiceImpl tagsDTOS, Long portfolioId) { + // 遍历数组,添加到t_portfolio_tags表中,没有id的tag,添加到t_tags表中 + tagsDTOS.forEach(tag -> { + PortfolioTags portfolioTags = new PortfolioTags(); + if (Objects.isNull(tag.getId())){ + Tags newTag = new Tags(); + newTag.setTagName(tag.getTagName()); + newTag.setCreateTime(LocalDateTime.now()); + tagsService.save(newTag); + portfolioTags.setTagId(newTag.getId()); + }else { + portfolioTags.setTagId(tag.getId()); + } + portfolioTags.setPortfolioId(portfolioId); + portfolioTags.setCreateTime(LocalDateTime.now()); + portfolioTagsMapper.insert(portfolioTags); + }); + } + + public List queryPortfolioByTag(String tagName){ + ArrayList portfolioVOS = new ArrayList<>(); + List> matchingTags = tagsMapper.getMatchingTags(tagName); + Map tagMap = matchingTags.get(0); + long bestMatchTagId = Long.parseLong(tagMap.get("id")); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("tag_id", bestMatchTagId).select("portfolio_id"); + + List portfolioTags = portfolioTagsMapper.selectList(queryWrapper); + List portfolioIdList = portfolioTags.stream().map(PortfolioTags::getPortfolioId).collect(Collectors.toList()); + + QueryWrapper qw = new QueryWrapper<>(); + qw.in("id", portfolioIdList); + List portfolios = baseMapper.selectList(qw); + + portfolios.forEach(portfolio -> { + if (portfolio != null) { + PortfolioVO vo = CopyUtil.copyObject(portfolio, PortfolioVO.class); + Canvas canvas = canvasMapper.selectById(vo.getCanvasId()); + vo.setCanvasUrl(minioUtil.getPreSignedUrl(canvas.getUrl(), 24 * 60)); + vo.setLikeNum(redisUtil.getLikeCount(vo.getId())); + vo.setViewNums(redisUtil.getViewCount(vo.getId())); + Long accountId = vo.getAccountId(); + vo.setUserName(accountMapper.selectById(accountId).getUserName()); + if (vo.getOriginal() == 0) { + vo.setOriginalUserName(accountMapper.selectById(vo.getOriginalAccountId()).getUserName()); + } + portfolioVOS.add(vo); + } + }); + return portfolioVOS; + } } diff --git a/src/main/java/com/ai/da/service/impl/TagsServiceImpl.java b/src/main/java/com/ai/da/service/impl/TagsServiceImpl.java new file mode 100644 index 00000000..339417e2 --- /dev/null +++ b/src/main/java/com/ai/da/service/impl/TagsServiceImpl.java @@ -0,0 +1,45 @@ +package com.ai.da.service.impl; + +import com.ai.da.mapper.primary.TagsMapper; +import com.ai.da.mapper.primary.entity.Tags; +import com.ai.da.service.TagsService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +@Slf4j +@Service +public class TagsServiceImpl extends ServiceImpl implements TagsService { + + public List getTags(String tagPrefix){ + // 1、根据tag前缀,查询 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.likeLeft("tag_name", tagPrefix); + + // 需返回标签内容和id + return baseMapper.selectList(queryWrapper); + } + + + public Tags addTag(String tagName) { + // 1、判断有无该tag + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("tag_name", tagName); + Tags tags = baseMapper.selectOne(queryWrapper); + // 2、没有该数据时,插入新标签并返回标签id等 + if (Objects.isNull(tags)){ + tags = new Tags(); + tags.setTagName(tagName); + tags.setCreateTime(LocalDateTime.now()); + + baseMapper.insert(tags); + } + return tags; + } + +} diff --git a/src/main/resources/mapper/primary/TagsMapper.xml b/src/main/resources/mapper/primary/TagsMapper.xml new file mode 100644 index 00000000..50c3e56d --- /dev/null +++ b/src/main/resources/mapper/primary/TagsMapper.xml @@ -0,0 +1,13 @@ + + + + + + + +