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.system.model.form.DictForm;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.model.vo.DictVO;
import com.youlai.boot.system.service.DictService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -47,8 +48,8 @@ public class DictController {
@Operation(summary = "字典列表")
@GetMapping("/list")
public Result<List<Option<String>>> getDictList() {
List<Option<String>> list = dictService.getDictList();
public Result<List<DictVO>> getAllDictWithData() {
List<DictVO> list = dictService.getAllDictWithData();
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.system.model.entity.DictData;
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 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.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.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.system.model.vo.DictVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 字典 访问层
*
@@ -24,6 +28,13 @@ public interface DictMapper extends BaseMapper<Dict> {
* @return
*/
Page<DictPageVO> getDictPage(Page<DictPageVO> page, DictPageQuery queryParams);
/**
* 获取所有字典和字典数据
*
* @return
*/
List<DictVO> getAllDictWithData();
}

View File

@@ -11,9 +11,9 @@ import lombok.EqualsAndHashCode;
* @author haoxr
* @since 2022/12/17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sys_dict")
@EqualsAndHashCode(callSuper = true)
@Data
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.TableId;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 字典数据
* 字典数据实体对象
*
* @author haoxr
* @since 2022/12/17
*/
@EqualsAndHashCode(callSuper = false)
@TableName("sys_dict_data")
@Data
public class DictData extends BaseEntity {

View File

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

View File

@@ -7,7 +7,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description ="字典数据项分页查询对象")
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.query.DictPageQuery;
import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.system.model.vo.DictVO;
import java.util.List;
/**
* 数据字典业务接口
* 字典业务接口
*
* @author haoxr
* @since 2022/10/12
@@ -48,7 +49,7 @@ public interface DictService extends IService<Dict> {
/**
* 修改字典
*
* @param id
* @param id 字典ID
* @param dictForm 字典表单
* @return
*/
@@ -63,19 +64,10 @@ public interface DictService extends IService<Dict> {
void deleteDictByIds(String idsStr);
/**
* 获取字典的数据项
*
* @param code 字典编码
* @return
*/
List<Option<Long>> listDictItemsByCode(String code);
/**
* 获取字典列表
*
* @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.vo.DictPageVO;
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.DictService;
import lombok.RequiredArgsConstructor;
@@ -145,44 +146,11 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements Di
}
/**
* 获取字典数据
*
* @param code 字典编码
* 获取所有字典和字典数据
*/
@Override
public List<Option<Long>> listDictItemsByCode(String code) {
// 根据字典编码获取字典ID
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();
public List<DictVO> getAllDictWithData() {
return this.baseMapper.getAllDictWithData();
}
}

View File

@@ -35,12 +35,26 @@
value,
label
FROM
sys_dict_data
sys_dict_data
<where>
dict_code = #{dictCode}
</where>
ORDER BY
sort ASC
sort ASC
</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>

View File

@@ -25,4 +25,26 @@
ORDER BY
t1.create_time DESC
</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>