Преглед изворни кода

fead:租户绑定数据源初始化菜单,租户校验,bug修复接口

xuezizhuo пре 1 година
родитељ
комит
3c3dbfe3d2

+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -104,9 +104,9 @@ public class SysLoginController {
             DataSource dataSource = dataSourceService.selectById(sysTenant.getDatasourceId());
             ajax.put("dataSource", dataSource);
             //调用数据引擎服务切换数据源接口
-            // restTemplate.postForEntity(DATA_ENGINE_IP, dataSource, DataSource.class);
+             restTemplate.postForEntity(DATA_ENGINE_IP, dataSource, DataSource.class);
             //调用表单引擎服务切换数据源接口
-            // restTemplate.postForEntity(DRAG_FORM_IP, dataSource, DataSource.class);
+             restTemplate.postForEntity(DRAG_FORM_IP, dataSource, DataSource.class);
         }
         return ajax;
     }

+ 11 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysTenantController.java

@@ -2,6 +2,8 @@ package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.annotation.Anonymous;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -101,4 +103,13 @@ public class SysTenantController extends BaseController
     {
         return toAjax(sysTenantService.deleteSysTenantByTenantIds(tenantIds));
     }
+
+    /**
+     * 初始化租户管理员菜单(租户管理员显示菜单)
+     */
+    @Anonymous
+    @GetMapping("/initTenantMenuData/{tenantId}")
+    public AjaxResult initTenantMenuData(@PathVariable Long tenantId){
+        return sysTenantService.initTenantMenuData(tenantId);
+    }
 }

+ 8 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -258,4 +258,12 @@ public class SysUserController extends BaseController
         }
         return success(deptService.selectDeptTreeList(dept));
     }
+
+    /**
+     * 查询所有用户
+     */
+    @GetMapping("/selectAllUser")
+    public AjaxResult selectAllUser(){
+        return AjaxResult.success(userService.selectAllUser());
+    }
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java

@@ -149,4 +149,9 @@ public interface SysMenuMapper
      * @return 菜单信息
      */
     SysMenu selectMenuByPath(String path);
+
+    /**
+     * 根据菜单编号查询
+     */
+    List<SysMenu> selectMenusByIds(List<Long> ids);
 }

+ 8 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMenuMapper.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.mapper;
 
 import com.ruoyi.system.domain.SysTenantMenu;
+import org.apache.ibatis.annotations.Param;
 
 public interface SysTenantMenuMapper {
 
@@ -9,4 +10,11 @@ public interface SysTenantMenuMapper {
      */
     int insertSysTenantMenu(SysTenantMenu sysTenantMenu);
 
+    /**
+     * 执行sql
+     * @param sql
+     * @return
+     */
+    int executeSqlFromFile(@Param("sql") String sql);
+
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -124,4 +124,9 @@ public interface SysUserMapper
      * @return 结果
      */
     public SysUser checkEmailUnique(String email);
+
+    /**
+     * 查询所有用户信息接口
+     */
+    List<SysUser> selectAllUser();
 }

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java

@@ -1,6 +1,8 @@
 package com.ruoyi.system.service;
 
 import java.util.List;
+
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysTenant;
 
 /**
@@ -58,4 +60,9 @@ public interface ISysTenantService
      * @return 结果
      */
     public int deleteSysTenantByTenantId(Long tenantId);
+
+    /**
+     * 初始化租户菜单关联表数据(租户默认菜单)
+     */
+    AjaxResult initTenantMenuData(Long tenantId);
 }

+ 6 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -203,4 +203,10 @@ public interface ISysUserService
      * @return 结果
      */
     public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
+
+    /**
+     * 查询所有用户
+     */
+    List<SysUser> selectAllUser();
+
 }

+ 13 - 7
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java

@@ -211,14 +211,20 @@ public class SysDeptServiceImpl implements ISysDeptService
     @Override
     public int insertDept(SysDept dept)
     {
-        SysDept info = deptMapper.selectDeptById(dept.getParentId());
-        // 如果父节点不为正常状态,则不允许新增子节点
-        if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
-        {
-            throw new ServiceException("部门停用,不允许新增");
+        if(dept.getParentId() != 0L){
+            SysDept info = deptMapper.selectDeptById(dept.getParentId());
+            // 如果父节点不为正常状态,则不允许新增子节点
+            if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
+            {
+                throw new ServiceException("部门停用,不允许新增");
+            }
+            dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
+            dept.setTenantId(info.getTenantId());
+        }else {
+            dept.setAncestors("0");
+            dept.setTenantId(SecurityUtils.getTenantId());
         }
-        dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
-        dept.setTenantId(info.getTenantId());
+
         return deptMapper.insertDept(dept);
     }
 

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java

@@ -122,6 +122,7 @@ public class SysMenuServiceImpl implements ISysMenuService
     @Override
     public Set<String> selectMenuPermsByRoleId(Long roleId)
     {
+        int i = 0;
         List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId);
         Set<String> permsSet = new HashSet<>();
         for (String perm : perms)

+ 83 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java

@@ -1,12 +1,28 @@
 package com.ruoyi.system.service.impl;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
+import java.util.Scanner;
+import java.util.stream.Collectors;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.SysTenantMenu;
+import com.ruoyi.system.mapper.SysMenuMapper;
+import com.ruoyi.system.mapper.SysTenantMenuMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.system.mapper.SysTenantMapper;
 import com.ruoyi.common.core.domain.entity.SysTenant;
 import com.ruoyi.system.service.ISysTenantService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 租户信息Service业务层处理
@@ -20,6 +36,12 @@ public class SysTenantServiceImpl implements ISysTenantService
     @Autowired
     private SysTenantMapper sysTenantMapper;
 
+    @Autowired
+    private SysTenantMenuMapper sysTenantMenuMapper;
+
+    @Autowired
+    private SysMenuMapper sysMenuMapper;
+
     /**
      * 查询租户信息
      * 
@@ -92,4 +114,65 @@ public class SysTenantServiceImpl implements ISysTenantService
     {
         return sysTenantMapper.deleteSysTenantByTenantId(tenantId);
     }
+
+    @Override
+    @Transactional
+    public AjaxResult initTenantMenuData(Long tenantId) {
+        List<SysMenu> list = new ArrayList<>();
+        try {
+            // 读取所有行
+            List<String> lines = Files.readAllLines(Paths.get("ruoyi-system\\src\\main\\resources\\sql\\initialize_sys_tenant_menu.sql"));
+            List<Long> ids = lines.stream().map(Long::parseLong).collect(Collectors.toList());
+            System.err.println(ids);
+            //根据菜单编号获取租户菜单信息
+            List<SysMenu> menus = sysMenuMapper.selectMenusByIds(ids);
+
+            //筛选出根节点
+            list = menus.stream().filter(menu -> 0L == menu.getParentId()).peek(
+                    //设置子节点信息
+                    menu -> menu.setChildren(getChildrenList(menu, menus))
+            ).collect(Collectors.toList());
+
+            //循环遍历数据新增
+            for (int i = 0; i < list.size(); i++){
+                printTree(list.get(i),0L,tenantId);
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return AjaxResult.success(list);
+    }
+    //获取子节点信息
+    private List<SysMenu> getChildrenList(SysMenu root, List<SysMenu> menus) {
+        List<SysMenu> list = menus.stream().filter(menu ->
+                //筛选出下一节点元素
+                Objects.equals(menu.getParentId(), root.getMenuId())).map(menu -> {
+            //递归set子节点
+            menu.setChildren(this.getChildrenList(menu, menus));
+            return menu;
+        }).collect(Collectors.toList());
+        return list;
+    }
+    //新增菜单
+    public void printTree(SysMenu root,Long parentId,Long tenantId) {
+        if (root == null) {
+            return;
+        }
+        //add菜单
+        root.setMenuId(null);
+        root.setParentId(parentId);
+        sysMenuMapper.insertMenu(root);
+        //add租户菜单关联表
+        SysTenantMenu sysTenantMenu = new SysTenantMenu();
+        sysTenantMenu.setTenantId(tenantId);
+        sysTenantMenu.setMenuId(root.getMenuId());
+        sysTenantMenuMapper.insertSysTenantMenu(sysTenantMenu);
+        for (SysMenu child : root.getChildren()) {  // 遍历子节点
+            printTree(child,root.getMenuId(),tenantId);  // 递归调用
+        }
+    }
+
+
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -541,4 +541,9 @@ public class SysUserServiceImpl implements ISysUserService
         }
         return successMsg.toString();
     }
+
+    @Override
+    public List<SysUser> selectAllUser() {
+        return userMapper.selectAllUser();
+    }
 }

+ 8 - 0
ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -254,4 +254,12 @@
 		where path = #{path}
 	</select>
 
+	<select id="selectMenusByIds" resultMap="SysMenuResult">
+		<include refid="selectMenuVo"></include>
+		where menu_id in
+		<foreach collection="list" item="id" open="(" close=")" separator=",">
+			#{id}
+		</foreach>
+	</select>
+
 </mapper> 

+ 4 - 0
ruoyi-system/src/main/resources/mapper/system/SysTenantMenuMapper.xml

@@ -9,4 +9,8 @@
         values(#{tenantId}, #{menuId})
     </insert>
 
+    <insert id="executeSqlFromFile">
+        ${sql}
+    </insert>
+
 </mapper>

+ 32 - 0
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -30,6 +30,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<association property="tenant"  column="tenant_id" javaType="SysTenant" resultMap="tenantResult" />
         <collection  property="roles"   javaType="java.util.List"           resultMap="RoleResult" />
     </resultMap>
+
+	<resultMap type="SysUser" id="SysUserInfoResult">
+		<id     property="userId"       column="user_id"      />
+		<result property="deptId"       column="dept_id"      />
+		<result property="tenantId"     column="tenant_id"    />
+		<result property="userName"     column="user_name"    />
+		<result property="nickName"     column="nick_name"    />
+		<result property="userType"     column="user_type"    />
+		<result property="email"        column="email"        />
+		<result property="phonenumber"  column="phonenumber"  />
+		<result property="sex"          column="sex"          />
+		<result property="avatar"       column="avatar"       />
+		<result property="password"     column="password"     />
+		<result property="status"       column="status"       />
+		<result property="delFlag"      column="del_flag"     />
+		<result property="loginIp"      column="login_ip"     />
+		<result property="loginDate"    column="login_date"   />
+		<result property="createBy"     column="create_by"    />
+		<result property="createTime"   column="create_time"  />
+		<result property="updateBy"     column="update_by"    />
+		<result property="updateTime"   column="update_time"  />
+		<result property="remark"       column="remark"       />
+	</resultMap>
 	
     <resultMap id="deptResult" type="SysDept">
         <id     property="deptId"    column="dept_id"     />
@@ -167,6 +190,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<if test="phonenumber != null and phonenumber != ''">
 			AND u.phonenumber like concat('%', #{phonenumber}, '%')
 		</if>
+		<if test="tenantId != null">
+			AND u.tenant_Id = #{tenantId}
+		</if>
 		<!-- 数据范围过滤 -->
 		${params.dataScope}
 	</select>
@@ -199,6 +225,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptId != null and deptId != 0">dept_id,</if>
  			<if test="userName != null and userName != ''">user_name,</if>
  			<if test="nickName != null and nickName != ''">nick_name,</if>
+ 		    <if test="userType != null and userType != ''">user_type,</if>
  			<if test="email != null and email != ''">email,</if>
  			<if test="avatar != null and avatar != ''">avatar,</if>
  			<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
@@ -214,6 +241,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="deptId != null and deptId != ''">#{deptId},</if>
  			<if test="userName != null and userName != ''">#{userName},</if>
  			<if test="nickName != null and nickName != ''">#{nickName},</if>
+			<if test="userType != null and userType != ''">#{userType},</if>
  			<if test="email != null and email != ''">#{email},</if>
  			<if test="avatar != null and avatar != ''">#{avatar},</if>
  			<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
@@ -270,5 +298,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			#{userId}
         </foreach> 
  	</delete>
+
+	<select id="selectAllUser" resultMap="SysUserInfoResult">
+		select * from sys_user where del_flag = '0'
+	</select>
 	
 </mapper> 

+ 34 - 0
ruoyi-system/src/main/resources/sql/initialize_sys_tenant_menu.sql

@@ -0,0 +1,34 @@
+1
+100
+101
+102
+103
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1016
+1017
+1018
+1019
+1073
+1077
+1078
+1082
+1083
+1084
+1103
+1104
+1106
+1107
+1109
+1172
+1073