新增字典管理功能

This commit is contained in:
b2baccline
2020-03-27 20:21:11 +08:00
parent f54bd371ac
commit 65c479e584
18 changed files with 747 additions and 3 deletions

1
.gitignore vendored
View File

@@ -33,3 +33,4 @@ build/
/**/application-hccake.yml
/**/application-preview.yml
/aty/
/ballcat-job/logs/ballcat-job/

View File

@@ -1,4 +1,4 @@
package com.hccake.ballcat.admin.modules.sys.controller;
package com.your.packages.admin.modules;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;

View File

@@ -0,0 +1,33 @@
package com.hccake.ballcat.admin.modules.sys.constant.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author lengleng
* @date 2019-05-16
* <p>
* 字典类型
*/
@Getter
@AllArgsConstructor
public enum DictTypeEnum {
/**
* 字典类型-系统内置(不可修改)
*/
SYSTEM("1", "系统内置"),
/**
* 字典类型-业务类型
*/
BIZ("0", "业务类");
/**
* 类型
*/
private String type;
/**
* 描述
*/
private String description;
}

View File

@@ -0,0 +1,165 @@
package com.hccake.ballcat.admin.modules.sys.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hccake.ballcat.admin.modules.sys.manager.SysDictManager;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDict;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDictItem;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysDictQO;
import com.hccake.ballcat.commom.log.operation.annotation.OperationLogging;
import com.hccake.ballcat.common.core.result.BaseResultMsg;
import com.hccake.ballcat.common.core.result.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
* 字典表
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/sys/dict")
@Api(value = "/sys/dict", tags = "字典表管理")
public class SysDictController {
private final SysDictManager sysDictManager;
/**
* 通过字典标识查找对应字典项
*
* @param dictCode 字典标识
* @return 同类型字典
*/
@GetMapping("/select/{dictCode}")
public R getDictByType(@PathVariable String dictCode) {
return R.ok(sysDictManager.querySelectDataByDictCode(dictCode));
}
/**
* 分页查询
*
* @param page 分页对象
* @param sysDictQO 字典表
* @return R
*/
@ApiOperation(value = "分页查询", notes = "分页查询")
@GetMapping("/page")
@PreAuthorize("@per.hasPermission('sys:dict:read')")
public R<IPage<SysDict>> getSysDictPage(
Page<SysDict> page, SysDictQO sysDictQO) {
return R.ok(sysDictManager.dictPage(page, sysDictQO));
}
/**
* 新增字典表
*
* @param sysDict 字典表
* @return R
*/
@ApiOperation(value = "新增字典表", notes = "新增字典表")
@OperationLogging("新增字典表")
@PostMapping
@PreAuthorize("@per.hasPermission('sys:dict:add')")
public R save(@RequestBody SysDict sysDict) {
return sysDictManager.dictSave(sysDict) ?
R.ok() : R.failed(BaseResultMsg.UPDATE_DATABASE_ERROR, "新增字典表失败");
}
/**
* 修改字典表
*
* @param sysDict 字典表
* @return R
*/
@ApiOperation(value = "修改字典表", notes = "修改字典表")
@OperationLogging("修改字典表")
@PutMapping
@PreAuthorize("@per.hasPermission('sys:dict:edit')")
public R updateById(@RequestBody SysDict sysDict) {
return sysDictManager.updateDictById(sysDict) ?
R.ok() : R.failed(BaseResultMsg.UPDATE_DATABASE_ERROR, "修改字典表失败");
}
/**
* 通过id删除字典表
*
* @param id id
* @return R
*/
@ApiOperation(value = "通过id删除字典表", notes = "通过id删除字典表")
@OperationLogging("通过id删除字典表")
@DeleteMapping("/{id}")
@PreAuthorize("@per.hasPermission('sys:dict:del')")
public R removeById(@PathVariable Integer id) {
return sysDictManager.removeDictById(id) ?
R.ok() : R.failed(BaseResultMsg.UPDATE_DATABASE_ERROR, "通过id删除字典表失败");
}
/**
* 分页查询
*
* @param page 分页对象
* @param dictCode 字典标识
* @return R
*/
@ApiOperation(value = "分页查询", notes = "分页查询")
@GetMapping("/item/page")
@PreAuthorize("@per.hasPermission('sys:dict:read')")
public R<IPage<SysDictItem>> getSysDictItemPage(
Page<SysDictItem> page, @RequestParam("dictCode")String dictCode) {
return R.ok(sysDictManager.dictItemPage(page, dictCode));
}
/**
* 新增字典项
*
* @param sysDictItem 字典项
* @return R
*/
@ApiOperation(value = "新增字典项", notes = "新增字典项")
@OperationLogging("新增字典项")
@PostMapping("item")
@PreAuthorize("@per.hasPermission('sys:dict:add')")
public R saveItem(@RequestBody SysDictItem sysDictItem) {
return sysDictManager.saveDictItem(sysDictItem) ?
R.ok() : R.failed(BaseResultMsg.UPDATE_DATABASE_ERROR, "新增字典项失败");
}
/**
* 修改字典项
*
* @param sysDictItem 字典项
* @return R
*/
@ApiOperation(value = "修改字典项", notes = "修改字典项")
@OperationLogging("修改字典项")
@PutMapping("item")
@PreAuthorize("@per.hasPermission('sys:dict:edit')")
public R updateItemById(@RequestBody SysDictItem sysDictItem) {
return sysDictManager.updateDictItemById(sysDictItem) ?
R.ok() : R.failed(BaseResultMsg.UPDATE_DATABASE_ERROR, "修改字典项失败");
}
/**
* 通过id删除字典项
*
* @param id id
* @return R
*/
@ApiOperation(value = "通过id删除字典项", notes = "通过id删除字典项")
@OperationLogging("通过id删除字典项")
@DeleteMapping("/item/{id}")
@PreAuthorize("@per.hasPermission('sys:dict:del')")
public R removeItemById(@PathVariable Integer id) {
return sysDictManager.removeDictItemById(id) ?
R.ok() : R.failed(BaseResultMsg.UPDATE_DATABASE_ERROR, "通过id删除字典项失败");
}
}

