Parcourir la source

Merge remote-tracking branch 'origin/master'

李进 il y a 2 ans
Parent
commit
33061eada2
23 fichiers modifiés avec 959 ajouts et 46 suppressions
  1. 52 0
      authorize-api-service/src/main/java/com/xy/entity/SysDict.java
  2. 64 0
      authorize-api-service/src/main/java/com/xy/entity/SysDictItem.java
  3. 40 0
      authorize-api-service/src/main/java/com/xy/mapper/SysDeptRelationMapper.xml
  4. 16 0
      authorize-api-service/src/main/java/com/xy/mapper/SysDictItemMapper.java
  5. 16 0
      authorize-api-service/src/main/java/com/xy/mapper/SysDictMapper.java
  6. 109 0
      authorize-api-service/src/main/java/com/xy/service/SysApiServiceImpl.java
  7. 32 0
      authorize-api-service/src/main/java/com/xy/service/SysDictItemService.java
  8. 37 0
      authorize-api-service/src/main/java/com/xy/service/SysDictService.java
  9. 4 1
      authorize-api-service/src/main/java/com/xy/service/SysRoleMenuService.java
  10. 2 2
      authorize-api-service/src/main/java/com/xy/service/impl/CaptchaServiceImpl.java
  11. 0 42
      authorize-api-service/src/main/java/com/xy/service/impl/SysDeptRoleServiceImpl.java
  12. 6 0
      authorize-api-service/src/main/java/com/xy/service/impl/SysDeptServiceImpl.java
  13. 64 0
      authorize-api-service/src/main/java/com/xy/service/impl/SysDictItemServiceImpl.java
  14. 71 0
      authorize-api-service/src/main/java/com/xy/service/impl/SysDictServiceImpl.java
  15. 33 1
      authorize-api-service/src/main/java/com/xy/service/impl/SysRoleServiceImpl.java
  16. 56 0
      authorize-api/src/main/java/com/xy/dto/SysDict/SysDictDto.java
  17. 66 0
      authorize-api/src/main/java/com/xy/dto/SysDict/SysDictItemDto.java
  18. 44 0
      authorize-api/src/main/java/com/xy/dto/SysDict/SysDictItemPageDto.java
  19. 30 0
      authorize-api/src/main/java/com/xy/dto/SysDict/SysDictPageDto.java
  20. 91 0
      authorize-api/src/main/java/com/xy/service/SysDicApiService.java
  21. 5 0
      authorize-api/src/main/java/com/xy/service/SysRoleService.java
  22. 66 0
      authorize-api/src/main/java/com/xy/vo/SysDictItemVo.java
  23. 55 0
      authorize-api/src/main/java/com/xy/vo/SysDictVo.java

+ 52 - 0
authorize-api-service/src/main/java/com/xy/entity/SysDict.java

@@ -0,0 +1,52 @@
+package com.xy.entity;
+
+import com.xy.base.BaseEntity2;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 字典表
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "SysDict对象", description = "字典表")
+public class SysDict extends BaseEntity2<SysDict> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("标识")
+    private String dictKey;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("是否是系统内置")
+    private Boolean systemFlag;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("创建人")
+    private Long createUser;
+
+    @ApiModelProperty("更新人")
+    private Long updateUser;
+
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+
+}

+ 64 - 0
authorize-api-service/src/main/java/com/xy/entity/SysDictItem.java

@@ -0,0 +1,64 @@
+package com.xy.entity;
+
+import com.xy.base.BaseEntity2;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 字典项
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "SysDictItem对象", description = "字典项")
+public class SysDictItem extends BaseEntity2<SysDictItem> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("字典ID")
+    private Long dictId;
+
+    @ApiModelProperty("字典标识")
+    private String dictKey;
+
+    @ApiModelProperty("值")
+    private String value;
+
+    @ApiModelProperty("标签")
+    private String label;
+
+    @ApiModelProperty("字典类型")
+    private String type;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("排序(升序)")
+    private Integer sortOrder;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("创建人")
+    private Long createUser;
+
+    @ApiModelProperty("修改人")
+    private Long updateUser;
+
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+
+}

+ 40 - 0
authorize-api-service/src/main/java/com/xy/mapper/SysDeptRelationMapper.xml

