Selaa lähdekoodia

Merge branch 'data-scope-new' of uskycloud/usky-cloud into system-165

gez 10 kuukautta sitten
vanhempi
commit
5d52feeb91

+ 19 - 14
base-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java

@@ -1,5 +1,6 @@
 package com.ruoyi.common.datascope.aspect;
 
+import com.ruoyi.common.datascope.context.DataScopeContextHolder;
 import com.usky.system.domain.SysUserVO;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
@@ -87,41 +88,40 @@ public class DataScopeAspect
     public static void dataScopeFilter(JoinPoint joinPoint, SysUserVO user, String deptAlias, String userAlias)
     {
         StringBuilder sqlString = new StringBuilder();
-
+        StringBuilder sqlLambda = new StringBuilder();
         for (SysRoleVO role : user.getRoles())
         {
             String dataScope = role.getDataScope();
             if (DATA_SCOPE_ALL.equals(dataScope))
             {
-                sqlString = new StringBuilder();
-                break;
+                Integer tenantId = SecurityUtils.getTenantId();
+                sqlString.append(StringUtils.format(" OR {}.tenant_id = {} ", deptAlias, tenantId));
+                sqlLambda.append(StringUtils.format(" OR tenant_id = {} ",  tenantId));
             }
             else if (DATA_SCOPE_CUSTOM.equals(dataScope))
             {
-                sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
-                        role.getRoleId()));
+                sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId()));
+                sqlLambda.append(StringUtils.format(" OR dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId()));
             }
             else if (DATA_SCOPE_DEPT.equals(dataScope))
             {
                 sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
+                sqlLambda.append(StringUtils.format(" OR dept_id = {} ", user.getDeptId()));
             }
             else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
             {
-                sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
-                        deptAlias, user.getDeptId(), user.getDeptId()));
+                sqlString.append(StringUtils.format( " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId()));
+                sqlLambda.append(StringUtils.format( " OR dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",  user.getDeptId(), user.getDeptId()));
             }
             else if (DATA_SCOPE_SELF.equals(dataScope))
             {
-                if (StringUtils.isNotBlank(userAlias))
-                {
+                if (StringUtils.isNotBlank(userAlias)) {
                     sqlString.append(StringUtils.format(" OR {}.create_by = {} ", userAlias, user.getUserName()));
-                }
-                else
-                {
+                    sqlLambda.append(StringUtils.format(" OR create_by = {} ", user.getUserName()));
+                } else {
                     // 数据权限为仅本人且没有userAlias别名不查询任何数据
                     sqlString.append(" OR 1=0 ");
+                    sqlLambda.append(StringUtils.format(" OR create_by = '{}' ", user.getUserName()));
                 }
             }
         }
@@ -135,6 +135,11 @@ public class DataScopeAspect
                 baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
             }
         }
+        if(StringUtils.isNotBlank(sqlLambda.toString())){
+            DataScopeContextHolder.setDataScopeSql(" (" + sqlLambda.substring(4) + ")");
+        }
+
+
     }
 
     /**

+ 24 - 0
base-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/context/DataScopeContextHolder.java

@@ -0,0 +1,24 @@
+package com.ruoyi.common.datascope.context;
+
+public class DataScopeContextHolder {
+
+    /**
+     * 当前租户编号
+     */
+    private static final ThreadLocal<String> DATA_SCOPE_SQL = new ThreadLocal<>();
+
+
+    public static String getDataScopeSql() {
+        return DATA_SCOPE_SQL.get();
+    }
+
+
+    public static void setDataScopeSql(String dataScope) {
+        DATA_SCOPE_SQL.set(dataScope);
+    }
+
+    public static void clear() {
+        DATA_SCOPE_SQL.remove();
+    }
+
+}

+ 2 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysDeptService.java

@@ -23,6 +23,8 @@ public interface ISysDeptService extends IService<SysDept>
      */
     public List<SysDept> selectDeptList(SysDept dept);
 