View File

@@ -0,0 +1,123 @@
package com.hccake.ballcat.admin.modules.sys.manager;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDict;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDictItem;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysDictQO;
import com.hccake.ballcat.admin.modules.sys.service.SysDictItemService;
import com.hccake.ballcat.admin.modules.sys.service.SysDictService;
import com.hccake.ballcat.common.core.vo.SelectData;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author Hccake
* @version 1.0
* @date 2020/3/27 19:50
*/
@Service
@RequiredArgsConstructor
public class SysDictManager {
private final SysDictService sysDictService;
private final SysDictItemService sysDictItemService;
/**
* 字典Select数据
* @param dictCode 字典标识
* @return 字典项集合组成的SelectData
*/
public List<SelectData> querySelectDataByDictCode(String dictCode) {
return sysDictItemService.querySelectDataByDictCode(dictCode);
}
/**
* 字典表分页
* @param page 分页参数
* @param sysDictQO 查询参数
* @return 字典表分页数据
*/
public IPage<SysDict> dictPage(Page<SysDict> page, SysDictQO sysDictQO) {
return sysDictService.page(page, sysDictQO);
}
/**
* 保存字典
* @param sysDict 字典对象
* @return 执行是否成功
*/
public boolean dictSave(SysDict sysDict) {
return sysDictService.save(sysDict);
}
/**
* 更新字典
* @param sysDict 字典对象
* @return 执行是否成功
*/
public boolean updateDictById(SysDict sysDict) {
return sysDictService.updateById(sysDict);
}
/**
* 删除字典
* @param id 字典id
* @return 执行是否成功
*/
@Transactional(rollbackFor = Exception.class)
public boolean removeDictById(Integer id) {
SysDict oldData = sysDictService.getById(id);
if(sysDictService.removeById(id)){
// 级联删除对应的字典项
sysDictItemService.remove(Wrappers.<SysDictItem>lambdaUpdate()
.eq(SysDictItem::getDictCode, oldData.getCode())
);
return true;
}
return false;
}
/**
* 字典项分页
* @param page 分页属性
* @param dictCode 字典标识
* @return 字典项分页数据
*/
public IPage<SysDictItem> dictItemPage(Page<SysDictItem> page, String dictCode) {
return sysDictItemService.page(page, dictCode);
}
/**
* 新增字典项
* @param sysDictItem 字典项
* @return 执行是否成功
*/
public boolean saveDictItem(SysDictItem sysDictItem) {
return sysDictItemService.save(sysDictItem);
}
/**
* 更新字典项
* @param sysDictItem 字典项
* @return 执行是否成功
*/
public boolean updateDictItemById(SysDictItem sysDictItem) {
return sysDictItemService.updateById(sysDictItem);
}
/**
* 删除字典项
* @param id 字典项
* @return 执行是否成功
*/
public boolean removeDictItemById(Integer id) {
return sysDictItemService.removeById(id);
}
}

