shiqian 4 жил өмнө
parent
commit
376aa92b5d

+ 9 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteMenuService.java

@@ -23,5 +23,14 @@ public interface RemoteMenuService {
      */
     @GetMapping("/menu/listMenusByUserId/{userId}")
     List<SysMenu> listMenusByUserId(@PathVariable("userId") Long userId);
+
+    /**
+     * 根据用户ID查询按钮
+     *
+     * @param userId 用户ID
+     * @return 菜单列表
+     */
+    @GetMapping("/menu/listBtnByUserId/{userId}")
+    List<SysMenu> listBtnByUserId(@PathVariable("userId") Long userId);
 }
 

+ 9 - 0
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/collection/CollectionUtils.java

@@ -19,4 +19,13 @@ public class CollectionUtils {
     public static boolean containsIgnoreCase(Collection<String> list, String key) {
         return list.contains(key.toLowerCase()) || list.contains(key.toUpperCase());
     }
+
+    public static <T> String listToString(List<T> list){
+        StringBuilder buffer = new StringBuilder();
+        for (T t : list) {
+            buffer.append(t);
+        }
+
+        return buffer.toString();
+    }
 }

+ 13 - 1
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysMenuController.java

@@ -235,7 +235,19 @@ public class SysMenuController extends BaseController
     public AjaxResult getRouters()
     {
         Long userId = SecurityUtils.getUserId();
-        List<SysMenu> menus = menuService.selectMenuTreeById(userId);
+        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
         return AjaxResult.success(menuService.buildMenus(menus));
     }
+
+    /**
+     * 根据用户ID查询按钮
+     *
+     * @param userId 用户ID
+     * @return 菜单列表
+     */
+    @GetMapping("listBtnByUserId/{userId}")
+    public List<SysMenu> listBtnByUserId(@PathVariable("userId") Long userId) {
+        return menuService.listBtnByUserId(userId);
+    }
+
 }

+ 10 - 2
boman-modules/boman-system/src/main/java/com/boman/system/mapper/SysMenuMapper.java

@@ -53,10 +53,18 @@ public interface SysMenuMapper
     /**
      * 根据用户ID查询菜单
      * 
-     * @param id 用户ID
+     * @param userId 用户ID
+     * @return 菜单列表
+     */
+    public List<SysMenu> selectMenuTreeByUserId(Long userId);
+
+    /**
+     * 根据用户ID查询按钮
+     *
+     * @param userId 用户ID
      * @return 菜单列表
      */
-    public List<SysMenu> selectMenuTreeById(Long id);
+    List<SysMenu> listBtnByUserId(Long userId);
 
     /**
      * 根据角色ID查询菜单树信息

+ 9 - 1
boman-modules/boman-system/src/main/java/com/boman/system/service/ISysMenuService.java

@@ -59,7 +59,7 @@ public interface ISysMenuService
      * @param userId 用户ID
      * @return 菜单列表
      */
-    public List<SysMenu> selectMenuTreeById(Long userId);
+    public List<SysMenu> selectMenuTreeByUserId(Long userId);
 
     /**
      * 功能描述: 根据菜单id,找到此菜单以及子菜单下所有的叶子节点
@@ -193,4 +193,12 @@ public interface ISysMenuService
      */
     void recGetParent(List<SysMenu> allMenus, List<SysMenu> targetMenus, List<SysMenu> parentList);
 
+    /**
+     * 根据用户ID查询按钮
+     *
+     * @param userId 用户ID
+     * @return 菜单列表
+     */
+    List<SysMenu> listBtnByUserId(Long userId);
+
 }

+ 12 - 10
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysMenuServiceImpl.java

