diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdTagLibraryMapper.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdTagLibraryMapper.java index dbc37e9..bc6c26d 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdTagLibraryMapper.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/mapper/EdTagLibraryMapper.java @@ -9,6 +9,6 @@ import org.apache.ibatis.annotations.Select; @Mapper public interface EdTagLibraryMapper extends BaseMapper { - @Select("SELECT MAX(order_by) FROM ed_tag_library WHERE type = #{type} and parent_id = #{parentId}") - Integer selectMaxOrder(@Param("type") int type, @Param("parentId") String parentId); +// @Select("SELECT MAX(order_by) FROM ed_tag_library WHERE type = #{type} and parent_id = #{parentId}") +// Integer selectMaxOrder(@Param("type") int type, @Param("parentId") String parentId); } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdTagLibrary.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdTagLibrary.java index 40167af..3e1c392 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdTagLibrary.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdTagLibrary.java @@ -1,16 +1,23 @@ package com.electromagnetic.industry.software.manage.pojo.models; +import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.electromagnetic.industry.software.common.cons.UserConstants; +import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; +import com.electromagnetic.industry.software.common.enums.PublishEnum; +import com.electromagnetic.industry.software.common.util.IdWorker; +import com.electromagnetic.industry.software.common.util.SignUtils; +import com.electromagnetic.industry.software.common.util.UserThreadLocal; import lombok.Data; import java.util.Date; @Data @TableName("ed_tag_library") -public class EdTagLibrary { +public class EdTagLibrary extends BaseModel{ @TableId private String tagId; // 主键 ID @@ -19,14 +26,18 @@ public class EdTagLibrary { private String tagName; // 标签库或标签名称 private Integer orderBy; // 排序字段 private Integer isPublished; // 是否已发布(0: 未发布, 1: 已发布) - private String createdBy; // 创建人 - @TableField(fill = FieldFill.INSERT) - private Date createdTime; // 创建时间 - - private String updatedBy; // 更新人 - - @TableField(fill = FieldFill.UPDATE) - private Date updatedTime; // 更新时间 + public void newInit() { + String id = IdWorker.getSnowFlakeIdString(); + String userId = UserThreadLocal.getUserId(); + this.setTagId(id); + Date now = new Date(); + this.setCreatedTime(now); + this.setUpdatedTime(now); + this.setCreatedBy(userId); + this.setUpdatedBy(userId); + this.setEffectFlag(EffectFlagEnum.EFFECT.code); + this.setIsPublished(PublishEnum.UNPUBLISHED.getCode()); //默认未发布 + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileTagRelation.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileTagRelation.java index 543c01b..ef82300 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileTagRelation.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/FileTagRelation.java @@ -3,15 +3,32 @@ package com.electromagnetic.industry.software.manage.pojo.models; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; +import com.electromagnetic.industry.software.common.util.IdWorker; +import com.electromagnetic.industry.software.common.util.UserThreadLocal; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.Date; + @EqualsAndHashCode(callSuper = true) @Data @TableName("file_tag_relations") public class FileTagRelation extends BaseModel { - @TableId(type = IdType.ASSIGN_UUID) + private String id; private String fileId; private String tagId; + + public void newInit() { + String newId = IdWorker.getSnowFlakeIdString(); + Date now = new Date(); + String userId = UserThreadLocal.getUserId(); + this.setId(newId); + this.setCreatedTime(now); + this.setCreatedBy(userId); + this.setUpdatedTime(now); + this.setUpdatedBy(userId); + this.setEffectFlag(EffectFlagEnum.EFFECT.code); + } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileTagRelationService.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileTagRelationService.java index e9406a0..d65df75 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileTagRelationService.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/FileTagRelationService.java @@ -33,4 +33,5 @@ public interface FileTagRelationService extends IService { * @return */ List getFileIdsByTagIds(List tagIds); + } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java index 42f0053..30504f3 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileInfoServiceImpl.java @@ -1359,20 +1359,33 @@ public class EdFileInfoServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EdFileFavorite::getUserId, userId) .eq(EdFileFavorite::getFileId, fileId); - if (fileFavoriteService.getOne(queryWrapper) != null) { - throw new BizException("文件已收藏,无法重复收藏!"); + EdFileFavorite existingFavorite = fileFavoriteService.getOne(queryWrapper); + + boolean result; + + if (existingFavorite != null) { + // 如果收藏记录已存在且有效 + if (Objects.equals(existingFavorite.getEffectFlag(), EffectFlagEnum.EFFECT.code)) { + throw new BizException("文件已收藏,无法重复收藏!"); + } + // 恢复失效的收藏记录 + existingFavorite.setEffectFlag(EffectFlagEnum.EFFECT.code); + existingFavorite.newInit(); // 重置更新时间等信息 + result = fileFavoriteService.updateById(existingFavorite); + } else { + // 插入收藏记录 + EdFileFavorite favorite = new EdFileFavorite(); + favorite.newInit(); + favorite.setUserId(userId); + favorite.setFileId(fileId); + result = fileFavoriteService.save(favorite); } - // 插入收藏记录 - EdFileFavorite favorite = new EdFileFavorite(); - favorite.setUserId(userId); - favorite.setFileId(fileId); - boolean isSaved = fileFavoriteService.save(favorite); - if (isSaved) { + if (result) { EdFileInfo fileInfo = this.baseMapper.selectById(fileId); UserThreadLocal.setSuccessInfo(Optional.ofNullable(fileInfo).map(EdFileInfo::getParentId).orElse(""), fileId, StrFormatter.format("收藏了文件")); } - return isSaved; + return result; } /** diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdTagLibraryServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdTagLibraryServiceImpl.java index a2241db..027d3c5 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdTagLibraryServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdTagLibraryServiceImpl.java @@ -5,12 +5,13 @@ import cn.hutool.core.text.StrFormatter; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; import com.electromagnetic.industry.software.common.enums.PublishEnum; import com.electromagnetic.industry.software.common.enums.TagTypeEnum; import com.electromagnetic.industry.software.common.exception.BizException; import com.electromagnetic.industry.software.common.pojo.TreeNode; -import com.electromagnetic.industry.software.common.util.IdWorker; import com.electromagnetic.industry.software.common.util.UserThreadLocal; import com.electromagnetic.industry.software.manage.mapper.EdTagLibraryMapper; import com.electromagnetic.industry.software.manage.mapper.FileTagRelationMapper; @@ -19,6 +20,7 @@ import com.electromagnetic.industry.software.manage.pojo.models.FileTagRelation; import com.electromagnetic.industry.software.manage.pojo.resp.FileTagInfo; import com.electromagnetic.industry.software.manage.pojo.resp.TagListVO; import com.electromagnetic.industry.software.manage.service.EdTagLibraryService; +import com.electromagnetic.industry.software.manage.service.FileTagRelationService; import jakarta.annotation.Resource; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -45,15 +47,13 @@ public class EdTagLibraryServiceImpl extends ServiceImpl tags = this.list(new LambdaQueryWrapper() .eq(EdTagLibrary::getParentId, tagId)); - // 删除所有子标签的关联关系 - fileTagRelationMapper.delete(new LambdaQueryWrapper().in(FileTagRelation::getTagId, tags.stream().map(EdTagLibrary::getTagId).collect(Collectors.toList()))); - // 删除所有子标签 - this.remove(new LambdaQueryWrapper().eq(EdTagLibrary::getParentId, tagId)); + // 逻辑删除子标签的关联关系 + if (!tags.isEmpty()) { + fileTagRelationMapper.update( + Wrappers.lambdaUpdate(FileTagRelation.class) + .set(FileTagRelation::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code) + .in(FileTagRelation::getTagId, tags.stream().map(EdTagLibrary::getTagId).collect(Collectors.toList())) + ); + } } - // 删除本身 - boolean isDeleted = this.removeById(tagId); - // 删除本身的关联关系 - fileTagRelationMapper.delete(new LambdaQueryWrapper().eq(FileTagRelation::getTagId, tagId)); - if (isDeleted) { + + // 逻辑删除当前标签/组 + boolean mainDeleted = this.update( + Wrappers.lambdaUpdate(EdTagLibrary.class) + .set(EdTagLibrary::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code) + .eq(EdTagLibrary::getTagId, tagId) + ); + // 逻辑删除本身的关联关系 + fileTagRelationMapper.update( + Wrappers.lambdaUpdate(FileTagRelation.class) + .set(FileTagRelation::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code) + .eq(FileTagRelation::getTagId, tagId) + ); + if (mainDeleted) { UserThreadLocal.setSuccessInfo("", tagId, StrFormatter.format("删除了标签 {} ", tag.getTagName())); } - return isDeleted; + return mainDeleted; } /** @@ -221,11 +245,13 @@ public class EdTagLibraryServiceImpl extends ServiceImpl groups = this.list(new LambdaQueryWrapper() .eq(EdTagLibrary::getType, TagTypeEnum.GROUP.getCode()) + .eq(EdTagLibrary::getEffectFlag, EffectFlagEnum.EFFECT.code) .orderByAsc(EdTagLibrary::getOrderBy)); // 查询所有标签 List tags = this.list(new LambdaQueryWrapper() .eq(EdTagLibrary::getType, TagTypeEnum.TAG.getCode()) + .eq(EdTagLibrary::getEffectFlag, EffectFlagEnum.EFFECT.code) .orderByAsc(EdTagLibrary::getOrderBy)); // 构造分组数据 @@ -296,7 +322,8 @@ public class EdTagLibraryServiceImpl extends ServiceImpl listTagTree() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(EdTagLibrary::getIsPublished, PublishEnum.PUBLISHED.getCode()); + queryWrapper.eq(EdTagLibrary::getIsPublished, PublishEnum.PUBLISHED.getCode()) + .eq(EdTagLibrary::getEffectFlag, EffectFlagEnum.EFFECT.code); List tags = this.list(queryWrapper); Map map = new HashMap<>(); List list = new ArrayList<>(); @@ -343,7 +370,8 @@ public class EdTagLibraryServiceImpl extends ServiceImpl listAllTags() { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(EdTagLibrary::getIsPublished, PublishEnum.PUBLISHED.getCode()) - .eq(EdTagLibrary::getType, TagTypeEnum.TAG.getCode()); + .eq(EdTagLibrary::getType, TagTypeEnum.TAG.getCode()) + .eq(EdTagLibrary::getEffectFlag, EffectFlagEnum.EFFECT.code); return this.list(queryWrapper).stream() .map(tag -> { FileTagInfo info = new FileTagInfo(); @@ -360,7 +388,7 @@ public class EdTagLibraryServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(EdTagLibrary::getTagName, tagName); + queryWrapper.eq(EdTagLibrary::getTagName, tagName).eq(EdTagLibrary::getEffectFlag, EffectFlagEnum.EFFECT.code); return this.count(queryWrapper) > 0; } @@ -371,8 +399,19 @@ public class EdTagLibraryServiceImpl extends ServiceImpl (Integer) obj) + .orElse(0); // 处理空值 } } diff --git a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java index e6bf5e9..19761e6 100644 --- a/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java +++ b/electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/FileTagRelationServiceImpl.java @@ -2,7 +2,10 @@ package com.electromagnetic.industry.software.manage.service.serviceimpl; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.electromagnetic.industry.software.common.enums.EffectFlagEnum; import com.electromagnetic.industry.software.common.enums.PublishEnum; import com.electromagnetic.industry.software.common.util.IdWorker; import com.electromagnetic.industry.software.common.util.UserThreadLocal; @@ -39,20 +42,29 @@ public class FileTagRelationServiceImpl extends ServiceImpl() .eq(EdTagLibrary::getTagId, tagId) - .eq(EdTagLibrary::getIsPublished, PublishEnum.PUBLISHED.getCode())); + .eq(EdTagLibrary::getIsPublished, PublishEnum.PUBLISHED.getCode()) + .eq(EdTagLibrary::getEffectFlag, EffectFlagEnum.EFFECT.code)); Assert.notNull(tag, "标签不存在或未发布"); - // 创建文件与标签关系 - FileTagRelation relation = new FileTagRelation(); - relation.setId(IdWorker.getSnowFlakeIdString()); - relation.setFileId(fileId); - relation.setTagId(tagId); - relation.setCreatedBy(createdBy); - - return this.saveOrUpdate(relation, new LambdaQueryWrapper() + // 查询或创建关联关系 + FileTagRelation relation = this.getOne(new LambdaQueryWrapper() .eq(FileTagRelation::getFileId, fileId) .eq(FileTagRelation::getTagId, tagId)); + boolean result; + if (relation == null) { + relation = new FileTagRelation(); + relation.newInit(); + relation.setFileId(fileId); + relation.setTagId(tagId); + result = this.save(relation); + } else { + // 恢复已删除的关联 + relation.setEffectFlag(EffectFlagEnum.EFFECT.code); + relation.setUpdatedBy(createdBy); + result = this.updateById(relation); + } + return result; } /** @@ -66,6 +78,8 @@ public class FileTagRelationServiceImpl extends ServiceImpl tagIds, String createdBy) { + + Assert.notEmpty(tagIds, "标签列表不能为空"); boolean isSuccess = true; for (String tagId : tagIds) { isSuccess &= addTagToFile(fileId, tagId, createdBy); @@ -75,6 +89,7 @@ public class FileTagRelationServiceImpl extends ServiceImpl() .in(EdTagLibrary::getTagId, tagIds) .select(EdTagLibrary::getTagName) + .eq(EdTagLibrary::getEffectFlag, EffectFlagEnum.EFFECT.code) .eq(EdTagLibrary::getIsPublished, PublishEnum.PUBLISHED.getCode())).stream().map(EdTagLibrary::getTagName).collect(Collectors.joining(",")); EdFileInfo fileInfo = edFileInfoMapper.selectById(fileId); @@ -93,7 +108,8 @@ public class FileTagRelationServiceImpl extends ServiceImpl getFileTags(String fileId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(FileTagRelation::getFileId, fileId); + queryWrapper.eq(FileTagRelation::getFileId, fileId) + .eq(FileTagRelation::getEffectFlag, EffectFlagEnum.EFFECT.code); List relations = this.list(queryWrapper); List result = new ArrayList<>(); for (FileTagRelation relation : relations) { @@ -117,11 +133,13 @@ public class FileTagRelationServiceImpl extends ServiceImpl getFileIdsByTagIds(List tagIds) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(FileTagRelation::getTagId, tagIds); + queryWrapper.in(FileTagRelation::getTagId, tagIds) + .eq(FileTagRelation::getEffectFlag, EffectFlagEnum.EFFECT.code); List relations = this.list(queryWrapper); return relations.stream() .map(FileTagRelation::getFileId) .distinct() .toList(); } + } \ No newline at end of file