+    public List<SysDept> selectDeptListByLamda(SysDept dept);
+
     /**
      * 构建前端所需要树结构
      * 

+ 11 - 6
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/MceReceiveServiceImpl.java

@@ -10,6 +10,8 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.datascope.annotation.DataScope;
+import com.ruoyi.common.datascope.context.DataScopeContextHolder;
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.security.utils.SecurityUtils;
@@ -102,20 +104,22 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
     }
 
     @Override
+    @DataScope
     public CommonPage<Object> mceManageList(String infoTitle, String infoType, String startTime, String endTime, Integer current, Integer size) {
         List<Object> list = new ArrayList<>();
         IPage<MceContent> page = new Page<>(current, size);
+        //查询消息内容
         LambdaQueryWrapper<MceContent> lambdaQuery1 = Wrappers.lambdaQuery();
-        lambdaQuery1.select(MceContent::getId, MceContent::getInfoTitle, MceContent::getInfoContent,
-                MceContent::getCreateTime,MceContent::getInfoType)
+        lambdaQuery1.select(MceContent::getId, MceContent::getInfoTitle, MceContent::getInfoContent, MceContent::getCreateTime,MceContent::getInfoType)
                 .like(StringUtils.isNotBlank(infoTitle),MceContent::getInfoTitle,infoTitle)
-                .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),MceContent::getCreateTime,
-                        startTime,endTime)
+                .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),MceContent::getCreateTime, startTime,endTime)
                 .eq(StringUtils.isNotBlank(infoType),MceContent::getInfoType, infoType)
-                .eq(MceContent::getCreateBy,SecurityUtils.getUsername())
-                .eq(MceContent::getTenantId,SecurityUtils.getTenantId())
+                .apply(DataScopeContextHolder.getDataScopeSql())
+//              .eq(MceContent::getCreateBy,SecurityUtils.getUsername())
+//              .eq(MceContent::getTenantId,SecurityUtils.getTenantId())
                 .orderByDesc(MceContent::getId);
         page = mceContentService.page(page,lambdaQuery1);
+
         if (CollectionUtils.isNotEmpty(page.getRecords())) {
             List<Integer> contentIds = new ArrayList<>();
             for (int i = 0; i < page.getRecords().size(); i++) {
@@ -144,6 +148,7 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
                 list.add(map);
             }
         }
+
         return new CommonPage<>(list,page.getTotal(),page.getCurrent(),page.getSize());
     }
 

+ 82 - 85
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysDeptServiceImpl.java

@@ -1,7 +1,10 @@
 package com.usky.system.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.datascope.annotation.DataScope;
+import com.ruoyi.common.datascope.context.DataScopeContextHolder;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.common.core.exception.BusinessException;
@@ -11,10 +14,13 @@ import com.usky.system.domain.SysDept;
 import com.usky.system.domain.SysRole;
 import com.usky.system.domain.SysUser;
 import com.usky.system.domain.constants.UserConstants;
+import com.usky.system.factory.RemoteLogFallbackFactory;
 import com.usky.system.mapper.SysDeptMapper;
 import com.usky.system.mapper.SysRoleMapper;
 import com.usky.system.service.ISysDeptService;
 import com.usky.system.service.vo.TreeSelect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -27,12 +33,13 @@ import java.util.stream.Collectors;
 
 /**
  * 部门管理 服务实现
- * 
+ *
  * @author yq
  */
 @Service
