Skip to content

Commit

Permalink
Merge pull request #230 from jamebal/develop
Browse files Browse the repository at this point in the history
feat: 添加标签管理功能,包括修改、删除和排序
  • Loading branch information
jamebal authored Feb 20, 2025
2 parents 1905670 + 121517f commit c7f81c3
Show file tree
Hide file tree
Showing 7 changed files with 157 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,22 @@ public ResponseResult<Object> setTag(@RequestBody @Validated EditTagDTO editTagD
return fileService.setTag(editTagDTO);
}

@Operation(summary = "设置文件标签颜色")
@PutMapping("/updateTag")
@LogOperatingFun
@Permission("cloud:file:update")
public ResponseResult<Object> updateTag(@RequestParam String tagId, @RequestParam String name, @RequestParam String color) {
return fileService.setTag(tagId, name, color);
}

@Operation(summary = "删除文件标签")
@DeleteMapping("/deleteTag")
@LogOperatingFun
@Permission("cloud:file:update")
public ResponseResult<Object> deleteTag(@RequestParam String tagId) {
return fileService.deleteTag(tagId);
}

@Operation(summary = "设为公共文件")
@PutMapping("/setPublic")
@LogOperatingFun
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,13 @@ public ResponseResult<Object> delete(@RequestParam String[] tagIds) {
tagService.delete(tagIdList);
return ResultUtil.success();
}

@Operation(summary = "修改标签排序")
@PostMapping("/tag/sort")
@LogOperatingFun
@Permission("cloud:file:update")
public ResponseResult<Object> updateTagSort(@RequestBody List<String> tagIdList) {
tagService.updateTagSort(tagIdList);
return ResultUtil.success();
}
}
44 changes: 38 additions & 6 deletions src/main/java/com/jmal/clouddisk/model/TagDO.java
Original file line number Diff line number Diff line change
@@ -1,40 +1,72 @@
package com.jmal.clouddisk.model;

import lombok.Data;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.annotation.Id;

import java.text.Collator;
import java.util.Comparator;

