add
This commit is contained in:
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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>
|
Reference in New Issue
Block a user