From 47fa44a60a9dffee1e122a72b61badc36726b300 Mon Sep 17 00:00:00 2001
From: liyj <1003249715@qq.com>
Date: Tue, 10 Sep 2024 16:29:02 +0800
Subject: [PATCH] 1、角色权限整改

---
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsMenuWebController.java    |  205 ++++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRole.java                      |   60 +
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsMenu.java                      |  108 ++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRoleFun.java                   |   59 +
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleService.java                 |  162 +++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RsRoleDTO.java                  |   38 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/bo/CtRoleBO.java                    |    4 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleFunMapper.java            |   72 +
 dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/MenuBaseEnum.java                   |   71 +
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleMapper.java               |   64 +
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleFunMapper.xml         |  142 ++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRolefunService.java              |   75 -
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleFunWebController.java |  180 +++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsMenuBO.java                    |   17 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRoleService.java                 |   32 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsMenuService.java                 |  133 ++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleFunBO.java                 |   17 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RoleMenuTreeDTO.java            |   13 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleBO.java                    |   17 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/constant/ByRoleBaseEnum.java               |  128 ++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/controller/web/CtRoleWebController.java    |   14 
 dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleBaseEnum.java                   |  196 ---
 dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/service/ByToGzService.java                 |   75 +
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java                 |    2 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsMenuMapper.xml            |  184 +++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleFunService.java              |  243 +++++
 /dev/null                                                                                           |   87 -
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleMapper.xml            |  136 ++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleWebController.java    |  165 +++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/controller/ByToGzController.java           |   64 +
 dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsMenuMapper.java               |   64 +
 31 files changed, 2,437 insertions(+), 390 deletions(-)

