feat: 添加获取所有字典和数据接口

This commit is contained in:
Ray.Hao
2024-10-18 22:22:27 +08:00
parent 37a20c7a6c
commit 3481396e59
12 changed files with 113 additions and 60 deletions

View File

@@ -10,6 +10,7 @@ import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.common.annotation.RepeatSubmit; import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.system.model.form.DictForm; import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.common.annotation.Log; import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.model.vo.DictVO;
import com.youlai.boot.system.service.DictService; import com.youlai.boot.system.service.DictService;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@@ -47,8 +48,8 @@ public class DictController {
@Operation(summary = "字典列表") @Operation(summary = "字典列表")
@GetMapping("/list") @GetMapping("/list")
public Result<List<Option<String>>> getDictList() { public Result<List<DictVO>> getAllDictWithData() {
List<Option<String>> list = dictService.getDictList(); List<DictVO> list = dictService.getAllDictWithData();
return Result.success(list); return Result.success(list);
} }

View File

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.entity.DictData; import com.youlai.boot.system.model.entity.DictData;
import com.youlai.boot.system.model.query.DictDataPageQuery; import com.youlai.boot.system.model.query.DictDataPageQuery;
import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictDataPageVO; import com.youlai.boot.system.model.vo.DictDataPageVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;

View File

@@ -2,11 +2,15 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.entity.Dict; import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.query.DictPageQuery; import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.system.model.vo.DictVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/** /**
* 字典 访问层 * 字典 访问层
* *
@@ -24,6 +28,13 @@ public interface DictMapper extends BaseMapper<Dict> {
* @return * @return
*/ */
Page<DictPageVO> getDictPage(Page<DictPageVO> page, DictPageQuery queryParams); Page<DictPageVO> getDictPage(Page<DictPageVO> page, DictPageQuery queryParams);
/**
* 获取所有字典和字典数据
*
* @return
*/
List<DictVO> getAllDictWithData();
} }

View File