View File

@@ -0,0 +1,25 @@
package com.hccake.ballcat.admin.modules.sys.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDictItem;
import com.hccake.ballcat.common.core.vo.SelectData;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 字典项
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
public interface SysDictItemMapper extends BaseMapper<SysDictItem> {
/**
* 根据字典标识查询对应字典选择项
*
* @param dictCode 字典标识
* @return 对应字典项的SelectData
*/
List<SelectData> querySelectDataByDictCode(@Param("dictCode") String dictCode);
}

View File

@@ -0,0 +1,14 @@
package com.hccake.ballcat.admin.modules.sys.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDict;
/**
* 字典表
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
public interface SysDictMapper extends BaseMapper<SysDict> {
}

View File

@@ -0,0 +1,71 @@
package com.hccake.ballcat.admin.modules.sys.model.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 字典表
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
@Data
@TableName("sys_dict")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "字典表")
public class SysDict extends Model<SysDict> {
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId
@ApiModelProperty(value = "编号")
private Integer id;
/**
* 标识
*/
@ApiModelProperty(value = "标识")
private String code;
/**
* 名称
*/
@ApiModelProperty(value = "名称")
private String name;
/**
* 备注
*/
@ApiModelProperty(value = "备注")
private String remarks;
/**
* 字典类型
*/
@ApiModelProperty(value = "1系统 2业务")
private Integer type;
/**
* 逻辑删除标识
*/
@ApiModelProperty(value = "逻辑删除标识")
private Integer delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,76 @@
package com.hccake.ballcat.admin.modules.sys.model.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 字典项
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
@Data
@TableName("sys_dict_item")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "字典项")
public class SysDictItem extends Model<SysDictItem> {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId
@ApiModelProperty(value = "ID")
private Integer id;
/**
* 字典标识
*/
@ApiModelProperty(value = "字典标识")
private String dictCode;
/**
* 数据值
*/
@ApiModelProperty(value = "数据值")
private String value;
/**
* 标签
*/
@ApiModelProperty(value = "标签")
private String label;
/**
* 排序(升序)
*/
@ApiModelProperty(value = "排序(升序)")
private Integer sort;
/**
* 备注
*/
@ApiModelProperty(value = "备注")
private String remarks;
/**
* 逻辑删除标志
*/
@ApiModelProperty(value = "逻辑删除标志")
private Integer delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.UPDATE)
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,31 @@
package com.hccake.ballcat.admin.modules.sys.model.qo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 字典项 查询对象
*
* @author hccake
* @date 2020-03-26 18:32:06
*/
@Data
@ApiModel(value = "字典项查询对象")
public class DictItemQO {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ApiModelProperty(value="ID")
private Integer id;
}

View File

@@ -0,0 +1,24 @@
package com.hccake.ballcat.admin.modules.sys.model.qo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 字典表 查询对象
*
* @author hccake
* @date 2020-03-26 18:32:06
*/
@Data
@ApiModel(value = "字典表查询对象")
public class DictQO {
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@ApiModelProperty(value = "编号")
private Integer id;
}

View File

@@ -0,0 +1,26 @@
package com.hccake.ballcat.admin.modules.sys.model.qo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 字典表 查询对象
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
@Data
@ApiModel(value = "字典表查询对象")
public class SysDictQO {
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@ApiModelProperty(value="编号")
private Integer id;
}

View File

