Merge branch 'release/3.0' into dev/dev
# Conflicts: # src/main/java/com/ai/da/common/constant/CommonConstant.java # src/main/java/com/ai/da/common/security/filter/AuthenticationFilter.java # src/main/java/com/ai/da/controller/PortfolioController.java # src/main/java/com/ai/da/model/dto/QueryPortfolioPageDTO.java # src/main/java/com/ai/da/service/PortfolioService.java # src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java # src/main/resources/messages_en.properties # src/main/resources/messages_zh.properties
This commit is contained in:
@@ -4,6 +4,7 @@ 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;
|
||||
@@ -115,19 +116,35 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
@Resource
|
||||
private UserFollowMapper userFollowMapper;
|
||||
|
||||
@Resource
|
||||
private PortfolioTagsMapper portfolioTagsMapper;
|
||||
|
||||
@Resource
|
||||
private TagsService tagsService;
|
||||
|
||||
@Resource
|
||||
private TagsMapper tagsMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean publish(MultipartFile file, String data) {
|
||||
public Long publish(MultipartFile file, String data) {
|
||||
Long resultPortfolioId = null;
|
||||
AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder();
|
||||
PortfolioDTO portfolioDTO = JSONObject.parseObject(data, PortfolioDTO.class);
|
||||
QueryWrapper<Portfolio> existSameNameQw = new QueryWrapper<>();
|
||||
existSameNameQw.lambda().ne(Portfolio::getId, portfolioDTO.getId());
|
||||
existSameNameQw.lambda().eq(Portfolio::getPortfolioName, portfolioDTO.getPortfolioName());
|
||||
existSameNameQw.lambda().eq(Portfolio::getAccountId, authPrincipalVo.getId());
|
||||
List<Portfolio> portfoliosSameName = portfolioMapper.selectList(existSameNameQw);
|
||||
if (!CollectionUtils.isEmpty(portfoliosSameName)) {
|
||||
throw new BusinessException("The title of the published work has been used.");
|
||||
}
|
||||
// 判断用户是否参与#RCAworkshop_2024的活动
|
||||
if (hasParticipatedRCAWorkshop(authPrincipalVo.getId(), portfolioDTO.getTagsDTO(), portfolioDTO.getId(), portfolioDTO.getUserLikeGroupId())){
|
||||
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);
|
||||
Canvas canvas = new Canvas();
|
||||
canvas.setUrl(upload);
|
||||
@@ -196,6 +213,8 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
} else {
|
||||
portfolioMapper.insert(portfolio);
|
||||
}
|
||||
resultPortfolioId = portfolio.getId();
|
||||
portfolioId = portfolio.getId();
|
||||
|
||||
List<UserLike> userLikeList = userLikeService.getUserLikeList(portfolioDTO.getUserLikeGroupId());
|
||||
for (UserLike userLike : userLikeList) {
|
||||
@@ -287,11 +306,22 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
} else {
|
||||
portfolioMapper.insert(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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return Boolean.TRUE;
|
||||
return resultPortfolioId;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -520,7 +550,6 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
return PageBaseResponse.success(convert);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public PortfolioVO detail(PortfolioDTO portfolioDTO) {
|
||||
AuthPrincipalVo userHolder = UserContext.getUserHolder();
|
||||
@@ -988,6 +1017,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;
|
||||
}
|
||||
|
||||
@@ -1087,6 +1119,89 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
return null;
|
||||
}
|
||||
|
||||
// 验证该用户是否已参加活动
|
||||
public Boolean hasParticipatedRCAWorkshop(Long accountId, List<TagsDTO> tags, Long portfolioId, Long userLikeGroupId) {
|
||||
List<String> collect = tags.stream().map(Tags::getTagName).collect(Collectors.toList());
|
||||
if (!collect.contains(CommonConstant.RCA_WORKSHOP_TAG)){
|
||||
return false;
|
||||
}else {
|
||||
UserLikeGroup userLikeGroup = userLikeGroupService.getById(userLikeGroupId);
|
||||
// 不是原创的作品不能参与活动
|
||||
if (userLikeGroup.getOriginal().equals(0)){
|
||||
throw new BusinessException("only.original.works.can.participate.in.the.event", ResultEnum.PROMPT.getCode());
|
||||
}
|
||||
List<Portfolio> byTag = baseMapper.getByTag(accountId, CommonConstant.RCA_WORKSHOP_TAG);
|
||||
if (byTag.isEmpty()){
|
||||
return false;
|
||||
}else if (!Objects.isNull(portfolioId)){
|
||||
boolean contains = byTag.stream().map(Portfolio::getId).collect(Collectors.toList()).contains(portfolioId);
|
||||
return !contains;
|
||||
}else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addTagsForPortfolio(List<TagsDTO> tagsDTOS, Long portfolioId) {
|
||||
// 遍历数组,添加到t_portfolio_tags表中,没有id的tag,添加到t_tags表中
|
||||
tagsDTOS.forEach(tag -> {
|
||||
Long tagId;
|
||||
if (Objects.isNull(tag.getId())){
|
||||
Tags tags = tagsService.addTag(tag.getTagName());
|
||||
tagId = tags.getId();
|
||||
}else {
|
||||
tagId = tag.getId();
|
||||
}
|
||||
portfolioTagsMapper.insertIgnore(portfolioId, tagId, LocalDateTime.now());
|
||||
});
|
||||
}
|
||||
|
||||
public PageBaseResponse<PortfolioVO> queryPortfolioByTag(String tagName, Long tagId, Integer page, Integer size) {
|
||||
long bestMatchTagId;
|
||||
if (Objects.isNull(tagId)){
|
||||
|
||||
List<Map<String, String>> matchingTags = tagsMapper.getMatchingTags(tagName);
|
||||
Map<String, String> tagMap = matchingTags.get(0);
|
||||
bestMatchTagId = Long.parseLong(tagMap.get("id"));
|
||||
}else {
|
||||
bestMatchTagId = tagId;
|
||||
}
|
||||
|
||||
QueryWrapper<PortfolioTags> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("tag_id", bestMatchTagId).select("portfolio_id");
|
||||
|
||||
List<PortfolioTags> portfolioTags = portfolioTagsMapper.selectList(queryWrapper);
|
||||
List<Long> portfolioIdList = portfolioTags.stream().map(PortfolioTags::getPortfolioId).collect(Collectors.toList());
|
||||
|
||||
if (!portfolioIdList.isEmpty()){
|
||||
QueryWrapper<Portfolio> qw = new QueryWrapper<>();
|
||||
qw.in("id", portfolioIdList);
|
||||
Page<Portfolio> portfolioPage = baseMapper.selectPage(new Page<>(page, size), qw);
|
||||
|
||||
// 将 Portfolio 转换为 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());
|
||||
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());
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
return PageBaseResponse.success(convert);
|
||||
}else {
|
||||
return PageBaseResponse.success(new Page<>());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void follow(Long followeeId) {
|
||||
Long accountId = UserContext.getUserHolder().getId();
|
||||
// 1、不能关注自己
|
||||
|
||||
45
src/main/java/com/ai/da/service/impl/TagsServiceImpl.java
Normal file
45
src/main/java/com/ai/da/service/impl/TagsServiceImpl.java
Normal file
@@ -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<TagsMapper, Tags> implements TagsService {
|
||||
|
||||
public List<Tags> getTags(String tagPrefix){
|
||||
// 1、根据tag前缀,查询
|
||||
QueryWrapper<Tags> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.likeRight("tag_name", tagPrefix);
|
||||
|
||||
// 需返回标签内容和id
|
||||
return baseMapper.selectList(queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
public Tags addTag(String tagName) {
|
||||
// 1、判断有无该tag
|
||||
QueryWrapper<Tags> 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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import com.ai.da.common.enums.CreditsEventsEnum;
|
||||
import com.ai.da.common.utils.*;
|
||||
import com.ai.da.mapper.primary.*;
|
||||
import com.ai.da.mapper.primary.entity.*;
|
||||
import com.ai.da.model.dto.PortfolioDTO;
|
||||
import com.ai.da.model.dto.ProductImageLikeDTO;
|
||||
import com.ai.da.model.dto.ToProductImageDTO;
|
||||
import com.ai.da.model.vo.*;
|
||||
@@ -69,6 +70,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
||||
private LibraryMapper libraryMapper;
|
||||
@Resource
|
||||
private PortfolioMapper portfolioMapper;
|
||||
@Resource
|
||||
private TagsMapper tagsMapper;
|
||||
|
||||
@Override
|
||||
public void deleteUserGroup(Long userGroupId) {
|
||||
@@ -155,10 +158,15 @@ public class UserLikeGroupServiceImpl extends ServiceImpl<UserLikeGroupMapper, U
|
||||
QueryWrapper<Portfolio> qw = new QueryWrapper<>();
|
||||
qw.lambda().eq(Portfolio::getUserLikeGroupSourceId, userGroupId);
|
||||
List<Portfolio> portfolios = portfolioMapper.selectList(qw);
|
||||
// Portfolio portfolio = new Portfolio();
|
||||
PortfolioDTO portfolioDTO = new PortfolioDTO();
|
||||
if (CollectionUtil.isNotEmpty(portfolios)) {
|
||||
// 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);
|
||||
return new UserLikeChooseVO(userGroupId, userLikeVOS, userLikeCollection, sex, beenPublished, portfolioDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user