This commit is contained in:
2023-05-31 17:42:38 +08:00
parent 82c0695013
commit 71d625c837
10 changed files with 483 additions and 0 deletions

View File

@ -0,0 +1,46 @@
package com.qiaoba.api.system.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.qiaoba.common.base.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 字典数据 sys_dict_data
*
* @author ailanyin
* @version 1.0
* @since 2022-09-22 04:20:28
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SysDictData extends BaseEntity {
private static final long serialVersionUID = 1L;
@Excel(name = "字典编码" , width = 20)
private Long dictCode;
@Excel(name = "字典排序" , width = 20)
private Long dictSort;
@Excel(name = "字典标签" , width = 20)
private String dictLabel;
@Excel(name = "字典键值" , width = 20)
private String dictValue;
@Excel(name = "字典类型" , width = 20)
private String dictType;
private String cssClass;
private String listClass;
@Excel(name = "是否默认" , width = 20, replace = {"是_Y" , "否_N"})
private String isDefault;
@Excel(name = "状态" , width = 20, replace = {"正常_0" , "停用_1"})
private String status;
}

View File

@ -0,0 +1,37 @@
package com.qiaoba.api.system.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qiaoba.common.base.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 字典类型 sys_dict_type
*
* @author ailanyin
* @version 1.0
* @since 2022-09-22 04:20:28
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sys_dict_type")
public class SysDictType extends BaseEntity {
private static final long serialVersionUID = 1L;
@Excel(name = "字典主键", width = 20)
@TableId
private String dictId;
@Excel(name = "字典名称", width = 20)
private String dictName;
@Excel(name = "字典类型", width = 20)
private String dictType;
@Excel(name = "状态", width = 20, replace = {"正常_1", "停用_0"})
private String status;
}

View File

@ -0,0 +1,27 @@
package com.qiaoba.api.system.entity.param;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* 字典类型 查询参数
*
* @author ailanyin
* @version 1.0
* @since 2023/5/31 10:52
*/
@Getter
@Setter
public class SysDictTypeParam implements Serializable {
private static final long serialVersionUID = 1L;
private String dictName;
private String dictType;
private String status;
}

View File

@ -0,0 +1,23 @@
package com.qiaoba.api.system.service;
import com.qiaoba.api.system.entity.SysDictData;
import java.util.List;
/**
* 字典 对外暴露接口
*
* @author ailanyin
* @version 1.0
* @since 2023/5/31 9:44
*/
public interface SysDictApiService {
/**
* 根据字典类型查询字典数据
*
* @param dictType 字典类型
* @return 字典数据集合信息
*/
List<SysDictData> selectDictDataByType(String dictType);
}

View File

@ -0,0 +1,67 @@
package com.qiaoba.module.system.controller;
import com.qiaoba.api.system.entity.SysDictType;
import com.qiaoba.api.system.entity.param.SysDictTypeParam;
import com.qiaoba.common.base.result.AjaxResult;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.common.poi.utils.ExcelUtil;
import com.qiaoba.module.system.service.SysDictTypeService;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 字典类型管理 Web层
*
* @author ailanyin
* @version 1.0
* @since 2022-09-22 04:20:28
*/
@RestController
@RequestMapping("/system/dict/type")
@RequiredArgsConstructor
public class SysDictTypeController {
private final SysDictTypeService sysDictTypeService;
@PreAuthorize("hasAuthority('system:dict:list')")
@GetMapping("/list")
public TableDataInfo list(SysDictTypeParam param, PageQuery pageQuery) {
return sysDictTypeService.selectPageList(param, pageQuery);
}
@PreAuthorize("hasAuthority('system:dict:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, SysDictTypeParam param) throws Exception {
List<SysDictType> list = sysDictTypeService.selectList(param);
ExcelUtil.exportExcel(list, SysDictType.class, "字典类型" , response);
}
@PreAuthorize("hasAuthority('system:dict:query')")
@GetMapping(value = "/{dictId}")
public AjaxResult getInfo(@PathVariable String dictId) {
return AjaxResult.success(sysDictTypeService.selectById(dictId));
}
@PreAuthorize("hasAuthority('system:dict:add')")
@PostMapping
public AjaxResult add(@RequestBody SysDictType sysDictType) {
return AjaxResult.toAjax(sysDictTypeService.insert(sysDictType));
}
@PreAuthorize("hasAuthority('system:dict:edit')")
@PutMapping
public AjaxResult edit(@RequestBody SysDictType sysDictType) {
return AjaxResult.toAjax(sysDictTypeService.update(sysDictType));
}
@PreAuthorize("hasAuthority('system:dict:remove')")
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable List<String> ids) {
return AjaxResult.toAjax(sysDictTypeService.deleteByIds(ids));
}
}

View File

@ -0,0 +1,33 @@
package com.qiaoba.module.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qiaoba.api.system.entity.SysDictType;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 字典类型管理 数据层
*
* @author ailanyin
* @version 1.0
* @since 2022-09-22 04:20:28
*/
public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
/**
* 校验字典类型是否唯一
*
* @param dict 字典类型
* @return dictType
*/
String checkDictTypeUnique(SysDictType dict);
/**
* 校验是否允许删除
*
* @param ids ids
* @return typeName
*/
String checkAllowDelete(@Param("list") List<String> ids);
}

View File

