From ae87849a5feb8c0cdbfcafd8a500448d8b6e8e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E6=B0=B8=E6=98=A5?= Date: Thu, 4 Dec 2025 20:52:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=95=B0=E6=8D=AE=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/controller/DictionaryController.java | 7 +- .../controller/DictionaryItemController.java | 43 +++++++ .../core/controller/dto/DictionaryDTO.java | 4 + .../controller/dto/DictionaryItemDTO.java | 29 +++++ .../core/controller/vo/DictionaryItemVO.java | 34 ++++++ .../module/core/entity/DictionaryItem.java | 35 ++++++ .../core/mapper/DictionaryItemMapper.java | 19 +++ .../core/service/DictionaryItemService.java | 19 +++ .../core/service/DictionaryService.java | 4 +- .../impl/DictionaryItemServiceImpl.java | 109 ++++++++++++++++++ .../service/impl/DictionaryServiceImpl.java | 11 +- 11 files changed, 310 insertions(+), 4 deletions(-) create mode 100644 dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryItemController.java create mode 100644 dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryItemDTO.java create mode 100644 dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/vo/DictionaryItemVO.java create mode 100644 dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/entity/DictionaryItem.java create mode 100644 dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/mapper/DictionaryItemMapper.java create mode 100644 dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryItemService.java create mode 100644 dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryItemServiceImpl.java diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryController.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryController.java index 250d962..048428c 100644 --- a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryController.java +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryController.java @@ -33,7 +33,12 @@ public class DictionaryController { @PostMapping("/delete") public ApiResponse delete(@RequestBody DictionaryDTO record) { - return ApiResponse.success(dictionaryService.delete(record)); + return ApiResponse.success(dictionaryService.delete(record.getId())); + } + + @PostMapping("/deleteBatch") + public ApiResponse deleteBatch(@RequestBody DictionaryDTO record) { + return ApiResponse.success(dictionaryService.deleteBatch(record.getIds())); } @PostMapping("/insert") diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryItemController.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryItemController.java new file mode 100644 index 0000000..5a91c4d --- /dev/null +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/DictionaryItemController.java @@ -0,0 +1,43 @@ +package day.gitlab.dolphin.module.core.controller; + +import day.gitlab.dolphin.common.web.entity.ApiResponse; +import day.gitlab.dolphin.module.core.controller.dto.DictionaryItemDTO; +import day.gitlab.dolphin.module.core.controller.vo.DictionaryItemVO; +import day.gitlab.dolphin.module.core.service.DictionaryItemService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/dictionaryItem") +public class DictionaryItemController { + + private final DictionaryItemService dictionaryItemService; + + @GetMapping("/tree") + public ApiResponse> tree(DictionaryItemDTO record) { + return ApiResponse.success(dictionaryItemService.tree(record.getDictionaryId())); + } + + @PostMapping("/update") + public ApiResponse update(@RequestBody DictionaryItemDTO record) { + return ApiResponse.success(dictionaryItemService.update(record)); + } + + @PostMapping("/delete") + public ApiResponse delete(@RequestBody DictionaryItemDTO record) { + return ApiResponse.success(dictionaryItemService.delete(record.getId())); + } + + @PostMapping("/deleteBatch") + public ApiResponse deleteBatch(@RequestBody DictionaryItemDTO record) { + return ApiResponse.success(dictionaryItemService.deleteBatch(record.getIds())); + } + + @PostMapping("/insert") + public ApiResponse insert(@RequestBody DictionaryItemDTO record) { + return ApiResponse.success(dictionaryItemService.insert(record)); + } +} diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryDTO.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryDTO.java index 8b5c6a4..87f0e2c 100644 --- a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryDTO.java +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryDTO.java @@ -4,6 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @NoArgsConstructor @AllArgsConstructor @@ -18,4 +20,6 @@ public class DictionaryDTO { private String type; private String description; + + private List ids; } diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryItemDTO.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryItemDTO.java new file mode 100644 index 0000000..bdb08c0 --- /dev/null +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/dto/DictionaryItemDTO.java @@ -0,0 +1,29 @@ +package day.gitlab.dolphin.module.core.controller.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DictionaryItemDTO { + + private String id; + + private String dictionaryId; + + private String parentId; + + private String name; + + private String code; + + private Integer sort; + + private String description; + + private List ids; +} diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/vo/DictionaryItemVO.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/vo/DictionaryItemVO.java new file mode 100644 index 0000000..71a2d0e --- /dev/null +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/controller/vo/DictionaryItemVO.java @@ -0,0 +1,34 @@ +package day.gitlab.dolphin.module.core.controller.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Timestamp; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DictionaryItemVO { + + private String id; + + private String dictionaryId; + + private String parentId; + + private String name; + + private String code; + + private Integer sort; + + private String description; + + private Timestamp createTime; + + private Timestamp updateTime; + + private List children; +} diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/entity/DictionaryItem.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/entity/DictionaryItem.java new file mode 100644 index 0000000..0217f79 --- /dev/null +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/entity/DictionaryItem.java @@ -0,0 +1,35 @@ +package day.gitlab.dolphin.module.core.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.sql.Timestamp; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("sys_core_dictionary_item") +public class DictionaryItem { + + @TableId + private String id; + + private String dictionaryId; + + private String parentId; + + private String name; + + private String code; + + private Integer sort; + + private String description; + + private Timestamp createTime; + + private Timestamp updateTime; +} diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/mapper/DictionaryItemMapper.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/mapper/DictionaryItemMapper.java new file mode 100644 index 0000000..de52938 --- /dev/null +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/mapper/DictionaryItemMapper.java @@ -0,0 +1,19 @@ +package day.gitlab.dolphin.module.core.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import day.gitlab.dolphin.module.core.entity.DictionaryItem; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface DictionaryItemMapper extends BaseMapper { + + default List findAllByDictionaryId(String dictionaryId) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() + .eq(DictionaryItem::getDictionaryId, dictionaryId); + return selectList(wrapper); + } +} diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryItemService.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryItemService.java new file mode 100644 index 0000000..675460f --- /dev/null +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryItemService.java @@ -0,0 +1,19 @@ +package day.gitlab.dolphin.module.core.service; + +import day.gitlab.dolphin.module.core.controller.dto.DictionaryItemDTO; +import day.gitlab.dolphin.module.core.controller.vo.DictionaryItemVO; + +import java.util.List; + +public interface DictionaryItemService { + + List tree(String dictionaryId); + + Boolean update(DictionaryItemDTO record); + + Boolean delete(String id); + + Integer deleteBatch(List ids); + + Boolean insert(DictionaryItemDTO record); +} diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryService.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryService.java index 396c67e..0a61358 100644 --- a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryService.java +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/DictionaryService.java @@ -13,7 +13,9 @@ public interface DictionaryService { boolean update(DictionaryDTO record); - boolean delete(DictionaryDTO record); + boolean delete(String id); + + int deleteBatch(List ids); boolean insert(DictionaryDTO record); } diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryItemServiceImpl.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryItemServiceImpl.java new file mode 100644 index 0000000..ff7269d --- /dev/null +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryItemServiceImpl.java @@ -0,0 +1,109 @@ +package day.gitlab.dolphin.module.core.service.impl; + +import day.gitlab.dolphin.common.core.util.Strings; +import day.gitlab.dolphin.module.core.controller.dto.DictionaryItemDTO; +import day.gitlab.dolphin.module.core.controller.vo.DictionaryItemVO; +import day.gitlab.dolphin.module.core.entity.DictionaryItem; +import day.gitlab.dolphin.module.core.mapper.DictionaryItemMapper; +import day.gitlab.dolphin.module.core.service.DictionaryItemService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.time.Instant; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class DictionaryItemServiceImpl implements DictionaryItemService { + + private final DictionaryItemMapper dictionaryItemMapper; + + @Override + public List tree(String dictionaryId) { + List records = dictionaryItemMapper.findAllByDictionaryId(dictionaryId); + return list2tree(records); + } + + @Override + public Boolean update(DictionaryItemDTO record) { + DictionaryItem dictionaryItem = dictionaryItemMapper.selectById(record.getId()); + if (dictionaryItem == null) { + return false; + } + + if (Strings.isNotBlank(record.getDictionaryId())) { + dictionaryItem.setDictionaryId(record.getDictionaryId()); + } + if (Strings.isNotBlank(record.getParentId())) { + dictionaryItem.setParentId(record.getParentId()); + } + if (Strings.isNotBlank(record.getName())) { + dictionaryItem.setName(record.getName()); + } + if (Strings.isNotBlank(record.getCode())) { + dictionaryItem.setCode(record.getCode()); + } + if (record.getSort() == null) { + dictionaryItem.setSort(0); + } + if (Strings.isNotBlank(record.getDescription())) { + dictionaryItem.setDescription(record.getDescription()); + } + dictionaryItem.setUpdateTime(Timestamp.from(Instant.now())); + return dictionaryItemMapper.updateById(dictionaryItem) > 0; + } + + @Override + public Boolean delete(String id) { + return dictionaryItemMapper.deleteById(id) > 0; + } + + @Override + public Integer deleteBatch(List ids) { + return dictionaryItemMapper.deleteByIds(ids); + } + + @Override + public Boolean insert(DictionaryItemDTO record) { + DictionaryItem dictionaryItem = new DictionaryItem(); + BeanUtils.copyProperties(record, dictionaryItem); + dictionaryItem.setId(null); + dictionaryItem.setCreateTime(Timestamp.from(Instant.now())); + dictionaryItem.setUpdateTime(Timestamp.from(Instant.now())); + + return dictionaryItemMapper.insert(dictionaryItem) > 0; + } + + private List list2tree(List records) { + List root = records.stream() + .filter(rec -> Strings.isBlank(rec.getParentId())) + .map(rec -> { + DictionaryItemVO vo = new DictionaryItemVO(); + BeanUtils.copyProperties(rec, vo); + return vo; + }) + .toList(); + for (DictionaryItemVO parent : root) { + list2tree(parent, records); + } + return root; + } + + private void list2tree(DictionaryItemVO parent, List records) { + List children = records.stream() + .filter(rec -> parent.getId().equals(rec.getParentId())) + .map(rec -> { + DictionaryItemVO vo = new DictionaryItemVO(); + BeanUtils.copyProperties(rec, vo); + return vo; + }) + .toList(); + parent.setChildren(children); + + for (DictionaryItemVO child : children) { + list2tree(child, records); + } + } +} diff --git a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryServiceImpl.java b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryServiceImpl.java index e3eb438..24603c9 100644 --- a/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryServiceImpl.java +++ b/dolphin-modules/dolphin-module-core/src/main/java/day/gitlab/dolphin/module/core/service/impl/DictionaryServiceImpl.java @@ -17,6 +17,7 @@ import org.springframework.stereotype.Service; import java.sql.Timestamp; import java.time.Instant; +import java.util.List; @Service @RequiredArgsConstructor @@ -71,18 +72,24 @@ public class DictionaryServiceImpl implements DictionaryService { } @Override - public boolean delete(DictionaryDTO record) { - Dictionary dictionary = dictionaryMapper.selectById(record.getId()); + public boolean delete(String id) { + Dictionary dictionary = dictionaryMapper.selectById(id); if (dictionary != null) { return dictionaryMapper.deleteById(dictionary.getId()) == 1; } return false; } + @Override + public int deleteBatch(List ids) { + return dictionaryMapper.deleteByIds(ids); + } + @Override public boolean insert(DictionaryDTO record) { Dictionary dictionary = new Dictionary(); BeanUtils.copyProperties(record, dictionary); + dictionary.setId(null); dictionary.setCreateTime(Timestamp.from(Instant.now())); dictionary.setUpdateTime(Timestamp.from(Instant.now())); return dictionaryMapper.insert(dictionary) == 1;