diff --git a/entrance/src/main/resources/application.yml b/entrance/src/main/resources/application.yml index e62fef4a..998884a1 100644 --- a/entrance/src/main/resources/application.yml +++ b/entrance/src/main/resources/application.yml @@ -6,9 +6,9 @@ spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.1.24:13306/pqs9100?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT + url: jdbc:mysql://127.0.0.1:3306/pqs9100?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT username: root - password: njcnpqs + password: 123456 #初始化建立物理连接的个数、最小、最大连接数 initial-size: 5 min-idle: 5 diff --git a/system/src/main/java/com/njcn/gather/system/dictionary/controller/DictTreeController.java b/system/src/main/java/com/njcn/gather/system/dictionary/controller/DictTreeController.java index efeb4846..8b105165 100644 --- a/system/src/main/java/com/njcn/gather/system/dictionary/controller/DictTreeController.java +++ b/system/src/main/java/com/njcn/gather/system/dictionary/controller/DictTreeController.java @@ -43,6 +43,17 @@ public class DictTreeController extends BaseController { private final IDictTreeService dictTreeService; + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/likeName") + @ApiOperation("按照名称模糊查询字典树") + @ApiImplicitParam(name = "keyword", value = "查询参数", required = true) + public HttpResult> getDictTreeByKeyword(@RequestParam String keyword) { + String methodDescribe = getMethodDescribe("getDictTreeByKeyword"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, keyword); + List result = dictTreeService.getDictTreeByKeyword(keyword); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) @PostMapping("/add") @ApiOperation("新增字典树数据") diff --git a/system/src/main/java/com/njcn/gather/system/dictionary/service/IDictTreeService.java b/system/src/main/java/com/njcn/gather/system/dictionary/service/IDictTreeService.java index 02b8417d..f04f6625 100644 --- a/system/src/main/java/com/njcn/gather/system/dictionary/service/IDictTreeService.java +++ b/system/src/main/java/com/njcn/gather/system/dictionary/service/IDictTreeService.java @@ -58,9 +58,17 @@ public interface IDictTreeService extends IService { List queryTree(); /** - * 根据code查询自动树 + * 根据code查询字典树 * * @param code code */ List queryByCodeList(String code); + + /** + * 根据关键字查询字典树 + * + * @param keyword 关键字 + * @return 字典树 + */ + List getDictTreeByKeyword(String keyword); } diff --git a/system/src/main/java/com/njcn/gather/system/dictionary/service/impl/DictTreeServiceImpl.java b/system/src/main/java/com/njcn/gather/system/dictionary/service/impl/DictTreeServiceImpl.java index a807fb56..96234b38 100644 --- a/system/src/main/java/com/njcn/gather/system/dictionary/service/impl/DictTreeServiceImpl.java +++ b/system/src/main/java/com/njcn/gather/system/dictionary/service/impl/DictTreeServiceImpl.java @@ -2,19 +2,24 @@ package com.njcn.gather.system.dictionary.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.text.StrPool; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.gather.system.dictionary.mapper.DictTreeMapper; import com.njcn.gather.system.dictionary.pojo.param.DictTreeParam; import com.njcn.gather.system.dictionary.pojo.po.DictTree; import com.njcn.gather.system.dictionary.pojo.vo.DictTreeVO; import com.njcn.gather.system.dictionary.service.IDictTreeService; import com.njcn.gather.system.pojo.constant.DictConst; +import com.njcn.gather.system.pojo.enums.SystemResponseEnum; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; @@ -75,10 +80,16 @@ public class DictTreeServiceImpl extends ServiceImpl i @Override public boolean deleteDictTree(String id) { - boolean result = this.lambdaUpdate().set(DictTree::getState, DictConst.DELETE).in(DictTree::getId, id).update(); -// if (result) { -// refreshDictTreeCache(); -// } + boolean result = false; + List childrenList = this.lambdaQuery().eq(DictTree::getState, DataStateEnum.ENABLE.getCode()).eq(DictTree::getPid, id).list(); + if (CollectionUtils.isEmpty(childrenList)) { + result = this.lambdaUpdate().set(DictTree::getState, DataStateEnum.DELETED.getCode()).in(DictTree::getId, id).update(); +// if (result) { +// refreshRolesFunctionsCache(); +// } + } else { + throw new BusinessException(SystemResponseEnum.EXISTS_CHILDREN_NOT_DELETE); + } return result; } @@ -158,6 +169,39 @@ public class DictTreeServiceImpl extends ServiceImpl i }).collect(Collectors.toList()); } + @Override + public List getDictTreeByKeyword(String keyword) { + List dictTree = this.queryTree(); + this.filterTreeByName(dictTree, keyword); + return dictTree; + } + + private List filterTreeByName(List tree, String keyword) { + if (CollectionUtils.isEmpty(tree) || !StrUtil.isNotBlank(keyword)) { + return tree; + } + filter(tree, keyword); + return tree; + } + + private void filter(List list, String keyword) { + for (int i = list.size() - 1; i >= 0; i--) { + DictTree dictTree = list.get(i); + List children = dictTree.getChildren(); + if (!dictTree.getName().contains(keyword)) { + if (!CollectionUtils.isEmpty(children)) { + filter(children, keyword); + } + if (CollectionUtils.isEmpty(dictTree.getChildren())) { + list.remove(i); + } + } else { + if (!CollectionUtils.isEmpty(children)) { + filter(children, keyword); + } + } + } + } private List getChildren(DictTree dictTree, List all) { return all.stream().filter(item -> item.getPid().equals(dictTree.getId())).peek(item -> { diff --git a/system/src/main/java/com/njcn/gather/system/pojo/enums/SystemResponseEnum.java b/system/src/main/java/com/njcn/gather/system/pojo/enums/SystemResponseEnum.java index 3d91747c..f4a296e8 100644 --- a/system/src/main/java/com/njcn/gather/system/pojo/enums/SystemResponseEnum.java +++ b/system/src/main/java/com/njcn/gather/system/pojo/enums/SystemResponseEnum.java @@ -54,6 +54,8 @@ public enum SystemResponseEnum { EXE_EMPTY_PARAM("A00361", "请检查定时器的id,定时器cron表达式,定时任务是否为空!"), DICT_PQ_NAME_EXIST("A00389", "当前数据模型及相别下已存在相同名称"), + EXISTS_CHILDREN_NOT_DELETE("A00390", "当前字典下存在子字典,不能删除"), + /** * 审计日志模块异常响应 */ diff --git a/user/src/main/java/com/njcn/gather/user/pojo/enums/UserResponseEnum.java b/user/src/main/java/com/njcn/gather/user/pojo/enums/UserResponseEnum.java index 8b372e22..0a9f79da 100644 --- a/user/src/main/java/com/njcn/gather/user/pojo/enums/UserResponseEnum.java +++ b/user/src/main/java/com/njcn/gather/user/pojo/enums/UserResponseEnum.java @@ -16,7 +16,8 @@ public enum UserResponseEnum { EXISTS_SAME_MENU_CHILDREN("A010006", "当前菜单下已存在相同的子菜单"), EXISTS_CHILDREN_NOT_UPDATE("A010008", "该菜单下存在子节点,无法将菜单修改为按钮"), EXISTS_CHILDREN_NOT_DELETE("A010007", "该节点下存在子节点,无法删除"), - ADMINSTRATOR_ROLE_CANNOT_DELETE("A010009", "超级管理员及管理员角色禁止删除"),; + SUPER_ADMINSTRATOR_ROLE_CANNOT_UPDATE("A010009", "禁止修改超级管理员角色"), + SUPER_ADMINSTRATOR_ROLE_CANNOT_DELETE("A010009", "禁止删除超级管理员角色"),; private String code; private String message; diff --git a/user/src/main/java/com/njcn/gather/user/user/controller/SysFunctionController.java b/user/src/main/java/com/njcn/gather/user/user/controller/SysFunctionController.java index a9471805..d91ba8da 100644 --- a/user/src/main/java/com/njcn/gather/user/user/controller/SysFunctionController.java +++ b/user/src/main/java/com/njcn/gather/user/user/controller/SysFunctionController.java @@ -38,13 +38,13 @@ public class SysFunctionController extends BaseController { private final ISysRoleFunctionService sysRoleFunctionService; @OperateInfo(info = LogEnum.SYSTEM_COMMON) - @PostMapping("/list") - @ApiOperation("分页查询菜单树") - @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) - public HttpResult> list(@RequestBody @Validated SysFunctionParam.QueryParam queryParam) { - String methodDescribe = getMethodDescribe("list"); - LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); - List result = sysFunctionService.listFunction(queryParam); + @GetMapping("/likeName") + @ApiOperation("按照名称模糊查询菜单树") + @ApiImplicitParam(name = "keyword", value = "查询参数", required = true) + public HttpResult> getFunctionTreeByKeyword(@RequestParam @Validated String keyword) { + String methodDescribe = getMethodDescribe("getFunctionTreeByKeyword"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, keyword); + List result = sysFunctionService.getFunctionTreeByKeyword(keyword); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } diff --git a/user/src/main/java/com/njcn/gather/user/user/pojo/param/SysFunctionParam.java b/user/src/main/java/com/njcn/gather/user/user/pojo/param/SysFunctionParam.java index 9a4ac2bb..dd9be7a2 100644 --- a/user/src/main/java/com/njcn/gather/user/user/pojo/param/SysFunctionParam.java +++ b/user/src/main/java/com/njcn/gather/user/user/pojo/param/SysFunctionParam.java @@ -63,9 +63,9 @@ public class SysFunctionParam { @Pattern(regexp = PatternRegex.FUNCTION_NAME, message = UserValidMessage.NAME_FORMAT_ERROR) private String name; - @ApiModelProperty("资源类型") - @Range(min = 0, max = 3, message = UserValidMessage.PARAM_FORMAT_ERROR) - private Integer type; +// @ApiModelProperty("资源类型") +// @Range(min = 0, max = 3, message = UserValidMessage.PARAM_FORMAT_ERROR) +// private Integer type; } @Data diff --git a/user/src/main/java/com/njcn/gather/user/user/service/ISysFunctionService.java b/user/src/main/java/com/njcn/gather/user/user/service/ISysFunctionService.java index fe67c463..cc4788d0 100644 --- a/user/src/main/java/com/njcn/gather/user/user/service/ISysFunctionService.java +++ b/user/src/main/java/com/njcn/gather/user/user/service/ISysFunctionService.java @@ -13,12 +13,12 @@ import java.util.List; public interface ISysFunctionService extends IService { /** - * 获取菜单(资源)列表 + * 根据关键字模糊查询菜单(资源)树 * - * @param queryParam 查询参数 - * @return 菜单列表 + * @param keyword 关键字 + * @return 菜单(资源)树 */ - List listFunction(SysFunctionParam.QueryParam queryParam); + List getFunctionTreeByKeyword(String keyword); /** * 添加菜单(资源) diff --git a/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java b/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java index 7d428b58..60476914 100644 --- a/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java +++ b/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java @@ -1,7 +1,6 @@ package com.njcn.gather.user.user.service.impl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -37,17 +36,10 @@ public class SysFunctionServiceImpl extends ServiceImpl listFunction(SysFunctionParam.QueryParam queryParam) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - if (ObjectUtil.isNotNull(queryParam)) { - wrapper.like(StrUtil.isNotBlank(queryParam.getName()), SysFunction::getName, queryParam.getName()).eq(ObjectUtil.isNotNull(queryParam.getType()), SysFunction::getType, queryParam.getType()); - } - wrapper.eq(SysFunction::getState, DataStateEnum.ENABLE.getCode()); - List allFunctions = this.list(wrapper); - return allFunctions.stream().filter(fun -> Objects.equals(FunctionConst.FATHER_PID, fun.getPid())) - .peek(funS -> funS.setChildren(getChildrenList(funS, allFunctions))) - .sorted(Comparator.comparingInt(SysFunction::getSort)) - .collect(Collectors.toList()); + public List getFunctionTreeByKeyword(String keyword) { + List functionTree = this.getFunctionTree(true); + filterTreeByName(functionTree, keyword); + return functionTree; } @Override @@ -200,4 +192,31 @@ public class SysFunctionServiceImpl extends ServiceImpl filterTreeByName(List tree, String keyword) { + if (CollectionUtils.isEmpty(tree) || !StrUtil.isNotBlank(keyword)) { + return tree; + } + filter(tree, keyword); + return tree; + } + + private void filter(List list, String keyword) { + for (int i = list.size() - 1; i >= 0; i--) { + SysFunction function = list.get(i); + List children = function.getChildren(); + if (!function.getName().contains(keyword)) { + if (!CollectionUtils.isEmpty(children)) { + filter(children, keyword); + } + if (CollectionUtils.isEmpty(function.getChildren())) { + list.remove(i); + } + } else { + if (!CollectionUtils.isEmpty(children)) { + filter(children, keyword); + } + } + } + } +} \ No newline at end of file diff --git a/user/src/main/java/com/njcn/gather/user/user/service/impl/SysRoleServiceImpl.java b/user/src/main/java/com/njcn/gather/user/user/service/impl/SysRoleServiceImpl.java index 16b350a7..e6458e2b 100644 --- a/user/src/main/java/com/njcn/gather/user/user/service/impl/SysRoleServiceImpl.java +++ b/user/src/main/java/com/njcn/gather/user/user/service/impl/SysRoleServiceImpl.java @@ -64,6 +64,13 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Override public boolean updateRole(SysRoleParam.UpdateParam updateParam) { checkRepeat(updateParam, true); + //不能修改超级管理员角色 + Integer count = this.lambdaQuery() + .in(SysRole::getType, RoleConst.TYPE_SUPER_ADMINISTRATOR) + .eq(SysRole::getId, updateParam.getId()).eq(SysRole::getState, DataStateEnum.ENABLE.getCode()).count(); + if (count > 0) { + throw new BusinessException(UserResponseEnum.SUPER_ADMINSTRATOR_ROLE_CANNOT_UPDATE); + } SysRole role = new SysRole(); BeanUtil.copyProperties(updateParam, role); return this.updateById(role); @@ -71,12 +78,12 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Override public boolean deleteRole(List ids) { - //超级管理员、管理员角色不能删除 + //不能删除超级管理员角色 Integer count = this.lambdaQuery() - .in(SysRole::getType, RoleConst.TYPE_SUPER_ADMINISTRATOR, RoleConst.TYPE_ADMINISTRATOR) + .in(SysRole::getType, RoleConst.TYPE_SUPER_ADMINISTRATOR) .in(SysRole::getId, ids).eq(SysRole::getState, DataStateEnum.ENABLE.getCode()).count(); if (count > 0) { - throw new BusinessException(UserResponseEnum.ADMINSTRATOR_ROLE_CANNOT_DELETE); + throw new BusinessException(UserResponseEnum.SUPER_ADMINSTRATOR_ROLE_CANNOT_DELETE); } // 删除角色和用户的绑定 sysUserRoleService.deleteUserRoleByRoleIds(ids);