Просмотр исходного кода

【feat】【v3】
1.完善字典查询相关逻辑

ChenYL 11 месяцев назад
Родитель
Сommit
d45958430b

+ 4 - 2
src/main/java/com/punchsettle/server/atomic/entity/SysDict.java

@@ -5,6 +5,7 @@ import java.io.Serializable;
 
 import com.punchsettle.server.common.pojo.BaseEntity;
 
+import com.punchsettle.server.constant.CommonStatusEnum;
 import jakarta.persistence.Column;
 import jakarta.persistence.Table;
 import lombok.Data;
@@ -43,8 +44,9 @@ public class SysDict extends BaseEntity implements Serializable {
     private String description;
 
     /**
-     * 状态(1-启用,0-失效)
+     * 状态(ENABLED-启用,DISABLED-失效)
+     * @see CommonStatusEnum
      */
     @Column(name = "status")
-    private Integer status;
+    private CommonStatusEnum status;
 }

+ 6 - 7
src/main/java/com/punchsettle/server/atomic/entity/SysDictItem.java

@@ -4,14 +4,13 @@ import java.io.Serial;
 import java.io.Serializable;
 
 import com.punchsettle.server.common.pojo.BaseEntity;
-import com.punchsettle.server.common.typehandler.EnumValueTypeHandler;
-import com.punchsettle.server.constant.DictDataType;
+import com.punchsettle.server.constant.CommonStatusEnum;
+import com.punchsettle.server.constant.DictDataTypeEnum;
 
 import jakarta.persistence.Column;
 import jakarta.persistence.Table;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import tk.mybatis.mapper.annotation.ColumnType;
 
 /**
  * @author tyuio
@@ -36,9 +35,8 @@ public class SysDictItem extends BaseEntity implements Serializable {
     /**
      * 数据类型(0-String,1-Number)
      */
-    @ColumnType(typeHandler = EnumValueTypeHandler.class)
     @Column(name = "data_type")
-    private DictDataType dataType;
+    private DictDataTypeEnum dataType;
 
     /**
      * 字典项编码
@@ -59,8 +57,9 @@ public class SysDictItem extends BaseEntity implements Serializable {
     private String description;
 
     /**
-     * 状态(1-启用,0-失效)
+     * 状态(ENABLED-启用,DISABLED-失效)
+     * @see CommonStatusEnum
      */
     @Column(name = "status")
-    private Integer status;
+    private CommonStatusEnum status;
 }

+ 4 - 3
src/main/java/com/punchsettle/server/atomic/service/ISysDictItemService.java

@@ -1,6 +1,7 @@
 package com.punchsettle.server.atomic.service;
 
 import com.punchsettle.server.atomic.entity.SysDictItem;
+import com.punchsettle.server.pojo.dict.DictItemQuery;
 
 import java.util.List;
 
@@ -13,9 +14,9 @@ import java.util.List;
 public interface ISysDictItemService {
 
     /**
-     * 根据字典ID查询字典项
-     * @param dictId
+     * 根据条件查询字典项
+     * @param dictItemQuery 查询条件
      * @return
      */
-    List<SysDictItem> getByDictId(Long dictId);
+    List<SysDictItem> getByCondition(DictItemQuery dictItemQuery);
 }

+ 4 - 5
src/main/java/com/punchsettle/server/atomic/service/ISysDictService.java

@@ -1,8 +1,7 @@
 package com.punchsettle.server.atomic.service;
 
 import com.punchsettle.server.atomic.entity.SysDict;
-
-import java.util.List;
+import com.punchsettle.server.pojo.dict.DictQuery;
 
 /**
  * @author tyuio
@@ -13,9 +12,9 @@ import java.util.List;
 public interface ISysDictService {
 
     /**
-     * 根据字典编码获取字典信息
-     * @param dictCode 字典编码
+     * 根据条件获取字典信息
+     * @param dictQuery 字典编码
      * @return
      */
-    SysDict getByDictCode(String dictCode);
+    SysDict getOneByCondition(DictQuery dictQuery);
 }

+ 10 - 4
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictItemServiceImpl.java