diff --git a/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/MenuBaseEnum.java b/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/MenuBaseEnum.java
new file mode 100644
index 0000000..060e1a6
--- /dev/null
+++ b/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/MenuBaseEnum.java
@@ -0,0 +1,71 @@
+package cn.huge.module.cust.constant;
+
+import cn.huge.module.cust.dto.CtUserDTO;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * @title: 系统角菜单相关常量枚举类
+ * @description: 系统角菜单相关常量枚举类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+public enum MenuBaseEnum {
+
+    /**
+     * 平台基础角色
+     */
+    MENU_APP_1("mediate", "调解中心"),
+    MENU_APP_2("operation", "客户中心");
+
+    /**
+     * 代码编号
+     */
+    private String index;
+
+    /**
+     * 描述
+     */
+    private String des;
+
+    public String getIndex() {
+        return index;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+
+    public String getDes() {
+        return des;
+    }
+
+    public void setDes(String desc) {
+        this.des = desc;
+    }
+
+    /**
+     * 构造方法
+     * @param index
+     * @param des
+     */
+    MenuBaseEnum(String index, String des) {
+        this.index = index;
+        this.des = des;
+    }
+
+    /**
+     * 静态方法
+     * @param index
+     * @return
+     */
+    public static String getDes(String index) {
+        for (MenuBaseEnum constantEnum : MenuBaseEnum.values()) {
+            if (constantEnum.getIndex().equals(index)) {
+                return constantEnum.des;
+            }
+        }
+        return null;
+    }
+}
diff --git a/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleBaseEnum.java b/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleBaseEnum.java
index 71cfb40..57f3749 100644
--- a/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleBaseEnum.java
+++ b/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleBaseEnum.java
@@ -4,8 +4,8 @@
 import org.apache.commons.lang3.StringUtils;
 
 /**
- * @title: 调解相关常量枚举类
- * @description: 调解相关常量枚举类
+ * @title: 系统角色相关常量枚举类
+ * @description: 系统角色相关常量枚举类
  * @company: hugeinfo
  * @author: liyj
  * @time: 2021-11-05 16:51:48
@@ -16,16 +16,10 @@
     /**
      * 平台基础角色
      */
-    ROLE_1("22_00024-1", "运维技术人员"),
+    ROLE_1("22_00024-1", "运维人员"),
     ROLE_2("22_00024-2", "超级管理员"),
-    ROLE_3("22_00024-3", "组织管理员"),
-    ROLE_4("22_00024-4", "人民调解员"),
-    ROLE_5("22_00024-5", "法官"),
-    ROLE_6("22_00024-6", "法院"),
-    ROLE_7("22_00024-7", "调度人员"),
-    ROLE_8("22_00024-8", "法官助理/书记员"),
-    ROLE_9("22_00024-9", "调委会管理员"),
-    ROLE_10("22_00024-10", "司法局");
+    ROLE_3("22_00024-3", "单位管理员"),
+    ROLE_4("22_00024-4", "纠纷化解人员");
 
     /**
      * 代码编号
@@ -78,25 +72,6 @@
     }
 
     /**
-     * 判断是否有超级管理员权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkAdminPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_1.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_2.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_7.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
      * 临时-演示用户赋予超级管理员角色
      * 判断是否有超级管理员权限
      * @param loginUser 角色代码编号,多个用,分开
@@ -110,166 +85,7 @@
         String roleCodes = loginUser.getRoleCodes();
         if (StringUtils.isNotEmpty(roleCodes)) {
             if (roleCodes.indexOf(ROLE_1.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_2.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_7.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否有组织管理员权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkUnitPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_3.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否有调委会管理员权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkTwhPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_9.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否有是个人权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkUserPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_4.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_5.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_8.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否是法院或组织管理员的权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkCourtOrUnitPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_3.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_6.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否是法院的权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkCourtPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_5.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_6.getIndex()) != -1 ||
-                    roleCodes.indexOf(ROLE_8.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否有法院管理权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkCourtAdminPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_6.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否有法官权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkJudgePower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_5.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否有调度权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkDispPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_7.getIndex()) != -1) {
-                return true;
-            } else {
-                return false;
-            }
-        }else {
-            return false;
-        }
-    }
-
-    /**
-     * 判断是否有司法局权限
-     * @param roleCodes 角色代码编号,多个用,分开
-     * @return Boolean
-     */
-    public static Boolean checkSfjPower(String roleCodes){
-        if (StringUtils.isNotEmpty(roleCodes)) {
-            if (roleCodes.indexOf(ROLE_10.getIndex()) != -1) {
+                    roleCodes.indexOf(ROLE_2.getIndex()) != -1) {
                 return true;
             } else {
                 return false;
diff --git a/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleFunBaseConsts.java b/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleFunBaseConsts.java
deleted file mode 100644
index ceab3d0..0000000
--- a/dyh-service/dyh-base/src/main/java/cn/huge/module/cust/constant/RoleFunBaseConsts.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package cn.huge.module.cust.constant;
-
-/**
- * @title: 用户相关常量类
- * @description: 用户相关常量
- * @company: hugeinfo
- * @author: liyj
- * @time: 2021-11-05 16:51:48
- * @version: 1.0.0
- */
-public class RoleFunBaseConsts {
-
-    /**
-     * 应用key
-     */
-    public static final String APP_1 = "mediate";
-    public static final String APP_2 = "operation";
-    public static final String APP_3 = "pay";
-    public static final String APP_4 = "minipay";
-    public static final String APP_5 = "tjipay";
-
-    /**
-     * 模块菜单key
-     */
-    public static final String MODULE_1 = "gzt";
-    public static final String MODULE_2 = "ddcl";
-    public static final String MODULE_3 = "ddzx";
-    public static final String MODULE_4 = "ddls";
-    public static final String MODULE_5 = "tjgl";
-    public static final String MODULE_6 = "djjf";
-    public static final String MODULE_7 = "aqws";
-    public static final String MODULE_8 = "djlb";
-    public static final String MODULE_9 = "qslb";
-    public static final String MODULE_10 = "wddb";
-    public static final String MODULE_11 = "wdtj";
-    public static final String MODULE_12 = "tjzl";
-    public static final String MODULE_13 = "tjda";
-    public static final String MODULE_14 = "wdsfqr";
-    public static final String MODULE_15 = "sfsq";
-    public static final String MODULE_16 = "sffa";
-    public static final String MODULE_17 = "sfsc";
-    public static final String MODULE_18 = "scls";
-    public static final String MODULE_19 = "sfqr";
-    public static final String MODULE_20 = "sfzl";
-    public static final String MODULE_21 = "rhgx";
-    public static final String MODULE_22 = "rmtjld";
-    public static final String MODULE_23 = "rmtjcs";
-    public static final String MODULE_24 = "sfjsh";
-    public static final String MODULE_25 = "sfld";
-    public static final String MODULE_26 = "wgld";
-    public static final String MODULE_27 = "yygl";
-    public static final String MODULE_28 = "ddgz";
-    public static final String MODULE_29 = "jcxxgl";
-    public static final String MODULE_30 = "ryxx";
-    public static final String MODULE_31 = "zzjg";
-    public static final String MODULE_32 = "jsqx";
-
-    /**
-     * 功能key
-     */
-    public static final String FUN_1 = "show";
-    public static final String FUN_2 = "registration";
-    public static final String FUN_3 = "sign";
-    public static final String FUN_4 = "refusal";
-}
-/**
- * -------------------_ooOoo_-------------------
- * ------------------o8888888o------------------
- * ------------------88" . "88------------------
- * ------------------(| -_- |)------------------
- * ------------------O\  =  /O------------------
- * ---------------____/`---'\____---------------
- * -------------.'  \\|     |//  `.-------------
- * ------------/  \\|||  :  |||//  \------------
- * -----------/  _||||| -:- |||||-  \-----------
- * -----------|   | \\\  -  /// |   |-----------
- * -----------| \_|  ''\---/''  |   |-----------
- * -----------\  .-\__  `-`  ___/-. /-----------
- * ---------___`. .'  /--.--\  `. . __----------
- * ------."" '<  `.___\_<|>_/___.'  >'"".-------
- * -----| | :  `- \`.;`\ _ /`;.`/ - ` : | |-----
- * -----\  \ `-.   \_ __\ /__ _/   .-` /  /-----
- * ======`-.____`-.___\_____/___.-`____.-'======
- * -------------------`=---='
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * ---------佛祖保佑---hugeinfo---永无BUG----------
- */
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/controller/ByToGzController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/controller/ByToGzController.java
new file mode 100644
index 0000000..8188e80
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/controller/ByToGzController.java
@@ -0,0 +1,64 @@
+package cn.huge.module.bytogz.controller;
+
+import cn.huge.base.common.dto.SelectTermDTO;
+import cn.huge.base.common.utils.ObjectUtils;
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.base.config.CurrentUser;
+import cn.huge.module.bytogz.service.ByToGzService;
+import cn.huge.module.ctrole.service.CtRoleService;
+import cn.huge.module.ctuser.domain.po.CtAccount;
+import cn.huge.module.ctuser.domain.po.CtUser;
+import cn.huge.module.ctuser.dto.CtUserInfoDTO;
+import cn.huge.module.ctuser.dto.CtUserSaveDTO;
+import cn.huge.module.ctuser.service.*;
+import cn.huge.module.cust.constant.UserBaseConsts;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @title: 白云数据割接为广州数据接口api
+ * @description: 白云数据割接为广州数据接口api
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-08-19 20:04:19
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/byToGz")
+public class ByToGzController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private ByToGzService service;
+
+    /**
+     * 用户角色更新-白云角色映射为广州角色
+     * @url {ctx}/api/byToGz/upUserole
+     * @return Object
+     */
+    @GetMapping("/upUserole")
+    public Object upUserole() {
+        try {
+            service.upBytoGzUserole();
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/service/ByToGzService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/service/ByToGzService.java
new file mode 100644
index 0000000..f45b832
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/bytogz/service/ByToGzService.java
@@ -0,0 +1,75 @@
+package cn.huge.module.bytogz.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.ctrole.constant.ByRoleBaseEnum;
+import cn.huge.module.ctuser.dao.mapper.CtUseroleMapper;
+import cn.huge.module.ctuser.domain.po.CtUser;
+import cn.huge.module.ctuser.domain.po.CtUserole;
+import cn.huge.module.ctuser.service.CtUserService;
+import cn.huge.module.ctuser.service.CtUseroleService;
+import cn.huge.module.cust.constant.RoleBaseEnum;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 白云数据割接为广州数据的业务逻辑处理
+ * @Description 白云数据割接为广州数据的业务逻辑处理
+ * @company hugeinfo
+ * @author liyj
+ * @Time 2024-08-19 20:04:19
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ByToGzService{
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Autowired
+    private CtUseroleService ctUseroleService;
+    @Autowired
+    private CtUserService ctUserService;
+
+    /**
+     * 用户角色更新-白云角色映射为广州角色
+     */
+    public void upBytoGzUserole(){
+        try{
+            List<CtUserole> ctUseroleList = ctUseroleService.list();
+            for (CtUserole ctUserole: ctUseroleList){
+                if (ctUserole.getRoleCode().equals(ByRoleBaseEnum.ROLE_5)
+                        || ctUserole.getRoleCode().equals(ByRoleBaseEnum.ROLE_7)
+                                || ctUserole.getRoleCode().equals(ByRoleBaseEnum.ROLE_8)){
+                    ctUseroleService.removeById(ctUserole.getId());
+                }else {
+                    RoleBaseEnum roleBaseEnum = ByRoleBaseEnum.getGzRole(ctUserole.getRoleCode());
+                    ctUserole.setRoleId(roleBaseEnum.getIndex());
+                    ctUserole.setRoleCode(roleBaseEnum.getIndex());
+                    ctUserole.setRoleName(roleBaseEnum.getDes());
+                    ctUseroleService.updateById(ctUserole);
+                }
+            }
+        }catch (Exception e){
+            log.error("[ByToGzService.upBytoGzUserole]调用失败,异常信息:"+e, e);
+            throw new ServiceException("ByToGzService.upBytoGzUserole", e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/constant/ByRoleBaseEnum.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/constant/ByRoleBaseEnum.java
new file mode 100644
index 0000000..dbe1d8f
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/constant/ByRoleBaseEnum.java
@@ -0,0 +1,128 @@
+package cn.huge.module.ctrole.constant;
+
+
+import cn.huge.module.cust.constant.RoleBaseEnum;
+
+/**
+ * @title: 白云多元化的角色相关常量枚举类
+ * @description: 白云多元化的角色相关常量枚举类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2021-11-05 16:51:48
+ * @version: 1.0.0
+ */
+public enum ByRoleBaseEnum {
+
+    /**
+     * 平台基础角色
+     */
+    ROLE_1("22_00024-1", "运维技术人员"),
+    ROLE_2("22_00024-2", "超级管理员"),
+    ROLE_3("22_00024-3", "组织管理员"),
+    ROLE_4("22_00024-4", "人民调解员"),
+    ROLE_5("22_00024-5", "法官"),
+    ROLE_6("22_00024-6", "法院"),
+    ROLE_7("22_00024-7", "调度人员"),
+    ROLE_8("22_00024-8", "法官助理/书记员"),
+    ROLE_9("22_00024-9", "调委会管理员"),
+    ROLE_10("22_00024-10", "司法局");
+
+    /**
+     * 代码编号
+     */
+    private String index;
+
+    /**
+     * 描述
+     */
+    private String des;
+
+    public String getIndex() {
+        return index;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+
+    public String getDes() {
+        return des;
+    }
+
+    public void setDes(String desc) {
+        this.des = desc;
+    }
+
+    /**
+     * 构造方法
+     * @param index
+     * @param des
+     */
+    ByRoleBaseEnum(String index, String des) {
+        this.index = index;
+        this.des = des;
+    }
+
+    /**
+     * 静态方法
+     * @param index
+     * @return
+     */
+    public static String getDes(String index) {
+        for (ByRoleBaseEnum constantEnum : ByRoleBaseEnum.values()) {
+            if (constantEnum.getIndex().equals(index)) {
+                return constantEnum.des;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 根据白云多元化的角色对应获取本平台的角色
+     * @param byRoleIndex 白云多元化的角色编号
+     * @return
+     */
+    public static RoleBaseEnum getGzRole(String byRoleIndex) {
+        if(ROLE_1.getIndex().equals(byRoleIndex)) {
+            return RoleBaseEnum.ROLE_1;
+        }
+
+        if(ROLE_2.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_2;
+        }
+
+        if(ROLE_3.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_3;
+        }
+
+        if(ROLE_4.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_4;
+        }
+
+        if(ROLE_5.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_4;
+        }
+
+        if(ROLE_6.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_3;
+        }
+
+        if(ROLE_7.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_4;
+        }
+
+        if(ROLE_8.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_4;
+        }
+
+        if(ROLE_9.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_3;
+        }
+
+        if(ROLE_10.getIndex().equals(byRoleIndex)){
+            return RoleBaseEnum.ROLE_3;
+        }
+
+        return RoleBaseEnum.ROLE_4;
+    }
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/controller/web/CtRoleWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/controller/web/CtRoleWebController.java
index f28d86a..1db725d 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/controller/web/CtRoleWebController.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/controller/web/CtRoleWebController.java
@@ -7,13 +7,12 @@
 import cn.huge.module.ctrole.domain.po.CtRole;
 import cn.huge.module.ctrole.service.CtRoleService;
 import cn.huge.module.ctrole.service.CtRolefunService;
-import cn.huge.module.ctuser.domain.bo.RoleTreeBO;
 import cn.huge.module.ctuser.service.CtUserService;
-import cn.huge.module.cust.dto.CtUserDTO;
+import cn.huge.module.rsoper.domain.dto.RsRoleDTO;
+import cn.huge.module.rsoper.service.RsRoleService;
 import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -21,7 +20,6 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -42,12 +40,10 @@
 
     @Autowired
     private CtRoleService service;
-
     @Autowired
     private CtUserService ctUserService;
-
     @Autowired
-    private CtRolefunService ctRolefunService;
+    private RsRoleService rsRoleService;
 
     /**
     * 获取请求URL参数
@@ -184,8 +180,8 @@
     @GetMapping("/getById")
     public Object getById(@RequestParam(value = "id") String id, @CurrentUser String userId) {
         try {
-            CtRoleBO bo = service.webGetById(id, userId);
-            return ReturnSucUtils.getRepInfo(bo);
+            RsRoleDTO rsRoleDTO = rsRoleService.webGetRoleMenu(id, userId);
+            return ReturnSucUtils.getRepInfo(rsRoleDTO);
         } catch (Exception e) {
             return ReturnFailUtils.getRepInfo();
         }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/bo/CtRoleBO.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/bo/CtRoleBO.java
index c690c54..c7957ba 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/bo/CtRoleBO.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/domain/bo/CtRoleBO.java
@@ -2,7 +2,7 @@
 
 import cn.huge.module.ctrole.domain.po.CtRole;
 import cn.huge.module.ctrole.domain.po.CtRolefun;
-import cn.huge.module.ctuser.domain.bo.RoleTreeBO;
+import cn.huge.module.rsoper.domain.dto.RoleMenuTreeDTO;
 import lombok.Data;
 
 import java.util.List;
@@ -27,5 +27,5 @@
     /**
      * 返回树形结构
      */
-    List<RoleTreeBO> roleTreeBOS;
+    List<RoleMenuTreeDTO> roleMenuTreeDTOS;
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRoleService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRoleService.java
index dbf45ca..6b53335 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRoleService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRoleService.java
@@ -7,9 +7,10 @@
 import cn.huge.module.ctrole.dao.mapper.CtRoleMapper;
 import cn.huge.module.ctrole.domain.bo.CtRoleBO;
 import cn.huge.module.ctrole.domain.po.CtRole;
-import cn.huge.module.ctuser.domain.bo.RoleTreeBO;
+import cn.huge.module.rsoper.domain.dto.RoleMenuTreeDTO;
 import cn.huge.module.ctuser.service.CtUserService;
-import cn.huge.module.cust.dto.CtUserDTO;
+import cn.huge.module.rsoper.domain.po.RsRole;
+import cn.huge.module.rsoper.service.RsRolefunService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.BeanUtils;
@@ -43,12 +44,12 @@
 
     @Autowired
     private UtilsClientImpl utilsClient;
-
     @Autowired
     private CtUserService ctUserService;
-
     @Autowired
     private CtRolefunService ctRolefunService;
+    @Autowired
+    private RsRolefunService rsRolefunService;
 
     /**
     * 更新对象
@@ -151,28 +152,5 @@
         ctRoleQueryWrapper.eq("unit_id", unitId).eq("role_code", roleId);
         CtRole ctRole = mapper.selectOne(ctRoleQueryWrapper);
         return ctRole;
-    }
-
-    /**
-     * 根据单位编号和角色编号查询
-     * @param id
-     * @param userId
-     * @return
-     */
-    public CtRoleBO webGetById(String id, String userId){
-        // 临时-演示用户赋予超级管理员角色
-        // 获取当前登录用户
-        CtUserDTO loginUser = ctUserService.clientGetUserAll(userId);
-        String acc = loginUser.getAcc();
-        if ("yanstjy".equals(acc) || "yansjdb".equals(acc)){
-            id = "2303191513151003";
-        }
-        CtRole ctRole = this.getById(id);
-        CtRoleBO bo = new CtRoleBO();
-        BeanUtils.copyProperties(ctRole,bo);
-        //查询角色权限
-        List<RoleTreeBO> roleTrees = ctRolefunService.getRolefunTree(ctRole.getId());
-        bo.setRoleTreeBOS(roleTrees);
-        return bo;
     }
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRolefunService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRolefunService.java
index 3734f66..2d87f5d 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRolefunService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctrole/service/CtRolefunService.java
@@ -7,21 +7,20 @@
 import cn.huge.module.constant.BaseConsts;
 import cn.huge.module.ctrole.dao.mapper.CtRolefunMapper;
 import cn.huge.module.ctrole.domain.po.CtRolefun;
-import cn.huge.module.ctuser.domain.bo.RoleTreeBO;
-import cn.huge.module.cust.constant.UserBaseConsts;
+import cn.huge.module.rsoper.domain.dto.RoleMenuTreeDTO;
+import cn.huge.module.rsoper.service.RsRolefunService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Maps;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.PostConstruct;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -45,6 +44,8 @@
 
     @Autowired
     private UtilsClientImpl utilsClient;
+    @Autowired
+    private RsRolefunService rsRolefunService;
 
     /**
     * 更新对象
@@ -134,71 +135,5 @@
             log.error("[CtRolefunService.saveCtRolefun]调用失败,异常信息:"+e, e);
             throw new ServiceException("CtRolefunService.saveCtRolefun", e);
         }
-    }
-
-    /**
-     * 查询角色树形结构
-     * @param roleId 角色编号
-     * @return List<RoleTreeBO> 树形结构
-     */
-    public List<RoleTreeBO> getRolefunTree(String roleId){
-        //查询所有的关系
-        Map<String, Object> terms = Maps.newHashMap();
-        terms.put("roleId",roleId);
-        List<CtRolefun> rolefuns = mapper.listTerms(terms);
-        List<CtRolefun> list = new ArrayList<>();
-        List<RoleTreeBO> treeBOS = new ArrayList<>();
-        if (rolefuns.size() > 0) {
-            //第一级菜单集合
-            for (int i = 0; i < rolefuns.size(); i++) {
-                // 一级菜单没有parentId
-                if (BaseConsts.ROOT.equals(rolefuns.get(i).getParentId())) {
-                    list.add(rolefuns.get(i));
-                }
-            }
-            // 为一级菜单设置子菜单,getChild是递归调用的
-            for (CtRolefun rolefun : list) {
-                RoleTreeBO treeBO = new RoleTreeBO();
-                treeBO.setLabel(rolefun.getPowerName());
-                treeBO.setValue(rolefun.getPowerId());
-                treeBO.setLabelType(rolefun.getPowerType());
-                treeBO.setAppClient(rolefun.getAppClient());
-                treeBO.setPowerTag(rolefun.getPowerTag());
-                treeBO.setPowerUrl(rolefun.getPowerUrl());
-                treeBO.setPowerIcon(rolefun.getPowerIcon());
-                treeBO.setChildren(getChild(rolefun.getPowerId(), rolefuns));
-                treeBOS.add(treeBO);
-            }
-        }
-        return treeBOS;
-    }
-
-    /**
-     * 递归查找子菜单
-     * @param id 当前菜单id
-     * @param ctRolefuns 要查找的列表
-     * @return List<TreeBO> 树形列表集合
-     */
-    private List<RoleTreeBO> getChild(String id, List<CtRolefun> ctRolefuns) {
-        // 子菜单
-        List<RoleTreeBO> childList = new ArrayList<>();
-        for (CtRolefun rolefun : ctRolefuns) {
-            // 遍历所有节点,将父菜单id与传过来的id比较
-            if (StringUtils.isNotBlank(rolefun.getParentId())) {
-                if (rolefun.getParentId().equals(id)) {
-                    RoleTreeBO roleTree = new RoleTreeBO();
-                    roleTree.setLabel(rolefun.getPowerName());
-                    roleTree.setValue(rolefun.getPowerId());
-                    roleTree.setLabelType(rolefun.getPowerType());
-                    roleTree.setAppClient(rolefun.getAppClient());
-                    roleTree.setPowerTag(rolefun.getPowerTag());
-                    roleTree.setPowerUrl(rolefun.getPowerUrl());
-                    roleTree.setPowerIcon(rolefun.getPowerIcon());
-                    roleTree.setChildren(getChild(rolefun.getPowerId(), ctRolefuns));
-                    childList.add(roleTree);
-                }
-            }
-        }
-        return childList;
     }
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java
index 888c322..5411841 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java
@@ -262,7 +262,7 @@
                     .select("unit_type");
             CtUnit ctUnit = ctUnitService.getOne(ctUnitQueryWrapper1);
             if (ctUnit.getUnitType() == UserBaseConsts.UNIT_TYPE_4) {
-                ctRoleQueryWrapper.ne("role_code", RoleBaseEnum.ROLE_9.getIndex());
+                ctRoleQueryWrapper.ne("role_code", RoleBaseEnum.ROLE_1.getIndex());
             }
             List<CtRole> ctRoleList = ctRoleService.list(ctRoleQueryWrapper);
             List<SelectTermDTO> roleSelectTerms = new ArrayList<>();
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsMenuWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsMenuWebController.java
new file mode 100644
index 0000000..81f83a6
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsMenuWebController.java
@@ -0,0 +1,205 @@
+package cn.huge.module.rsoper.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.rsoper.domain.po.RsMenu;
+import cn.huge.module.rsoper.service.RsMenuService;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @title: 平台功能目录表接口api-web端
+ * @description: 平台功能目录表接口api-web端
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 10:57:02
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/rsMenu")
+public class RsMenuWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private RsMenuService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 目录编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 目录类型,0:应用,1:模块,2:菜单,3:功能
+        String menuType = request.getParameter("menuType");
+        if (StringUtils.isNotBlank(menuType)){
+            terms.put("menuType", menuType);
+        }
+        // 目录标签
+        String menuTag = request.getParameter("menuTag");
+        if (StringUtils.isNotBlank(menuTag)){
+            terms.put("menuTag", menuTag);
+        }
+        // 目录名称
+        String menuName = request.getParameter("menuName");
+        if (StringUtils.isNotBlank(menuName)){
+            terms.put("menuName", menuName);
+        }
+        // 目录图标
+        String menuIcon = request.getParameter("menuIcon");
+        if (StringUtils.isNotBlank(menuIcon)){
+            terms.put("menuIcon", menuIcon);
+        }
+        // 目录访问url
+        String menuUrl = request.getParameter("menuUrl");
+        if (StringUtils.isNotBlank(menuUrl)){
+            terms.put("menuUrl", menuUrl);
+        }
+        // 目录描述
+        String menuDes = request.getParameter("menuDes");
+        if (StringUtils.isNotBlank(menuDes)){
+            terms.put("menuDes", menuDes);
+        }
+        // 所属应用客户端,1:web端,2:当事人小程序
+        String appClient = request.getParameter("appClient");
+        if (StringUtils.isNotBlank(appClient)){
+            terms.put("appClient", appClient);
+        }
+        // 所属应用类型,1:普通应用,2:付费应用
+        String appType = request.getParameter("appType");
+        if (StringUtils.isNotBlank(appType)){
+            terms.put("appType", appType);
+        }
+        // 同级目录排序
+        String sorts = request.getParameter("sorts");
+        if (StringUtils.isNotBlank(sorts)){
+            terms.put("sorts", sorts);
+        }
+        // 父模块编号,根级默认root
+        String parentId = request.getParameter("parentId");
+        if (StringUtils.isNotBlank(parentId)){
+            terms.put("parentId", parentId);
+        }
+        // 删除状态,0:未删除,1:已删除
+        String deleteStatus = request.getParameter("deleteStatus");
+        if (StringUtils.isNotBlank(deleteStatus)){
+            terms.put("deleteStatus", deleteStatus);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/rsMenu/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/rsMenu/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<RsMenu> rsMenuPage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", rsMenuPage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/rsMenu/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/rsMenu/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/rsMenu/saveRsMenu
+    * @param rsMenu 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveRsMenu")
+    public Object saveRsMenu(@RequestBody RsMenu rsMenu) {
+        try {
+            service.saveRsMenu(rsMenu);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleFunWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleFunWebController.java
new file mode 100644
index 0000000..db33c30
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleFunWebController.java
@@ -0,0 +1,180 @@
+package cn.huge.module.rsoper.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.rsoper.domain.po.RsRolefun;
+import cn.huge.module.rsoper.service.RsRolefunService;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @title: 系统角色功能权限表接口api-web端
+ * @description: 系统角色功能权限表接口api-web端
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 15:46:25
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/rsRolefun")
+public class RsRolefunWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private RsRolefunService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 角色功能编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 角色编号
+        String roleId = request.getParameter("roleId");
+        if (StringUtils.isNotBlank(roleId)){
+            terms.put("roleId", roleId);
+        }
+        // 权限编号
+        String menuId = request.getParameter("menuId");
+        if (StringUtils.isNotBlank(menuId)){
+            terms.put("menuId", menuId);
+        }
+        // 父级编号,根级默认为root
+        String parentId = request.getParameter("parentId");
+        if (StringUtils.isNotBlank(parentId)){
+            terms.put("parentId", parentId);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/rsRolefun/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/rsRolefun/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<RsRolefun> rsRolefunPage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", rsRolefunPage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/rsRolefun/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/rsRolefun/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/rsRolefun/saveRsRolefun
+    * @param rsRolefun 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveRsRolefun")
+    public Object saveRsRolefun(@RequestBody RsRolefun rsRolefun) {
+        try {
+            service.saveRsRolefun(rsRolefun);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 人工临时处理-给所有角色赋菜单权限
+     * @url {ctx}/api/web/rsRoleFun/setFun
+     * @return Object
+     */
+    @GetMapping("/setFun")
+    public Object setFun() {
+        try {
+            service.webSetFun();
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleWebController.java
new file mode 100644
index 0000000..43d98a9
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/controller/web/RsRoleWebController.java
@@ -0,0 +1,165 @@
+package cn.huge.module.rsoper.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.rsoper.domain.po.RsRole;
+import cn.huge.module.rsoper.service.RsRoleService;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @title: 系统角色定义表接口api-web端
+ * @description: 系统角色定义表接口api-web端
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 10:57:02
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/rsRole")
+public class RsRoleWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private RsRoleService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 角色编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 角色名称
+        String name = request.getParameter("name");
+        if (StringUtils.isNotBlank(name)){
+            terms.put("name", name);
+        }
+        // 角色类型,1:系统角色,2:用户自定义角色
+        String roleType = request.getParameter("roleType");
+        if (StringUtils.isNotBlank(roleType)){
+            terms.put("roleType", roleType);
+        }
+        // 删除状态,0:未删除,1:已删除
+        String deleteStatus = request.getParameter("deleteStatus");
+        if (StringUtils.isNotBlank(deleteStatus)){
+            terms.put("deleteStatus", deleteStatus);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/rsRole/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/rsRole/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<RsRole> rsRolePage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", rsRolePage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/rsRole/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/rsRole/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/rsRole/saveRsRole
+    * @param rsRole 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveRsRole")
+    public Object saveRsRole(@RequestBody RsRole rsRole) {
+        try {
+            service.saveRsRole(rsRole);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsMenuMapper.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsMenuMapper.java
new file mode 100644
index 0000000..fdda008
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsMenuMapper.java
@@ -0,0 +1,64 @@
+package cn.huge.module.rsoper.dao.mapper;
+
+import cn.huge.module.rsoper.domain.po.RsMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 平台功能目录表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: liyj
+* @time: 2024-09-10 10:57:02
+* @version 1.0.0
+*/
+@Repository
+public interface RsMenuMapper extends BaseMapper<RsMenu>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updateRsMenu(@Param("entity") RsMenu entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updateRsMenuTerms(@Param("entity") RsMenu entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deleteRsMenu(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<RsMenu>
+    */
+    List<RsMenu> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<RsMenu>
+    */
+    List<RsMenu> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleFunMapper.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleFunMapper.java
new file mode 100644
index 0000000..d1d2b04
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleFunMapper.java
@@ -0,0 +1,72 @@
+package cn.huge.module.rsoper.dao.mapper;
+
+import cn.huge.module.rsoper.domain.dto.RoleMenuTreeDTO;
+import cn.huge.module.rsoper.domain.po.RsRolefun;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 系统角色功能权限表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: liyj
+* @time: 2024-09-10 15:46:25
+* @version 1.0.0
+*/
+@Repository
+public interface RsRolefunMapper extends BaseMapper<RsRolefun>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updateRsRolefun(@Param("entity") RsRolefun entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updateRsRolefunTerms(@Param("entity") RsRolefun entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deleteRsRolefun(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<RsRolefun>
+    */
+    List<RsRolefun> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<RsRolefun>
+    */
+    List<RsRolefun> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+    /**
+     * 获取角色的菜单权限
+     * @param roleId
+     * @return
+     */
+    List<RoleMenuTreeDTO> listMenuByRoleId(@Param("roleId") String roleId);
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleMapper.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleMapper.java
new file mode 100644
index 0000000..1e7b5d2
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/RsRoleMapper.java
@@ -0,0 +1,64 @@
+package cn.huge.module.rsoper.dao.mapper;
+
+import cn.huge.module.rsoper.domain.po.RsRole;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 系统角色定义表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: liyj
+* @time: 2024-09-10 10:57:02
+* @version 1.0.0
+*/
+@Repository
+public interface RsRoleMapper extends BaseMapper<RsRole>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updateRsRole(@Param("entity") RsRole entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updateRsRoleTerms(@Param("entity") RsRole entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deleteRsRole(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<RsRole>
+    */
+    List<RsRole> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<RsRole>
+    */
+    List<RsRole> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsMenuMapper.xml b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsMenuMapper.xml
new file mode 100644
index 0000000..e29d730
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsMenuMapper.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 
+ * @title: 平台功能目录表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: liyj
+ * @time:2024-09-10 10:57:02
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.rsoper.dao.mapper.RsMenuMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.rsoper.domain.po.RsMenu">
+            <result property="id" column="id"/>
+            <result property="menuType" column="menu_type"/>
+            <result property="menuTag" column="menu_tag"/>
+            <result property="menuName" column="menu_name"/>
+            <result property="menuIcon" column="menu_icon"/>
+            <result property="menuUrl" column="menu_url"/>
+            <result property="menuDes" column="menu_des"/>
+            <result property="appClient" column="app_client"/>
+            <result property="appType" column="app_type"/>
+            <result property="sorts" column="sorts"/>
+            <result property="parentId" column="parent_id"/>
+            <result property="deleteStatus" column="delete_status"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_rs_menu</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        menu_type,
+        menu_tag,
+        menu_name,
+        menu_icon,
+        menu_url,
+        menu_des,
+        app_client,
+        app_type,
+        sorts,
+        parent_id,
+        delete_status,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.menuType != null">menu_type = #{entity.menuType},</if>
+            <if test="entity.menuTag != null">menu_tag = #{entity.menuTag},</if>
+            <if test="entity.menuName != null">menu_name = #{entity.menuName},</if>
+            <if test="entity.menuIcon != null">menu_icon = #{entity.menuIcon},</if>
+            <if test="entity.menuUrl != null">menu_url = #{entity.menuUrl},</if>
+            <if test="entity.menuDes != null">menu_des = #{entity.menuDes},</if>
+            <if test="entity.appClient != null">app_client = #{entity.appClient},</if>
+            <if test="entity.appType != null">app_type = #{entity.appType},</if>
+            <if test="entity.sorts != null">sorts = #{entity.sorts},</if>
+            <if test="entity.parentId != null">parent_id = #{entity.parentId},</if>
+            <if test="entity.deleteStatus != null">delete_status = #{entity.deleteStatus},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.menuType != null and terms.menuType !=''">
+                    and menu_type = #{terms.menuType}
+                </if>
+                <if test="terms.menuTag != null and terms.menuTag !=''">
+                    and menu_tag = #{terms.menuTag}
+                </if>
+                <if test="terms.menuName != null and terms.menuName !=''">
+                    and menu_name = #{terms.menuName}
+                </if>
+                <if test="terms.menuIcon != null and terms.menuIcon !=''">
+                    and menu_icon = #{terms.menuIcon}
+                </if>
+                <if test="terms.menuUrl != null and terms.menuUrl !=''">
+                    and menu_url = #{terms.menuUrl}
+                </if>
+                <if test="terms.menuDes != null and terms.menuDes !=''">
+                    and menu_des = #{terms.menuDes}
+                </if>
+                <if test="terms.appClient != null and terms.appClient !=''">
+                    and app_client = #{terms.appClient}
+                </if>
+                <if test="terms.appType != null and terms.appType !=''">
+                    and app_type = #{terms.appType}
+                </if>
+                <if test="terms.sorts != null and terms.sorts !=''">
+                    and sorts = #{terms.sorts}
+                </if>
+                <if test="terms.parentId != null and terms.parentId !=''">
+                    and parent_id = #{terms.parentId}
+                </if>
+                <if test="terms.deleteStatus = null and terms.deleteStatus =''">
+                    and delete_status = 0
+                </if>
+                <if test="terms.deleteStatus != null and terms.deleteStatus !=''">
+                    and delete_status = #{terms.deleteStatus}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updateRsMenu">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updateRsMenuTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deleteRsMenu">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleFunMapper.xml b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleFunMapper.xml
new file mode 100644
index 0000000..a0609c2
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleFunMapper.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 
+ * @title: 系统角色功能权限表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: liyj
+ * @time:2024-09-10 15:46:25
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.rsoper.dao.mapper.RsRolefunMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.rsoper.domain.po.RsRolefun">
+            <result property="id" column="id"/>
+            <result property="roleId" column="role_id"/>
+            <result property="menuId" column="menu_id"/>
+            <result property="parentId" column="parent_id"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_rs_rolefun</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        role_id,
+        menu_id,
+        parent_id,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.roleId != null">role_id = #{entity.roleId},</if>
+            <if test="entity.menuId != null">menu_id = #{entity.menuId},</if>
+            <if test="entity.parentId != null">parent_id = #{entity.parentId},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.roleId != null and terms.roleId !=''">
+                    and role_id = #{terms.roleId}
+                </if>
+                <if test="terms.menuId != null and terms.menuId !=''">
+                    and menu_id = #{terms.menuId}
+                </if>
+                <if test="terms.parentId != null and terms.parentId !=''">
+                    and parent_id = #{terms.parentId}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updateRsRolefun">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updateRsRolefunTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deleteRsRolefun">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+    <!--  获取角色的菜单权限  -->
+    <select id="listMenuByRoleId" resultType="cn.huge.module.rsoper.domain.dto.RoleMenuTreeDTO">
+        select t2.menu_name as label, t2.id as value, t2.menu_type as labelType,
+        t2.app_client as appClient, t2.menu_tag as powerTag, t2.menu_url as powerUrl,
+        t2.menu_icon as powerIcon, t2.parent_id as parentId
+        from dyh_rs_rolefun t1 left join dyh_rs_menu t2 on t1.menu_id = t2.id
+        where role_id = #{roleId}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleMapper.xml b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleMapper.xml
new file mode 100644
index 0000000..fab74fb
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/dao/mapper/xml/RsRoleMapper.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 
+ * @title: 系统角色定义表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: liyj
+ * @time:2024-09-10 10:57:02
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.rsoper.dao.mapper.RsRoleMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.rsoper.domain.po.RsRole">
+            <result property="id" column="id"/>
+            <result property="name" column="name"/>
+            <result property="roleType" column="role_type"/>
+            <result property="deleteStatus" column="delete_status"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_rs_role</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        name,
+        role_type,
+        delete_status,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.name != null">name = #{entity.name},</if>
+            <if test="entity.roleType != null">role_type = #{entity.roleType},</if>
+            <if test="entity.deleteStatus != null">delete_status = #{entity.deleteStatus},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.name != null and terms.name !=''">
+                    and name = #{terms.name}
+                </if>
+                <if test="terms.roleType != null and terms.roleType !=''">
+                    and role_type = #{terms.roleType}
+                </if>
+                <if test="terms.deleteStatus = null and terms.deleteStatus =''">
+                    and delete_status = 0
+                </if>
+                <if test="terms.deleteStatus != null and terms.deleteStatus !=''">
+                    and delete_status = #{terms.deleteStatus}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updateRsRole">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updateRsRoleTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deleteRsRole">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsMenuBO.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsMenuBO.java
new file mode 100644
index 0000000..35bae29
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsMenuBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.rsoper.domain.bo;
+
+import cn.huge.module.rsoper.domain.po.RsMenu;
+
+/**
+ * @title: 平台功能目录表业务扩展类
+ * @description: 平台功能目录表业务扩展类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 10:57:02
+ * @version: 1.0.0
+ * @see cn.huge.module.rsoper.domain.po.RsMenu
+ */
+public class RsMenuBO extends RsMenu {
+
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleBO.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleBO.java
new file mode 100644
index 0000000..c98a0be
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.rsoper.domain.bo;
+
+import cn.huge.module.rsoper.domain.po.RsRole;
+
+/**
+ * @title: 系统角色定义表业务扩展类
+ * @description: 系统角色定义表业务扩展类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 10:57:02
+ * @version: 1.0.0
+ * @see cn.huge.module.rsoper.domain.po.RsRole
+ */
+public class RsRoleBO extends RsRole {
+
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleFunBO.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleFunBO.java
new file mode 100644
index 0000000..9e3f1f6
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/bo/RsRoleFunBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.rsoper.domain.bo;
+
+import cn.huge.module.rsoper.domain.po.RsRolefun;
+
+/**
+ * @title: 系统角色功能权限表业务扩展类
+ * @description: 系统角色功能权限表业务扩展类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 15:46:25
+ * @version: 1.0.0
+ * @see cn.huge.module.rsoper.domain.po.RsRolefun
+ */
+public class RsRolefunBO extends RsRolefun {
+
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/domain/bo/RoleTreeBO.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RoleMenuTreeDTO.java
similarity index 79%
rename from dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/domain/bo/RoleTreeBO.java
rename to dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RoleMenuTreeDTO.java
index cf86616..da14bfd 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/domain/bo/RoleTreeBO.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RoleMenuTreeDTO.java
@@ -1,4 +1,4 @@
-package cn.huge.module.ctuser.domain.bo;
+package cn.huge.module.rsoper.domain.dto;
 
 import lombok.Data;
 
@@ -11,10 +11,10 @@
  * @author: chenx
  * @time: 2022-03-05 14:16:28
  * @version: 1.0.0
- * @see RoleTreeBO
+ * @see RoleMenuTreeDTO
  */
 @Data
-public class RoleTreeBO {
+public class RoleMenuTreeDTO {
 
     /**
      * 树形名称
@@ -52,7 +52,12 @@
     private String powerIcon;
 
     /**
+     * 父级编号
+     */
+    private String parentId;
+
+    /**
      * 子集
      */
-    private List<RoleTreeBO> children;
+    private List<RoleMenuTreeDTO> children;
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RsRoleDTO.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RsRoleDTO.java
new file mode 100644
index 0000000..c4a4dd7
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/dto/RsRoleDTO.java
@@ -0,0 +1,38 @@
+package cn.huge.module.rsoper.domain.dto;
+
+import cn.huge.module.ctrole.domain.po.CtRolefun;
+import cn.huge.module.rsoper.domain.po.RsRole;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @title: 系统角色定义表业务扩展类
+ * @description: 系统角色定义表业务扩展类
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 10:57:02
+ * @version: 1.0.0
+ * @see RsRole
+ */
+@Data
+public class RsRoleDTO extends RsRole {
+
+    /**
+     * 角色代码
+     */
+    private String roleCode;
+
+    /**
+     * 角色类型,1:系统角色,2:用户自定义角色
+     */
+    private Integer roleType;
+
+    /**
+     * 返回树形结构
+     */
+    List<RoleMenuTreeDTO> roleTreeBOS;
+
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsMenu.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsMenu.java
new file mode 100644
index 0000000..262477c
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsMenu.java
@@ -0,0 +1,108 @@
+package cn.huge.module.rsoper.domain.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @title: 平台功能目录表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 10:57:02
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_rs_menu")
+@Data
+public class RsMenu {
+
+    /**
+    * 目录编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 目录类型,0:应用,1:模块,2:菜单,3:功能
+    */
+    @TableField(value = "menu_type")
+    private Integer menuType;
+
+    /**
+    * 目录标签
+    */
+    @TableField(value = "menu_tag")
+    private String menuTag;
+
+    /**
+    * 目录名称
+    */
+    @TableField(value = "menu_name")
+    private String menuName;
+
+    /**
+    * 目录图标
+    */
+    @TableField(value = "menu_icon")
+    private String menuIcon;
+
+    /**
+    * 目录访问url
+    */
+    @TableField(value = "menu_url")
+    private String menuUrl;
+
+    /**
+    * 目录描述
+    */
+    @TableField(value = "menu_des")
+    private String menuDes;
+
+    /**
+    * 所属应用客户端,1:web端,2:当事人小程序
+    */
+    @TableField(value = "app_client")
+    private Integer appClient;
+
+    /**
+    * 所属应用类型,1:普通应用,2:付费应用
+    */
+    @TableField(value = "app_type")
+    private Integer appType;
+
+    /**
+    * 同级目录排序
+    */
+    @TableField(value = "sorts")
+    private Integer sorts;
+
+    /**
+    * 父模块编号,根级默认root
+    */
+    @TableField(value = "parent_id")
+    private String parentId;
+
+    /**
+    * 删除状态,0:未删除,1:已删除
+    */
+    @TableLogic
+    @TableField(value = "delete_status")
+    private Integer deleteStatus;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRole.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRole.java
new file mode 100644
index 0000000..3a6c8ef
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRole.java
@@ -0,0 +1,60 @@
+package cn.huge.module.rsoper.domain.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @title: 系统角色定义表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 10:57:02
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_rs_role")
+@Data
+public class RsRole {
+
+    /**
+    * 角色编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 角色名称
+    */
+    @TableField(value = "name")
+    private String name;
+
+    /**
+    * 角色类型,1:系统角色,2:用户自定义角色
+    */
+    @TableField(value = "role_type")
+    private Integer roleType;
+
+    /**
+    * 删除状态,0:未删除,1:已删除
+    */
+    @TableLogic
+    @TableField(value = "delete_status")
+    private Integer deleteStatus;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRoleFun.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRoleFun.java
new file mode 100644
index 0000000..1f8ffcb
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/domain/po/RsRoleFun.java
@@ -0,0 +1,59 @@
+package cn.huge.module.rsoper.domain.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @title: 系统角色功能权限表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: liyj
+ * @time: 2024-09-10 15:46:25
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_rs_rolefun")
+@Data
+public class RsRolefun {
+
+    /**
+    * 角色功能编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 角色编号
+    */
+    @TableField(value = "role_id")
+    private String roleId;
+
+    /**
+    * 权限编号
+    */
+    @TableField(value = "menu_id")
+    private String menuId;
+
+    /**
+    * 父级编号,根级默认为root
+    */
+    @TableField(value = "parent_id")
+    private String parentId;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsMenuService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsMenuService.java
new file mode 100644
index 0000000..a436f1a
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsMenuService.java
@@ -0,0 +1,133 @@
+package cn.huge.module.rsoper.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.rsoper.dao.mapper.RsMenuMapper;
+import cn.huge.module.rsoper.domain.po.RsMenu;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 平台功能目录表业务逻辑处理
+ * @Description 平台功能目录表业务逻辑处理
+ * @company hugeinfo
+ * @author liyj
+ * @Time 2024-09-10 10:57:02
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class RsMenuService extends ServiceImpl<RsMenuMapper, RsMenu>{
+
+    @Autowired
+    private RsMenuMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    public void updateRsMenu(RsMenu entity){
+        try{
+            mapper.updateRsMenu(entity);
+        }catch (Exception e){
+            log.error("[RsMenuService.updateRsMenu]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsMenuService.updateRsMenu", e);
+        }
+    }
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updateRsMenuTerms(RsMenu entity, Map<String, Object> terms){
+        try{
+            mapper.updateRsMenuTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[RsMenuService.updateRsMenuTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsMenuService.updateRsMenuTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deleteRsMenu(String id){
+        try{
+            mapper.deleteRsMenu(id);
+        }catch (Exception e){
+            log.error("[RsMenuService.deleteRsMenu]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsMenuService.deleteRsMenu", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<RsMenu> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<RsMenu> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<RsMenu> content = mapper.pageTerms(page, terms);
+        return new PageImpl<RsMenu>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param rsMenu 实体对象
+    */
+    public void saveRsMenu(RsMenu rsMenu){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(rsMenu.getId())){
+                rsMenu.setId(utilsClient.getNewTimeId());
+                rsMenu.setCreateTime(nowDate);
+            }
+            rsMenu.setUpdateTime(nowDate);
+            this.saveOrUpdate(rsMenu);
+        }catch (Exception e){
+            log.error("[RsMenuService.saveRsMenu]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsMenuService.saveRsMenu", e);
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleFunService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleFunService.java
new file mode 100644
index 0000000..56493d4
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleFunService.java
@@ -0,0 +1,243 @@
+package cn.huge.module.rsoper.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.constant.BaseConsts;
+import cn.huge.module.cust.constant.MenuBaseEnum;
+import cn.huge.module.cust.constant.RoleBaseEnum;
+import cn.huge.module.rsoper.dao.mapper.RsRolefunMapper;
+import cn.huge.module.rsoper.domain.dto.RoleMenuTreeDTO;
+import cn.huge.module.rsoper.domain.po.RsMenu;
+import cn.huge.module.rsoper.domain.po.RsRole;
+import cn.huge.module.rsoper.domain.po.RsRolefun;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 系统角色功能权限表业务逻辑处理
+ * @Description 系统角色功能权限表业务逻辑处理
+ * @company hugeinfo
+ * @author liyj
+ * @Time 2024-09-10 15:46:25
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class RsRolefunService extends ServiceImpl<RsRolefunMapper, RsRolefun>{
+
+    @Autowired
+    private RsRolefunMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+    @Autowired
+    private RsMenuService rsMenuService;
+    @Autowired
+    private RsRoleService rsRoleService;
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    public void updateRsRolefun(RsRolefun entity){
+        try{
+            mapper.updateRsRolefun(entity);
+        }catch (Exception e){
+            log.error("[RsRolefunService.updateRsRolefun]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRolefunService.updateRsRolefun", e);
+        }
+    }
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updateRsRolefunTerms(RsRolefun entity, Map<String, Object> terms){
+        try{
+            mapper.updateRsRolefunTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[RsRolefunService.updateRsRolefunTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRolefunService.updateRsRolefunTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deleteRsRolefun(String id){
+        try{
+            mapper.deleteRsRolefun(id);
+        }catch (Exception e){
+            log.error("[RsRolefunService.deleteRsRolefun]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRolefunService.deleteRsRolefun", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<RsRolefun> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<RsRolefun> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<RsRolefun> content = mapper.pageTerms(page, terms);
+        return new PageImpl<RsRolefun>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param rsRolefun 实体对象
+    */
+    public void saveRsRolefun(RsRolefun rsRolefun){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(rsRolefun.getId())){
+                rsRolefun.setId(utilsClient.getNewTimeId());
+                rsRolefun.setCreateTime(nowDate);
+            }
+            rsRolefun.setUpdateTime(nowDate);
+            this.saveOrUpdate(rsRolefun);
+        }catch (Exception e){
+            log.error("[RsRolefunService.saveRsRolefun]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRolefunService.saveRsRolefun", e);
+        }
+    }
+
+    /**
+     * 获取角色的菜单权限
+     * @param roleId
+     * @return
+     */
+    public List<RoleMenuTreeDTO> listMenuByRoleId(String roleId){
+        return mapper.listMenuByRoleId(roleId);
+    }
+
+    /**
+     * 查询角色菜单权限树形结构
+     * @param roleId 角色编号
+     * @return List<RoleTreeBO> 树形结构
+     */
+    public List<RoleMenuTreeDTO> getRolefunTree(String roleId){
+        try{
+            List<RoleMenuTreeDTO> roleMenuTreeDTOList = mapper.listMenuByRoleId(roleId);
+            List<RoleMenuTreeDTO> firstList = new ArrayList<>();
+            List<RoleMenuTreeDTO> treeList = new ArrayList<>();
+            if (CollectionUtils.isNotEmpty(roleMenuTreeDTOList)) {
+                //第一级菜单集合
+                for (RoleMenuTreeDTO roleMenuTreeDTO: roleMenuTreeDTOList) {
+                    // 一级菜单parentId为root
+                    if (BaseConsts.ROOT.equals(roleMenuTreeDTO.getParentId())) {
+                        firstList.add(roleMenuTreeDTO);
+                    }
+                }
+                // 为一级菜单设置子菜单,getChild是递归调用的
+                for (RoleMenuTreeDTO roleMenuTreeDTO : firstList) {
+                    roleMenuTreeDTO.setChildren(getChild(roleMenuTreeDTO.getValue(), roleMenuTreeDTOList));
+                    treeList.add(roleMenuTreeDTO);
+                }
+            }
+            return treeList;
+        }catch (Exception e){
+            log.error("[RsRolefunService.getRolefunTree]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRolefunService.getRolefunTree", e);
+        }
+    }
+
+    /**
+     * 递归查找子菜单
+     * @param id 当前菜单id
+     * @param roleMenuTreeDTOList 要查找的列表
+     * @return List<TreeBO> 树形列表集合
+     */
+    private List<RoleMenuTreeDTO> getChild(String id, List<RoleMenuTreeDTO> roleMenuTreeDTOList) {
+        // 子菜单
+        List<RoleMenuTreeDTO> childList = new ArrayList<>();
+        for (RoleMenuTreeDTO roleMenuTreeDTO: roleMenuTreeDTOList) {
+            // 遍历所有节点,将父菜单id与传过来的id比较
+            if (StringUtils.isNotBlank(roleMenuTreeDTO.getParentId())) {
+                if (roleMenuTreeDTO.getParentId().equals(id)) {
+                    roleMenuTreeDTO.setChildren(getChild(roleMenuTreeDTO.getValue(), roleMenuTreeDTOList));
+                    childList.add(roleMenuTreeDTO);
+                }
+            }
+        }
+        return childList;
+    }
+
+    /**
+     * 人工临时处理-给所有角色赋菜单权限
+     */
+    public void webSetFun(){
+        try{
+            // 查询客户中心
+            QueryWrapper<RsMenu> rsMenuQueryWrapper = new QueryWrapper<>();
+            rsMenuQueryWrapper.eq("menu_tag", MenuBaseEnum.MENU_APP_2.getIndex());
+            RsMenu khzxMenu = rsMenuService.getOne(rsMenuQueryWrapper);
+            // 给角色赋菜单权限
+            List<RsRole> rsRoleList = rsRoleService.list();
+            List<RsMenu> rsMenuList = rsMenuService.list();
+            for (RsRole rsRole: rsRoleList){
+                QueryWrapper<RsRolefun> rsRoleFunQueryWrapper = new QueryWrapper<>();
+                rsRoleFunQueryWrapper.eq("role_id", rsRole.getId());
+                mapper.delete(rsRoleFunQueryWrapper);
+                for (RsMenu rsMenu: rsMenuList){
+                    if (RoleBaseEnum.ROLE_4.getIndex().equals(rsRole.getId())){
+                        if (khzxMenu.getId().equals(rsMenu.getId()) || khzxMenu.getId().equals(rsMenu.getParentId())){
+                            continue;
+                        }
+                    }
+                    RsRolefun rsRolefun = new RsRolefun();
+                    rsRolefun.setId(utilsClient.getNewTimeId());
+                    rsRolefun.setRoleId(rsRole.getId());
+                    rsRolefun.setMenuId(rsMenu.getId());
+                    mapper.insert(rsRolefun);
+                }
+            }
+        }catch (Exception e){
+            log.error("[RsRoleFunService.webSetFun]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRoleFunService.webSetFun", e);
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleService.java
new file mode 100644
index 0000000..56af695
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/rsoper/service/RsRoleService.java
@@ -0,0 +1,162 @@
+package cn.huge.module.rsoper.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.ctrole.domain.bo.CtRoleBO;
+import cn.huge.module.rsoper.dao.mapper.RsRoleMapper;
+import cn.huge.module.rsoper.domain.dto.RoleMenuTreeDTO;
+import cn.huge.module.rsoper.domain.dto.RsRoleDTO;
+import cn.huge.module.rsoper.domain.po.RsRole;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 系统角色定义表业务逻辑处理
+ * @Description 系统角色定义表业务逻辑处理
+ * @company hugeinfo
+ * @author liyj
+ * @Time 2024-09-10 10:57:02
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class RsRoleService extends ServiceImpl<RsRoleMapper, RsRole>{
+
+    @Autowired
+    private RsRoleMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+    @Autowired
+    private RsRolefunService rsRolefunService;
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    public void updateRsRole(RsRole entity){
+        try{
+            mapper.updateRsRole(entity);
+        }catch (Exception e){
+            log.error("[RsRoleService.updateRsRole]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRoleService.updateRsRole", e);
+        }
+    }
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updateRsRoleTerms(RsRole entity, Map<String, Object> terms){
+        try{
+            mapper.updateRsRoleTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[RsRoleService.updateRsRoleTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRoleService.updateRsRoleTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deleteRsRole(String id){
+        try{
+            mapper.deleteRsRole(id);
+        }catch (Exception e){
+            log.error("[RsRoleService.deleteRsRole]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRoleService.deleteRsRole", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<RsRole> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<RsRole> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<RsRole> content = mapper.pageTerms(page, terms);
+        return new PageImpl<RsRole>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param rsRole 实体对象
+    */
+    public void saveRsRole(RsRole rsRole){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(rsRole.getId())){
+                rsRole.setId(utilsClient.getNewTimeId());
+                rsRole.setCreateTime(nowDate);
+            }
+            rsRole.setUpdateTime(nowDate);
+            this.saveOrUpdate(rsRole);
+        }catch (Exception e){
+            log.error("[RsRoleService.saveRsRole]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRoleService.saveRsRole", e);
+        }
+    }
+
+    /**
+     * 获取角色的菜单权限
+     * @param roleId
+     * @param userId
+     * @return
+     */
+    public RsRoleDTO webGetRoleMenu(String roleId, String userId){
+        try{
+            // 查询角色权限树形结构
+            List<RoleMenuTreeDTO> roleTrees = rsRolefunService.getRolefunTree(roleId);
+            // 封装角色权限信息
+            RsRole rsRole = this.getById(roleId);
+            RsRoleDTO rsRoleDTO = new RsRoleDTO();
+            BeanUtils.copyProperties(rsRole, rsRoleDTO);
+            rsRoleDTO.setRoleCode(rsRole.getId());
+            rsRoleDTO.setRoleTreeBOS(roleTrees);
+            return rsRoleDTO;
+        }catch (Exception e){
+            log.error("[RsRoleService.webGetRoleMenu]调用失败,异常信息:"+e, e);
+            throw new ServiceException("RsRoleService.webGetRoleMenu", e);
+        }
+    }
+
+}

--
Gitblit v1.8.0