diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuResourceRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuResourceRequest.java index c27072da0..3640ada3f 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuResourceRequest.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuResourceRequest.java @@ -30,6 +30,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; +import java.util.List; /** * 菜单资源的请求 @@ -44,8 +45,27 @@ public class SysMenuResourceRequest extends BaseRequest { /** * 业务id不能为空 */ - @NotNull(message = "业务id不能为空") + @NotNull(message = "业务id不能为空", groups = {SysMenuResourceRequest.list.class, SysMenuResourceRequest.add.class}) @ChineseDescription("业务id") private Long businessId; + /** + * 绑定资源的类型,1:菜单,2:菜单下按钮 + */ + @NotNull(message = "绑定的资源类型不能为空", groups = {SysMenuResourceRequest.add.class}) + @ChineseDescription("绑定资源的类型") + private Integer businessType; + + /** + * 模块下所有的资源 + */ + @ChineseDescription("模块下所有的资源") + private List modularTotalResource; + + /** + * 模块下选中的资源 + */ + @ChineseDescription("模块下选中的资源") + private List selectedResource; + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuResourceController.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuResourceController.java index 829d1d312..53f2ce17d 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuResourceController.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuResourceController.java @@ -28,6 +28,7 @@ import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuResourceRequest; import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuResourceService; import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; @@ -57,9 +58,21 @@ public class SysMenuResourceController { * @date 2021/8/8 22:38 */ @GetResource(name = "获取菜单的资源分配列表", path = "/sysMenuResource/getMenuResourceList") - public ResponseData getMenuResourceList(@Validated SysMenuResourceRequest sysMenuResourceRequest) { + public ResponseData getMenuResourceList(@Validated(value = SysMenuResourceRequest.list.class) SysMenuResourceRequest sysMenuResourceRequest) { List menuResourceTree = sysMenuResourceService.getMenuResourceTree(sysMenuResourceRequest.getBusinessId()); return new SuccessResponseData(menuResourceTree); } + /** + * 设置菜单资源绑定 + * + * @author fengshuonan + * @date 2021/8/10 11:55 + */ + @PostResource(name = "设置菜单资源绑定", path = "/sysMenuResource/addMenuResourceBind") + public ResponseData addMenuResourceBind(@Validated(value = SysMenuResourceRequest.add.class) SysMenuResourceRequest sysMenuResourceRequest) { + sysMenuResourceService.addMenuResourceBind(sysMenuResourceRequest); + return new SuccessResponseData(); + } + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenuResource.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenuResource.java index e9b66d498..c53d1e603 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenuResource.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenuResource.java @@ -64,7 +64,7 @@ public class SysMenuResource extends BaseEntity implements Serializable { */ @TableField(value = "business_id") @ChineseDescription("菜单或按钮id") - private String businessId; + private Long businessId; /** * 资源的编码 diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java index 9464e1e01..a9ec2b831 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java @@ -24,6 +24,7 @@ */ package cn.stylefeng.roses.kernel.system.modular.menu.service; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuResourceRequest; import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenuResource; import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; import com.baomidou.mybatisplus.extension.service.IService; @@ -48,4 +49,12 @@ public interface SysMenuResourceService extends IService { */ List getMenuResourceTree(Long businessId); + /** + * 添加菜单和资源的绑定 + * + * @author fengshuonan + * @date 2021/8/10 13:58 + */ + void addMenuResourceBind(SysMenuResourceRequest sysMenuResourceRequest); + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java index d175a6727..97aadd6bf 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java @@ -24,16 +24,21 @@ */ package cn.stylefeng.roses.kernel.system.modular.menu.service.impl; +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuResourceRequest; import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenuResource; import cn.stylefeng.roses.kernel.system.modular.menu.mapper.SysMenuResourceMapper; import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuResourceService; import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -59,4 +64,31 @@ public class SysMenuResourceServiceImpl extends ServiceImpl modularTotalResource = sysMenuResourceRequest.getModularTotalResource(); + if (ObjectUtil.isNotEmpty(modularTotalResource)) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.in(SysMenuResource::getResourceCode, modularTotalResource); + wrapper.eq(SysMenuResource::getBusinessId, sysMenuResourceRequest.getBusinessId()); + this.remove(wrapper); + } + + // 再将该业务下,需要绑定的资源添加上 + List selectedResource = sysMenuResourceRequest.getSelectedResource(); + if (ObjectUtil.isNotEmpty(selectedResource)) { + ArrayList menuResources = new ArrayList<>(); + for (String resourceCode : selectedResource) { + SysMenuResource sysMenuResource = new SysMenuResource(); + sysMenuResource.setBusinessType(sysMenuResourceRequest.getBusinessType()); + sysMenuResource.setBusinessId(sysMenuResourceRequest.getBusinessId()); + sysMenuResource.setResourceCode(resourceCode); + menuResources.add(sysMenuResource); + } + this.saveBatch(menuResources, menuResources.size()); + } + } + }