[add] app注册、登录、实名认证、人员展示、通知
This commit is contained in:
@ -8,6 +8,8 @@ import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* app菜单
|
||||
@ -85,6 +87,18 @@ public class AppMenu extends BaseEntity {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 父菜单名称
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String parentName;
|
||||
|
||||
/**
|
||||
* 子菜单
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private List<AppMenu> children = new ArrayList<>();
|
||||
|
||||
@Serial
|
||||
@TableField(exist = false)
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
@ -3,6 +3,8 @@ package org.dromara.app.system.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.dromara.app.system.domain.AppMenu;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lilemy
|
||||
* @description 针对表【app_menu(app菜单)】的数据库操作Mapper
|
||||
@ -10,6 +12,14 @@ import org.dromara.app.system.domain.AppMenu;
|
||||
*/
|
||||
public interface AppMenuMapper extends BaseMapper<AppMenu> {
|
||||
|
||||
/**
|
||||
* 根据用户ID查询菜单
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 菜单列表
|
||||
*/
|
||||
List<AppMenu> selectMenuTreeByUserId(Long userId);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
package org.dromara.app.system.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.app.system.domain.AppMenu;
|
||||
import org.dromara.app.system.domain.dto.menu.AppMenuCreateReq;
|
||||
@ -9,6 +8,8 @@ import org.dromara.app.system.domain.dto.menu.AppMenuQueryReq;
|
||||
import org.dromara.app.system.domain.dto.menu.AppMenuUpdateReq;
|
||||
import org.dromara.app.system.domain.vo.menu.AppMenuVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author lilemy
|
||||
* @description 针对表【app_menu(app菜单)】的数据库操作Service
|
||||
@ -16,6 +17,22 @@ import org.dromara.app.system.domain.vo.menu.AppMenuVo;
|
||||
*/
|
||||
public interface AppMenuService extends IService<AppMenu> {
|
||||
|
||||
/**
|
||||
* 根据id查询app菜单
|
||||
*
|
||||
* @param id app菜单id
|
||||
* @return app菜单视图
|
||||
*/
|
||||
AppMenuVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 根据用户ID查询菜单树信息
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 菜单列表
|
||||
*/
|
||||
List<AppMenu> selectMenuTreeByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 新增app菜单
|
||||
*
|
||||
@ -32,6 +49,14 @@ public interface AppMenuService extends IService<AppMenu> {
|
||||
*/
|
||||
Boolean updateByReq(AppMenuUpdateReq req);
|
||||
|
||||
/**
|
||||
* 校验app菜单名称唯一
|
||||
*
|
||||
* @param menu app菜单
|
||||
* @return 是否唯一
|
||||
*/
|
||||
Boolean checkMenuNameUnique(AppMenu menu);
|
||||
|
||||
/**
|
||||
* 获取app菜单视图
|
||||
*
|
||||
@ -49,11 +74,11 @@ public interface AppMenuService extends IService<AppMenu> {
|
||||
LambdaQueryWrapper<AppMenu> buildQueryWrapper(AppMenuQueryReq req);
|
||||
|
||||
/**
|
||||
* 获取app菜单分页对象视图
|
||||
* 获取app菜单列表对象视图
|
||||
*
|
||||
* @param menuPage app菜单分页对象
|
||||
* @return app菜单分页对象视图
|
||||
* @param menuList app菜单列表对象
|
||||
* @return app菜单列表对象视图
|
||||
*/
|
||||
Page<AppMenuVo> getVoPage(Page<AppMenu> menuPage);
|
||||
List<AppMenuVo> getVoList(List<AppMenu> menuList);
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,11 @@
|
||||
package org.dromara.app.system.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.app.system.domain.AppRole;
|
||||
import org.dromara.app.system.domain.dto.role.AppRoleQueryReq;
|
||||
import org.dromara.app.system.domain.vo.role.AppRoleVo;
|
||||
|
||||
/**
|
||||
* @author lilemy
|
||||
@ -10,4 +14,28 @@ import org.dromara.app.system.domain.AppRole;
|
||||
*/
|
||||
public interface AppRoleService extends IService<AppRole> {
|
||||
|
||||
/**
|
||||
* 获取app角色视图
|
||||
*
|
||||
* @param menu app角色
|
||||
* @return app角色视图
|
||||
*/
|
||||
AppRoleVo getVo(AppRole menu);
|
||||
|
||||
/**
|
||||
* 构建查询条件封装
|
||||
*
|
||||
* @param req 查询条件
|
||||
* @return 查询条件封装
|
||||
*/
|
||||
LambdaQueryWrapper<AppRole> buildQueryWrapper(AppRoleQueryReq req);
|
||||
|
||||
/**
|
||||
* 获取app角色视图列表
|
||||
*
|
||||
* @param rolePage app角色列表
|
||||
* @return app角色视图列表
|
||||
*/
|
||||
Page<AppRoleVo> getVoList(Page<AppRole> rolePage);
|
||||
|
||||
}
|
||||
|
@ -1,8 +1,7 @@
|
||||
package org.dromara.app.system.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.app.system.domain.AppMenu;
|
||||
import org.dromara.app.system.domain.dto.menu.AppMenuCreateReq;
|
||||
@ -11,10 +10,16 @@ import org.dromara.app.system.domain.dto.menu.AppMenuUpdateReq;
|
||||
import org.dromara.app.system.domain.vo.menu.AppMenuVo;
|
||||
import org.dromara.app.system.mapper.AppMenuMapper;
|
||||
import org.dromara.app.system.service.AppMenuService;
|
||||
import org.dromara.common.core.constant.HttpStatus;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -26,6 +31,43 @@ import java.util.List;
|
||||
public class AppMenuServiceImpl extends ServiceImpl<AppMenuMapper, AppMenu>
|
||||
implements AppMenuService {
|
||||
|
||||
/**
|
||||
* 根据id查询app菜单
|
||||
*
|
||||
* @param id app菜单id
|
||||
* @return app菜单视图
|
||||
*/
|
||||
@Override
|
||||
public AppMenuVo queryById(Long id) {
|
||||
AppMenu menu = this.getById(id);
|
||||
if (menu == null) {
|
||||
throw new ServiceException("app菜单不存在", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
return this.getVo(menu);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID查询菜单树信息
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 菜单列表
|
||||
*/
|
||||
@Override
|
||||
public List<AppMenu> selectMenuTreeByUserId(Long userId) {
|
||||
List<AppMenu> menus;
|
||||
if (LoginHelper.isSuperAdmin(userId)) {
|
||||
menus = this.lambdaQuery()
|
||||
.in(AppMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU)
|
||||
.eq(AppMenu::getStatus, SystemConstants.NORMAL)
|
||||
.orderByAsc(AppMenu::getParentId)
|
||||
.orderByAsc(AppMenu::getOrderNum)
|
||||
.list();
|
||||
} else {
|
||||
menus = baseMapper.selectMenuTreeByUserId(userId);
|
||||
}
|
||||
return getChildPerms(menus, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增app菜单
|
||||
*
|
||||
@ -48,6 +90,23 @@ public class AppMenuServiceImpl extends ServiceImpl<AppMenuMapper, AppMenu>
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验app菜单名称唯一
|
||||
*
|
||||
* @param menu app菜单
|
||||
* @return 是否唯一
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkMenuNameUnique(AppMenu menu) {
|
||||
boolean exists = this.exists(
|
||||
new LambdaQueryWrapper<AppMenu>()
|
||||
.eq(AppMenu::getMenuName, menu.getMenuName())
|
||||
.eq(AppMenu::getParentId, menu.getParentId())
|
||||
.ne(ObjectUtil.isNotNull(menu.getId()), AppMenu::getId, menu.getId())
|
||||
);
|
||||
return !exists;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取app菜单视图
|
||||
*
|
||||
@ -88,29 +147,53 @@ public class AppMenuServiceImpl extends ServiceImpl<AppMenuMapper, AppMenu>
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取app菜单分页对象视图
|
||||
* 获取app菜单列表对象视图
|
||||
*
|
||||
* @param menuPage app菜单分页对象
|
||||
* @return app菜单分页对象视图
|
||||
* @param menuList app菜单列表对象
|
||||
* @return app菜单列表对象视图
|
||||
*/
|
||||
@Override
|
||||
public Page<AppMenuVo> getVoPage(Page<AppMenu> menuPage) {
|
||||
List<AppMenu> menuList = menuPage.getRecords();
|
||||
Page<AppMenuVo> menuVoPage = new Page<>(
|
||||
menuPage.getCurrent(),
|
||||
menuPage.getSize(),
|
||||
menuPage.getTotal());
|
||||
if (CollUtil.isEmpty(menuList)) {
|
||||
return menuVoPage;
|
||||
}
|
||||
List<AppMenuVo> menuVoList = menuList.stream().map(entity -> {
|
||||
public List<AppMenuVo> getVoList(List<AppMenu> menuList) {
|
||||
return menuList.stream().map(entity -> {
|
||||
AppMenuVo menuVo = new AppMenuVo();
|
||||
BeanUtils.copyProperties(entity, menuVo);
|
||||
return menuVo;
|
||||
}).toList();
|
||||
menuVoPage.setRecords(menuVoList);
|
||||
return menuVoPage;
|
||||
}
|
||||
|
||||
/* 根据父节点的ID获取所有子节点
|
||||
*
|
||||
* @param list 分类表
|
||||
* @param parentId 传入的父节点ID
|
||||
* @return String
|
||||
*/
|
||||
private List<AppMenu> getChildPerms(List<AppMenu> list, int parentId) {
|
||||
List<AppMenu> returnList = new ArrayList<>();
|
||||
for (AppMenu t : list) {
|
||||
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
|
||||
if (t.getParentId() == parentId) {
|
||||
recursionFn(list, t);
|
||||
returnList.add(t);
|
||||
}
|
||||
}
|
||||
return returnList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归列表
|
||||
*/
|
||||
private void recursionFn(List<AppMenu> list, AppMenu t) {
|
||||
// 得到子节点列表
|
||||
List<AppMenu> childList = StreamUtils.filter(list, n -> n.getParentId().equals(t.getId()));
|
||||
t.setChildren(childList);
|
||||
for (AppMenu tChild : childList) {
|
||||
// 判断是否有子节点
|
||||
if (list.stream().anyMatch(n -> n.getParentId().equals(tChild.getId()))) {
|
||||
recursionFn(list, tChild);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,7 +1,11 @@
|
||||
package org.dromara.app.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.app.system.domain.AppRole;
|
||||
import org.dromara.app.system.domain.dto.role.AppRoleQueryReq;
|
||||
import org.dromara.app.system.domain.vo.role.AppRoleVo;
|
||||
import org.dromara.app.system.mapper.AppRoleMapper;
|
||||
import org.dromara.app.system.service.AppRoleService;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -15,6 +19,38 @@ import org.springframework.stereotype.Service;
|
||||
public class AppRoleServiceImpl extends ServiceImpl<AppRoleMapper, AppRole>
|
||||
implements AppRoleService {
|
||||
|
||||
/**
|
||||
* 获取app角色视图
|
||||
*
|
||||
* @param menu app角色
|
||||
* @return app角色视图
|
||||
*/
|
||||
@Override
|
||||
public AppRoleVo getVo(AppRole menu) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建查询条件封装
|
||||
*
|
||||
* @param req 查询条件
|
||||
* @return 查询条件封装
|
||||
*/
|
||||
@Override
|
||||
public LambdaQueryWrapper<AppRole> buildQueryWrapper(AppRoleQueryReq req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取app角色视图列表
|
||||
*
|
||||
* @param rolePage app角色列表
|
||||
* @return app角色视图列表
|
||||
*/
|
||||
@Override
|
||||
public Page<AppRoleVo> getVoList(Page<AppRole> rolePage) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -31,4 +31,26 @@
|
||||
icon,create_dept,remark,create_by,update_by,
|
||||
create_time,update_time
|
||||
</sql>
|
||||
|
||||
<select id="selectMenuTreeByUserId" parameterType="Long" resultType="org.dromara.app.system.domain.AppMenu">
|
||||
select distinct m.id,
|
||||
m.parent_id,
|
||||
m.menu_name,
|
||||
m.path,
|
||||
m.component,
|
||||
m.query_param,
|
||||
m.visible,
|
||||
m.status,
|
||||
m.perms,
|
||||
m.menu_type,
|
||||
m.icon,
|
||||
m.order_num,
|
||||
m.create_time
|
||||
from app_menu m
|
||||
left join app_role_menu rm on m.id = rm.menu_id and m.status = '0'
|
||||
left join app_role r on rm.role_id = r.id and r.status = '0'
|
||||
where m.menu_type in ('M', 'C')
|
||||
and r.id in (select role_id from sys_user_role where user_id = #{userId})
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
</mapper>
|
||||
|
Reference in New Issue
Block a user