-public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDept> implements ISysDeptService
-{
+public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDept> implements ISysDeptService {
+    private static final Logger log = LoggerFactory.getLogger(SysDeptServiceImpl.class);
+
     @Autowired
     private SysDeptMapper deptMapper;
 
@@ -41,45 +48,61 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
 
     /**
      * 查询部门管理数据
-     * 
+     *
      * @param dept 部门信息
      * @return 部门信息集合
      */
     @Override
     @DataScope(deptAlias = "d")
-    public List<SysDept> selectDeptList(SysDept dept)
-    {
+    public List<SysDept> selectDeptList(SysDept dept) {
         dept.setTenantId(SecurityUtils.getTenantId());
+        log.debug(DataScopeContextHolder.getDataScopeSql());
         return deptMapper.selectDeptList(dept);
     }
 
+    @Override
+    @DataScope(deptAlias = "d")
+    public List<SysDept> selectDeptListByLamda(SysDept dept) {
+        LambdaQueryWrapper<SysDept> deptQuery = Wrappers.lambdaQuery();
+        deptQuery.eq(SysDept::getDelFlag, 0);
+        if (dept.getParentId() != null && dept.getParentId() != 0) {
+            deptQuery.eq(SysDept::getParentId, dept.getParentId());
+        }
+        if (StringUtils.isNotBlank(dept.getDeptName())){
+            deptQuery.like(SysDept::getDeptName, dept.getDeptName());
+        }
+        if (StringUtils.isNotBlank(dept.getStatus())){
+            deptQuery.eq(SysDept::getStatus, dept.getStatus());
+        }
+        deptQuery.orderByAsc(SysDept::getParentId, SysDept::getOrderNum)
+                .apply(DataScopeContextHolder.getDataScopeSql());
+        log.debug(DataScopeContextHolder.getDataScopeSql());
+
+        return deptMapper.selectList(deptQuery);
+    }
+
     /**
      * 构建前端所需要树结构
-     * 
+     *
      * @param depts 部门列表
      * @return 树结构列表
      */
     @Override
-    public List<SysDept> buildDeptTree(List<SysDept> depts)
-    {
+    public List<SysDept> buildDeptTree(List<SysDept> depts) {
         List<SysDept> returnList = new ArrayList<SysDept>();
         List<Long> tempList = new ArrayList<Long>();
-        for (SysDept dept : depts)
-        {
+        for (SysDept dept : depts) {
             tempList.add(dept.getDeptId());
         }
-        for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext();)
-        {
+        for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext(); ) {
             SysDept dept = (SysDept) iterator.next();
             // 如果是顶级节点, 遍历该父节点的所有子节点
-            if (!tempList.contains(dept.getParentId()))
-            {
+            if (!tempList.contains(dept.getParentId())) {
                 recursionFn(depts, dept);
                 returnList.add(dept);
             }
         }
-        if (returnList.isEmpty())
-        {
+        if (returnList.isEmpty()) {
             returnList = depts;
         }
         return returnList;
@@ -87,13 +110,12 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
 
     /**
      * 构建前端所需要下拉树结构
-     * 
+     *
      * @param depts 部门列表
      * @return 下拉树结构列表
      */
     @Override
-    public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts)
-    {
+    public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts) {
         List<SysDept> deptTrees = buildDeptTree(depts);
         return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
     }
@@ -122,83 +144,75 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
     }
 
 
-
     /**
      * 根据角色ID查询部门树信息
-     * 
+     *
      * @param roleId 角色ID
      * @return 选中部门列表
      */
     @Override
-    public List<Integer> selectDeptListByRoleId(Long roleId)
-    {
+    public List<Integer> selectDeptListByRoleId(Long roleId) {
         SysRole role = roleMapper.selectRoleById(roleId);
         return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly());
     }
 
     /**
      * 根据部门ID查询信息
-     * 
+     *
      * @param deptId 部门ID
      * @return 部门信息
      */
     @Override
-    public SysDept selectDeptById(Long deptId)
-    {
+    public SysDept selectDeptById(Long deptId) {
         return deptMapper.selectDeptById(deptId);
     }
 
     /**
      * 根据ID查询所有子部门(正常状态)
-     * 
+     *
      * @param deptId 部门ID
      * @return 子部门数
      */
     @Override
-    public int selectNormalChildrenDeptById(Long deptId)
-    {
-        return deptMapper.selectNormalChildrenDeptById(deptId,SecurityUtils.getTenantId());
+    public int selectNormalChildrenDeptById(Long deptId) {
+        return deptMapper.selectNormalChildrenDeptById(deptId, SecurityUtils.getTenantId());
     }
 
     /**
      * 是否存在子节点
-     * 
+     *
      * @param deptId 部门ID
      * @return 结果
      */
     @Override
-    public boolean hasChildByDeptId(Long deptId)
-    {
+    public boolean hasChildByDeptId(Long deptId) {
         int result = deptMapper.hasChildByDeptId(deptId);
         return result > 0 ? true : false;
     }
 
     /**
      * 查询部门是否存在用户
-     * 
+     *
      * @param deptId 部门ID
      * @return 结果 true 存在 false 不存在
      */
     @Override
-    public boolean checkDeptExistUser(Long deptId)
-    {
+    public boolean checkDeptExistUser(Long deptId) {
         int result = deptMapper.checkDeptExistUser(deptId);
         return result > 0 ? true : false;
     }
 
     /**
      * 校验部门名称是否唯一
-     * 
+     *
      * @param dept 部门信息
      * @return 结果
      */
     @Override
-    public String checkDeptNameUnique(SysDept dept)
-    {
+    public String checkDeptNameUnique(SysDept dept) {
         Long deptId = Objects.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
-        SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId(),SecurityUtils.getTenantId());
-        if (Objects.nonNull(info) && info.getDeptId().longValue() != deptId.longValue())
-        {
+        SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId(), SecurityUtils.getTenantId());
+        if (Objects.nonNull(info) && info.getDeptId().longValue() != deptId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -206,21 +220,19 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
 
     /**
      * 新增保存部门信息
-     * 
+     *
      * @param dept 部门信息
      * @return 结果
      */
     @Override
-    public int insertDept(SysDept dept)
-    {
-        if (dept.getParentId()==null){
+    public int insertDept(SysDept dept) {
+        if (dept.getParentId() == null) {
             dept.setParentId(0L);
             dept.setAncestors("0");
-        }else {
+        } else {
             SysDept info = deptMapper.selectDeptById(dept.getParentId());
             // 如果父节点不为正常状态,则不允许新增子节点
-            if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
-            {
+            if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) {
                 throw new BusinessException("部门停用,不允许新增");
             }
             dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
@@ -230,17 +242,15 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
 
     /**
      * 修改保存部门信息
-     * 
+     *
      * @param dept 部门信息
      * @return 结果
      */
     @Override
-    public int updateDept(SysDept dept)
-    {
+    public int updateDept(SysDept dept) {
         SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());
         SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId());
-        if (Objects.nonNull(newParentDept) && Objects.nonNull(oldDept))
-        {
+        if (Objects.nonNull(newParentDept) && Objects.nonNull(oldDept)) {
             String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();
             String oldAncestors = oldDept.getAncestors();
             dept.setAncestors(newAncestors);
@@ -248,8 +258,7 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
         }
         int result = deptMapper.updateDept(dept);
         if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && Objects.nonNull(dept.getAncestors())
-                && !StringUtils.equals("0", dept.getAncestors()))
-        {
+                && !StringUtils.equals("0", dept.getAncestors())) {
             // 如果该部门是启用状态,则启用该部门的所有上级部门
             updateParentDeptStatusNormal(dept);
         }
@@ -258,11 +267,10 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
 
     /**
      * 修改该部门的父级部门状态
-     * 
+     *
      * @param dept 当前部门
      */
-    private void updateParentDeptStatusNormal(SysDept dept)
-    {
+    private void updateParentDeptStatusNormal(SysDept dept) {
         String ancestors = dept.getAncestors();
         Long[] deptIds = Convert.toLongArray(ancestors);
         deptMapper.updateDeptStatusNormal(deptIds);
@@ -270,48 +278,41 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
 
     /**
      * 修改子元素关系
-     * 
-     * @param deptId 被修改的部门ID
+     *
+     * @param deptId       被修改的部门ID
      * @param newAncestors 新的父ID集合
      * @param oldAncestors 旧的父ID集合
      */
-    public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors)
-    {
+    public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) {
         List<SysDept> children = deptMapper.selectChildrenDeptById(deptId);
-        for (SysDept child : children)
-        {
+        for (SysDept child : children) {
             child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
         }
-        if (children.size() > 0)
-        {
+        if (children.size() > 0) {
             deptMapper.updateDeptChildren(children);
         }
     }
 
     /**
      * 删除部门管理信息
-     * 
+     *
      * @param deptId 部门ID
      * @return 结果
      */
     @Override
-    public int deleteDeptById(Long deptId)
-    {
+    public int deleteDeptById(Long deptId) {
         return deptMapper.deleteDeptById(deptId);
     }
 
     /**
      * 递归列表
      */
-    private void recursionFn(List<SysDept> list, SysDept t)
-    {
+    private void recursionFn(List<SysDept> list, SysDept t) {
         // 得到子节点列表
         List<SysDept> childList = getChildList(list, t);
         t.setChildren(childList);
-        for (SysDept tChild : childList)
-        {
-            if (hasChild(list, tChild))
-            {
+        for (SysDept tChild : childList) {
+            if (hasChild(list, tChild)) {
                 recursionFn(list, tChild);
             }
         }
@@ -320,15 +321,12 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
     /**
      * 得到子节点列表
      */
-    private List<SysDept> getChildList(List<SysDept> list, SysDept t)
-    {
+    private List<SysDept> getChildList(List<SysDept> list, SysDept t) {
         List<SysDept> tlist = new ArrayList<SysDept>();
         Iterator<SysDept> it = list.iterator();
-        while (it.hasNext())
-        {
+        while (it.hasNext()) {
             SysDept n = (SysDept) it.next();
-            if (Objects.nonNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
-            {
+            if (Objects.nonNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) {
                 tlist.add(n);
             }
         }
@@ -338,8 +336,7 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
     /**
      * 判断是否有子节点
      */
-    private boolean hasChild(List<SysDept> list, SysDept t)
-    {
+    private boolean hasChild(List<SysDept> list, SysDept t) {
         return getChildList(list, t).size() > 0 ? true : false;
     }
 }