@@ -0,0 +1,32 @@
package com.hccake.ballcat.admin.modules.sys.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDictItem;
import com.hccake.ballcat.common.core.vo.SelectData;
import java.util.List;
/**
* 字典项
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
public interface SysDictItemService extends IService<SysDictItem> {
/**
* 根据QueryObeject查询分页数据
* @param page 分页参数
* @param dictCode 查询参数对象
* @return 分页数据
*/
IPage<SysDictItem> page(IPage<SysDictItem> page, String dictCode);
/**
* 根据字典标识查询对应字典选择项
* @param dictCode 字典标识
* @return 对应字典项的SelectData
*/
List<SelectData> querySelectDataByDictCode(String dictCode);
}

View File

@@ -0,0 +1,24 @@
package com.hccake.ballcat.admin.modules.sys.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDict;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysDictQO;
/**
* 字典表
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
public interface SysDictService extends IService<SysDict> {
/**
* 根据QueryObeject查询分页数据
* @param page 分页参数
* @param qo 查询参数对象
* @return 分页数据
*/
IPage<SysDict> page(IPage<SysDict> page, SysDictQO qo);
}

View File

@@ -0,0 +1,48 @@
package com.hccake.ballcat.admin.modules.sys.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hccake.ballcat.admin.modules.sys.mapper.SysDictItemMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDictItem;
import com.hccake.ballcat.admin.modules.sys.service.SysDictItemService;
import com.hccake.ballcat.common.core.vo.SelectData;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 字典项
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
@Service
public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDictItem> implements SysDictItemService {
/**
* 根据QueryObeject查询分页数据
* @param page 分页参数
* @param dictCode 查询参数对象
* @return 分页数据
*/
@Override
public IPage<SysDictItem> page(IPage<SysDictItem> page, String dictCode) {
LambdaQueryWrapper<SysDictItem> wrapper = Wrappers.<SysDictItem>lambdaQuery()
.eq(SysDictItem::getDictCode, dictCode);
return baseMapper.selectPage(page, wrapper);
}
/**
* 根据字典标识查询对应字典选择项
*
* @param dictCode 字典标识
* @return 对应字典项的SelectData
*/
@Override
public List<SelectData> querySelectDataByDictCode(String dictCode) {
return baseMapper.querySelectDataByDictCode(dictCode);
}
}

View File

@@ -0,0 +1,36 @@
package com.hccake.ballcat.admin.modules.sys.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysDict;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysDictQO;
import com.hccake.ballcat.admin.modules.sys.mapper.SysDictMapper;
import com.hccake.ballcat.admin.modules.sys.service.SysDictService;
import org.springframework.stereotype.Service;
/**
* 字典表
*
* @author hccake
* @date 2020-03-26 18:40:20
*/
@Service
public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> implements SysDictService {
/**
* 根据QueryObeject查询分页数据
* @param page 分页参数
* @param qo 查询参数对象
* @return 分页数据
*/
@Override
public IPage<SysDict> page(IPage<SysDict> page, SysDictQO qo) {
LambdaQueryWrapper<SysDict> wrapper = Wrappers.<SysDict>lambdaQuery()
.eq(ObjectUtil.isNotNull(qo.getId()), SysDict::getId, qo.getId());
return baseMapper.selectPage(page, wrapper);
}
}

View File

@@ -6,7 +6,6 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
@@ -113,7 +112,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
roleIds.forEach(roleId -> {
List<String> permissionList = sysPermissionService.findPermissionVOByRoleId(roleId)
.stream()
.filter(sysPermission -> StringUtils.isNotEmpty(sysPermission.getCode()))
.filter(sysPermission -> StrUtil.isNotEmpty(sysPermission.getCode()))
.map(PermissionVO::getCode)
.collect(Collectors.toList());
permissions.addAll(permissionList);

View File

@@ -0,0 +1,16 @@
<?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.hccake.ballcat.admin.modules.sys.mapper.SysDictItemMapper">
<select id="querySelectDataByDictCode" resultType="com.hccake.ballcat.common.core.vo.SelectData">
select
label as name, value
from
sys_dict_item
where
del_flag = 0
and dict_code = #{dictCode}
</select>
</mapper>