@@ -11,9 +11,9 @@ import lombok.EqualsAndHashCode;
* @author haoxr * @author haoxr
* @since 2022/12/17 * @since 2022/12/17
*/ */
@Data @EqualsAndHashCode(callSuper = false)
@TableName("sys_dict") @TableName("sys_dict")
@EqualsAndHashCode(callSuper = true) @Data
public class Dict extends BaseEntity { public class Dict extends BaseEntity {
/** /**

View File

@@ -3,18 +3,18 @@ package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity; import com.youlai.boot.common.base.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
/** /**
* 字典数据 * 字典数据实体对象
* *
* @author haoxr * @author haoxr
* @since 2022/12/17 * @since 2022/12/17
*/ */
@EqualsAndHashCode(callSuper = false)
@TableName("sys_dict_data") @TableName("sys_dict_data")
@Data @Data
public class DictData extends BaseEntity { public class DictData extends BaseEntity {

View File

@@ -7,7 +7,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = false)
@Schema(description ="字典数据分页查询对象") @Schema(description ="字典数据分页查询对象")
public class DictDataPageQuery extends BasePageQuery { public class DictDataPageQuery extends BasePageQuery {

View File

@@ -7,7 +7,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = false)
@Schema(description ="字典数据项分页查询对象") @Schema(description ="字典数据项分页查询对象")
public class DictPageQuery extends BasePageQuery { public class DictPageQuery extends BasePageQuery {

View File

@@ -0,0 +1,46 @@
package com.youlai.boot.system.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* 字典数据项分页VO
*
* @author Ray
* @since 0.0.1
*/
@Schema(description = "字典数据分页对象")
@Getter
@Setter
public class DictVO {
@Schema(description = "字典名称")
private String name;
@Schema(description = "字典编码")
private String dictCode;
@Schema(description = "字典数据集合")
private List<DictData> dictDataList;
@Schema(description = "字典数据")
@Getter
@Setter
public static class DictData {
@Schema(description = "字典数据值")
private String value;
@Schema(description = "字典数据标签")
private String label;
@Schema(description = "标签类型")
private String tagType;
}
}

View File

@@ -7,11 +7,12 @@ import com.youlai.boot.system.model.entity.Dict;
import com.youlai.boot.system.model.form.DictForm; import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.system.model.query.DictPageQuery; import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.system.model.vo.DictVO;
import java.util.List; import java.util.List;
/** /**
* 数据字典业务接口 * 字典业务接口
* *
* @author haoxr * @author haoxr
* @since 2022/10/12 * @since 2022/10/12
@@ -48,7 +49,7 @@ public interface DictService extends IService<Dict> {
/** /**
* 修改字典 * 修改字典
* *
* @param id * @param id 字典ID
* @param dictForm 字典表单 * @param dictForm 字典表单
* @return * @return
*/ */
@@ -63,19 +64,10 @@ public interface DictService extends IService<Dict> {
void deleteDictByIds(String idsStr); void deleteDictByIds(String idsStr);
/**
* 获取字典的数据项
*
* @param code 字典编码
* @return
*/
List<Option<Long>> listDictItemsByCode(String code);
/** /**
* 获取字典列表 * 获取字典列表
* *
* @return * @return
*/ */
List<Option<String>> getDictList(); List<DictVO> getAllDictWithData();
} }

View File

@@ -16,6 +16,7 @@ import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.system.model.query.DictPageQuery; import com.youlai.boot.system.model.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO; import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.common.model.Option; import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.vo.DictVO;
import com.youlai.boot.system.service.DictDataService; import com.youlai.boot.system.service.DictDataService;
import com.youlai.boot.system.service.DictService; import com.youlai.boot.system.service.DictService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -145,44 +146,11 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements Di
} }
/** /**
* 获取字典数据 * 获取所有字典和字典数据
*
* @param code 字典编码
*/ */
@Override @Override
public List<Option<Long>> listDictItemsByCode(String code) { public List<DictVO> getAllDictWithData() {
// 根据字典编码获取字典ID return this.baseMapper.getAllDictWithData();
Dict dict = this.getOne(new LambdaQueryWrapper<Dict>()
.eq(Dict::getDictCode, code)
.select(Dict::getId)
.last("limit 1")
);
// 如果字典不存在,则返回空集合
if (dict == null) {
return CollectionUtil.newArrayList();
}
// 获取字典项
List<DictData> dictData = dictDataService.list(
new LambdaQueryWrapper<DictData>()
.eq(DictData::getDictCode, dict.getDictCode())
);
// 转换为 Option
return dictDataConverter.toOption(dictData);
}
/**
* 获取字典列表
*/
@Override
public List<Option<String>> getDictList() {
return this.list(new LambdaQueryWrapper<Dict>()
.eq(Dict::getStatus, 1)
.select(Dict::getName, Dict::getDictCode)
).stream()
.map(dict -> new Option<>(dict.getDictCode(), dict.getName()))
.toList();
} }
} }

View File

@@ -43,4 +43,18 @@
sort ASC sort ASC
</select> </select>
<!-- 根据字典编码获取字典数据列表 -->
<select id="getDictDataList" resultType="com.youlai.boot.system.model.vo.DictVO$DictData">
SELECT
value,
label,
tag_type
FROM
sys_dict_data
WHERE
status = 1 AND dict_code = #{dictCode}
ORDER BY
sort ASC
</select>
</mapper> </mapper>

View File

@@ -25,4 +25,26 @@
ORDER BY ORDER BY
t1.create_time DESC t1.create_time DESC
</select> </select>
<resultMap id="DictWithDataMap" type="com.youlai.boot.system.model.vo.DictVO">
<result column="name" property="name"/>
<result column="dict_code" property="dictCode"/>
<collection property="dictDataList"
column="{dictCode=dict_code}"
select="com.youlai.boot.system.mapper.DictDataMapper.getDictDataList">
</collection>
</resultMap>
<!-- 获取所有字典和字典数据 -->
<select id="getAllDictWithData" resultMap="DictWithDataMap">
SELECT
t1.name,
t1.dict_code
FROM
sys_dict t1
WHERE
t1.is_deleted = 0 AND t1.status = 1
ORDER BY
t1.create_time DESC
</select>
</mapper> </mapper>