@@ -0,0 +1,40 @@
+<?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.xy.mapper.SysDeptRelationMapper">
+    <!-- 删除部门节点关系	-->
+    <delete id="deleteDeptRelations">
+        DELETE
+        FROM sys_dept_relation
+        WHERE descendant IN (SELECT temp.descendant
+        FROM (SELECT descendant FROM sys_dept_relation WHERE ancestor = #{descendant}) temp)
+        AND ancestor IN (SELECT temp.ancestor
+        FROM (SELECT ancestor
+        FROM sys_dept_relation
+        WHERE descendant = #{descendant}
+        AND ancestor != descendant) temp)
+    </delete>
+
+    <!--删除部门节点关系,同时删除所有关联此部门子节点的部门关系-->
+    <delete id="deleteDeptRelationsById">
+        DELETE
+        FROM sys_dept_relation
+        WHERE descendant IN (
+        SELECT temp.descendant
+        FROM (
+        SELECT descendant
+        FROM sys_dept_relation
+        WHERE ancestor = #{id}
+        ) temp
+        )
+    </delete>
+
+    <!-- 新增部门节点关系	-->
+    <insert id="insertDeptRelations">
+        INSERT INTO sys_dept_relation (ancestor, descendant)
+        SELECT a.ancestor, b.descendant
+        FROM sys_dept_relation a
+        CROSS JOIN sys_dept_relation b
+        WHERE a.descendant = #{ancestor}
+        AND b.ancestor = #{descendant}
+    </insert>
+</mapper>

+ 16 - 0
authorize-api-service/src/main/java/com/xy/mapper/SysDictItemMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.entity.SysDictItem;
+
+/**
+ * <p>
+ * 字典项 Mapper 接口
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+public interface SysDictItemMapper extends BaseMapper<SysDictItem> {
+
+}

+ 16 - 0
authorize-api-service/src/main/java/com/xy/mapper/SysDictMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.entity.SysDict;
+
+/**
+ * <p>
+ * 字典表 Mapper 接口
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+public interface SysDictMapper extends BaseMapper<SysDict> {
+
+}

+ 109 - 0
authorize-api-service/src/main/java/com/xy/service/SysApiServiceImpl.java

@@ -0,0 +1,109 @@
+package com.xy.service;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.xy.dto.SysDict.SysDictDto;
+import com.xy.dto.SysDict.SysDictItemDto;
+import com.xy.dto.SysDict.SysDictItemPageDto;
+import com.xy.dto.SysDict.SysDictPageDto;
+import com.xy.entity.SysDict;
+import com.xy.entity.SysDictItem;
+import com.xy.utils.Beans;
+import com.xy.utils.PageBean;
+import com.xy.utils.R;
+import com.xy.vo.SysDictItemVo;
+import com.xy.vo.SysDictVo;
+import io.swagger.annotations.Api;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import static com.xy.utils.Beans.copy;
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+@Service
+@RequiredArgsConstructor
+@Api(tags = "字典表管理API")
+public class SysApiServiceImpl implements SysDicApiService {
+
+
+    private final SysDictItemService sysDictItemService;
+
+    private final SysDictService sysDictService;
+
+    @Override
+    public R<SysDictVo> getById(Long id) {
+        return R.ok(Beans.copy(SysDictVo.class, sysDictItemService.getById(id)));
+    }
+
+
+    @Override
+    public R<PageBean<SysDictVo>> getDictPage(SysDictPageDto dto) {
+        PageBean pageBean = dto.getPage();
+        IPage page = sysDictService.page(toIPage(pageBean), Wrappers.<com.xy.entity.SysDict>lambdaQuery()
+                .like(StrUtil.isNotBlank(dto.getDictKey()), com.xy.entity.SysDict::getDictKey, dto.getDictKey()));
+        return R.ok(toPageBean(SysDictVo.class, page));
+    }
+
+    @Override
+    public R<List<SysDictItemVo>> getDictByKey(String key) {
+        List<SysDictItem> sysDictItemList = sysDictItemService.list(Wrappers.<SysDictItem>lambdaQuery().eq(SysDictItem::getDictKey, key));
+        return R.ok(copy(SysDictItemVo.class, sysDictItemList));
+    }
+
+    @Override
+    public R<Boolean> add(SysDictDto sysDictDto) {
+        return R.ok(sysDictService.save(copy(SysDict.class, sysDictDto)));
+    }
+
+    @Override
+    public R<Boolean> removeById(Long id) {
+        sysDictService.removeDict(id);
+        return R.ok();
+    }
+
+    @Override
+    public R<Boolean> updateSysDictById(SysDictDto sysDictDto) {
+        sysDictService.updateDict(copy(com.xy.entity.SysDict.class, sysDictDto));
+        return R.ok();
+    }
+
+    @Override
+    public R<PageBean<SysDictItemVo>> getSysDictItemPage(SysDictItemPageDto pageDto) {
+        PageBean pageBean = pageDto.getPage();
+        SysDictItem sysDictItem = copy(SysDictItem.class, pageDto);
+        IPage page = sysDictItemService.page(toIPage(pageBean), Wrappers.query(sysDictItem));
+        return R.ok(toPageBean(SysDictItemVo.class, page));
+    }
+
+    @Override
+    public R<SysDictItemVo> getDictItemById(Long id) {
+        return R.ok(copy(SysDictItemVo.class, sysDictItemService.getById(id)));
+    }
+
+    @Override
+    public R<Boolean> addItem(SysDictItemDto sysDictItemDto) {
+        return R.ok(sysDictItemService.save(copy(SysDictItem.class, sysDictItemDto)));
+    }
+
+    @Override
+    public R<Boolean> updateSysDictItemById(SysDictItemDto sysDictItemDto) {
+        sysDictItemService.updateDictItem(copy(SysDictItem.class, sysDictItemDto));
+        return R.ok();
+    }
+
+    @Override
+    public R<Boolean> removeDictItemById(Long id) {
+        sysDictItemService.removeDictItem(id);
+        return R.ok();
+    }
+
+    @Override
+    public R<Boolean> clearDictCache() {
+        sysDictService.clearDictCache();
+        return R.ok();
+    }
+}

+ 32 - 0
authorize-api-service/src/main/java/com/xy/service/SysDictItemService.java

@@ -0,0 +1,32 @@
+package com.xy.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xy.entity.SysDictItem;
+
+/**
+ * <p>
+ * 字典项 服务类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+public interface SysDictItemService extends IService<SysDictItem> {
+    /**
+     * 删除字典项
+     *
+     * @param id 字典项ID
+     * @return
+     */
+    void removeDictItem(Long id);
+
+    /**
+     * 更新字典项
+     *
+     * @param item 字典项
+     * @return
+     */
+    void updateDictItem(SysDictItem item);
+    
+
+}

+ 37 - 0
authorize-api-service/src/main/java/com/xy/service/SysDictService.java

@@ -0,0 +1,37 @@
+package com.xy.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xy.entity.SysDict;
+
+/**
+ * <p>
+ * 字典表 服务类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+public interface SysDictService extends IService<SysDict> {
+
+
+    /**
+     * 根据ID 删除字典
+     *
+     * @param id
+     * @return
+     */
+    void removeDict(Long id);
+
+    /**
+     * 更新字典
+     *
+     * @param sysDict 字典
+     * @return
+     */
+    void updateDict(SysDict sysDict);
+
+    /**
+     * 清除缓存
+     */
+    void clearDictCache();
+}

