Bläddra i källkod

Merge branch 'master' of http://49.233.37.222:3000/wjm/mec-cloud_IntelligentManufacturing_CRM

Zn 1 år sedan
förälder
incheckning
9b5d2e3df0
18 ändrade filer med 305 tillägg och 31 borttagningar
  1. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  2. 11 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysTenantController.java
  3. 8 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  4. 5 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
  5. 8 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTenantMenuMapper.java
  6. 5 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  7. 7 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTenantService.java
  8. 6 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  9. 13 7
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
  10. 1 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
  11. 83 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java
  12. 5 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  13. 9 0
      ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
  14. 4 0
      ruoyi-system/src/main/resources/mapper/system/SysTenantMenuMapper.xml
  15. 32 0
      ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
  16. 34 0
      ruoyi-system/src/main/resources/sql/initialize_sys_tenant_menu.sql
  17. 1 1
      ruoyi-ui/src/layout/components/TagsView/index.vue
  18. 71 21
      ruoyi-ui/src/views/system/role/selectUser.vue

+ 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();
+    }
 }

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

@@ -83,6 +83,7 @@
 	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
 		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0
+		and m.menu_id not in (select DISTINCT menu_id from sys_tenant_menu)
 		order by m.parent_id, m.order_num
 	</select>
 
@@ -254,4 +255,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

+ 1 - 1
ruoyi-ui/src/layout/components/TagsView/index.vue

@@ -261,7 +261,7 @@ export default {
         this.left = left;
       }
 
-      this.top = e.clientY;
+      this.top = 10;
       this.visible = true;
       this.selectedTag = tag;
     },

+ 71 - 21
ruoyi-ui/src/views/system/role/selectUser.vue

@@ -1,6 +1,12 @@
 <template>
   <!-- 授权用户 -->
-  <el-dialog title="选择用户" :visible.sync="visible" width="800px" top="5vh" append-to-body>
+  <el-dialog
+    title="选择用户"
+    :visible.sync="visible"
+    width="800px"
+    top="5vh"
+    append-to-body
+  >
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
       <el-form-item label="用户名称" prop="userName">
         <el-input
@@ -19,30 +25,68 @@
         />
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+          >重置</el-button
+        >
       </el-form-item>
     </el-form>
     <el-row>
-      <el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px">
+      <el-table
+        @row-click="clickRow"
+        ref="table"
+        :data="userList"
+        @selection-change="handleSelectionChange"
+        height="260px"
+      >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
-        <el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
-        <el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
-        <el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
+        <el-table-column
+          label="用户名称"
+          prop="userName"
+          :show-overflow-tooltip="true"
+        />
+        <el-table-column
+          label="用户昵称"
+          prop="nickName"
+          :show-overflow-tooltip="true"
+        />
+        <el-table-column
+          label="邮箱"
+          prop="email"
+          :show-overflow-tooltip="true"
+        />
+        <el-table-column
+          label="手机"
+          prop="phonenumber"
+          :show-overflow-tooltip="true"
+        />
         <el-table-column label="状态" align="center" prop="status">
           <template slot-scope="scope">
-            <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
+            <dict-tag
+              :options="dict.type.sys_normal_disable"
+              :value="scope.row.status"
+            />
           </template>
         </el-table-column>
-        <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <el-table-column
+          label="创建时间"
+          align="center"
+          prop="createTime"
+          width="180"
+        >
           <template slot-scope="scope">
             <span>{{ parseTime(scope.row.createTime) }}</span>
           </template>
         </el-table-column>
       </el-table>
       <pagination
-        v-show="total>0"
+        v-show="total > 0"
         :total="total"
         :page.sync="queryParams.pageNum"
         :limit.sync="queryParams.pageSize"
@@ -59,12 +103,12 @@
 <script>
 import { unallocatedUserList, authUserSelectAll } from "@/api/system/role";
 export default {
-  dicts: ['sys_normal_disable'],
+  dicts: ["sys_normal_disable"],
   props: {
     // 角色编号
     roleId: {
-      type: [Number, String]
-    }
+      type: [Number, String],
+    },
   },
   data() {
     return {
@@ -82,14 +126,20 @@ export default {
         pageSize: 10,
         roleId: undefined,
         userName: undefined,
-        phonenumber: undefined
-      }
+        phonenumber: undefined,
+        tenantId: undefined,
+      },
     };
   },
   methods: {
     // 显示弹框
     show() {
       this.queryParams.roleId = this.roleId;
+      this.queryParams.tenantId = this.$store.state.user.tenant.tenantId;
+      if (!this.queryParams.tenantId) {
+        this.$message.error("当前账号没有tenantId,请更换登陆账号");
+        return;
+      }
       this.getList();
       this.visible = true;
     },
@@ -98,11 +148,11 @@ export default {
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.userIds = selection.map(item => item.userId);
+      this.userIds = selection.map((item) => item.userId);
     },
     // 查询表数据
     getList() {
-      unallocatedUserList(this.queryParams).then(res => {
+      unallocatedUserList(this.queryParams).then((res) => {
         this.userList = res.rows;
         this.total = res.total;
       });
@@ -125,14 +175,14 @@ export default {
         this.$modal.msgError("请选择要分配的用户");
         return;
       }
-      authUserSelectAll({ roleId: roleId, userIds: userIds }).then(res => {
+      authUserSelectAll({ roleId: roleId, userIds: userIds }).then((res) => {
         this.$modal.msgSuccess(res.msg);
         if (res.code === 200) {
           this.visible = false;
           this.$emit("ok");
         }
       });
-    }
-  }
+    },
+  },
 };
 </script>