Prechádzať zdrojové kódy

功能管理模块相关功能提交

songxinlu 3 rokov pred
rodič
commit
4639e11e67

+ 5 - 1
common/src/main/java/com/lantone/common/dto/MenuDTO.java

@@ -28,10 +28,14 @@ public class MenuDTO implements Serializable {
     private Long resourceId;
 
     @ApiModelProperty(value = "服务id")
-    private Long serviceId;
+    private Long softwareId;
+    @ApiModelProperty(value = "服务名称")
+    private String softwareName;
 
     @ApiModelProperty(value = "功能名称")
     private String name;
+    @ApiModelProperty(value = "功能名称")
+    private String parentName;
 
     @ApiModelProperty(value = "类型:0:目录,1菜单,2按钮,3:超链接")
     private String type;

+ 3 - 1
common/src/main/java/com/lantone/common/vo/MenuVO.java

@@ -28,9 +28,11 @@ public class MenuVO implements Serializable {
 
     @ApiModelProperty(value = "父级编号")
     private Long parentId;
+    @ApiModelProperty(value = "服务编号")
+    private Long softwareId;
 
     @ApiModelProperty(value = "服务id列表")
-    private List<Long> services;
+    private List<Long> softwares;
 
     @ApiModelProperty(value = "功能名称")
     private String name;

+ 4 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/MenuMapper.java

@@ -1,7 +1,10 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.MenuDTO;
+import com.lantone.common.vo.MenuVO;
 import com.lantone.dblayermbg.entity.Menu;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -10,5 +13,6 @@ import com.lantone.dblayermbg.entity.Menu;
  */
 public interface MenuMapper extends BaseMapper<Menu> {
 
+    MenuDTO getMenuById(@Param("menuVO") MenuVO menuVO);
 }
 

+ 1 - 1
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleSoftwareMenuMapper.java

@@ -23,6 +23,6 @@ public interface RoleSoftwareMenuMapper extends BaseMapper<RoleSoftwareMenu> {
      * @Return java.util.List<com.lantone.common.dto.MenuDTO>
      * @Date 2021/7/28
      */
-    List<MenuDTO> getMenus(@Param("roleSoftwareMenuVo") RoleSoftwareMenuVo roleSoftwareMenuVo);
+    List<MenuDTO> getMenus(@Param("roleSoftwareMenuVos") RoleSoftwareMenuVo roleSoftwareMenuVo);
 }
 

+ 4 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/SoftwareMenuMapper.java

@@ -2,6 +2,9 @@ package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.lantone.dblayermbg.entity.SoftwareMenu;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -10,5 +13,6 @@ import com.lantone.dblayermbg.entity.SoftwareMenu;
  */
 public interface SoftwareMenuMapper extends BaseMapper<SoftwareMenu> {
 
+    List<SoftwareMenu> getSoftwareMenu(@Param("menuId") Long menuId, @Param("softwareMenuIds") List<Long> softwareMenuIds);
 }
 

+ 36 - 1
dblayer-mbg/src/main/resources/mapper/MenuMapper.xml

@@ -1,5 +1,40 @@
 <?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">
 <mapper namespace="com.lantone.dblayermbg.mapper.MenuMapper">
-
+    <select id="getMenuById" resultType="com.lantone.common.dto.MenuDTO">
+        SELECT DISTINCT
+        sm.software_id softwareId,
+        IF (
+        sm.software_id = 1,
+        '运行质控',
+        '终末质控'
+        ) softwareName,
+        m.parent_id parentId,
+        pm.`name` parentName,
+        m.`name`,
+        m.type,
+        r.url premission,
+        m.order_no orderNo,
+        m.menu_describe menuDescribe,
+        m.remark,
+        m.`status`
+        FROM
+        sys_software_menu sm,
+        `sys_menu` m
+        LEFT JOIN sys_menu pm ON pm.id = m.parent_id
+        LEFT JOIN sys_menu_resource mr ON mr.menu_id = m.id
+        LEFT JOIN sys_resource r ON mr.resource_id = r.id
+        WHERE
+        sm.menu_id = m.id
+        AND pm.is_deleted = 'N'
+        AND m.is_deleted = 'N'
+        AND mr.is_deleted = 'N'
+        AND r.is_deleted = 'N'
+        <if test="menuVO.softwareId != null and menuVO.softwareId !=''">
+            AND sm.software_id = #{menuVO.softwareId}
+        </if>
+        <if test="menuVO.id != null and menuVO.id !=''">
+            AND m.id = #{menuVO.id}
+        </if>
+    </select>
 </mapper>

+ 4 - 4
dblayer-mbg/src/main/resources/mapper/RoleSoftwareMenuMapper.xml

@@ -24,12 +24,12 @@
         AND r.is_deleted = 'N'
         WHERE m.id = sm.menu_id
         AND sm.id = rsm.software_menu_id
-        <if test="roleSoftwareMenuVo.softwareId != null and roleSoftwareMenuVo.softwareId !=''">
-            AND sm.software_id = #{rolesoftwareMenuVo.softwareId}
+        <if test="roleSoftwareMenuVos.softwareId != null and roleSoftwareMenuVos.softwareId !=''">
+            AND sm.software_id = #{roleSoftwareMenuVos.softwareId}
         </if>
-        <if test="roleSoftwareMenuVo.roles !=null and roleSoftwareMenuVo.roles.size!=0">
+        <if test="roleSoftwareMenuVos.roles !=null and roleSoftwareMenuVos.roles.size!=0">
             AND rsm.role_id IN
-            <foreach collection="roleSoftwareMenuVo.roles" item="id" open="(" close=")" separator=",">
+            <foreach collection="roleSoftwareMenuVos.roles" item="id" open="(" close=")" separator=",">
                 #{id}
             </foreach>
         </if>

+ 16 - 1
dblayer-mbg/src/main/resources/mapper/SoftwareMenuMapper.xml

@@ -1,5 +1,20 @@
 <?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">
 <mapper namespace="com.lantone.dblayermbg.mapper.SoftwareMenuMapper">
-
+    <select id="getSoftwareMenu" resultType="com.lantone.dblayermbg.entity.SoftwareMenu">
+        SELECT
+        	*
+        FROM
+        	`sys_software_menu`
+        WHERE 1=1
+        <if test="menuId != null ">
+            AND	`menu_id` = #{menuId}
+        </if>
+        <if test="softwareMenuIds !=null and softwareMenuIds.size!=0">
+            AND `id` IN
+            <foreach collection="softwareMenuIds" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 2 - 1
gateway-service/src/main/resources/bootstrap.yml

@@ -96,4 +96,5 @@ secure:
       - "/security-center/func/management/addMenu"
       - "/security-center/func/management/updateMenu"
       - "/security-center/func/management/deleteMenu"
-      - "/security-center/func/management/disableMenu"
+      - "/security-center/func/management/disableMenu"
+      - "/security-center/func/management/getMenuById"

+ 12 - 1
security-center/src/main/java/com/lantone/security/facade/DataAuthHandleFacade.java

@@ -347,10 +347,21 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
                     Asserts.fail("系统对应数据权限明细未选择");
                 }
                 break;
-            default:
+            case 3:
+                if (serviceDataAuthVO.getDataAuthVO().getId() == null) {
+                    Asserts.fail("数据权限ID为空");
+                }
+                break;
+            case 5:
                 if (serviceDataAuthVO.getDataAuthVO().getId() == null) {
                     Asserts.fail("数据权限ID为空");
                 }
+                if (serviceDataAuthVO.getDataAuthVO().getStatus() == null) {
+                    Asserts.fail("status为空");
+                }
+                break;
+            default:
+
                 break;
         }
 