+ 4 - 1
authorize-api-service/src/main/java/com/xy/service/SysRoleMenuService.java

@@ -1,5 +1,8 @@
 package com.xy.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xy.entity.SysRoleMenu;
+
 import java.util.List;
 
 /***
@@ -7,7 +10,7 @@ import java.util.List;
  * @author 谭斌
  * @date 2022/12/13 9:08
  */
-public interface SysRoleMenuService {
+public interface SysRoleMenuService extends IService<SysRoleMenu> {
 
     /**
      * 更新角色菜单权限

+ 2 - 2
authorize-api-service/src/main/java/com/xy/service/impl/CaptchaServiceImpl.java

@@ -27,7 +27,7 @@ import javax.servlet.http.HttpServletRequest;
 public class CaptchaServiceImpl implements CaptchaService {
 
     private final com.anji.captcha.service.CaptchaService captchaService;
-
+ 
     @Override
     public Boolean reVerification(String captchaVerification) {
         CaptchaVO captchaVO = new CaptchaVO();
@@ -77,7 +77,7 @@ public class CaptchaServiceImpl implements CaptchaService {
      * @param code
      * @return
      */
-    
+
     public static String getRepDesc(String code) {
         RepCodeEnum[] repCodeEnums = RepCodeEnum.values();
         for (RepCodeEnum repCodeEnum : repCodeEnums) {

+ 0 - 42
authorize-api-service/src/main/java/com/xy/service/impl/SysDeptRoleServiceImpl.java

@@ -1,42 +0,0 @@
-package com.xy.service.impl;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xy.entity.SysDeptRole;
-import com.xy.mapper.SysDeptRoleMapper;
-import com.xy.service.SysDeptRoleService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * <p>
- * 部门角色表; 服务实现类
- * </p>
- *
- * @author 谭斌
- * @since 2022-12-15
- */
-@Service
-public class SysDeptRoleServiceImpl extends ServiceImpl<SysDeptRoleMapper, SysDeptRole> implements SysDeptRoleService {
-
-    @Override
-    public void saveDeptRole(Long deptId, List<Long> roleIds) {
-        List<SysDeptRole> sysDeptRoles = roleIds.stream().map(roleId -> new SysDeptRole().setDeptId(deptId).setRoleId(roleId)).collect(Collectors.toList());
-        saveBatch(sysDeptRoles);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void updateDeptRole(Long deptId, List<Long> roleIds) {
-        removeDeptRoleById(deptId);
-        saveDeptRole(deptId, roleIds);
-    }
-
-    @Override
-    public void removeDeptRoleById(Long deptId) {
-        remove(Wrappers.<SysDeptRole>lambdaQuery().eq(SysDeptRole::getDeptId, deptId));
-    }
-}

+ 6 - 0
authorize-api-service/src/main/java/com/xy/service/impl/SysDeptServiceImpl.java

@@ -10,10 +10,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.SysDeptDto;
 import com.xy.entity.SysDept;
 import com.xy.entity.SysDeptRelation;
+import com.xy.entity.SysUserDept;
 import com.xy.mapper.SysDeptMapper;
 import com.xy.service.SysDeptRelationService;
 import com.xy.service.SysDeptRoleService;
 import com.xy.service.SysDeptService;
+import com.xy.service.SysUserDeptService;
 import com.xy.utils.R;
 import com.xy.utils.SaTokenUtils;
 import com.xy.vo.SysDeptVo;
@@ -39,6 +41,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
 
     private final SysDeptRelationService sysDeptRelationService;
     private final SysDeptRoleService sysDeptRoleService;
+    private final SysUserDeptService sysUserDeptService;
 
 
     @Override
@@ -117,6 +120,9 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
         sysDeptRelationService.removeDeptRelationById(id);
         //部门角色关系移除
         sysDeptRoleService.removeDeptRoleById(id);
+        //业务用户部门关系 sys_user_dept
+        sysUserDeptService.remove(Wrappers.<SysUserDept>lambdaQuery().in(SysUserDept::getDeptId, idList));
+        
         return R.ok(Boolean.TRUE);
     }
 

+ 64 - 0
authorize-api-service/src/main/java/com/xy/service/impl/SysDictItemServiceImpl.java

@@ -0,0 +1,64 @@
+package com.xy.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.constants.CacheConstants;
+import com.xy.entity.SysDict;
+import com.xy.entity.SysDictItem;
+import com.xy.enums.DictTypeEnum;
+import com.xy.mapper.SysDictItemMapper;
+import com.xy.service.SysDictItemService;
+import com.xy.service.SysDictService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+/**
+ * <p>
+ * 字典项 服务实现类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Service
+@RequiredArgsConstructor
+public class SysDictItemServiceImpl extends ServiceImpl<SysDictItemMapper, SysDictItem> implements SysDictItemService {
+
+    private final SysDictService dictService;
+
+    /**
+     * 删除字典项
+     *
+     * @param id 字典项ID
+     * @return
+     */
+    @Override
+    @CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
+    public void removeDictItem(Long id) {
+        // 根据ID查询字典ID
+        SysDictItem dictItem = getById(id);
+        SysDict dict = dictService.getById(dictItem.getDictId());
+        // 系统内置
+        Assert.state(!DictTypeEnum.SYSTEM.getType().equals(dict.getSystemFlag()),
+                "系统内置字典不能删除");
+        removeById(id);
+    }
+
+    /**
+     * 更新字典项
+     *
+     * @param item 字典项
+     * @return
+     */
+    @Override
+    @CacheEvict(value = CacheConstants.DICT_DETAILS, key = "#item.type")
+    public void updateDictItem(SysDictItem item) {
+        // 查询字典
+        SysDict dict = dictService.getById(item.getDictId());
+        // 系统内置
+        Assert.state(!DictTypeEnum.SYSTEM.getType().equals(dict.getSystemFlag()),
+                "系统内置字典不能修改");
+        this.updateById(item);
+    }
+}

+ 71 - 0
authorize-api-service/src/main/java/com/xy/service/impl/SysDictServiceImpl.java

@@ -0,0 +1,71 @@
+package com.xy.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.constants.CacheConstants;
+import com.xy.entity.SysDict;
+import com.xy.entity.SysDictItem;
+import com.xy.enums.DictTypeEnum;
+import com.xy.mapper.SysDictItemMapper;
+import com.xy.mapper.SysDictMapper;
+import com.xy.service.SysDictService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+/**
+ * <p>
+ * 字典表 服务实现类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Service
+@RequiredArgsConstructor
+public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> implements SysDictService {
+
+    private final SysDictItemMapper dictItemMapper;
+
+    /**
+     * 根据ID 删除字典
+     *
+     * @param id 字典ID
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    @CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
+    public void removeDict(Long id) {
+        SysDict dict = getById(id);
+        // 系统内置
+        Assert.state(!DictTypeEnum.SYSTEM.getType().equals(dict.getSystemFlag()),
+                "系统内置字典不能删除");
+        baseMapper.deleteById(id);
+        dictItemMapper.delete(Wrappers.<SysDictItem>lambdaQuery().eq(SysDictItem::getDictId, id));
+    }
+
+    /**
+     * 更新字典
+     *
+     * @param dict 字典
+     * @return
+     */
+    @Override
+    @CacheEvict(value = CacheConstants.DICT_DETAILS, key = "#dict.type")
+    public void updateDict(SysDict dict) {
+        SysDict sysDict = getById(dict.getId());
+        // 系统内置
+        Assert.state(!DictTypeEnum.SYSTEM.getType().equals(sysDict.getSystemFlag()),
+                "系统内置字典不能修改");
+        this.updateById(dict);
+    }
+
+    @Override
+    @CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
+    public void clearDictCache() {
+
+    }
+}

+ 33 - 1
authorize-api-service/src/main/java/com/xy/service/impl/SysRoleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xy.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,10 +8,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.BatchDeleteDto;
 import com.xy.dto.SysRoleDto;
+import com.xy.entity.SysDeptRole;
 import com.xy.entity.SysRole;
+import com.xy.entity.SysRoleMenu;
+import com.xy.entity.SysUserRole;
 import com.xy.mapper.SysRoleMapper;
+import com.xy.service.SysDeptRoleService;
 import com.xy.service.SysRoleMenuService;
 import com.xy.service.SysRoleService;
+import com.xy.service.SysUserRoleService;
 import com.xy.utils.PageBean;
 import com.xy.utils.R;
 import com.xy.utils.SaTokenUtils;
@@ -19,6 +25,9 @@ import com.xy.vo.SysRoleVo;
 import io.swagger.annotations.Api;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 import static com.xy.utils.Beans.copy;
 import static com.xy.utils.PlusBeans.toIPage;
@@ -35,6 +44,8 @@ import static com.xy.utils.PlusBeans.toPageBean;
 public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
 
     private final SysRoleMenuService sysRoleMenuService;
+    private final SysDeptRoleService sysDeptRoleService;
+    private final SysUserRoleService sysUserRoleService;
 
     @Override
     public R<Boolean> saveOrUpdate(SysRoleDto sysRoleDto) {
@@ -59,7 +70,14 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
 
     @Override
     public R<Boolean> batchDelete(BatchDeleteDto batchDeleteDto) {
-        return R.ok(removeByIds(batchDeleteDto.getIds()));
+        List<Long> ids = batchDeleteDto.getIds();
+        if (CollUtil.isNotEmpty(ids)) {
+            for (Long id : ids) {
+                deleteRoleById(id);
+            }
+        }
+
+        return R.ok(Boolean.TRUE);
     }
 
     @Override
@@ -85,5 +103,19 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         return R.ok(sysRoleMenuService.saveRoleMenus(roleMenuVo.getId(), roleMenuVo.getMenuIds()));
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R<Boolean> deleteRoleById(Long id) {
+        //角色 sys_role
+        removeById(id);
+        //角色菜单 sys_role_menu
+        sysRoleMenuService.remove(Wrappers.<SysRoleMenu>lambdaQuery().eq(SysRoleMenu::getRoleId, id));
+        //部门角色 sys_dept_role
+        sysDeptRoleService.remove(Wrappers.<SysDeptRole>lambdaQuery().eq(SysDeptRole::getRoleId, id));
+        //用户角色 sys_user_role
+        sysUserRoleService.remove(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getRoleId, id));
+        return R.ok(Boolean.TRUE);
+    }
+
 
 }

+ 56 - 0
authorize-api/src/main/java/com/xy/dto/SysDict/SysDictDto.java

@@ -0,0 +1,56 @@
+package com.xy.dto.SysDict;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xy.vo.BaseVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 字典类型
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("字典类型")
+public class SysDictDto extends BaseVo {
+
+
+    @ApiModelProperty("ID")
+    private Long id;
+
+    @ApiModelProperty("标识")
+    private String dictKey;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("是否是系统内置")
+    private Boolean systemFlag;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("创建人")
+    private Long createUser;
+
+    @ApiModelProperty("更新人")
+    private Long updateUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+
+}

+ 66 - 0
authorize-api/src/main/java/com/xy/dto/SysDict/SysDictItemDto.java

@@ -0,0 +1,66 @@
+package com.xy.dto.SysDict;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 字典项
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("字典项")
+public class SysDictItemDto {
+
+    @ApiModelProperty("ID")
+    private Long id;
+
+    @ApiModelProperty("字典ID")
+    private Long dictId;
+
+    @ApiModelProperty("字典标识")
+    private String dictKey;
+
+    @ApiModelProperty("值")
+    private String value;
+
+    @ApiModelProperty("标签")
+    private String label;
+
+    @ApiModelProperty("字典类型")
+    private String type;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("排序(升序)")
+    private Integer sortOrder;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("创建人")
+    private Long createUser;
+
+    @ApiModelProperty("修改人")
+    private Long updateUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+
+}

+ 44 - 0
authorize-api/src/main/java/com/xy/dto/SysDict/SysDictItemPageDto.java

@@ -0,0 +1,44 @@
+package com.xy.dto.SysDict;
+
+import com.xy.utils.PageBean;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 字典项
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("字典项")
+public class SysDictItemPageDto {
+
+    @ApiModelProperty("分页对象")
+    private PageBean page;
+
+    @ApiModelProperty("字典ID")
+    private Long dictId;
+
+    @ApiModelProperty("字典标识")
+    private String dictKey;
+
+    @ApiModelProperty("值")
+    private String value;
+
+    @ApiModelProperty("标签")
+    private String label;
+
+    @ApiModelProperty("字典类型")
+    private String type;
+
+    @ApiModelProperty("描述")
+    private String description;
+ 
+
+}

+ 30 - 0
authorize-api/src/main/java/com/xy/dto/SysDict/SysDictPageDto.java

@@ -0,0 +1,30 @@
+package com.xy.dto.SysDict;
+
+import com.xy.utils.PageBean;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@ApiModel("数据字典类型分页请求")
+@Accessors(chain = true)
+public class SysDictPageDto {
+
+
+    @ApiModelProperty("分页对象")
+    private PageBean page;
+
+  
+    @ApiModelProperty("标识")
+    private String dictKey;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+
+    @ApiModelProperty("是否是系统内置")
+    private Boolean systemFlag;
+
+
+}

+ 91 - 0
authorize-api/src/main/java/com/xy/service/SysDicApiService.java

@@ -0,0 +1,91 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+import com.xy.constants.CacheConstants;
+import com.xy.dto.SysDict.SysDictDto;
+import com.xy.dto.SysDict.SysDictItemDto;
+import com.xy.dto.SysDict.SysDictItemPageDto;
+import com.xy.dto.SysDict.SysDictPageDto;
+import com.xy.utils.PageBean;
+import com.xy.utils.R;
+import com.xy.vo.SysDictItemVo;
+import com.xy.vo.SysDictVo;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/***
+ * 字典表管理
+ * @author 谭斌
+ * @date 2022/12/16 13:56
+ */
+@RestMappingController("dict")
+public interface SysDicApiService {
+
+ 
+    @ApiOperation("通过ID查询字典信息")
+    @GetMapping("{id}")
+    R<SysDictVo> getById(@PathVariable("id") Long id);
+
+
+    @ApiOperation("分页查询字典信息")
+    @GetMapping("page")
+    R<PageBean<SysDictVo>> getDictPage(SysDictPageDto page);
+
+
+    @ApiOperation("通过字典类型查找字典")
+    @GetMapping("key/{key}")
+    @Cacheable(value = CacheConstants.DICT_DETAILS, key = "#key")
+    R<List<SysDictItemVo>> getDictByKey(@PathVariable String key);
+
+
+    @ApiOperation("添加字典")
+    @PostMapping
+    R<Boolean> add(@Valid @RequestBody SysDictDto sysDict);
+
+
+    @ApiOperation("删除字典,并且清除字典缓存")
+    @DeleteMapping("{id}")
+    R<Boolean> removeById(@PathVariable("id") Long id);
+
+
+    @ApiOperation("修改字典")
+    @PostMapping
+    R<Boolean> updateSysDictById(@Valid @RequestBody SysDictDto sysDict);
+
+
+    @ApiOperation("分页查询字典项")
+    @GetMapping("item/page")
+    R<PageBean<SysDictItemVo>> getSysDictItemPage(SysDictItemPageDto pageDto);
+
+
+    @ApiOperation("通过id查询字典项")
+    @GetMapping("item/{id}")
+    R<SysDictItemVo> getDictItemById(@PathVariable("id") Long id);
+
+
+    @ApiOperation("新增字典项")
+    @PostMapping("addItem")
+    @CacheEvict(value = CacheConstants.DICT_DETAILS, allEntries = true)
+    R<Boolean> addItem(@RequestBody SysDictItemDto sysDictItem);
+
+
+    @ApiOperation("修改字典项")
+    @PostMapping("updateItem")
+    R<Boolean> updateSysDictItemById(@RequestBody SysDictItemDto sysDictItem);
+
+
+    @ApiOperation("通过id删除字典项")
+    @DeleteMapping("item/{id}")
+    R<Boolean> removeDictItemById(@PathVariable("id") Long id);
+
+
+    @ApiOperation("清除字典缓存")
+    @DeleteMapping("/cache")
+    R<Boolean> clearDictCache();
+
+}

+ 5 - 0
authorize-api/src/main/java/com/xy/service/SysRoleService.java

@@ -73,4 +73,9 @@ public interface SysRoleService {
     R<Boolean> saveRoleMenus(@RequestBody RoleMenuVo roleMenuVo);
 
 
+    @ApiOperation(value = "删除角色", notes = "删除角色")
+    @DeleteMapping
+    R<Boolean> deleteRoleById(@PathVariable("id") Long id);
+
+
 }

+ 66 - 0
authorize-api/src/main/java/com/xy/vo/SysDictItemVo.java

@@ -0,0 +1,66 @@
+package com.xy.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 字典项
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("字典项")
+public class SysDictItemVo {
+
+    @ApiModelProperty("ID")
+    private Long id;
+
+    @ApiModelProperty("字典ID")
+    private Long dictId;
+
+    @ApiModelProperty("字典标识")
+    private String dictKey;
+
+    @ApiModelProperty("值")
+    private String value;
+
+    @ApiModelProperty("标签")
+    private String label;
+
+    @ApiModelProperty("字典类型")
+    private String type;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("排序(升序)")
+    private Integer sortOrder;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("创建人")
+    private Long createUser;
+
+    @ApiModelProperty("修改人")
+    private Long updateUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+
+}

+ 55 - 0
authorize-api/src/main/java/com/xy/vo/SysDictVo.java

@@ -0,0 +1,55 @@
+package com.xy.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 字典类型
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2022-12-16
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel("字典类型")
+public class SysDictVo extends BaseVo {
+
+ 
+    @ApiModelProperty("ID")
+    private Long id;
+
+    @ApiModelProperty("标识")
+    private String dictKey;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("是否是系统内置")
+    private Boolean systemFlag;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("创建人")
+    private Long createUser;
+
+    @ApiModelProperty("更新人")
+    private Long updateUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+
+}