@ -0,0 +1,66 @@
package com.qiaoba.module.system.service;
import com.qiaoba.api.system.entity.SysDictData;
import com.qiaoba.api.system.service.SysDictApiService;
import java.util.List;
/**
* 字典类型数据管理 服务层
*
* @author ailanyin
* @version 1.0
* @since 2022-09-22 04:20:28
*/
public interface SysDictDataService extends SysDictApiService {
/**
* 根据条件分页查询字典数据
*
* @param dictData 字典数据信息
* @return 字典数据集合信息
*/
List<SysDictData> selectDictDataList(SysDictData dictData);
/**
* 根据字典类型和字典键值查询字典数据信息
*
* @param dictType 字典类型
* @param dictValue 字典键值
* @return 字典标签
*/
String selectDictLabel(String dictType, String dictValue);
/**
* 根据字典数据ID查询信息
*
* @param dictCode 字典数据ID
* @return 字典数据
*/
SysDictData selectDictDataById(Long dictCode);
/**
* 批量删除字典数据信息
*
* @param dictCodes 需要删除的字典数据ID
*/
void deleteDictDataByIds(Long[] dictCodes);
/**
* 新增保存字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
int insertDictData(SysDictData dictData);
/**
* 修改保存字典数据信息
*
* @param dictData 字典数据信息
* @return 结果
*/
int updateDictData(SysDictData dictData);
}

View File

@ -0,0 +1,68 @@
package com.qiaoba.module.system.service;
import com.qiaoba.api.system.entity.SysDictType;
import com.qiaoba.api.system.entity.param.SysDictTypeParam;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import java.util.List;
/**
* 字典类型管理 服务层
*
* @author ailanyin
* @version 1.0
* @since 2022-09-22 04:20:28
*/
public interface SysDictTypeService {
/**
* 新增
*
* @param sysDictType sysDictType
* @return 结果
*/
int insert(SysDictType sysDictType);
/**
* 修改
*
* @param sysDictType sysDictType
* @return 结果
*/
int update(SysDictType sysDictType);
/**
* 批量删除
*
* @param ids ids
* @return 结果
*/
int deleteByIds(List<String> ids);
/**
* 通过ID查询
*
* @param dictId dictId
* @return SysDictType
*/
SysDictType selectById(String dictId);
/**
* 分页查询
*
* @param param param
* @param pageQuery pageQuery
* @return list
*/
TableDataInfo selectPageList(SysDictTypeParam param, PageQuery pageQuery);
/**
* 参数查询列表
*
* @param param param
* @return list
*/
List<SysDictType> selectList(SysDictTypeParam param);
}

View File

@ -0,0 +1,91 @@
package com.qiaoba.module.system.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiaoba.api.system.entity.SysDictType;
import com.qiaoba.api.system.entity.param.SysDictTypeParam;
import com.qiaoba.auth.utils.SecurityUtil;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.module.system.mapper.SysDictTypeMapper;
import com.qiaoba.module.system.service.SysDictTypeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 字典类型管理 服务层实现
*
* @author ailanyin
* @version 1.0
* @since 2023/5/31 10:31
*/
@Service
@RequiredArgsConstructor
public class SysDictTypeServiceImpl implements SysDictTypeService {
private final SysDictTypeMapper sysDictTypeMapper;
@Override
public int insert(SysDictType sysDictType) {
checkAllowInsertOrUpdate(sysDictType);
sysDictType.setCreateTime(new Date());
sysDictType.setCreateUser(SecurityUtil.getLoginUsername());
return sysDictTypeMapper.insert(sysDictType);
}
@Override
public int update(SysDictType sysDictType) {
checkAllowInsertOrUpdate(sysDictType);
sysDictType.setUpdateTime(new Date());
sysDictType.setUpdateUser(SecurityUtil.getLoginUsername());
return sysDictTypeMapper.updateById(sysDictType);
}
@Override
public int deleteByIds(List<String> ids) {
checkAllowDelete(ids);
return sysDictTypeMapper.deleteBatchIds(ids);
}
@Override
public SysDictType selectById(String dictId) {
return sysDictTypeMapper.selectById(dictId);
}
@Override
public TableDataInfo selectPageList(SysDictTypeParam param, PageQuery pageQuery) {
return TableDataInfo.build(sysDictTypeMapper.selectPage(pageQuery.build(), param2Wrapper(param)));
}
@Override
public List<SysDictType> selectList(SysDictTypeParam param) {
return sysDictTypeMapper.selectList(param2Wrapper(param));
}
private void checkAllowInsertOrUpdate(SysDictType sysDictType) {
String dictType = sysDictTypeMapper.checkDictTypeUnique(sysDictType);
if (StrUtil.isNotBlank(dictType)) {
throw new ServiceException(StrUtil.format("类型[{}]已存在, 不允许新增或修改", dictType));
}
}
private void checkAllowDelete(List<String> ids) {
String typeName = sysDictTypeMapper.checkAllowDelete(ids);
if (StrUtil.isNotBlank(typeName)) {
throw new ServiceException(StrUtil.format("字典[{}]已绑定数据, 请解绑后删除", typeName));
}
}
private QueryWrapper<SysDictType> param2Wrapper(SysDictTypeParam param) {
QueryWrapper<SysDictType> wrapper = new QueryWrapper<>();
wrapper.lambda()
.like(StrUtil.isNotBlank(param.getDictName()), SysDictType::getDictName, param.getDictName())
.like(StrUtil.isNotBlank(param.getDictType()), SysDictType::getDictType, param.getDictType())
.eq(StrUtil.isNotBlank(param.getStatus()), SysDictType::getStatus, param.getStatus());
return wrapper;
}
}

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qiaoba.module.system.mapper.SysDictTypeMapper">
<select id="checkDictTypeUnique" resultType="string">
select dict_type from sys_dict_type
where dict_type = #{dictType}
<if test="dictId != null and dictId != ''">
and dict_id != #{dictId}
</if>
limit 1
</select>
<select id="checkAllowDelete" resultType="string">
SELECT t1.dict_name FROM sys_dict_type t1
left join sys_dict_data t2 on t1.dict_type = t2.dict_type
where t1.dict_id in
<foreach item="id" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
limit 1
</select>
</mapper>