From 45ac0f23e12ac2a45c6affe9e39d0897e4fad618 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期四, 16 二月 2023 17:06:10 +0800 Subject: [PATCH] !286 合并 多租户功能 * add 新增 ruoyi-common-tenant 多租户模块 全框架适配多租户改动 * update 优化 隐藏页面主键 * remove 移除 缓存列表功能(多租户缓存功能繁杂多样 没有办法在页面管理) * update 重构 全局缓存KEY 与 常用缓存KEY做区分 * update 重构 OssFactory 加载方式 改为每次比对配置做实例更新 * update 优化 SaTokenDao 改为 Bean 注入 便于扩展 * update 重构 项目初始化数据改为懒加载 不提供热加载 * update 重构 验证码开关使用配置文件(经调查少有动态开启需求) * update 优化 启用 sqlserver 高版本语法 简化sql脚本语法 * update 优化 DataPermissionHelper 增加 开启/关闭 忽略数据权限功能 * update 优化 连接池增加 keepaliveTime 探活参数 * update 优化 调整连接池最长生命周期 防止出现警告 * update 优化 代码生成页面模板 校验不必要的表单数据 * add 新增 StringUtils splitTo 与 splitList 方法 优化业务代码 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 104 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 73 insertions(+), 31 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 8040cff..fda7f62 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -1,25 +1,35 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.service.DeptService; +import com.ruoyi.common.core.utils.SpringUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.TreeBuildUtils; +import com.ruoyi.common.mybatis.helper.DataBaseHelper; +import com.ruoyi.common.redis.utils.CacheUtils; +import com.ruoyi.common.satoken.utils.LoginHelper; import com.ruoyi.system.domain.SysDept; import com.ruoyi.system.domain.SysRole; import com.ruoyi.system.domain.SysUser; -import com.ruoyi.common.core.exception.ServiceException; -import com.ruoyi.common.mybatis.helper.DataBaseHelper; -import com.ruoyi.common.satoken.utils.LoginHelper; -import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.core.utils.TreeBuildUtils; +import com.ruoyi.system.domain.bo.SysDeptBo; +import com.ruoyi.system.domain.vo.SysDeptVo; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.service.ISysDeptService; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -33,7 +43,7 @@ */ @RequiredArgsConstructor @Service -public class SysDeptServiceImpl implements ISysDeptService { +public class SysDeptServiceImpl implements ISysDeptService, DeptService { private final SysDeptMapper baseMapper; private final SysRoleMapper roleMapper; @@ -46,15 +56,8 @@ * @return 閮ㄩ棬淇℃伅闆嗗悎 */ @Override - public List<SysDept> selectDeptList(SysDept dept) { - LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>(); - lqw.eq(SysDept::getDelFlag, "0") - .eq(ObjectUtil.isNotNull(dept.getDeptId()), SysDept::getDeptId, dept.getDeptId()) - .eq(ObjectUtil.isNotNull(dept.getParentId()), SysDept::getParentId, dept.getParentId()) - .like(StringUtils.isNotBlank(dept.getDeptName()), SysDept::getDeptName, dept.getDeptName()) - .eq(StringUtils.isNotBlank(dept.getStatus()), SysDept::getStatus, dept.getStatus()) - .orderByAsc(SysDept::getParentId) - .orderByAsc(SysDept::getOrderNum); + public List<SysDeptVo> selectDeptList(SysDeptBo dept) { + LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(dept); return baseMapper.selectDeptList(lqw); } @@ -66,8 +69,22 @@ */ @Override public List<Tree<Long>> selectDeptTreeList(SysDept dept) { - List<SysDept> depts = this.selectDeptList(dept); + SysDeptBo bo = BeanUtil.toBean(dept, SysDeptBo.class); + LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(bo); + List<SysDept> depts = baseMapper.selectList(lqw); return buildDeptTreeSelect(depts); + } + + private LambdaQueryWrapper<SysDept> buildQueryWrapper(SysDeptBo bo) { + LambdaQueryWrapper<SysDept> lqw = Wrappers.lambdaQuery(); + lqw.eq(SysDept::getDelFlag, "0"); + lqw.eq(ObjectUtil.isNotNull(bo.getDeptId()), SysDept::getDeptId, bo.getDeptId()); + lqw.eq(ObjectUtil.isNotNull(bo.getParentId()), SysDept::getParentId, bo.getParentId()); + lqw.like(StringUtils.isNotBlank(bo.getDeptName()), SysDept::getDeptName, bo.getDeptName()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysDept::getStatus, bo.getStatus()); + lqw.orderByAsc(SysDept::getParentId); + lqw.orderByAsc(SysDept::getOrderNum); + return lqw; } /** @@ -106,13 +123,32 @@ * @param deptId 閮ㄩ棬ID * @return 閮ㄩ棬淇℃伅 */ + @Cacheable(cacheNames = CacheNames.SYS_DEPT, key = "#deptId") @Override - public SysDept selectDeptById(Long deptId) { - SysDept dept = baseMapper.selectById(deptId); - SysDept parentDept = baseMapper.selectOne(new LambdaQueryWrapper<SysDept>() + public SysDeptVo selectDeptById(Long deptId) { + SysDeptVo dept = baseMapper.selectVoById(deptId); + SysDeptVo parentDept = baseMapper.selectVoOne(new LambdaQueryWrapper<SysDept>() .select(SysDept::getDeptName).eq(SysDept::getDeptId, dept.getParentId())); dept.setParentName(ObjectUtil.isNotNull(parentDept) ? parentDept.getDeptName() : null); return dept; + } + + /** + * 閫氳繃閮ㄩ棬ID鏌ヨ閮ㄩ棬鍚嶇О + * + * @param deptIds 閮ㄩ棬ID涓查�楀彿鍒嗛殧 + * @return 閮ㄩ棬鍚嶇О涓查�楀彿鍒嗛殧 + */ + @Override + public String selectDeptNameByIds(String deptIds) { + List<String> list = new ArrayList<>(); + for (Long id : StringUtils.splitTo(deptIds, Convert::toLong)) { + SysDeptVo vo = SpringUtils.getAopProxy(this).selectDeptById(id); + if (ObjectUtil.isNotNull(vo)) { + list.add(vo.getDeptName()); + } + } + return String.join(StringUtils.SEPARATOR, list); } /** @@ -159,7 +195,7 @@ * @return 缁撴灉 */ @Override - public String checkDeptNameUnique(SysDept dept) { + public String checkDeptNameUnique(SysDeptBo dept) { boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysDept>() .eq(SysDept::getDeptName, dept.getDeptName()) .eq(SysDept::getParentId, dept.getParentId()) @@ -177,10 +213,10 @@ */ @Override public void checkDeptDataScope(Long deptId) { - if (!LoginHelper.isAdmin()) { - SysDept dept = new SysDept(); + if (!LoginHelper.isSuperAdmin()) { + SysDeptBo dept = new SysDeptBo(); dept.setDeptId(deptId); - List<SysDept> depts = this.selectDeptList(dept); + List<SysDeptVo> depts = this.selectDeptList(dept); if (CollUtil.isEmpty(depts)) { throw new ServiceException("娌℃湁鏉冮檺璁块棶閮ㄩ棬鏁版嵁锛�"); } @@ -190,32 +226,35 @@ /** * 鏂板淇濆瓨閮ㄩ棬淇℃伅 * - * @param dept 閮ㄩ棬淇℃伅 + * @param bo 閮ㄩ棬淇℃伅 * @return 缁撴灉 */ @Override - public int insertDept(SysDept dept) { - SysDept info = baseMapper.selectById(dept.getParentId()); + public int insertDept(SysDeptBo bo) { + SysDept info = baseMapper.selectById(bo.getParentId()); // 濡傛灉鐖惰妭鐐逛笉涓烘甯哥姸鎬�,鍒欎笉鍏佽鏂板瀛愯妭鐐� if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) { throw new ServiceException("閮ㄩ棬鍋滅敤锛屼笉鍏佽鏂板"); } - dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + SysDept dept = BeanUtil.toBean(bo, SysDept.class); + dept.setAncestors(info.getAncestors() + StringUtils.SEPARATOR + dept.getParentId()); return baseMapper.insert(dept); } /** * 淇敼淇濆瓨閮ㄩ棬淇℃伅 * - * @param dept 閮ㄩ棬淇℃伅 + * @param bo 閮ㄩ棬淇℃伅 * @return 缁撴灉 */ + @CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#bo.deptId") @Override - public int updateDept(SysDept dept) { + public int updateDept(SysDeptBo bo) { + SysDept dept = BeanUtil.toBean(bo, SysDept.class); SysDept newParentDept = baseMapper.selectById(dept.getParentId()); SysDept oldDept = baseMapper.selectById(dept.getDeptId()); if (ObjectUtil.isNotNull(newParentDept) && ObjectUtil.isNotNull(oldDept)) { - String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getDeptId(); String oldAncestors = oldDept.getAncestors(); dept.setAncestors(newAncestors); updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); @@ -260,7 +299,9 @@ list.add(dept); } if (CollUtil.isNotEmpty(list)) { - baseMapper.updateBatchById(list); + if (baseMapper.updateBatchById(list)) { + list.forEach(dept -> CacheUtils.evict(CacheNames.SYS_DEPT, dept.getDeptId())); + } } } @@ -270,6 +311,7 @@ * @param deptId 閮ㄩ棬ID * @return 缁撴灉 */ + @CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#deptId") @Override public int deleteDeptById(Long deptId) { return baseMapper.deleteById(deptId); -- Gitblit v1.9.3