@@ -3,6 +3,7 @@ package com.punchsettle.server.atomic.service.impl;
 import java.util.List;
 import java.util.Objects;
 
+import com.punchsettle.server.pojo.dict.DictItemQuery;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -27,14 +28,19 @@ public class SysDictItemServiceImpl implements ISysDictItemService {
     private SysDictItemMapper dictItemMapper;
 
     @Override
-    public List<SysDictItem> getByDictId(Long dictId) {
-        if (Objects.isNull(dictId)) {
-            return null;
+    public List<SysDictItem> getByCondition(DictItemQuery dictItemQuery) {
+        if (Objects.isNull(dictItemQuery)) {
+            return List.of();
         }
 
         Weekend<SysDictItem> weekend = WeekendUtils.createExcludeAuditFields(SysDictItem.class);
         WeekendCriteria<SysDictItem, Object> criteria = weekend.weekendCriteria();
-        criteria.andEqualTo(SysDictItem::getDictId, dictId);
+        if (Objects.nonNull(dictItemQuery.getDictId())) {
+            criteria.andEqualTo(SysDictItem::getDictId, dictItemQuery.getDictId());
+        }
+        if (Objects.nonNull(dictItemQuery.getStatus())) {
+            criteria.andEqualTo(SysDictItem::getStatus, dictItemQuery.getStatus());
+        }
         return dictItemMapper.selectByExample(weekend);
     }
 }

+ 11 - 3
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictServiceImpl.java

@@ -1,5 +1,7 @@
 package com.punchsettle.server.atomic.service.impl;
 
+import java.util.Objects;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -7,6 +9,7 @@ import org.springframework.util.StringUtils;
 import com.punchsettle.server.atomic.entity.SysDict;
 import com.punchsettle.server.atomic.mapper.SysDictMapper;
 import com.punchsettle.server.atomic.service.ISysDictService;
+import com.punchsettle.server.pojo.dict.DictQuery;
 import com.punchsettle.server.utiis.WeekendUtils;
 
 import tk.mybatis.mapper.weekend.Weekend;
@@ -25,14 +28,19 @@ public class SysDictServiceImpl implements ISysDictService {
     private SysDictMapper dictMapper;
 
     @Override
-    public SysDict getByDictCode(String dictCode) {
-        if (!StringUtils.hasText(dictCode)) {
+    public SysDict getOneByCondition(DictQuery dictQuery) {
+        if (Objects.isNull(dictQuery)) {
             return null;
         }
 
         Weekend<SysDict> weekend = WeekendUtils.createExcludeAuditFields(SysDict.class);
         WeekendCriteria<SysDict, Object> criteria = weekend.weekendCriteria();
-        criteria.andEqualTo(SysDict::getDictCode, dictCode);
+        if (StringUtils.hasText(dictQuery.getDictCode())) {
+            criteria.andEqualTo(SysDict::getDictCode, dictQuery.getDictCode());
+        }
+        if (Objects.nonNull(dictQuery.getStatus())) {
+            criteria.andEqualTo(SysDict::getStatus, dictQuery.getStatus());
+        }
         return dictMapper.selectOneByExample(weekend);
     }
 }

+ 5 - 0
src/main/java/com/punchsettle/server/constant/CacheNameConstant.java

@@ -17,4 +17,9 @@ public class CacheNameConstant {
      * 用户信息VO
      */
     public static final String USER_VO = "userVO";
+
+    /**
+     * 字典项
+     */
+    public static final String DICT_ITEM_VO_LIST = "dictItemVoList";
 }

+ 23 - 0
src/main/java/com/punchsettle/server/constant/CommonStatusEnum.java

@@ -0,0 +1,23 @@
+package com.punchsettle.server.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/8 20:44
+ * @description 通用状态枚举(ENABLED-启用,DISABLED-禁用)
+ */
+@Getter
+@AllArgsConstructor
+public enum CommonStatusEnum {
+
+    ENABLED("启用"),
+    DISABLED("禁用");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 0 - 32
src/main/java/com/punchsettle/server/constant/DictDataType.java

@@ -1,32 +0,0 @@
-package com.punchsettle.server.constant;
-
-import com.fasterxml.jackson.annotation.JsonValue;
-import com.punchsettle.server.common.annotation.EnumValue;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * @author myou
- * @version 1.0.0
- * @date 2024/12/22 10:38
- * @description 字典数据类型(0-String,1-Number)
- */
-@Getter
-@AllArgsConstructor
-public enum DictDataType {
-
-    STRING("字符串", 0),
-    NUMBER("数字", 1);
-
-    /**
-     * 名称
-     */
-    private String name;
-
-    /**
-     * 编码
-     */
-    @JsonValue
-    @EnumValue
-    private Integer code;
-}

+ 23 - 0
src/main/java/com/punchsettle/server/constant/DictDataTypeEnum.java

@@ -0,0 +1,23 @@
+package com.punchsettle.server.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author myou
+ * @version 1.0.0
+ * @date 2024/12/22 10:38
+ * @description 字典数据类型枚举(字符串-STRING,整型数值-INTEGER)
+ */
+@Getter
+@AllArgsConstructor
+public enum DictDataTypeEnum {
+
+    STRING("字符串"),
+    INTEGER("整型数值");
+
+    /**
+     * 名称
+     */
+    private String name;
+}

+ 25 - 0
src/main/java/com/punchsettle/server/pojo/dict/DictItemQuery.java

@@ -0,0 +1,25 @@
+package com.punchsettle.server.pojo.dict;
+
+import com.punchsettle.server.constant.CommonStatusEnum;
+import lombok.Data;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/4/8 20:58
+ * @description 字典项查询 Query
+ */
+@Data
+public class DictItemQuery {
+
+    /**
+     * 字典ID
+     */
+    private Long dictId;
+
+    /**
+     * 状态
+     * @see CommonStatusEnum
+     */
+    private CommonStatusEnum status;
+}

+ 3 - 1
src/main/java/com/punchsettle/server/pojo/dict/DictQuery.java

@@ -1,5 +1,6 @@
 package com.punchsettle.server.pojo.dict;
 
+import com.punchsettle.server.constant.CommonStatusEnum;
 import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
 
@@ -20,6 +21,7 @@ public class DictQuery {
 
     /**
      * 状态(ENABLED-启用,DISABLED-失效)
+     * @see CommonStatusEnum
      */
-    private String status;
+    private CommonStatusEnum status;
 }

+ 8 - 6
src/main/java/com/punchsettle/server/service/controller/DictController.java

@@ -1,16 +1,18 @@
 package com.punchsettle.server.service.controller;
 
+import java.util.List;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import com.punchsettle.server.pojo.dict.DictVO;
+import com.punchsettle.server.pojo.dict.DictItemVO;
+import com.punchsettle.server.pojo.dict.DictQuery;
 import com.punchsettle.server.service.manager.IDictManager;
 
-import jakarta.validation.constraints.NotBlank;
-
 /**
  * @author ChenYL
  * @version V1.0
@@ -27,11 +29,11 @@ public class DictController {
 
     /**
      * 根据字典编码查询字典项
-     * @param dictCode 字典编码
+     * @param dictQuery 字典编码
      * @return
      */
     @PostMapping("/queryDictItems")
-    public DictVO queryDictItems(@NotBlank(message = "字典编码不能为空") String dictCode) {
-        return dictManager.queryDict(dictCode);
+    public List<DictItemVO> queryDictItems(@RequestBody @Validated DictQuery dictQuery) {
+        return dictManager.queryDictItems(dictQuery);
     }
 }

+ 7 - 4
src/main/java/com/punchsettle/server/service/manager/IDictManager.java

@@ -1,6 +1,9 @@
 package com.punchsettle.server.service.manager;
 
-import com.punchsettle.server.pojo.dict.DictVO;
+import java.util.List;
+
+import com.punchsettle.server.pojo.dict.DictItemVO;
+import com.punchsettle.server.pojo.dict.DictQuery;
 
 /**
  * @author myou
@@ -11,9 +14,9 @@ import com.punchsettle.server.pojo.dict.DictVO;
 public interface IDictManager {
 
     /**
-     * 根据字典编码查询字典项
-     * @param dictCode 字典
+     * 根据条件查询字典项
+     * @param dictQuery 查询条件
      * @return
      */
-    DictVO queryDict(String dictCode);
+    List<DictItemVO> queryDictItems(DictQuery dictQuery);
 }

+ 25 - 20
src/main/java/com/punchsettle/server/service/manager/impl/DictManagerImpl.java

@@ -1,21 +1,25 @@
 package com.punchsettle.server.service.manager.impl;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
+import com.punchsettle.server.constant.CacheNameConstant;
+import com.punchsettle.server.pojo.dict.DictItemQuery;
+import com.punchsettle.server.pojo.dict.DictQuery;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
 
 import com.punchsettle.server.atomic.entity.SysDict;
 import com.punchsettle.server.atomic.entity.SysDictItem;
 import com.punchsettle.server.atomic.service.ISysDictItemService;
 import com.punchsettle.server.atomic.service.ISysDictService;
 import com.punchsettle.server.common.exception.BusinessException;
-import com.punchsettle.server.constant.DictDataType;
+import com.punchsettle.server.constant.DictDataTypeEnum;
 import com.punchsettle.server.pojo.dict.DictItemVO;
 import com.punchsettle.server.pojo.dict.DictVO;
 import com.punchsettle.server.service.manager.IDictManager;
@@ -36,35 +40,36 @@ public class DictManagerImpl implements IDictManager {
     private ISysDictItemService dictItemService;
 
     @Override
-    public DictVO queryDict(String dictCode) {
-        if (!StringUtils.hasText(dictCode)) {
-            return null;
+    @Cacheable(cacheNames = CacheNameConstant.DICT_ITEM_VO_LIST, key = "#dictQuery.dictCode+'_'+#dictQuery.status?.name()?:'null'")
+    public List<DictItemVO> queryDictItems(DictQuery dictQuery) {
+        if (Objects.isNull(dictQuery)) {
+            return List.of();
         }
 
-        // TODO 差了状态过滤
         // 获取字典
-        SysDict dict = Optional.ofNullable(dictService.getByDictCode(dictCode)).orElseThrow(() -> BusinessException.fail("字典不存在"));
-        DictVO dictVO = new DictVO();
-        BeanUtils.copyProperties(dict, dictVO);
+        SysDict dict = Optional.ofNullable(dictService.getOneByCondition(dictQuery)).orElseThrow(() -> BusinessException.fail("字典不存在"));
 
         // 获取字典项
-        List<SysDictItem> dictItems = dictItemService.getByDictId(dict.getId());
+        DictItemQuery dictItemQuery = new DictItemQuery();
+        dictItemQuery.setDictId(dict.getId());
+        dictItemQuery.setStatus(dictQuery.getStatus());
+        List<SysDictItem> dictItems = dictItemService.getByCondition(dictItemQuery);
         if (CollectionUtils.isEmpty(dictItems)) {
-            return dictVO;
+            return List.of();
         }
 
-        List<DictItemVO> itemVOList = dictItems.stream().map(item -> {
-            DictItemVO itemVO = new DictItemVO();
-            if (DictDataType.NUMBER.equals(item.getDataType())) {
-                itemVO.setItemValue(Integer.valueOf(item.getItemValue()));
+        List<DictItemVO> dictItemVOList = dictItems.stream().map(item -> {
+            DictItemVO dictItemVO = new DictItemVO();
+            BeanUtils.copyProperties(item, dictItemVO);
+            if (DictDataTypeEnum.INTEGER.equals(item.getDataType())) {
+                dictItemVO.setItemValue(Integer.valueOf(item.getItemValue()));
             }
-            if (DictDataType.STRING.equals(item.getDataType())) {
-                itemVO.setItemValue(item.getItemValue());
+            if (DictDataTypeEnum.STRING.equals(item.getDataType())) {
+                dictItemVO.setItemValue(item.getItemValue());
             }
-            return itemVO;
+            return dictItemVO;
         }).collect(Collectors.toList());
-        dictVO.setDictItems(itemVOList);
 
-        return dictVO;
+        return dictItemVOList;
     }
 }