/**
* @author jmal
* @Description 标签
* @Date 2020/10/26 4:30 下午
*/
@Data
public class TagDO {
public class TagDO implements Comparable<TagDO> {
@Id
private String id;

private String userId;
/***
/**
* 标签名称
*/
private String name;
/***
/**
* 标签缩略名,默认为name
*/
private String slug;
/**
* 标签颜色,十六进制字符串,例如#00000000
*/
private String color;
/***
/**
* 标签背景图
*/
String tagBackground;
/**
* 排序
*/
Integer sort;

public ArticlesQueryVO toArticlesQuery(){
public ArticlesQueryVO toArticlesQuery() {
ArticlesQueryVO articlesQueryVO = new ArticlesQueryVO();
articlesQueryVO.setBackground(tagBackground);
articlesQueryVO.setName("标签 - "+name);
articlesQueryVO.setName("标签 - " + name);
return articlesQueryVO;
}

public TagDTO toTagDTO() {
TagDTO tagDTO = new TagDTO();
tagDTO.setId(id);
tagDTO.setUserId(userId);
tagDTO.setName(name);
tagDTO.setSlug(slug);
tagDTO.setTagBackground(tagBackground);
tagDTO.setColor(color);
return tagDTO;
}

@Override
public int compareTo(@org.jetbrains.annotations.NotNull TagDO tagDO) {
if (this.sort == null || tagDO.sort == null) {
return sort(tagDO);
}
return this.sort - tagDO.sort;
}

private int sort(@NotNull TagDO tagDO) {
Comparator<Object> cmp = Collator.getInstance(java.util.Locale.CHINA);
return cmp.compare(getName(), tagDO.getName());
}
}
19 changes: 12 additions & 7 deletions src/main/java/com/jmal/clouddisk/model/TagDTO.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.jmal.clouddisk.model;

import io.swagger.v3.oas.annotations.media.Schema;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.data.annotation.Id;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.text.Collator;
import java.util.Comparator;

Expand All @@ -18,7 +17,7 @@
@Data
@Schema
@Valid
public class TagDTO implements Comparable<TagDTO>{
public class TagDTO implements Comparable<TagDTO> {

@Id
@Schema(hidden = true)
Expand Down Expand Up @@ -46,9 +45,15 @@ public class TagDTO implements Comparable<TagDTO>{
@Schema(hidden = true, name = "fontSize", title = "标签字体大小")
Long fontSize;

@Schema(hidden = true, name = "sort", title = "排序")
Integer sort;

@Override
public int compareTo(TagDTO tagDTO) {
Comparator<Object> cmp = Collator.getInstance(java.util.Locale.CHINA);
return cmp.compare(getName(), tagDTO.getName());
public int compareTo(@org.jetbrains.annotations.NotNull TagDTO tagDTO) {
if (this.sort == null || tagDTO.sort == null) {
Comparator<Object> cmp = Collator.getInstance(java.util.Locale.CHINA);
return cmp.compare(getName(), tagDTO.getName());
}
return this.sort - tagDTO.sort;
}
}
18 changes: 13 additions & 5 deletions src/main/java/com/jmal/clouddisk/service/IFileService.java
Original file line number Diff line number Diff line change
Expand Up @@ -403,12 +403,20 @@ public interface IFileService {
ResponseResult<Object> setTag(EditTagDTO editTagDTO);

/**
* 删除文件所有依赖
* @param username 用户名
* @param fileIds 文件id列表
* @param sweep 是否硬删除, 否则就是移动到回收站
* 修改标签颜色或名称
* @param tagId 标签id
* @param tagName 标签名
* @param color 标签颜色
* @return ResponseResult<Object>
*/
ResponseResult<Object> setTag(String tagId, String tagName, String color);

/**
* 删除文件标签
* @param tagId 标签id
* @return ResponseResult<Object>
*/
void deleteDependencies(String username, List<String> fileIds, boolean sweep);
ResponseResult<Object> deleteTag(String tagId);

/**
* 返回原处
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1573,7 +1573,7 @@ public ResponseResult<Object> setTag(EditTagDTO editTagDTO) {
Update update = new Update();
String userId = userLoginHolder.getUserId();
if (editTagDTO.getRemoveTagIds() == null || editTagDTO.getRemoveTagIds().isEmpty()) {
log.info("修改标签, fileIds: {}, tagList: {}", editTagDTO.getFileIds(), editTagDTO.getTagList());
log.debug("修改标签, fileIds: {}, tagList: {}", editTagDTO.getFileIds(), editTagDTO.getTagList());
editTagDTO.getFileIds().forEach(fileId -> luceneService.pushCreateIndexQueue(fileId));
} else {
// 删除标签并修改相关文件
Expand All @@ -1591,6 +1591,46 @@ public ResponseResult<Object> setTag(EditTagDTO editTagDTO) {
return ResultUtil.success();
}

@Override
public ResponseResult<Object> setTag(String tagId, String tagName, String color) {
TagDO tagDO = tagService.getTagInfo(tagId);
if (tagDO == null) {
return ResultUtil.error("标签不存在");
}
TagDTO tagDTO = tagDO.toTagDTO();
if (CharSequenceUtil.isNotBlank(tagName)) {
tagDTO.setName(tagName);
}
if (CharSequenceUtil.isNotBlank(color)) {
tagDTO.setColor(color);
}
tagService.update(tagDTO);
List<TagDTO> tagList = List.of(tagDTO);
EditTagDTO editTagDTO = new EditTagDTO();
editTagDTO.setTagList(tagList);
editTagDTO.setFileIds(getFileIdListByTagId(tagId));
setTag(editTagDTO);
return ResultUtil.success();
}

@Override
public ResponseResult<Object> deleteTag(String tagId) {
deleteTgs(List.of(tagId));
pushMessage(userLoginHolder.getUsername(), tagService.list(userLoginHolder.getUserId()), "updateTags");
return ResultUtil.success();
}

private List<String> getFileIdListByTagId(String tagId) {
Query query = new Query();
query.addCriteria(Criteria.where("tags.tagId").is(tagId));
query.fields().include("_id");
List<FileDocument> fileDocumentList = mongoTemplate.find(query, FileDocument.class, COLLECTION_NAME);
if (fileDocumentList.isEmpty()) {
return Lists.newArrayList();
}
return new ArrayList<>(fileDocumentList.stream().map(FileDocument::getId).toList());
}

/**
* 删除标签并修改相关文件
*
Expand Down
33 changes: 28 additions & 5 deletions src/main/java/com/jmal/clouddisk/service/impl/TagService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.jmal.clouddisk.service.impl;

import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil;
import com.jmal.clouddisk.model.Tag;
import com.jmal.clouddisk.model.TagDO;
import com.jmal.clouddisk.model.TagDTO;
Expand Down Expand Up @@ -248,19 +247,19 @@ private Tag getTagIdByName(String tagName, String color, String userId) {
tag = new TagDO();
tag.setId(new ObjectId().toHexString());
} else {
boolean tagChange = StrUtil.isNotBlank(color) && !color.equals(tag.getColor());
if (StrUtil.isNotBlank(tagName) && !tagName.equals(tag.getName())) {
boolean tagChange = CharSequenceUtil.isNotBlank(color) && !color.equals(tag.getColor());
if (CharSequenceUtil.isNotBlank(tagName) && !tagName.equals(tag.getName())) {
tagChange = true;
}
if (tagChange) {
// 更改了标签, 则需修改fileDocument中tags
updateFilDocumentTag(color, tagName, tag);
}
}
if (StrUtil.isNotBlank(userId)) {
if (CharSequenceUtil.isNotBlank(userId)) {
tag.setUserId(userId);
}
if (StrUtil.isNotBlank(color)) {
if (CharSequenceUtil.isNotBlank(color)) {
tag.setColor(color);
}
tag.setName(tagName);
Expand Down Expand Up @@ -298,4 +297,28 @@ public List<TagDO> getTagListByIds(Object[] tagIds) {
query.addCriteria(Criteria.where("_id").in(tagIds));
return mongoTemplate.find(query, TagDO.class, COLLECTION_NAME);
}

/**
* 更新标签排序
* @param tagIdList 标签Id列表
*/
public void updateTagSort(List<String> tagIdList) {
if (tagIdList == null || tagIdList.isEmpty()) {
return;
}
List<TagDTO> tagDTOList = new ArrayList<>();
for (int i = 0; i < tagIdList.size(); i++) {
TagDTO tagDTO = new TagDTO();
tagDTO.setSort(i);
tagDTO.setId(tagIdList.get(i));
tagDTOList.add(tagDTO);
}
tagDTOList.parallelStream().forEach(tagDTO -> {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(tagDTO.getId()));
Update update = new Update();
update.set("sort", tagDTO.getSort());
mongoTemplate.updateFirst(query, update, COLLECTION_NAME);
});
}
}

0 comments on commit c7f81c3

Please sign in to comment.