+ 165 - 58
security-center/src/main/java/com/lantone/security/facade/FuncManagementFacade.java

@@ -1,6 +1,7 @@
 package com.lantone.security.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.lantone.common.dto.MenuDTO;
 import com.lantone.common.exception.Asserts;
 import com.lantone.common.util.DateUtil;
@@ -28,6 +29,7 @@ import org.springframework.stereotype.Component;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @ClassName: FuncManagementFacade
@@ -80,7 +82,7 @@ public class FuncManagementFacade {
     }
 
     /**
-     * @param roleServiceMenuVo
+     * @param roleSoftwareMenuVo
      * @Method inputParamCheck
      * @Author songxl
      * @Version 1.0
@@ -88,14 +90,14 @@ public class FuncManagementFacade {
      * @Return void
      * @Date 2021/7/28
      */
-    private void inputParamCheck(RoleSoftwareMenuVo roleServiceMenuVo) {
-        if (roleServiceMenuVo == null) {
+    private void inputParamCheck(RoleSoftwareMenuVo roleSoftwareMenuVo) {
+        if (roleSoftwareMenuVo == null) {
             Asserts.fail("入参为空");
         }
-        if (ListUtil.isEmpty(roleServiceMenuVo.getRoles())) {
+        if (ListUtil.isEmpty(roleSoftwareMenuVo.getRoles())) {
             Asserts.fail("角色列表为空");
         }
-        if (roleServiceMenuVo.getSoftwareId() == null) {
+        if (roleSoftwareMenuVo.getSoftwareId() == null) {
             Asserts.fail("服务id为空");
         }
     }
@@ -124,7 +126,7 @@ public class FuncManagementFacade {
                 if (menuVO.getParentId() == null) {
                     Asserts.fail("功能菜单父级ID为空");
                 }
-                if (ListUtil.isEmpty(menuVO.getServices())) {
+                if (ListUtil.isEmpty(menuVO.getSoftwares())) {
                     Asserts.fail("功能菜单所属服务ID列表为空");
                 }
                 if (menuVO.getType() == null) {
@@ -141,17 +143,27 @@ public class FuncManagementFacade {
                 if (menuVO.getParentId() == null) {
                     Asserts.fail("功能菜单父级ID为空");
                 }
-                if (ListUtil.isEmpty(menuVO.getServices())) {
+                if (ListUtil.isEmpty(menuVO.getSoftwares())) {
                     Asserts.fail("功能菜单所属服务ID列表为空");
                 }
                 if (menuVO.getType() == null) {
                     Asserts.fail("功能菜单类型为空");
                 }
                 break;
-            default:
+            case 3:
+                if (menuVO.getId() == null) {
+                    Asserts.fail("功能菜单ID为空");
+                }
+                break;
+            case 5:
                 if (menuVO.getId() == null) {
                     Asserts.fail("功能菜单ID为空");
                 }
+                if (menuVO.getStatus() == null) {
+                    Asserts.fail("status为空");
+                }
+                break;
+            default:
                 break;
         }
     }
@@ -186,22 +198,20 @@ public class FuncManagementFacade {
      * @Date 2021/7/28
      */
     private Boolean addMenu(MenuVO menuVO) {
-        //1.入参校验
-        inputParamCheck(menuVO);
-        //2.插入sys_menu
-        //2.1插入sys_menu
+        //1.插入sys_menu
+        //1.1插入sys_menu
         Menu menu = new Menu();
         BeanUtils.copyProperties(menuVO, menu);
         menu.setGmtCreate(DateUtil.now());
         if (menuFacade.save(menu)) {
-            //2.2插入成功获取 menuID
+            //1.2插入成功获取 menuID
             Long menuID = menuFacade.list(new QueryWrapper<Menu>()
                     .eq("parent_id", menuVO.getParentId())
                     .eq("name", menuVO.getName())
                     .eq("type", menuVO.getType())
                     .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
             //插入sys_resource、sys_menu_resource
-            return saveMenuResource(menuVO,menuID);
+            return saveMenuResource(menuVO, menuID);
         } else {
             Asserts.fail("菜单详情插入失败");
         }
@@ -217,35 +227,36 @@ public class FuncManagementFacade {
      * @Return void
      * @Date 2021/7/28
      */
-    private boolean saveMenuResource(MenuVO menuVO,Long menuID) {
-        menuVO.getServices().stream().forEach(serviceId -> {
-            //2.3 判断该功能菜单是否有对应权限
-            if (ListUtil.isNotEmpty(menuVO.getPermissions())) {
-                menuVO.getPermissions().stream().forEach(permission -> {
-                    //2.4 有权限 则插入sys_resource
-                    Resource resource = new Resource();
-                    resource.setUrl(permission);
-                    resource.setGmtCreate(DateUtil.now());
-                    if (resourceFacade.save(resource)) {
-                        //2.5 插入成功获取对应的 resourceID
-                        Long resourceID = resourceFacade.list(new QueryWrapper<Resource>()
-                                .eq("url", resource.getUrl())
-                                .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
-                        //2.6 插入菜单和功能对应关系
-                        MenuResource menuResource = new MenuResource();
-                        menuResource.setMenuId(menuID);
-                        menuResource.setResourceId(resourceID);
-                        if (menuResourceFacade.save(menuResource)) {
-                        } else {
-                            Asserts.fail("菜单与资源权限插入失败");
-                        }
+    private boolean saveMenuResource(MenuVO menuVO, Long menuID) {
+        //2.3 判断该功能菜单是否有对应权限
+        if (ListUtil.isNotEmpty(menuVO.getPermissions())) {
+            menuVO.getPermissions().stream().forEach(permission -> {
+                //2.4 有权限 则插入sys_resource
+                Resource resource = new Resource();
+                resource.setUrl(permission);
+                resource.setGmtCreate(DateUtil.now());
+                if (resourceFacade.save(resource)) {
+                    //2.5 插入成功获取对应的 resourceID
+                    Long resourceID = resourceFacade.list(new QueryWrapper<Resource>()
+                            .select("id")
+                            .eq("url", resource.getUrl())
+                            .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
+                    //2.6 插入菜单和功能对应关系
+                    MenuResource menuResource = new MenuResource();
+                    menuResource.setMenuId(menuID);
+                    menuResource.setResourceId(resourceID);
+                    if (menuResourceFacade.save(menuResource)) {
                     } else {
-                        Asserts.fail("资源权限插入失败");
+                        Asserts.fail("菜单与资源权限插入失败");
                     }
-                });
-            }
-            //3.插入超级管理员对应系统 sys_service_menu和sys_role_service_menu
-            savaRoleServiceMenu(menuID, serviceId, 1l);
+                } else {
+                    Asserts.fail("资源权限插入失败");
+                }
+            });
+        }
+        menuVO.getSoftwares().stream().forEach(softwareId -> {
+            //3.插入超级管理员对应系统 sys_software_menu和sys_role_software_menu
+            savaRoleSoftwareMenu(menuID, softwareId, 1l);
         });
         return true;
     }
@@ -254,26 +265,26 @@ public class FuncManagementFacade {
      * @param menuID
      * @param softwareId
      * @param roleID
-     * @Method savaRoleServiceMenu
+     * @Method savaRoleSoftwareMenu
      * @Author songxl
      * @Version 1.0
-     * @Description插入超级管理员对应系统 sys_service_menu和sys_role_service_menu
+     * @Description插入超级管理员对应系统 sys_software_menu和sys_role_software_menu
      * @Return void
      * @Date 2021/7/28
      */
-    private void savaRoleServiceMenu(Long menuID, Long softwareId, Long roleID) {
-        SoftwareMenu serviceMenu = new SoftwareMenu();
-        serviceMenu.setMenuId(menuID);
-        serviceMenu.setSoftwareId(softwareId);
-        if (softwareMenuFacade.save(serviceMenu)) {
-            Long serviceMenuId = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
-                    .eq("software_id", serviceMenu.getSoftwareId())
-                    .eq("menu_id", serviceMenu.getMenuId())
+    private void savaRoleSoftwareMenu(Long menuID, Long softwareId, Long roleID) {
+        SoftwareMenu softwareMenu = new SoftwareMenu();
+        softwareMenu.setMenuId(menuID);
+        softwareMenu.setSoftwareId(softwareId);
+        if (softwareMenuFacade.save(softwareMenu)) {
+            Long softwareMenuId = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
+                    .eq("software_id", softwareMenu.getSoftwareId())
+                    .eq("menu_id", softwareMenu.getMenuId())
                     .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
-            RoleSoftwareMenu roleServiceMenu = new RoleSoftwareMenu();
-            roleServiceMenu.setRoleId(roleID);
-            roleServiceMenu.setSoftwareMenuId(serviceMenuId);
-            if (roleSoftwareMenuFacade.save(roleServiceMenu)) {
+            RoleSoftwareMenu roleSoftwareMenu = new RoleSoftwareMenu();
+            roleSoftwareMenu.setRoleId(roleID);
+            roleSoftwareMenu.setSoftwareMenuId(softwareMenuId);
+            if (roleSoftwareMenuFacade.save(roleSoftwareMenu)) {
 
             } else {
                 Asserts.fail("角色与服务菜单关系插入失败");
@@ -326,8 +337,10 @@ public class FuncManagementFacade {
      * @Date 2021/7/28
      */
     private Boolean disableDataAuth(MenuVO menuVO) {
-
-        return false;
+        return menuFacade.update(new UpdateWrapper<Menu>()
+                .set("status",menuVO.getStatus())
+                .eq("id",menuVO.getId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
     }
 
     /**
@@ -340,7 +353,14 @@ public class FuncManagementFacade {
      * @Date 2021/7/28
      */
     private Boolean deleteDataAuth(MenuVO menuVO) {
-
+        //1.删除原来menu关联插入的数据
+        if(menuFacade.remove(new UpdateWrapper<Menu>()
+                .eq("id",menuVO.getId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))){
+            return deleteMenuJoinDate(menuVO, 1l);
+        }else {
+            Asserts.fail("菜单详情删除失败");
+        }
         return false;
     }
 
@@ -354,7 +374,94 @@ public class FuncManagementFacade {
      * @Date 2021/7/28
      */
     private Boolean updateDataAuth(MenuVO menuVO) {
+        //1.删除原来menu关联插入的数据
+        if(deleteMenuJoinDate(menuVO, 1l)){
+            //2.修改sys_menu 菜单表
+            Menu menu = new Menu();
+            BeanUtils.copyProperties(menuVO, menu);
+           if( menuFacade.update(new UpdateWrapper<Menu>()
+                   .set("name",menu.getName())
+                   .set("type",menu.getType())
+                   .set("url",menu.getUrl())
+                   .set("order_no",menu.getOrderNo())
+                   .set("menu_describe",menu.getMenuDescribe())
+                   .set("remark",menu.getRemark())
+                   .set("status",menu.getStatus())
+                   .eq("id", menu.getId()))){
+               //3.重新插入上面删除的数据
+               return saveMenuResource(menuVO,menuVO.getId());
+           }
+        }
+        return false;
+    }
+    /**
+     * @Method deleteMenuJoinDate
+     * @Author songxl
+     * @Version  1.0
+     * @Description清除原菜单关联的数据
+     * @param menuVO
+     * @param roleId
+     * @Return boolean
+     * @Date 2021/7/29
+     */
+    private boolean deleteMenuJoinDate(MenuVO menuVO, Long roleId) {
 
+        //2.1删除sys_resource、sys_menu_resource原先对应menu的资源权限
+        List<MenuResource> menuResources = menuResourceFacade.list(new QueryWrapper<MenuResource>()
+                .eq("menu_id", menuVO.getId())
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+        //2.1有对应的资源权限
+        if (ListUtil.isNotEmpty(menuResources) && menuResources.get(0).getResourceId() != null) {
+            if (menuResourceFacade.remove(new UpdateWrapper<MenuResource>()
+                    .eq("id", menuResources.get(0).getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                if (resourceFacade.remove(new UpdateWrapper<Resource>()
+                        .eq("id", menuResources.get(0).getResourceId())
+                        .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                } else {
+                    Asserts.fail("原菜单对应资源详情删除失败");
+                }
+
+            } else {
+                Asserts.fail("原菜单对应资源关联关系删除失败");
+            }
+        }
+        //2.2删除超级管理员该菜单的管理sys_software_menu、sys_role_software_menu
+        List<Long> softwareMenuIds = roleSoftwareMenuFacade.list(new QueryWrapper<RoleSoftwareMenu>()
+                .eq("role_id", roleId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().map(RoleSoftwareMenu::getSoftwareMenuId).collect(Collectors.toList());
+        List<SoftwareMenu> softwareMenus = softwareMenuFacade.getBaseMapper().getSoftwareMenu(menuVO.getId(), softwareMenuIds);
+        //如果改菜单没有超级管理员对应关系
+        if(ListUtil.isEmpty(softwareMenus)){
+            return true;
+        }
+        //有删除
+        if (roleSoftwareMenuFacade.remove(new UpdateWrapper<RoleSoftwareMenu>()
+                .in("software_menu_id", softwareMenus.stream().map(SoftwareMenu::getId).collect(Collectors.toList()))
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+            if (softwareMenuFacade.remove(new UpdateWrapper<SoftwareMenu>()
+                    .in("id", softwareMenus.stream().map(SoftwareMenu::getId).collect(Collectors.toList()))
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                return true;
+            }else {
+                Asserts.fail("服务菜单关系清除失败");
+            }
+        }else {
+            Asserts.fail("角色对应服务菜单关系清除失败");
+        }
         return false;
     }
+
+    /**
+     * @Method getMenuById
+     * @Author songxl
+     * @Version  1.0
+     * @Description获取菜单详情
+     * @param menuVO
+     * @Return com.lantone.common.dto.MenuDTO
+     * @Date 2021/7/29
+     */
+    public MenuDTO getMenuById(MenuVO menuVO) {
+        return menuFacade.getBaseMapper().getMenuById(menuVO);
+    }
 }

+ 9 - 0
security-center/src/main/java/com/lantone/security/web/FuncManagementController.java

@@ -51,13 +51,21 @@ public class FuncManagementController {
             notes = "menuVO:功能菜单对象,必填<br>" +
                     "opeType:操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
     @PostMapping("/updateMenu")
+    @Transactional
     public CommonResult<Boolean> updateMenu(@RequestBody MenuVO menuVO) {
         return CommonResult.success(funcManagementFacade.CRUDOperation(menuVO));
     }
+    @ApiOperation(value = "获取菜单详情 [by:songxl]",
+            notes = "menuVO:功能菜单对象")
+    @PostMapping("/getMenuById")
+    public CommonResult<MenuDTO> getMenuById(@RequestBody MenuVO menuVO) {
+        return CommonResult.success(funcManagementFacade.getMenuById(menuVO));
+    }
     @ApiOperation(value = "删除功能菜单 [by:songxl]",
             notes = "menuVO:功能菜单对象,必填<br>" +
                     "opeType:操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
     @PostMapping("/deleteMenu")
+    @Transactional
     public CommonResult<Boolean> deleteMenu(@RequestBody MenuVO menuVO) {
         return CommonResult.success(funcManagementFacade.CRUDOperation(menuVO));
     }
@@ -65,6 +73,7 @@ public class FuncManagementController {
             notes = "menuVO:功能菜单对象,必填<br>" +
                     "opeType:操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
     @PostMapping("/disableMenu")
+    @Transactional
     public CommonResult<Boolean> disableMenu(@RequestBody MenuVO menuVO) {
         return CommonResult.success(funcManagementFacade.CRUDOperation(menuVO));
     }