修改 前端菜单 管理菜单,角色前后端分配 及通道创建失败的问题
This commit is contained in:
@@ -168,7 +168,9 @@ public class SysDeptController extends BaseController
|
||||
// List<SysMenu> sysMenuList = sysMenuService.selectMenuList(new SysMenu(), 1L, request.getHeader(LANGUAGE));
|
||||
SysDept sysDept = deptService.selectDeptById(dept.getParentId());
|
||||
List<SysMenu> sysMenuList = sysMenuService.selectMenuList(new SysMenu(), sysDept.getDeptUserId());
|
||||
List<SysMenu> sysMenuListF = sysMenuService.selectMenuListF(new SysMenu(), sysDept.getDeptUserId());
|
||||
Long[] menuIdList = sysMenuList.stream().map(SysMenu::getMenuId).toArray(Long[]::new);
|
||||
Long[] menuIdListF = sysMenuListF.stream().map(SysMenu::getMenuId).toArray(Long[]::new);
|
||||
SysRole sysRole = new SysRole();
|
||||
sysRole.setRoleName("管理员");
|
||||
sysRole.setRoleKey("manager");
|
||||
@@ -176,6 +178,7 @@ public class SysDeptController extends BaseController
|
||||
sysRole.setStatus("0");
|
||||
sysRole.setDeptId(dept.getDeptId());
|
||||
sysRole.setMenuIds(menuIdList);
|
||||
sysRole.setMenuFIds(menuIdListF);
|
||||
sysRoleService.insertRole(sysRole);
|
||||
|
||||
// 注册机构管理员用户
|
||||
|
||||
@@ -125,4 +125,13 @@ public class SysLoginController
|
||||
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId, request.getHeader(LANGUAGE));
|
||||
return AjaxResult.success(menuService.buildMenus(menus));
|
||||
}
|
||||
@ApiOperation("获取路由信息")
|
||||
@GetMapping("getBRouters")
|
||||
public AjaxResult getBusRouters(HttpServletRequest request)
|
||||
{
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
List<SysMenu> menus = menuService.selectMenuTreeByUserIdF(userId, request.getHeader(LANGUAGE));
|
||||
return AjaxResult.success(menuService.buildMenus(menus));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -42,6 +42,17 @@ public class SysMenuController extends BaseController
|
||||
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
|
||||
return success(menus);
|
||||
}
|
||||
/**
|
||||
* 获取菜单列表
|
||||
*/
|
||||
@ApiOperation("获取菜单列表")
|
||||
@PreAuthorize("@ss.hasPermi('system:menu:list')")
|
||||
@GetMapping("/listF")
|
||||
public AjaxResult listF(SysMenu menu)
|
||||
{
|
||||
List<SysMenu> menus = menuService.selectMenuListF(menu, getUserId());
|
||||
return success(menus);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据菜单编号获取详细信息
|
||||
@@ -54,6 +65,13 @@ public class SysMenuController extends BaseController
|
||||
return success(menuService.selectMenuById(menuId));
|
||||
}
|
||||
|
||||
@ApiOperation("根据菜单编号获取详细信息")
|
||||
@PreAuthorize("@ss.hasPermi('system:menu:query')")
|
||||
@GetMapping(value = "/F/{menuId}")
|
||||
public AjaxResult getInfoF(@PathVariable Long menuId)
|
||||
{
|
||||
return success(menuService.selectMenuByIdF(menuId));
|
||||
}
|
||||
/**
|
||||
* 获取菜单下拉树列表
|
||||
*/
|
||||
@@ -65,6 +83,14 @@ public class SysMenuController extends BaseController
|
||||
return success(menuService.buildMenuTreeSelect(menus));
|
||||
}
|
||||
|
||||
@ApiOperation("获取菜单下拉树列表")
|
||||
@GetMapping("/treeselectF")
|
||||
public AjaxResult treeselectF(SysMenu menu)
|
||||
{
|
||||
List<SysMenu> menus = menuService.selectMenuListF(menu, getUserId());
|
||||
return success(menuService.buildMenuTreeSelect(menus));
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载对应角色菜单列表树
|
||||
*/
|
||||
@@ -73,13 +99,23 @@ public class SysMenuController extends BaseController
|
||||
public AjaxResult roleMenuTreeselect(@RequestParam Long roleId, @RequestParam Long deptId)
|
||||
{
|
||||
List<SysMenu> menus = menuService.deptRoleMenuTreeselect(deptId, roleId);
|
||||
// List<SysMenu> menus = menuService.selectMenuList(getUserId(), request.getHeader(LANGUAGE));
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
|
||||
ajax.put("menus", menuService.buildMenuTreeSelect(menus));
|
||||
return ajax;
|
||||
}
|
||||
|
||||
@ApiOperation("加载对应角色菜单列表树")
|
||||
@GetMapping(value = "/roleMenuTreeselectF")
|
||||
public AjaxResult roleMenuTreeselectF(@RequestParam Long roleId, @RequestParam Long deptId)
|
||||
{
|
||||
List<SysMenu> menus = menuService.deptRoleMenuTreeselectF(deptId, roleId);
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
ajax.put("checkedKeys", menuService.selectMenuListByRoleIdF(roleId));
|
||||
ajax.put("menus", menuService.buildMenuTreeSelect(menus));
|
||||
return ajax;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增菜单
|
||||
*/
|
||||
@@ -100,10 +136,27 @@ public class SysMenuController extends BaseController
|
||||
menu.setCreateBy(getUsername());
|
||||
return toAjax(menuService.insertMenu(menu));
|
||||
}
|
||||
|
||||
@ApiOperation("新增菜单")
|
||||
@PreAuthorize("@ss.hasPermi('system:menu:add')")
|
||||
@Log(title = "菜单管理", businessType = BusinessType.INSERT)
|
||||
@PostMapping(value = "/F")
|
||||
public AjaxResult addF(@Validated @RequestBody SysMenu menu)
|
||||
{
|
||||
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUniqueF(menu)))
|
||||
{
|
||||
return error(StringUtils.format(MessageUtils.message("menu.add.failed.name.exists"), menu.getMenuName()));
|
||||
}
|
||||
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
|
||||
{
|
||||
return error(StringUtils.format(MessageUtils.message("menu.add.failed.path.not.valid"), menu.getMenuName()));
|
||||
}
|
||||
menu.setCreateBy(getUsername());
|
||||
return toAjax(menuService.insertMenuF(menu));
|
||||
}
|
||||
/**
|
||||
* 修改菜单
|
||||
*/
|
||||
|
||||
@ApiOperation("修改菜单")
|
||||
@PreAuthorize("@ss.hasPermi('system:menu:edit')")
|
||||
@Log(title = "菜单管理", businessType = BusinessType.UPDATE)
|
||||
@@ -126,9 +179,32 @@ public class SysMenuController extends BaseController
|
||||
return toAjax(menuService.updateMenu(menu));
|
||||
}
|
||||
|
||||
@ApiOperation("修改菜单")
|
||||
@PreAuthorize("@ss.hasPermi('system:menu:edit')")
|
||||
@Log(title = "菜单管理", businessType = BusinessType.UPDATE)
|
||||
@PutMapping(value = "/F")
|
||||
public AjaxResult editF(@Validated @RequestBody SysMenu menu)
|
||||
{
|
||||
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUniqueF(menu)))
|
||||
{
|
||||
return error(StringUtils.format(MessageUtils.message("menu.update.failed.name.exists"), menu.getMenuName()));
|
||||
}
|
||||
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
|
||||
{
|
||||
return error(StringUtils.format(MessageUtils.message("menu.update.failed.path.not.valid"), menu.getMenuName()));
|
||||
}
|
||||
else if (menu.getMenuId().equals(menu.getParentId()))
|
||||
{
|
||||
return error(StringUtils.format(MessageUtils.message("menu.update.failed.parent.not.valid"), menu.getMenuName()));
|
||||
}
|
||||
menu.setUpdateBy(getUsername());
|
||||
return toAjax(menuService.updateMenuF(menu));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
*/
|
||||
|
||||
@ApiOperation("删除菜单")
|
||||
@PreAuthorize("@ss.hasPermi('system:menu:remove')")
|
||||
@Log(title = "菜单管理", businessType = BusinessType.DELETE)
|
||||
@@ -145,6 +221,22 @@ public class SysMenuController extends BaseController
|
||||
}
|
||||
return toAjax(menuService.deleteMenuById(menuId));
|
||||
}
|
||||
@ApiOperation("删除菜单")
|
||||
@PreAuthorize("@ss.hasPermi('system:menu:remove')")
|
||||
@Log(title = "菜单管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/F/{menuId}")
|
||||
public AjaxResult removeF(@PathVariable("menuId") Long menuId)
|
||||
{
|
||||
if (menuService.hasChildByMenuId(menuId))
|
||||
{
|
||||
return warn(MessageUtils.message("menu.delete.failed.child.exists"));
|
||||
}
|
||||
if (menuService.checkMenuExistRoleF(menuId))
|
||||
{
|
||||
return warn(MessageUtils.message("menu.delete.failed.role.exists"));
|
||||
}
|
||||
return toAjax(menuService.deleteMenuByIdF(menuId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载对应部门菜单列表树
|
||||
@@ -156,4 +248,11 @@ public class SysMenuController extends BaseController
|
||||
List<SysMenu> menus = menuService.deptMenuTreeselect(deptId);
|
||||
return success(menuService.buildMenuTreeSelect(menus));
|
||||
}
|
||||
@ApiOperation("加载对应部门菜单列表树")
|
||||
@GetMapping(value = "/deptMenuTreeselectF/{deptId}")
|
||||
public AjaxResult deptMenuTreeselectF(@PathVariable("deptId") Long deptId)
|
||||
{
|
||||
List<SysMenu> menus = menuService.deptMenuTreeselectF(deptId);
|
||||
return success(menuService.buildMenuTreeSelect(menus));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,6 +61,8 @@ public class SysMenu extends BaseEntity
|
||||
/** 是否缓存(0缓存 1不缓存) */
|
||||
@ApiModelProperty("是否缓存(0缓存 1不缓存)")
|
||||
private String isCache;
|
||||
@ApiModelProperty("是否缓存(0后端 1业务)")
|
||||
private Integer bg;
|
||||
|
||||
/** 类型(M目录 C菜单 F按钮) */
|
||||
@ApiModelProperty("类型(M目录 C菜单 F按钮)")
|
||||
@@ -278,7 +280,15 @@ public class SysMenu extends BaseEntity
|
||||
{
|
||||
this.children = children;
|
||||
}
|
||||
|
||||
|
||||
public Integer getBg() {
|
||||
return bg;
|
||||
}
|
||||
|
||||
public void setBg(Integer bg) {
|
||||
this.bg = bg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
||||
@@ -61,6 +61,9 @@ public class SysRole extends BaseEntity
|
||||
@Excel(name = "角色状态", readConverterExp = "0=正常,1=停用")
|
||||
private String status;
|
||||
|
||||
private String im;
|
||||
private String ib;
|
||||
|
||||
/** 删除标志(0代表存在 2代表删除) */
|
||||
@ApiModelProperty("删除标志")
|
||||
private String delFlag;
|
||||
@@ -71,7 +74,9 @@ public class SysRole extends BaseEntity
|
||||
/** 菜单组 */
|
||||
@ApiModelProperty("菜单组")
|
||||
private Long[] menuIds;
|
||||
|
||||
/** 菜单组 */
|
||||
@ApiModelProperty("菜单组")
|
||||
private Long[] menuFIds;
|
||||
/** 部门组(数据权限) */
|
||||
@ApiModelProperty("部门组")
|
||||
private Long[] deptIds;
|
||||
@@ -105,6 +110,14 @@ public class SysRole extends BaseEntity
|
||||
*/
|
||||
private Boolean manager;
|
||||
|
||||
public Long[] getMenuFIds() {
|
||||
return menuFIds;
|
||||
}
|
||||
|
||||
public void setMenuFIds(Long[] menuFIds) {
|
||||
this.menuFIds = menuFIds;
|
||||
}
|
||||
|
||||
public Boolean getManager() {
|
||||
return manager;
|
||||
}
|
||||
@@ -300,6 +313,22 @@ public class SysRole extends BaseEntity
|
||||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
public String getIm() {
|
||||
return im;
|
||||
}
|
||||
|
||||
public void setIm(String im) {
|
||||
this.im = im;
|
||||
}
|
||||
|
||||
public String getIb() {
|
||||
return ib;
|
||||
}
|
||||
|
||||
public void setIb(String ib) {
|
||||
this.ib = ib;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
|
||||
@@ -31,13 +31,14 @@ public class LoginBody
|
||||
*/
|
||||
private String uuid;
|
||||
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phonenumber;
|
||||
|
||||
/**
|
||||
* 登录平台 1-web端;2-移动端;3-小程序
|
||||
* 登录平台 0-前端 1-管理端;2-移动端;3-小程序
|
||||
*/
|
||||
private Integer sourceType;
|
||||
|
||||
@@ -46,6 +47,9 @@ public class LoginBody
|
||||
*/
|
||||
private String smsCode;
|
||||
|
||||
|
||||
|
||||
|
||||
public Long getDeptId() {
|
||||
return deptId;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.xinda.framework.manager.factory.AsyncFactory;
|
||||
import com.xinda.framework.security.context.AuthenticationContextHolder;
|
||||
import com.xinda.system.service.ISysConfigService;
|
||||
import com.xinda.system.service.ISysDeptService;
|
||||
import com.xinda.system.service.ISysRoleService;
|
||||
import com.xinda.system.service.ISysUserService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
@@ -62,6 +63,8 @@ public class SysLoginService {
|
||||
@Resource
|
||||
private ISysDeptService sysDeptService;
|
||||
|
||||
@Resource
|
||||
private ISysRoleService sysRoleService;
|
||||
/**
|
||||
* 登录验证
|
||||
*
|
||||
@@ -175,9 +178,9 @@ public class SysLoginService {
|
||||
public String login(Long deptId,String username, String password, String code, String uuid, Integer sourceType, String language) {
|
||||
boolean captchaEnabled = configService.selectCaptchaEnabled();
|
||||
// 验证码开关
|
||||
if (captchaEnabled) {
|
||||
validateCaptcha(username, code, uuid);
|
||||
}
|
||||
// if (captchaEnabled) {
|
||||
// validateCaptcha(username, code, uuid);
|
||||
// }
|
||||
// 用户验证
|
||||
Authentication authentication = null;
|
||||
try {
|
||||
@@ -205,6 +208,19 @@ public class SysLoginService {
|
||||
if (null != sourceType && 1 == sourceType && null == userDeptId) {
|
||||
throw new ServiceException("web端只允许租户登录!");
|
||||
}
|
||||
if (null != sourceType && 1 == sourceType && !SysUser.isAdmin(loginUser.getUserId())) {
|
||||
int msize = sysRoleService.selectRoleByUserIdAndIm(loginUser.getUserId()).size();
|
||||
if(msize==0){
|
||||
throw new ServiceException("该用户无管理端权限!");
|
||||
}
|
||||
|
||||
}else if(null != sourceType && 0 == sourceType && !SysUser.isAdmin(loginUser.getUserId())){
|
||||
int bsize = sysRoleService.selectRoleByUserIdAndIb(loginUser.getUserId()).size();
|
||||
if(bsize==0){
|
||||
throw new ServiceException("该用户无前端权限!");
|
||||
}
|
||||
}
|
||||
|
||||
// if (!"admin".equals(loginUser.getUsername()) && null != sourceType) {
|
||||
// Long deptId = loginUser.getDeptId();
|
||||
// if (1 == sourceType && null == deptId) {
|
||||
|
||||
@@ -97,7 +97,7 @@ public class DeviceStatusConsumer {
|
||||
if (device.getAgenciesId() == null) {
|
||||
//设置删除状态 todo
|
||||
// device.setDelFlag("2");
|
||||
deviceService.deleteDeviceByDeviceId(device.getDeviceId());
|
||||
deviceService.deleteDeviceById(device.getDeviceId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ spring:
|
||||
timeout: 10000
|
||||
# 以下为单机配置
|
||||
# [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
|
||||
host: 127.0.0.1
|
||||
# host: 127.0.0.1
|
||||
host: redis
|
||||
# [必须修改] 端口号
|
||||
port: 6379
|
||||
# [可选] 数据库 DB
|
||||
@@ -27,8 +28,8 @@ server:
|
||||
# HTTPS配置, 默认不开启
|
||||
ssl:
|
||||
# 是否开启HTTPS访问 默认关闭
|
||||
# enabled: false
|
||||
enabled: true
|
||||
enabled: false
|
||||
# enabled: true
|
||||
# 证书文件路径,您需要使用实际的证书名称替换domain_name.jks。
|
||||
key-store: classpath:xinda.online.jks
|
||||
# 证书密码 修改为对应密码
|
||||
|
||||
@@ -73,5 +73,7 @@ public abstract class Server {
|
||||
log.warn("=>服务:{},在端口:{},已经停止!", config.name, config.port);
|
||||
}
|
||||
|
||||
|
||||
public void shutdownGracefully() {
|
||||
stop();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,6 @@ public class NettyConfig {
|
||||
|
||||
|
||||
|
||||
|
||||
public NettyConfig(int workerGroup,
|
||||
int businessGroup,
|
||||
int readerIdleTime,
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
//package com.xinda.mqtt.server;
|
||||
//
|
||||
//
|
||||
//import com.xinda.common.constant.XinDaConstant;
|
||||
//import com.xinda.mqtt.handler.adapter.MqttMessageAdapter;
|
||||
//import com.xinda.server.Server;
|
||||
//import groovy.util.logging.Slf4j;
|
||||
//import io.netty.bootstrap.AbstractBootstrap;
|
||||
//import io.netty.bootstrap.ServerBootstrap;
|
||||
//import io.netty.buffer.PooledByteBufAllocator;
|
||||
//import io.netty.channel.ChannelInitializer;
|
||||
//import io.netty.channel.ChannelOption;
|
||||
//import io.netty.channel.ServerChannel;
|
||||
//import io.netty.channel.epoll.Epoll;
|
||||
//import io.netty.channel.epoll.EpollEventLoopGroup;
|
||||
//import io.netty.channel.epoll.EpollServerSocketChannel;
|
||||
//import io.netty.channel.nio.NioEventLoopGroup;
|
||||
//import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||
//import io.netty.channel.socket.nio.NioSocketChannel;
|
||||
//import io.netty.handler.codec.mqtt.MqttDecoder;
|
||||
//import io.netty.handler.codec.mqtt.MqttEncoder;
|
||||
//import io.netty.handler.logging.LogLevel;
|
||||
//import io.netty.handler.logging.LoggingHandler;
|
||||
//import io.netty.handler.timeout.IdleStateHandler;
|
||||
//import io.netty.util.concurrent.DefaultThreadFactory;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.stereotype.Component;
|
||||
//
|
||||
//import java.util.concurrent.LinkedBlockingQueue;
|
||||
//import java.util.concurrent.ThreadPoolExecutor;
|
||||
//import java.util.concurrent.TimeUnit;
|
||||
//
|
||||
///**
|
||||
// * MQTT Broker 服务端,基于 Netty 实现。
|
||||
// * 负责接收客户端连接、处理 MQTT 协议相关的消息。
|
||||
// * 通过优化 Netty 配置提升高并发连接和消息处理性能。
|
||||
// *
|
||||
// * 主要优化点:
|
||||
// * 1. 增加 worker 线程数,提升并发处理能力。
|
||||
// * 2. 增大 backlog,防止高并发连接时丢失请求。
|
||||
// * 3. 启用 TCP 参数(如 TCP_NODELAY、SO_REUSEADDR),降低延迟。
|
||||
// * 4. 增大收发缓冲区,提升吞吐量。
|
||||
// * 5. 使用 PooledByteBufAllocator 提升内存分配效率。
|
||||
// * 6. 业务线程池支持突发流量。
|
||||
// */
|
||||
//@Component
|
||||
//@Slf4j
|
||||
//public class MqttServer2 extends Server {
|
||||
// /**
|
||||
// * MQTT 消息适配器,负责处理所有 MQTT 协议相关的消息。
|
||||
// */
|
||||
// @Autowired
|
||||
// private MqttMessageAdapter messageAdapter;
|
||||
//
|
||||
// /**
|
||||
// * 初始化 Netty 服务端,设置各项性能参数。
|
||||
// *
|
||||
// * @return Netty ServerBootstrap 实例
|
||||
// */
|
||||
// @Override
|
||||
// protected AbstractBootstrap initialize() {
|
||||
// // boss 线程负责接收连接,通常设置为 1 即可
|
||||
// int bossThreads = 1;
|
||||
// // worker 线程负责处理 IO,根据 CPU 核心数设置,提升并发能力
|
||||
// int workerThreads = Math.max(4, Runtime.getRuntime().availableProcessors() * 4);
|
||||
// Class<? extends ServerChannel> channelClass;
|
||||
// long startInit = System.currentTimeMillis();
|
||||
// // Epoll 优先(仅限 Linux),否则 NIO
|
||||
// if (Epoll.isAvailable()) {
|
||||
//// log.info("[性能优化] 使用 EpollEventLoopGroup");
|
||||
// bossGroup = new EpollEventLoopGroup(bossThreads, new DefaultThreadFactory(config.name + "-Boss", Thread.MAX_PRIORITY));
|
||||
// workerGroup = new EpollEventLoopGroup(workerThreads, new DefaultThreadFactory(config.name + "-Worker", Thread.MAX_PRIORITY));
|
||||
// channelClass = EpollServerSocketChannel.class;
|
||||
// } else {
|
||||
//// log.info("[性能优化] 使用 NioEventLoopGroup");
|
||||
// bossGroup = new NioEventLoopGroup(bossThreads, new DefaultThreadFactory(config.name + "-Boss", Thread.MAX_PRIORITY));
|
||||
// workerGroup = new NioEventLoopGroup(workerThreads, new DefaultThreadFactory(config.name + "-Worker", Thread.MAX_PRIORITY));
|
||||
// channelClass = NioServerSocketChannel.class;
|
||||
// }
|
||||
//
|
||||
// // 业务线程池,处理耗时操作,避免阻塞 Netty IO 线程
|
||||
// if (config.businessCore > 0) {
|
||||
// int core = Math.max(8, config.businessCore * 2);
|
||||
// int max = Math.max(16, config.businessCore * 4);
|
||||
// businessService = new ThreadPoolExecutor(
|
||||
// core,
|
||||
// max, // 允许突发时扩展
|
||||
// 120L, TimeUnit.SECONDS, // 空闲线程存活时间
|
||||
// new LinkedBlockingQueue<>(4096), // 增加队列长度,防止高并发丢任务
|
||||
// new DefaultThreadFactory(config.name + "-Business", true, Thread.NORM_PRIORITY),
|
||||
// new ThreadPoolExecutor.CallerRunsPolicy()); // 队列满时由调用者处理,防止任务丢失
|
||||
//// log.info("[性能优化] 业务线程池 core={} max={} queue=4096", core, max);
|
||||
// }
|
||||
// long endInit = System.currentTimeMillis();
|
||||
//// log.info("[性能日志] Netty 服务端初始化耗时: {} ms", (endInit - startInit));
|
||||
// return new ServerBootstrap()
|
||||
// // 绑定 boss 和 worker 线程组
|
||||
// .group(bossGroup, workerGroup)
|
||||
// // 指定服务端通道类型
|
||||
// .channel(channelClass)
|
||||
// // 设置 Netty 日志级别
|
||||
// .handler(new LoggingHandler(LogLevel.INFO))
|
||||
// // 设置服务端 accept 队列长度,提升高并发连接能力
|
||||
// .option(ChannelOption.SO_BACKLOG, 4096)
|
||||
// // 启用端口复用,提升端口重启和高并发下的可用性
|
||||
// .option(ChannelOption.SO_REUSEADDR, true)
|
||||
// // 启用 TCP 保活
|
||||
// .childOption(ChannelOption.SO_KEEPALIVE, Boolean.TRUE)
|
||||
// // 禁用 Nagle 算法,降低延迟
|
||||
// .childOption(ChannelOption.TCP_NODELAY, true)
|
||||
// // 增大发送缓冲区
|
||||
// .childOption(ChannelOption.SO_SNDBUF, 4 * 1024 * 1024)
|
||||
// // 增大接收缓冲区
|
||||
// .childOption(ChannelOption.SO_RCVBUF, 4 * 1024 * 1024)
|
||||
// // 使用池化内存分配器,提升内存分配效率
|
||||
// .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
|
||||
// // 初始化每个新连接的处理 pipeline
|
||||
// .childHandler(new ChannelInitializer<NioSocketChannel>() {
|
||||
// @Override
|
||||
// protected void initChannel(NioSocketChannel channel) {
|
||||
// long startConn = System.nanoTime();
|
||||
// // 客户端心跳检测机制,防止空闲连接占用资源
|
||||
// channel.pipeline()
|
||||
// .addFirst(XinDaConstant.SERVER.IDLE
|
||||
// , new IdleStateHandler(config.readerIdleTime, config.writerIdleTime, config.allIdleTime, TimeUnit.SECONDS))
|
||||
// // MQTT 协议解码器,支持最大 2MB 报文
|
||||
// .addLast(XinDaConstant.SERVER.DECODER, new MqttDecoder(1024 * 1024 * 2))
|
||||
// // MQTT 协议编码器
|
||||
// .addLast(XinDaConstant.SERVER.ENCODER, MqttEncoder.INSTANCE)
|
||||
// // 业务消息适配器,处理所有 MQTT 消息
|
||||
// .addLast(messageAdapter);
|
||||
// long endConn = System.nanoTime();
|
||||
//// log.debug("[性能日志] 新连接 pipeline 初始化耗时: {} μs", (endConn - startConn) / 1000);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
//}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.xinda.mqtt.server;
|
||||
|
||||
|
||||
import com.xinda.common.constant.XinDaConstant;
|
||||
import com.xinda.mqtt.handler.adapter.MqttMessageAdapter;
|
||||
import com.xinda.server.Server;
|
||||
import io.netty.bootstrap.AbstractBootstrap;
|
||||
import io.netty.bootstrap.ServerBootstrap;
|
||||
import io.netty.channel.ChannelInitializer;
|
||||
import io.netty.channel.ChannelOption;
|
||||
import io.netty.channel.nio.NioEventLoopGroup;
|
||||
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||
import io.netty.handler.codec.mqtt.MqttDecoder;
|
||||
import io.netty.handler.codec.mqtt.MqttEncoder;
|
||||
import io.netty.handler.logging.LogLevel;
|
||||
import io.netty.handler.logging.LoggingHandler;
|
||||
import io.netty.handler.timeout.IdleStateHandler;
|
||||
import io.netty.util.concurrent.DefaultThreadFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class MqttServer3 extends Server {
|
||||
|
||||
@Autowired
|
||||
private MqttMessageAdapter messageAdapter;
|
||||
|
||||
@Override
|
||||
protected AbstractBootstrap initialize() {
|
||||
bossGroup = new NioEventLoopGroup(1, new DefaultThreadFactory(config.name, Thread.MAX_PRIORITY));
|
||||
workerGroup = new NioEventLoopGroup(config.workerCore, new DefaultThreadFactory(config.name, Thread.MAX_PRIORITY));
|
||||
|
||||
if (config.businessCore > 0) {
|
||||
businessService = new ThreadPoolExecutor(config.businessCore, config.businessCore, 1L,
|
||||
TimeUnit.SECONDS, new LinkedBlockingQueue<>(), new DefaultThreadFactory(config.name, true, Thread.NORM_PRIORITY));
|
||||
}
|
||||
return new ServerBootstrap()
|
||||
.group(bossGroup, workerGroup)
|
||||
.channel(NioServerSocketChannel.class)
|
||||
.handler(new LoggingHandler(LogLevel.INFO))
|
||||
// 设置服务端 accept 队列长度,提升高并发连接能力
|
||||
.option(ChannelOption.SO_BACKLOG, 2048)
|
||||
// 启用端口复用,提升端口重启和高并发下的可用性
|
||||
.option(ChannelOption.SO_REUSEADDR, true)
|
||||
// 禁用 Nagle 算法,降低延迟
|
||||
.childOption(ChannelOption.TCP_NODELAY, true)
|
||||
.childOption(ChannelOption.SO_KEEPALIVE, Boolean.TRUE)
|
||||
.childHandler(new ChannelInitializer<NioSocketChannel>() {
|
||||
|
||||
@Override
|
||||
protected void initChannel(NioSocketChannel channel) {
|
||||
//客户端心跳检测机制
|
||||
channel.pipeline()
|
||||
.addFirst(XinDaConstant.SERVER.IDLE
|
||||
, new IdleStateHandler(config.readerIdleTime, config.writerIdleTime, config.allIdleTime, TimeUnit.SECONDS))
|
||||
.addLast(XinDaConstant.SERVER.DECODER, new MqttDecoder(1024 * 1024 * 2))
|
||||
.addLast(XinDaConstant.SERVER.ENCODER, MqttEncoder.INSTANCE)
|
||||
.addLast(messageAdapter);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,8 @@
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-all</artifactId> <!-- Use 'netty-all' for 4.0 or above -->
|
||||
<version>4.1.56.Final</version>
|
||||
<version>4.1.74.Final</version>
|
||||
<!-- <version>4.1.56.Final</version>-->
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
@@ -82,7 +82,18 @@ public class SipLayer {
|
||||
SipProvider startUdpListener() throws Exception {
|
||||
if (sipConfig.isEnabled()) {
|
||||
log.info("startUdpListener");
|
||||
ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getIp(), sipConfig.getPort(), "UDP");
|
||||
// ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getIp(), sipConfig.getPort(), "UDP");
|
||||
ListeningPoint udpListeningPoint;
|
||||
try {
|
||||
udpListeningPoint = sipStack.createListeningPoint(sipConfig.getIp(), sipConfig.getPort(), "UDP");
|
||||
} catch (Exception e) {
|
||||
log.error("Bind failed on {}:{}, trying backup IP",sipConfig.getIp(), sipConfig.getPort());
|
||||
udpListeningPoint = sipStack.createListeningPoint(
|
||||
"0.0.0.0",
|
||||
sipConfig.getPort(),
|
||||
"UDP"
|
||||
);
|
||||
}
|
||||
SipProvider udpSipProvider = sipStack.createSipProvider(udpListeningPoint);
|
||||
udpSipProvider.addSipListener(gbSIPListener);
|
||||
log.info("Sip Server UDP 启动成功 port {}", sipConfig.getPort());
|
||||
|
||||
@@ -65,7 +65,7 @@ public class SipDeviceChannelServiceImpl implements ISipDeviceChannelService {
|
||||
if (deviceChannel == null) {
|
||||
Product product = productService.getProductBySerialNumber(deviceId);
|
||||
if (product != null) {
|
||||
insertSipDeviceChannel(channel);
|
||||
insertSipDeviceChannelNew(channel);
|
||||
} else {
|
||||
log.error("未注册设备:{}", deviceId);
|
||||
}
|
||||
@@ -196,6 +196,18 @@ public class SipDeviceChannelServiceImpl implements ISipDeviceChannelService {
|
||||
return sipDeviceChannelMapper.insertSipDeviceChannel(sipDeviceChannel);
|
||||
}
|
||||
|
||||
public int insertSipDeviceChannelNew(SipDeviceChannel sipDeviceChannel) {
|
||||
|
||||
Product product = productService.getProductBySerialNumber(sipDeviceChannel.getDeviceSipId());
|
||||
if (product != null) {
|
||||
sipDeviceChannel.setTenantName(product.getTenantName());
|
||||
sipDeviceChannel.setProductId(product.getProductId());
|
||||
sipDeviceChannel.setProductName(product.getProductName());
|
||||
}
|
||||
sipDeviceChannel.setCreateTime(DateUtils.getNowDate());
|
||||
return sipDeviceChannelMapper.insertSipDeviceChannel(sipDeviceChannel);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改监控设备通道信息
|
||||
*
|
||||
|
||||
@@ -202,7 +202,7 @@ public interface IDeviceService
|
||||
* @return 结果
|
||||
*/
|
||||
public AjaxResult deleteDeviceByDeviceId(Long deviceId) throws SchedulerException;
|
||||
|
||||
public void deleteDeviceById(Long deviceId) ;
|
||||
/**
|
||||
* 生成设备唯一编号
|
||||
* @return 结果
|
||||
|
||||
@@ -1370,6 +1370,67 @@ public class DeviceServiceImpl implements IDeviceService {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除设备
|
||||
*
|
||||
* @param deviceId 需要删除的设备主键
|
||||
* @return 结果
|
||||
*/
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteDeviceById(Long deviceId){
|
||||
//查询设备
|
||||
Device device = deviceMapper.selectDeviceByDeviceId(deviceId);
|
||||
|
||||
// 2.3版本更改 设备管理者和设备拥有者为true,普通用户如果不是设备所有者,只能删除设备用户和用户自己的设备关联分组信息
|
||||
// 查绑定用户被分享用户配置的场景,需要把场景删掉
|
||||
DeviceUser deviceUser = deviceUserMapper.selectDeviceUserByDeviceId(deviceId);
|
||||
List<Long> userIdSceneList = new ArrayList<>();
|
||||
if (null != deviceUser) {
|
||||
userIdSceneList.add(deviceUser.getUserId());
|
||||
}
|
||||
Long[] shareSceneIds = null;
|
||||
List<DeviceShare> deviceShares = deviceShareService.selectDeviceShareByDeviceId(deviceId);
|
||||
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(deviceShares)) {
|
||||
List<Long> userIdList = deviceShares.stream().map(DeviceShare::getUserId).collect(Collectors.toList());
|
||||
userIdSceneList.addAll(userIdList);
|
||||
}
|
||||
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(userIdSceneList)) {
|
||||
shareSceneIds = sceneDeviceMapper.listSceneIdByDeviceIdAndUserId(device.getSerialNumber(), userIdSceneList);
|
||||
}
|
||||
|
||||
if (null != shareSceneIds && shareSceneIds.length > 0) {
|
||||
sceneService.deleteSceneBySceneIds(shareSceneIds);
|
||||
}
|
||||
// 删除设备分组。 租户、管理员和设备所有者
|
||||
deviceMapper.deleteDeviceGroupByDeviceId(new UserIdDeviceIdModel(null, deviceId));
|
||||
// 删除设备用户。
|
||||
deviceUserMapper.deleteDeviceUserByDeviceId(new UserIdDeviceIdModel(null, deviceId));
|
||||
deviceShareService.deleteDeviceShareByDeviceId(deviceId);
|
||||
// 删除定时任务 TODO - emq兼容
|
||||
// deviceJobService.deleteJobByDeviceIds(new Long[]{deviceId});
|
||||
// 批量删除设备监测日志
|
||||
logService.deleteDeviceLogByDeviceNumber(device.getSerialNumber());
|
||||
// 批量删除设备事件日志 DeviceNumber
|
||||
eventLogService.deleteEventLogByDeviceNumber(device.getSerialNumber());
|
||||
// 批量删除设备功能日志
|
||||
functionLogService.deleteFunctionLogByDeviceNumber(device.getSerialNumber());
|
||||
// 批量删除设备告警记录
|
||||
alertLogService.deleteAlertLogBySerialNumber(device.getSerialNumber());
|
||||
// redis中删除设备物模型(状态)
|
||||
String key = RedisKeyBuilder.buildTSLVCacheKey(device.getProductId(), device.getSerialNumber());
|
||||
redisCache.deleteObject(key);
|
||||
// 删除设备
|
||||
deviceMapper.deleteDeviceByDeviceIds(new Long[]{deviceId});
|
||||
// redis中删除规则脚本
|
||||
String cacheKey = RedisKeyBuilder.buildDeviceMsgCacheKey(device.getSerialNumber());
|
||||
redisCache.deleteObject(cacheKey);
|
||||
// 删除设备
|
||||
deviceMapper.deleteDeviceByDeviceIds(new Long[]{deviceId});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据设备编号查询协议编码
|
||||
|
||||
@@ -18,6 +18,7 @@ public interface SysMenuMapper
|
||||
* @return 菜单列表
|
||||
*/
|
||||
public List<SysMenu> selectMenuList(SysMenu menu);
|
||||
public List<SysMenu> selectMenuListF(SysMenu menu);
|
||||
|
||||
/**
|
||||
* 根据用户所有权限
|
||||
@@ -33,7 +34,7 @@ public interface SysMenuMapper
|
||||
* @return 菜单列表
|
||||
*/
|
||||
public List<SysMenu> selectMenuListByUserId(SysMenu menu);
|
||||
|
||||
public List<SysMenu> selectMenuListByUserIdF(SysMenu menu);
|
||||
/**
|
||||
* 根据角色ID查询权限
|
||||
*
|
||||
@@ -56,14 +57,15 @@ public interface SysMenuMapper
|
||||
* @return 菜单列表
|
||||
*/
|
||||
public List<SysMenu> selectMenuTreeAll(@Param("language") String language);
|
||||
|
||||
public List<SysMenu> selectMenuTreeAllF(@Param("language") String language);
|
||||
/**
|
||||
* 根据用户ID查询菜单
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 菜单列表
|
||||
*/
|
||||
public List<SysMenu> selectMenuTreeByUserId(@Param("userId") Long userId, @Param("language") String language);
|
||||
public List<SysMenu> selectMenuTreeByUserId(@Param("userId") Long userId,@Param("language") String language);
|
||||
public List<SysMenu> selectMenuTreeByUserIdF(@Param("userId") Long userId,@Param("language") String language);
|
||||
|
||||
/**
|
||||
* 根据角色ID查询菜单树信息
|
||||
@@ -73,7 +75,7 @@ public interface SysMenuMapper
|
||||
* @return 选中菜单列表
|
||||
*/
|
||||
public List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
|
||||
|
||||
public List<Long> selectMenuListByRoleIdF(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
|
||||
/**
|
||||
* 根据菜单ID查询信息
|
||||
*
|
||||
@@ -81,7 +83,7 @@ public interface SysMenuMapper
|
||||
* @return 菜单信息
|
||||
*/
|
||||
public SysMenu selectMenuById(@Param("menuId") Long menuId, @Param("language") String language);
|
||||
|
||||
public SysMenu selectMenuByIdF(@Param("menuId") Long menuId, @Param("language") String language);
|
||||
/**
|
||||
* 是否存在菜单子节点
|
||||
*
|
||||
@@ -89,7 +91,7 @@ public interface SysMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int hasChildByMenuId(Long menuId);
|
||||
|
||||
public int hasChildByMenuIdF(Long menuId);
|
||||
/**
|
||||
* 新增菜单信息
|
||||
*
|
||||
@@ -97,7 +99,7 @@ public interface SysMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertMenu(SysMenu menu);
|
||||
|
||||
public int insertMenuF(SysMenu menu);
|
||||
/**
|
||||
* 修改菜单信息
|
||||
*
|
||||
@@ -105,7 +107,7 @@ public interface SysMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateMenu(SysMenu menu);
|
||||
|
||||
public int updateMenuF(SysMenu menu);
|
||||
/**
|
||||
* 删除菜单管理信息
|
||||
*
|
||||
@@ -113,7 +115,7 @@ public interface SysMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteMenuById(Long menuId);
|
||||
|
||||
public int deleteMenuByIdF(Long menuId);
|
||||
/**
|
||||
* 校验菜单名称是否唯一
|
||||
*
|
||||
@@ -122,4 +124,5 @@ public interface SysMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
|
||||
public SysMenu checkMenuNameUniqueF(@Param("menuName") String menuName, @Param("parentId") Long parentId);
|
||||
}
|
||||
|
||||
@@ -27,6 +27,9 @@ public interface SysRoleMapper
|
||||
*/
|
||||
public List<SysRole> selectRolePermissionByUserId(Long userId);
|
||||
|
||||
public List<SysRole> selectRoleByUserIdAndIm(Long userId);
|
||||
public List<SysRole> selectRoleByUserIdAndIb(Long userId);
|
||||
|
||||
/**
|
||||
* 查询所有角色
|
||||
*
|
||||
|
||||
@@ -17,7 +17,7 @@ public interface SysRoleMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int checkMenuExistRole(Long menuId);
|
||||
|
||||
public int checkMenuExistRoleF(Long menuId);
|
||||
/**
|
||||
* 通过角色ID删除角色和菜单关联
|
||||
*
|
||||
@@ -25,7 +25,7 @@ public interface SysRoleMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRoleMenuByRoleId(Long roleId);
|
||||
|
||||
public int deleteRoleMenuByRoleIdF(Long roleId);
|
||||
/**
|
||||
* 批量删除角色菜单关联信息
|
||||
*
|
||||
@@ -33,7 +33,7 @@ public interface SysRoleMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRoleMenu(Long[] ids);
|
||||
|
||||
public int deleteRoleMenuF(Long[] ids);
|
||||
/**
|
||||
* 批量新增角色菜单信息
|
||||
*
|
||||
@@ -41,11 +41,12 @@ public interface SysRoleMenuMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int batchRoleMenu(List<SysRoleMenu> roleMenuList);
|
||||
|
||||
public int batchRoleMenuF(List<SysRoleMenu> roleMenuList);
|
||||
/**
|
||||
* 查询角色权限
|
||||
* @param roleId 角色id
|
||||
* @return java.util.List<com.xinda.system.domain.SysRoleMenu>
|
||||
*/
|
||||
List<SysRoleMenu> selectRoleMenuList(Long roleId);
|
||||
List<SysRoleMenu> selectRoleMenuListF(Long roleId);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ public interface ISysMenuService
|
||||
* @return 菜单列表
|
||||
*/
|
||||
public List<SysMenu> selectMenuList(Long userId);
|
||||
|
||||
public List<SysMenu> selectMenuListF(Long userId);
|
||||
/**
|
||||
* 根据用户查询系统菜单列表
|
||||
*
|
||||
@@ -29,6 +29,7 @@ public interface ISysMenuService
|
||||
* @return 菜单列表
|
||||
*/
|
||||
public List<SysMenu> selectMenuList(SysMenu menu, Long userId);
|
||||
public List<SysMenu> selectMenuListF(SysMenu menu, Long userId);
|
||||
|
||||
/**
|
||||
* 根据用户ID查询权限
|
||||
@@ -54,7 +55,7 @@ public interface ISysMenuService
|
||||
* @return 菜单列表
|
||||
*/
|
||||
public List<SysMenu> selectMenuTreeByUserId(Long userId, String language);
|
||||
|
||||
public List<SysMenu> selectMenuTreeByUserIdF(Long userId, String language);
|
||||
/**
|
||||
* 根据角色ID查询菜单树信息
|
||||
*
|
||||
@@ -62,7 +63,7 @@ public interface ISysMenuService
|
||||
* @return 选中菜单列表
|
||||
*/
|
||||
public List<Long> selectMenuListByRoleId(Long roleId);
|
||||
|
||||
public List<Long> selectMenuListByRoleIdF(Long roleId);
|
||||
/**
|
||||
* 构建前端路由所需要的菜单
|
||||
*
|
||||
@@ -94,6 +95,7 @@ public interface ISysMenuService
|
||||
* @return 菜单信息
|
||||
*/
|
||||
public SysMenu selectMenuById(Long menuId);
|
||||
public SysMenu selectMenuByIdF(Long menuId);
|
||||
|
||||
/**
|
||||
* 是否存在菜单子节点
|
||||
@@ -102,7 +104,7 @@ public interface ISysMenuService
|
||||
* @return 结果 true 存在 false 不存在
|
||||
*/
|
||||
public boolean hasChildByMenuId(Long menuId);
|
||||
|
||||
public boolean hasChildByMenuIdF(Long menuId);
|
||||
/**
|
||||
* 查询菜单是否存在角色
|
||||
*
|
||||
@@ -110,7 +112,7 @@ public interface ISysMenuService
|
||||
* @return 结果 true 存在 false 不存在
|
||||
*/
|
||||
public boolean checkMenuExistRole(Long menuId);
|
||||
|
||||
public boolean checkMenuExistRoleF(Long menuId);
|
||||
/**
|
||||
* 新增保存菜单信息
|
||||
*
|
||||
@@ -118,7 +120,7 @@ public interface ISysMenuService
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertMenu(SysMenu menu);
|
||||
|
||||
public int insertMenuF(SysMenu menu);
|
||||
/**
|
||||
* 修改保存菜单信息
|
||||
*
|
||||
@@ -126,7 +128,7 @@ public interface ISysMenuService
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateMenu(SysMenu menu);
|
||||
|
||||
public int updateMenuF(SysMenu menu);
|
||||
/**
|
||||
* 删除菜单管理信息
|
||||
*
|
||||
@@ -134,7 +136,7 @@ public interface ISysMenuService
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteMenuById(Long menuId);
|
||||
|
||||
public int deleteMenuByIdF(Long menuId);
|
||||
/**
|
||||
* 校验菜单名称是否唯一
|
||||
*
|
||||
@@ -142,8 +144,9 @@ public interface ISysMenuService
|
||||
* @return 结果
|
||||
*/
|
||||
public String checkMenuNameUnique(SysMenu menu);
|
||||
|
||||
public String checkMenuNameUniqueF(SysMenu menu);
|
||||
List<SysMenu> deptMenuTreeselect(Long deptId);
|
||||
|
||||
List<SysMenu> deptMenuTreeselectF(Long deptId);
|
||||
List<SysMenu> deptRoleMenuTreeselect(Long deptId, Long roleId);
|
||||
List<SysMenu> deptRoleMenuTreeselectF(Long deptId, Long roleId);
|
||||
}
|
||||
|
||||
@@ -170,5 +170,6 @@ public interface ISysRoleService
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertAuthUsers(Long roleId, Long[] userIds);
|
||||
|
||||
public List<SysRole> selectRoleByUserIdAndIm(Long userId);
|
||||
public List<SysRole> selectRoleByUserIdAndIb(Long userId);
|
||||
}
|
||||
|
||||
@@ -66,6 +66,12 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return selectMenuList(new SysMenu(), userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> selectMenuListF(Long userId)
|
||||
{
|
||||
return selectMenuListF(new SysMenu(), userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询系统菜单列表
|
||||
*
|
||||
@@ -73,7 +79,7 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
* @return 菜单列表
|
||||
*/
|
||||
@Override
|
||||
public List<SysMenu> selectMenuList(SysMenu menu, Long userId)
|
||||
public List<SysMenu> selectMenuList(SysMenu menu,Long userId)
|
||||
{
|
||||
menu.setLanguage(SecurityUtils.getLanguage());
|
||||
List<SysMenu> menuList = null;
|
||||
@@ -89,6 +95,23 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
}
|
||||
return menuList;
|
||||
}
|
||||
@Override
|
||||
public List<SysMenu> selectMenuListF(SysMenu menu,Long userId)
|
||||
{
|
||||
menu.setLanguage(SecurityUtils.getLanguage());
|
||||
List<SysMenu> menuList = null;
|
||||
// 管理员显示所有菜单信息
|
||||
if (SysUser.isAdmin(userId))
|
||||
{
|
||||
menuList = menuMapper.selectMenuListF(menu);
|
||||
}
|
||||
else
|
||||
{
|
||||
menu.getParams().put("userId", userId);
|
||||
menuList = menuMapper.selectMenuListByUserIdF(menu);
|
||||
}
|
||||
return menuList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID查询权限
|
||||
@@ -154,6 +177,21 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return getChildPerms(menus, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> selectMenuTreeByUserIdF(Long userId, String language)
|
||||
{
|
||||
List<SysMenu> menus = null;
|
||||
if (SecurityUtils.isAdmin(userId))
|
||||
{
|
||||
menus = menuMapper.selectMenuTreeAllF(language);
|
||||
}
|
||||
else
|
||||
{
|
||||
menus = menuMapper.selectMenuTreeByUserIdF(userId, language);
|
||||
}
|
||||
return getChildPerms(menus, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据角色ID查询菜单树信息
|
||||
*
|
||||
@@ -167,6 +205,13 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> selectMenuListByRoleIdF(Long roleId)
|
||||
{
|
||||
SysRole role = roleMapper.selectRoleById(roleId);
|
||||
return menuMapper.selectMenuListByRoleIdF(roleId, role.isMenuCheckStrictly());
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建前端路由所需要的菜单
|
||||
*
|
||||
@@ -278,6 +323,12 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return menuMapper.selectMenuById(menuId, SecurityUtils.getLanguage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysMenu selectMenuByIdF(Long menuId)
|
||||
{
|
||||
return menuMapper.selectMenuByIdF(menuId, SecurityUtils.getLanguage());
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否存在菜单子节点
|
||||
*
|
||||
@@ -290,7 +341,12 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
int result = menuMapper.hasChildByMenuId(menuId);
|
||||
return result > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasChildByMenuIdF(Long menuId)
|
||||
{
|
||||
int result = menuMapper.hasChildByMenuIdF(menuId);
|
||||
return result > 0;
|
||||
}
|
||||
/**
|
||||
* 查询菜单使用数量
|
||||
*
|
||||
@@ -303,7 +359,12 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
int result = roleMenuMapper.checkMenuExistRole(menuId);
|
||||
return result > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkMenuExistRoleF(Long menuId)
|
||||
{
|
||||
int result = roleMenuMapper.checkMenuExistRoleF(menuId);
|
||||
return result > 0;
|
||||
}
|
||||
/**
|
||||
* 新增保存菜单信息
|
||||
*
|
||||
@@ -315,6 +376,11 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
{
|
||||
return menuMapper.insertMenu(menu);
|
||||
}
|
||||
@Override
|
||||
public int insertMenuF(SysMenu menu)
|
||||
{
|
||||
return menuMapper.insertMenuF(menu);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改保存菜单信息
|
||||
@@ -327,7 +393,11 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
{
|
||||
return menuMapper.updateMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateMenuF(SysMenu menu)
|
||||
{
|
||||
return menuMapper.updateMenuF(menu);
|
||||
}
|
||||
/**
|
||||
* 删除菜单管理信息
|
||||
*
|
||||
@@ -339,7 +409,11 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
{
|
||||
return menuMapper.deleteMenuById(menuId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteMenuByIdF(Long menuId)
|
||||
{
|
||||
return menuMapper.deleteMenuByIdF(menuId);
|
||||
}
|
||||
/**
|
||||
* 校验菜单名称是否唯一
|
||||
*
|
||||
@@ -359,6 +433,19 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return UserConstants.UNIQUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String checkMenuNameUniqueF(SysMenu menu)
|
||||
{
|
||||
Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
|
||||
// 仅匹配菜单表存储的菜单名称,不匹配菜单翻译表存储的对应语言名称
|
||||
SysMenu info = menuMapper.checkMenuNameUniqueF(menu.getMenuName(), menu.getParentId());
|
||||
if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
|
||||
{
|
||||
return UserConstants.NOT_UNIQUE;
|
||||
}
|
||||
return UserConstants.UNIQUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> deptMenuTreeselect(Long deptId) {
|
||||
SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
|
||||
@@ -368,6 +455,15 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return this.selectMenuList(sysDept.getDeptUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> deptMenuTreeselectF(Long deptId) {
|
||||
SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
|
||||
if (ObjectUtil.isNull(sysDept) && null == sysDept.getDeptUserId()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return this.selectMenuListF(sysDept.getDeptUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> deptRoleMenuTreeselect(Long deptId, Long roleId) {
|
||||
LoginUser loginUser = getLoginUser();
|
||||
@@ -389,6 +485,27 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return this.selectMenuList(new SysMenu(), sysDept.getDeptUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> deptRoleMenuTreeselectF(Long deptId, Long roleId) {
|
||||
LoginUser loginUser = getLoginUser();
|
||||
Long userDeptId = loginUser.getDeptId();
|
||||
Long deptUserId = loginUser.getUser().getDept().getDeptUserId();
|
||||
SysRole sysRole = roleMapper.selectRoleById(roleId);
|
||||
// List<SysUserRole> sysUserRoleList = sysUserRoleMapper.selectRoleByUserId(sysDept.getDeptUserId());
|
||||
// SysUserRole sysUserRole = sysUserRoleList.stream().filter(s -> roleId.equals(s.getRoleId())).findAny().orElse(null);
|
||||
// if (ObjectUtil.isNotNull(sysUserRole)) {
|
||||
// return menuMapper.selectMenuList(new SysMenu());
|
||||
// }
|
||||
if (!deptId.equals(userDeptId) && "manager".equals(sysRole.getRoleKey())) {
|
||||
return this.selectMenuListF(deptUserId);
|
||||
}
|
||||
SysDept sysDept = sysDeptMapper.selectDeptById(deptId);
|
||||
if (ObjectUtil.isNull(sysDept) && null == sysDept.getDeptUserId()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return this.selectMenuListF(new SysMenu(), sysDept.getDeptUserId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取路由名称
|
||||
*
|
||||
@@ -515,6 +632,7 @@ public class SysMenuServiceImpl implements ISysMenuService
|
||||
return returnList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 递归列表
|
||||
*
|
||||
|
||||
@@ -206,7 +206,7 @@ public class SysRoleServiceImpl implements ISysRoleService
|
||||
* @param roleId 角色ID
|
||||
* @return 角色对象信息
|
||||
*/
|
||||
@Cacheable(value = "role", key = "#root.methodName + '_' + #roleId", unless = "#result == null")
|
||||
// @Cacheable(value = "role", key = "#root.methodName + '_' + #roleId", unless = "#result == null")
|
||||
@Override
|
||||
public SysRole selectRoleById(Long roleId)
|
||||
{
|
||||
@@ -347,6 +347,7 @@ public class SysRoleServiceImpl implements ISysRoleService
|
||||
roleMapper.updateRole(role);
|
||||
// 删除角色与菜单关联
|
||||
roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
|
||||
roleMenuMapper.deleteRoleMenuByRoleIdF(role.getRoleId());
|
||||
return insertRoleMenu(role);
|
||||
}
|
||||
|
||||
@@ -390,6 +391,21 @@ public class SysRoleServiceImpl implements ISysRoleService
|
||||
*/
|
||||
public int insertRoleMenu(SysRole role)
|
||||
{
|
||||
int rowsF = 1;
|
||||
// 新增用户与角色管理
|
||||
List<SysRoleMenu> listF = new ArrayList<SysRoleMenu>();
|
||||
if (role.getMenuFIds() != null && role.getMenuFIds().length > 0){
|
||||
for (Long menuId : role.getMenuFIds())
|
||||
{
|
||||
SysRoleMenu rmf = new SysRoleMenu();
|
||||
rmf.setRoleId(role.getRoleId());
|
||||
rmf.setMenuId(menuId);
|
||||
listF.add(rmf);
|
||||
}
|
||||
roleMenuMapper.batchRoleMenuF(listF);
|
||||
}
|
||||
|
||||
|
||||
int rows = 1;
|
||||
// 新增用户与角色管理
|
||||
List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
|
||||
@@ -404,6 +420,7 @@ public class SysRoleServiceImpl implements ISysRoleService
|
||||
{
|
||||
rows = roleMenuMapper.batchRoleMenu(list);
|
||||
}
|
||||
|
||||
return rows;
|
||||
}
|
||||
|
||||
@@ -444,6 +461,7 @@ public class SysRoleServiceImpl implements ISysRoleService
|
||||
{
|
||||
// 删除角色与菜单关联
|
||||
roleMenuMapper.deleteRoleMenuByRoleId(roleId);
|
||||
roleMenuMapper.deleteRoleMenuByRoleIdF(roleId);
|
||||
// 删除角色与部门关联
|
||||
roleDeptMapper.deleteRoleDeptByRoleId(roleId);
|
||||
return roleMapper.deleteRoleById(roleId);
|
||||
@@ -472,6 +490,7 @@ public class SysRoleServiceImpl implements ISysRoleService
|
||||
}
|
||||
// 删除角色与菜单关联
|
||||
roleMenuMapper.deleteRoleMenu(roleIds);
|
||||
roleMenuMapper.deleteRoleMenuF(roleIds);
|
||||
// 删除角色与部门关联
|
||||
roleDeptMapper.deleteRoleDept(roleIds);
|
||||
return roleMapper.deleteRoleByIds(roleIds);
|
||||
@@ -525,4 +544,14 @@ public class SysRoleServiceImpl implements ISysRoleService
|
||||
}
|
||||
return userRoleMapper.batchUserRole(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysRole> selectRoleByUserIdAndIm(Long userId) {
|
||||
return roleMapper.selectRoleByUserIdAndIm(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysRole> selectRoleByUserIdAndIb(Long userId) {
|
||||
return roleMapper.selectRoleByUserIdAndIb(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,7 +208,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</update>
|
||||
|
||||
<delete id="deleteDeptById" parameterType="Long">
|
||||
update sys_dept set del_flag = '2' where dept_id = #{deptId}
|
||||
delete from sys_dept where dept_id = #{deptId}
|
||||
</delete>
|
||||
|
||||
<select id="selectSeniorDeptUser" resultType="java.lang.Long">
|
||||
|
||||
@@ -31,15 +31,15 @@
|
||||
select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
|
||||
from sys_menu
|
||||
</sql>
|
||||
<sql id="selectMenuF">
|
||||
select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
|
||||
from sys_menu_f
|
||||
</sql>
|
||||
|
||||
<select id="selectMenuList" parameterType="com.xinda.common.core.domain.entity.SysMenu" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id,
|
||||
case
|
||||
when #{language} = 'zh-CN' then m.menu_name
|
||||
when #{language} = 'en-US' then t.en_us
|
||||
else m.menu_name
|
||||
end as menu_name,
|
||||
m.parent_id, m.order_num, m.path, m.component, m.query, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time
|
||||
m. menu_name,
|
||||
m.parent_id, m.order_num, m.path, m.component, m.query, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time
|
||||
from sys_menu m
|
||||
left join sys_menu_translate t on m.menu_id = t.id
|
||||
<where>
|
||||
@@ -55,34 +55,70 @@
|
||||
</where>
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
<select id="selectMenuListF" parameterType="com.xinda.common.core.domain.entity.SysMenu" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id,
|
||||
m.menu_name,
|
||||
m.parent_id, m.order_num, m.path, m.component, m.query, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time
|
||||
from sys_menu_f m
|
||||
<where>
|
||||
<if test="menuName != null and menuName != ''">
|
||||
AND m.menu_name like concat('%', #{menuName}, '%')
|
||||
</if>
|
||||
<if test="visible != null and visible != ''">
|
||||
AND m.visible = #{visible}
|
||||
</if>
|
||||
<if test="status != null and status != ''">
|
||||
AND m.status = #{status}
|
||||
</if>
|
||||
</where>
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
|
||||
<select id="selectMenuTreeAll" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id, m.parent_id,
|
||||
case
|
||||
when #{language} = 'zh-CN' then m.menu_name
|
||||
when #{language} = 'en-US' then t.en_us
|
||||
else m.menu_name
|
||||
end as menu_name,
|
||||
m.menu_name,
|
||||
m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
from sys_menu m
|
||||
left join sys_menu_translate t on m.menu_id = t.id
|
||||
where m.menu_type in ('M', 'C') and m.status = 0
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
<select id="selectMenuTreeAllF" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id, m.parent_id,
|
||||
m.menu_name,
|
||||
m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
from sys_menu_f m
|
||||
where m.menu_type in ('M', 'C') and m.status = 0
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
|
||||
<select id="selectMenuListByUserId" parameterType="com.xinda.common.core.domain.entity.SysMenu" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id, m.parent_id,
|
||||
case
|
||||
when #{language} = 'zh-CN' then m.menu_name
|
||||
when #{language} = 'en-US' then t.en_us
|
||||
else m.menu_name
|
||||
end as menu_name,
|
||||
m.menu_name,
|
||||
m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
left join sys_role ro on ur.role_id = ro.role_id
|
||||
left join sys_menu_translate t on m.menu_id = t.id
|
||||
where ur.user_id = #{params.userId}
|
||||
<if test="menuName != null and menuName != ''">
|
||||
AND m.menu_name like concat('%', #{menuName}, '%')
|
||||
</if>
|
||||
<if test="visible != null and visible != ''">
|
||||
AND m.visible = #{visible}
|
||||
</if>
|
||||
<if test="status != null and status != ''">
|
||||
AND m.status = #{status}
|
||||
</if>
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
<select id="selectMenuListByUserIdF" parameterType="com.xinda.common.core.domain.entity.SysMenu" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id, m.parent_id,
|
||||
m.menu_name,
|
||||
m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
from sys_menu_f m
|
||||
left join sys_role_menu_f rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
left join sys_role ro on ur.role_id = ro.role_id
|
||||
where ur.user_id = #{params.userId}
|
||||
<if test="menuName != null and menuName != ''">
|
||||
AND m.menu_name like concat('%', #{menuName}, '%')
|
||||
@@ -98,18 +134,26 @@
|
||||
|
||||
<select id="selectMenuTreeByUserId" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id, m.parent_id,
|
||||
case
|
||||
when #{language} = 'zh-CN' then m.menu_name
|
||||
when #{language} = 'en-US' then t.en_us
|
||||
else m.menu_name
|
||||
end as menu_name,
|
||||
m.menu_name,
|
||||
m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
left join sys_role ro on ur.role_id = ro.role_id
|
||||
left join sys_user u on ur.user_id = u.user_id
|
||||
left join sys_menu_translate t on m.menu_id = t.id
|
||||
where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
|
||||
<select id="selectMenuTreeByUserIdF" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id, m.parent_id,
|
||||
m.menu_name,
|
||||
m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
|
||||
from sys_menu_f m
|
||||
left join sys_role_menu_f rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
left join sys_role ro on ur.role_id = ro.role_id
|
||||
left join sys_user u on ur.user_id = u.user_id
|
||||
where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.status = 0 AND ro.status = 0
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
@@ -125,12 +169,29 @@
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
|
||||
<select id="selectMenuListByRoleIdF" resultType="Long">
|
||||
select m.menu_id
|
||||
from sys_menu_f m
|
||||
left join sys_role_menu_f rm on m.menu_id = rm.menu_id
|
||||
where rm.role_id = #{roleId}
|
||||
<if test="menuCheckStrictly">
|
||||
and m.menu_id not in (select m.parent_id from sys_menu_f m inner join sys_role_menu_f rm on m.menu_id = rm.menu_id and rm.role_id = #{roleId})
|
||||
</if>
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
|
||||
<select id="selectMenuPerms" resultType="String">
|
||||
select distinct m.perms
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
</select>
|
||||
<select id="selectMenuPermsF" resultType="String">
|
||||
select distinct m.perms
|
||||
from sys_menu_f m
|
||||
left join sys_role_menu_f rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
</select>
|
||||
|
||||
<select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
|
||||
select distinct m.perms
|
||||
@@ -140,6 +201,14 @@
|
||||
left join sys_role r on r.role_id = ur.role_id
|
||||
where m.status = '0' and r.status = '0' and ur.user_id = #{userId}
|
||||
</select>
|
||||
<select id="selectMenuPermsByUserIdF" parameterType="Long" resultType="String">
|
||||
select distinct m.perms
|
||||
from sys_menu_f m
|
||||
left join sys_role_menu_f rm on m.menu_id = rm.menu_id
|
||||
left join sys_user_role ur on rm.role_id = ur.role_id
|
||||
left join sys_role r on r.role_id = ur.role_id
|
||||
where m.status = '0' and r.status = '0' and ur.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
<select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String">
|
||||
select distinct m.perms
|
||||
@@ -148,28 +217,46 @@
|
||||
where m.status = '0' and rm.role_id = #{roleId}
|
||||
</select>
|
||||
|
||||
<select id="selectMenuPermsByRoleIdF" parameterType="Long" resultType="String">
|
||||
select distinct m.perms
|
||||
from sys_menu_f m
|
||||
left join sys_role_menu_f rm on m.menu_id = rm.menu_id
|
||||
where m.status = '0' and rm.role_id = #{roleId}
|
||||
</select>
|
||||
|
||||
<select id="selectMenuById" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id,
|
||||
case
|
||||
when #{language} = 'zh-CN' then m.menu_name
|
||||
when #{language} = 'en-US' then t.en_us
|
||||
else m.menu_name
|
||||
end as menu_name,
|
||||
m.menu_name,
|
||||
m.parent_id, m.order_num, m.path, m.component, m.query, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time
|
||||
from sys_menu m
|
||||
left join sys_menu_translate t on m.menu_id = t.id
|
||||
where m.menu_id = #{menuId}
|
||||
</select>
|
||||
|
||||
<select id="selectMenuByIdF" resultMap="SysMenuResult">
|
||||
select distinct m.menu_id,
|
||||
m.menu_name,
|
||||
m.parent_id, m.order_num, m.path, m.component, m.query, m.is_frame, m.is_cache, m.menu_type, m.visible, m.status, ifnull(m.perms,'') as perms, m.icon, m.create_time
|
||||
from sys_menu_f m
|
||||
where m.menu_id = #{menuId}
|
||||
</select>
|
||||
|
||||
<select id="hasChildByMenuId" resultType="Integer">
|
||||
select count(1) from sys_menu where parent_id = #{menuId}
|
||||
</select>
|
||||
<select id="hasChildByMenuIdF" resultType="Integer">
|
||||
select count(1) from sys_menu_f where parent_id = #{menuId}
|
||||
</select>
|
||||
|
||||
<select id="checkMenuNameUnique" parameterType="com.xinda.common.core.domain.entity.SysMenu" resultMap="SysMenuResult">
|
||||
select distinct menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
|
||||
from sys_menu
|
||||
where menu_name=#{menuName} and parent_id = #{parentId} limit 1
|
||||
</select>
|
||||
<select id="checkMenuNameUniqueF" parameterType="com.xinda.common.core.domain.entity.SysMenu" resultMap="SysMenuResult">
|
||||
select distinct menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
|
||||
from sys_menu_f
|
||||
where menu_name=#{menuName} and parent_id = #{parentId} limit 1
|
||||
</select>
|
||||
|
||||
<update id="updateMenu" parameterType="com.xinda.common.core.domain.entity.SysMenu">
|
||||
update sys_menu
|
||||
@@ -194,6 +281,29 @@
|
||||
where menu_id = #{menuId}
|
||||
</update>
|
||||
|
||||
<update id="updateMenuF" parameterType="com.xinda.common.core.domain.entity.SysMenu">
|
||||
update sys_menu_f
|
||||
<set>
|
||||
<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
|
||||
<if test="parentId != null">parent_id = #{parentId},</if>
|
||||
<if test="orderNum != null">order_num = #{orderNum},</if>
|
||||
<if test="path != null and path != ''">path = #{path},</if>
|
||||
<if test="component != null">component = #{component},</if>
|
||||
<if test="query != null">`query` = #{query},</if>
|
||||
<if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
|
||||
<if test="isCache != null and isCache != ''">is_cache = #{isCache},</if>
|
||||
<if test="menuType != null and menuType != ''">menu_type = #{menuType},</if>
|
||||
<if test="visible != null">visible = #{visible},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="perms !=null">perms = #{perms},</if>
|
||||
<if test="icon !=null and icon != ''">icon = #{icon},</if>
|
||||
<if test="remark != null and remark != ''">remark = #{remark},</if>
|
||||
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
|
||||
update_time = sysdate()
|
||||
</set>
|
||||
where menu_id = #{menuId}
|
||||
</update>
|
||||
|
||||
<insert id="insertMenu" parameterType="com.xinda.common.core.domain.entity.SysMenu">
|
||||
insert into sys_menu(
|
||||
<if test="menuId != null and menuId != 0">menu_id,</if>
|
||||
@@ -234,8 +344,51 @@
|
||||
)
|
||||
</insert>
|
||||
|
||||
<insert id="insertMenuF" parameterType="com.xinda.common.core.domain.entity.SysMenu">
|
||||
insert into sys_menu_f(
|
||||
<if test="menuId != null and menuId != 0">menu_id,</if>
|
||||
<if test="parentId != null and parentId != 0">parent_id,</if>
|
||||
<if test="menuName != null and menuName != ''">menu_name,</if>
|
||||
<if test="orderNum != null">order_num,</if>
|
||||
<if test="path != null and path != ''">path,</if>
|
||||
<if test="component != null and component != ''">component,</if>
|
||||
<if test="query != null and query != ''">`query`,</if>
|
||||
<if test="isFrame != null and isFrame != ''">is_frame,</if>
|
||||
<if test="isCache != null and isCache != ''">is_cache,</if>
|
||||
<if test="menuType != null and menuType != ''">menu_type,</if>
|
||||
<if test="visible != null">visible,</if>
|
||||
<if test="status != null">status,</if>
|
||||
<if test="perms !=null and perms != ''">perms,</if>
|
||||
<if test="icon != null and icon != ''">icon,</if>
|
||||
<if test="remark != null and remark != ''">remark,</if>
|
||||
<if test="createBy != null and createBy != ''">create_by,</if>
|
||||
create_time
|
||||
)values(
|
||||
<if test="menuId != null and menuId != 0">#{menuId},</if>
|
||||
<if test="parentId != null and parentId != 0">#{parentId},</if>
|
||||
<if test="menuName != null and menuName != ''">#{menuName},</if>
|
||||
<if test="orderNum != null">#{orderNum},</if>
|
||||
<if test="path != null and path != ''">#{path},</if>
|
||||
<if test="component != null and component != ''">#{component},</if>
|
||||
<if test="query != null and query != ''">#{query},</if>
|
||||
<if test="isFrame != null and isFrame != ''">#{isFrame},</if>
|
||||
<if test="isCache != null and isCache != ''">#{isCache},</if>
|
||||
<if test="menuType != null and menuType != ''">#{menuType},</if>
|
||||
<if test="visible != null">#{visible},</if>
|
||||
<if test="status != null">#{status},</if>
|
||||
<if test="perms !=null and perms != ''">#{perms},</if>
|
||||
<if test="icon != null and icon != ''">#{icon},</if>
|
||||
<if test="remark != null and remark != ''">#{remark},</if>
|
||||
<if test="createBy != null and createBy != ''">#{createBy},</if>
|
||||
sysdate()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<delete id="deleteMenuById" parameterType="Long">
|
||||
delete from sys_menu where menu_id = #{menuId}
|
||||
</delete>
|
||||
<delete id="deleteMenuByIdF" parameterType="Long">
|
||||
delete from sys_menu_f where menu_id = #{menuId}
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -13,6 +13,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="menuCheckStrictly" column="menu_check_strictly" />
|
||||
<result property="deptCheckStrictly" column="dept_check_strictly" />
|
||||
<result property="status" column="status" />
|
||||
<result property="im" column="im" />
|
||||
<result property="ib" column="ib" />
|
||||
<result property="delFlag" column="del_flag" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
@@ -23,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<sql id="selectRoleVo">
|
||||
select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
|
||||
r.status, r.del_flag, r.create_time, r.remark
|
||||
r.status,r.im,r.ib, r.del_flag, r.create_time, r.remark
|
||||
from sys_role r
|
||||
left join sys_user_role ur on ur.role_id = r.role_id
|
||||
left join sys_user u on u.user_id = ur.user_id
|
||||
@@ -61,6 +63,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
WHERE r.del_flag = '0' and ur.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
<select id="selectRoleByUserIdAndIm" parameterType="Long" resultMap="SysRoleResult">
|
||||
<include refid="selectRoleVo"/>
|
||||
WHERE r.del_flag = '0'and r.im = '1' and ur.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
<select id="selectRoleByUserIdAndIb" parameterType="Long" resultMap="SysRoleResult">
|
||||
<include refid="selectRoleVo"/>
|
||||
WHERE r.del_flag = '0'and r.ib = '1' and ur.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
<select id="selectRoleAll" resultMap="SysRoleResult">
|
||||
<include refid="selectRoleVo"/>
|
||||
</select>
|
||||
@@ -117,6 +129,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="menuCheckStrictly != null">menu_check_strictly,</if>
|
||||
<if test="deptCheckStrictly != null">dept_check_strictly,</if>
|
||||
<if test="status != null and status != ''">status,</if>
|
||||
<if test="im != null and im != ''">im,</if>
|
||||
<if test="ib != null and im != ''">ib,</if>
|
||||
<if test="remark != null and remark != ''">remark,</if>
|
||||
<if test="createBy != null and createBy != ''">create_by,</if>
|
||||
create_time
|
||||
@@ -129,6 +143,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="menuCheckStrictly != null">#{menuCheckStrictly},</if>
|
||||
<if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
|
||||
<if test="status != null and status != ''">#{status},</if>
|
||||
<if test="im != null and im != ''">im,</if>
|
||||
<if test="ib != null and im != ''">ib,</if>
|
||||
<if test="remark != null and remark != ''">#{remark},</if>
|
||||
<if test="createBy != null and createBy != ''">#{createBy},</if>
|
||||
sysdate()
|
||||
@@ -145,6 +161,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="menuCheckStrictly != null">menu_check_strictly = #{menuCheckStrictly},</if>
|
||||
<if test="deptCheckStrictly != null">dept_check_strictly = #{deptCheckStrictly},</if>
|
||||
<if test="status != null and status != ''">status = #{status},</if>
|
||||
<if test="im != null and im != ''">im = #{im},</if>
|
||||
<if test="ib != null and ib != ''">ib = #{ib},</if>
|
||||
<if test="remark != null">remark = #{remark},</if>
|
||||
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
|
||||
update_time = sysdate()
|
||||
|
||||
@@ -13,15 +13,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
select count(1) from sys_role_menu where menu_id = #{menuId}
|
||||
</select>
|
||||
|
||||
<select id="checkMenuExistRoleF" resultType="Integer">
|
||||
select count(1) from sys_role_menu_f where menu_id = #{menuId}
|
||||
</select>
|
||||
|
||||
<select id="selectRoleMenuList" resultType="com.xinda.system.domain.SysRoleMenu">
|
||||
select *
|
||||
from sys_role_menu
|
||||
where role_id = #{roleId}
|
||||
</select>
|
||||
<select id="selectRoleMenuListF" resultType="com.xinda.system.domain.SysRoleMenu">
|
||||
select *
|
||||
from sys_role_menu_f
|
||||
where role_id = #{roleId}
|
||||
</select>
|
||||
|
||||
<delete id="deleteRoleMenuByRoleId" parameterType="Long">
|
||||
delete from sys_role_menu where role_id=#{roleId}
|
||||
</delete>
|
||||
<delete id="deleteRoleMenuByRoleIdF" parameterType="Long">
|
||||
delete from sys_role_menu_f where role_id=#{roleId}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteRoleMenu" parameterType="Long">
|
||||
delete from sys_role_menu where role_id in
|
||||
@@ -29,6 +41,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{roleId}
|
||||
</foreach>
|
||||
</delete>
|
||||
<delete id="deleteRoleMenuF" parameterType="Long">
|
||||
delete from sys_role_menu_f where role_id in
|
||||
<foreach collection="array" item="ids" index="roleId" open="(" separator="," close=")">
|
||||
#{roleId}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<insert id="batchRoleMenu">
|
||||
insert into sys_role_menu(role_id, menu_id) values
|
||||
@@ -36,5 +54,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
(#{item.roleId},#{item.menuId})
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
<insert id="batchRoleMenuF">
|
||||
insert into sys_role_menu_f(role_id, menu_id) values
|
||||
<foreach item="item" index="index" collection="list" separator=",">
|
||||
(#{item.roleId},#{item.menuId})
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user