@@ -134,12 +134,12 @@ public class SysMenuServiceImpl implements ISysMenuService {
      * @return 菜单列表
      */
     @Override
-    public List<SysMenu> selectMenuTreeById(Long userId) {
+    public List<SysMenu> selectMenuTreeByUserId(Long userId) {
         List<SysMenu> menus = null;
         if (SecurityUtils.isAdmin(userId)) {
             menus = menuMapper.selectMenuTreeAll();
         } else {
-            menus = menuMapper.selectMenuTreeById(userId);
+            menus = menuMapper.selectMenuTreeByUserId(userId);
         }
         return getChildPerms(menus, 0);
     }
@@ -742,14 +742,16 @@ public class SysMenuServiceImpl implements ISysMenuService {
         }
     }
 
-    // 得到子节点列表
-//    List<SysMenu> childList = getChildList(list, t);
-//        t.setChildren(childList);
-//        for (SysMenu tChild : childList) {
-//        if (hasChild(list, tChild)) {
-//            recursionFn(list, tChild);
-//        }
-//    }
+    /**
+     * 根据用户ID查询按钮
+     *
+     * @param userId 用户ID
+     * @return 菜单列表
+     */
+    @Override
+    public List<SysMenu> listBtnByUserId(Long userId) {
+        return menuMapper.listBtnByUserId(userId);
+    }
 
     private void switchBtn(List<Map<String, Object>> containsHead, String btn, Object value) {
         Map<String, Object> jsonObject = new HashMap<>(2);

+ 20 - 3
boman-modules/boman-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -79,17 +79,34 @@
 		order by m.parent_id, m.order_num
 	</select>
     
-    <select id="selectMenuTreeById" parameterType="Long" resultMap="SysMenuResult">
+    <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
 		select distinct m.id, m.parent_id, m.menu_name, m.path, m.component, 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, m.create_by, m.update_by, m.update_time, m.remark, m.sys_table_name
 		from sys_menu m
 			 left join sys_role_menu rm on m.id = rm.menu_id
 			 left join sys_user_role ur on rm.role_id = ur.role_id
 			 left join sys_role ro on ur.role_id = ro.id
 			 left join sys_user u on ur.user_id = u.id
-		where u.id = #{id} and m.menu_type in ('M', 'C') and m.status = 0  AND ro.status = 0
+		where u.id = #{userId} and m.menu_type in ('M', 'C') and m.status = 0  AND ro.status = 0
 		order by m.parent_id, m.order_num
 	</select>
-	
+
+	<select id="listBtnByUserId" parameterType="Long" resultMap="SysMenuResult">
+		select distinct m.id, m.parent_id, m.menu_name, m.path, m.component, 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, m.create_by, m.update_by,
+		m.update_time, m.remark, m.sys_table_name
+		from sys_menu m
+		left join sys_role_menu rm on m.id = rm.menu_id
+		left join sys_user_role ur on rm.role_id = ur.role_id
+		left join sys_role ro on ur.role_id = ro.id
+		left join sys_user u on ur.user_id = u.id
+		where m.menu_type in ('F')
+		<if test="userId != null and userId != ''">
+			and u.id = #{userId}
+		</if>
+		and m.status = 0 AND ro.status = 0
+		order by m.parent_id, m.order_num
+	</select>
+
 	<select id="selectMenuListByRoleId" resultType="java.lang.Integer">
 		select m.id
 		from sys_menu m

+ 28 - 8
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -14,9 +14,12 @@ import com.boman.common.redis.service.RedisService;
 import com.boman.domain.GenTable;
 import com.boman.domain.GenTableColumn;
 import com.boman.domain.constant.*;
+import com.boman.domain.dto.RoleMenuDto;
 import com.boman.domain.exception.NoSuchFunctionException;
 import com.boman.gen.api.RemoteGenTableColumnService;
 import com.boman.gen.api.RemoteGenTableService;
+import com.boman.system.api.RemoteMenuService;
+import com.boman.system.api.domain.SysMenu;
 import com.boman.web.core.domain.ActionType;
 import com.boman.web.core.domain.FormDataDto;
 import com.boman.web.core.domain.RowResult;
@@ -82,6 +85,8 @@ public class TableServiceCmdService {
     private RemoteGenTableService remoteGenTableService;
     @Resource
     private RemoteGenTableColumnService remoteGenTableColumnService;
+    @Resource
+    private RemoteMenuService remoteMenuService;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TableServiceCmdService.class);
 
@@ -380,12 +385,7 @@ public class TableServiceCmdService {
             if (GenTableColumn.IS_QUERY.equalsIgnoreCase(column.getIsQuery())) {
                 String dictType = column.getDictType();
                 if (ObjectUtils.isNotEmpty(dictType)) {
-                    try {
-                        column.setSysDictData(listSysDictDataByType(dictType));
-                    } catch (Exception e) {
-                        System.out.println("sq_dictType = " + dictType);
-                        e.printStackTrace();
-                    }
+                    column.setSysDictData(listSysDictDataByType(dictType));
                 }
 
                 queryList.add(column);
@@ -394,13 +394,33 @@ public class TableServiceCmdService {
 
         jsonObject.put(FormDataConstant.QUERY_LIST, queryList);
         // genTable.getMenuRole() 暂时数据库没有数据,
-        jsonObject.put(FormDataConstant.BUTTON_LIST, Strings.nullToEmpty(genTable.getMenuRole()));
-
+        List<String> btns = buildBtnList();
+        jsonObject.put(FormDataConstant.BUTTON_LIST, Strings.nullToEmpty(CollectionUtils.listToString(btns)));
         jsonObject.put(ViewTypeConst.VIEW_TYPE, Strings.nullToEmpty(genTable.getTplCategory()));
         jsonObject.put(RULES, packRequireColumn(columns));
         return AjaxResult.success(jsonObject);
     }
 
+    /**
+     * 功能描述: 查找当前登陆人对应的btn
+     *
+     * @return java.util.List<java.lang.String>
+     */
+    private List<String> buildBtnList() {
+        List<SysMenu> menus = remoteMenuService.listBtnByUserId(SecurityUtils.getUserId());
+        if (isEmpty(menus)) {
+            return Collections.emptyList();
+        }
+
+        List<String> permses = map(menus, SysMenu::getPerms);
+        ArrayList<String> btns = Lists.newArrayListWithCapacity(permses.size());
+        for (String perms : permses) {
+            btns.add(RoleMenuDto.getBtnFromPerms(perms));
+        }
+
+        return btns;
+    }
+
     /**
      * 功能描述: 获取表单查询字段
      * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis