package com.github.fashionbrot.funds.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.github.fashionbrot.funds.annotation.IsMenu;
import com.github.fashionbrot.funds.annotation.MarsPermission;
import com.github.fashionbrot.funds.dao.MenuDao;
import com.github.fashionbrot.funds.dao.MenuRoleRelationDao;
import com.github.fashionbrot.funds.entity.Menu;
import com.github.fashionbrot.funds.entity.MenuRoleRelation;
import com.github.fashionbrot.funds.enums.RespCode;
import com.github.fashionbrot.funds.exception.MarsException;
import com.github.fashionbrot.funds.model.LoginModel;
import com.github.fashionbrot.funds.vo.PageDataVo;
import com.github.fashionbrot.funds.vo.RespVo;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.method.HandlerMethod;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author fashionbrot
* @version 0.1.0
* @date 2019/12/8 22:45
*/
@Service
@Slf4j
public class MenuService {
@Autowired
private MenuDao menuDao;
@Autowired
private MenuRoleRelationDao menuRoleRelationDao;
@Autowired
private UserInfoService userInfoService;
@Autowired
private UserLoginService userLoginService;
private static Map<Long, List<Menu>> MENU_LIST_MAP = new ConcurrentHashMap<Long, List<Menu>>();
/**
* true 有权限 false 无权限
*
* @return
*/
public boolean checkPermissionUrl(Object handler, HttpServletRequest request) {
LoginModel model = userLoginService.getLogin();
if (handler instanceof HandlerMethod) {
//如果是超级管理员
if (model!=null && model.isSuperAdmin()){
return true;
}
String requestUrl = request.getRequestURI();
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
// 判断接口是否需要登录
IsMenu methodAnnotation = method.getAnnotation(IsMenu.class);
if (methodAnnotation != null && methodAnnotation.checkMenuUrlPermission() ) {
List<Menu> menuBarList = getMenus(model);
if (CollectionUtils.isNotEmpty(menuBarList)) {
for (Menu m : menuBarList) {
//验证菜单是否有权限
if (m.getMenuLevel() == 2 && equRequestUrl(m.getMenuUrl(), requestUrl)) {
return true;
}
}
}
return false;
}
MarsPermission permission= method.getAnnotation(MarsPermission.class);
if(permission!=null) {
String permissionCode =permission!=null?permission.value():null; ;
List<Menu> menuBarList = getMenus(model);
if (CollectionUtils.isNotEmpty(menuBarList)) {
for (Menu m : menuBarList) {
////验证按钮是否有权限
if (m.getMenuLevel()==3 &&
StringUtils.isNotBlank(permissionCode)&&
permissionCode.equals(m.getCode())){
return true;
}
}
}
return false;
}
return true;
}
return false;
}
/**
* 清除菜单缓存
*/
public void clearMenuList() {
MENU_LIST_MAP.clear();
}
public void add(Menu appInfo) {
if (menuDao.add(appInfo) != 1) {
throw new MarsException(RespCode.SAVE_ERROR);
}
}
public void update(Menu appInfo) {
Integer result = menuDao.update(appInfo);
if (result == 1) {
clearMenuList();
} else {
throw new MarsException(RespCode.UPDATE_ERROR);
}
}
public void deleteById(Long id) {
if (menuDao.deleteById(id) != 1) {
throw new MarsException(RespCode.DELETE_ERROR);
}
}
public Menu queryById(Long id) {
return menuDao.queryById(id);
}
public List<Menu> queryAll() {
QueryWrapper<Menu> queryWrapper=new QueryWrapper();
queryWrapper.groupBy("priority ");
List<Menu> menuBarList = menuDao.queryAll(queryWrapper);
if (CollectionUtils.isNotEmpty(menuBarList)) {
for (Menu m : menuBarList) {
if (m.getMenuLevel() != 1) {
m.setParentMenuName(parentMenuName(menuBarList, m.getParentMenuId()));
}
}
}
return menuBarList;
}
public PageDataVo queryAll(Integer page, Integer pageSize) {
QueryWrapper<Menu> queryWrapper=new QueryWrapper();
queryWrapper.orderByAsc("priority ");
Page<Object> objects = PageHelper.startPage(page, pageSize);
List<Menu> menuBarList = menuDao.queryAll(queryWrapper);
if (CollectionUtils.isNotEmpty(menuBarList)) {
for (Menu m : menuBarList) {
if (m.getMenuLevel() != 1) {
m.setParentMenuName(parentMenuName(menuBarList, m.getParentMenuId()));
}
}
}
PageDataVo<Menu> pageData = new PageDataVo<Menu>();
pageData.setData(menuBarList);
pageData.setITotalDisplayRecords(objects.getTotal());
return pageData;
}
private String parentMenuName(List<Menu> menuBarList, Long parentMenuId) {
if (CollectionUtils.isNotEmpty(menuBarList)) {
for (Menu m : menuBarList) {
if (m.getMenuLevel() == 1 && Objects.equals(m.getId(), parentMenuId)) {
return m.getMenuName();
}else if (m.getMenuLevel() == 2 && Objects.equals(m.getId(), parentMenuId)) {
return m.getMenuName();
}
}
}
return "";
}
public List<Menu> queryMenuLevel(Menu menuBar) {
return menuDao.queryAll(new QueryWrapper<Menu>().eq("menu_level", menuBar.getMenuLevel()));
}
public void loadMenuList(Object handler, HttpServletRequest request) {
if (handler instanceof HandlerMethod) {
LoginModel model = userLoginService.getLogin();
if (model == null) {
log.info(" loadMenuList userInfo is null");
return;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
String requestUrl = request.getRequestURI();
// 判断接口是否需要登录
IsMenu methodAnnotation = method.getAnnotation(IsMenu.class);
Optional.ofNullable(methodAnnotation).ifPresent(mm -> {
List<Menu> menuBarList = getMenus(model);
if (CollectionUtils.isNotEmpty(menuBarList)) {
menuBarList = searchChildMenu(menuBarList, requestUrl);
}
request.setAttribute("menuList", menuBarList);
});
}
}
public List<Menu> getMenus(LoginModel model) {
Long userId = model.getUserId();
List<Menu> menuBarList;
if (CollectionUtils.isNotEmpty(MENU_LIST_MAP) && MENU_LIST_MAP.containsKey(userId)) {
menuBarList = MENU_LIST_MAP.get(userId);
} else {
if (model.isSuperAdmin()){
menuBarList = menuDao.queryAll(null);
}else{
menuBarList
没有合适的资源?快使用搜索试试~ 我知道了~
基金分析平台 springboot - mybatis-plus .zip
共348个文件
java:97个
js:79个
png:74个
0 下载量 87 浏览量
2024-08-20
10:49:42
上传
评论
收藏 8.64MB ZIP 举报
温馨提示
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:项目具体内容可查看/点击本页面下方的*资源详情*,包含完整源码+工程文件+说明(若有)等。【若无VIP,此资源可私信获取】 【本人专注IT领域】:有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为您提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发出更多功能 #注 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担 2. 部分字体及插图等来自网络,若是侵权请联系删除,本人不对所涉及的版权问题或内容负法律责任。收取的费用仅用于整理和收集资料耗费时间的酬劳 3. 积分资源不提供使用问题指导/解答
资源推荐
资源详情
资源评论
收起资源包目录
基金分析平台 springboot - mybatis-plus .zip (348个子文件)
theme-default.css 195KB
bootstrap.css 150KB
bootstrap.min.css 114KB
jquery.mCustomScrollbar.css 52KB
animate.min.css 52KB
jstree.min.css 26KB
font-awesome.min.css 20KB
select2.min.css 15KB
nv.d3.css 13KB
dropzone.css 11KB
summernote.css 10KB
fullcalendar.css 10KB
codemirror.css 8KB
selectTree.css 8KB
laydate.css 8KB
rickshaw.css 7KB
blueimp-gallery.min.css 7KB
introjs.min.css 6KB
zTreeStyle.css 6KB
jquery-ui.min.css 5KB
rtl.css 4KB
ion.rangeSlider.css 4KB
cropper.min.css 3KB
merge.css 3KB
jquery.searchableSelect.css 3KB
xq-light.css 2KB
ion.rangeSlider.skinFlat.css 2KB
3024-night.css 2KB
abcdef.css 2KB
idea.css 2KB
fontawesome-webfont.eot 37KB
fontawesome-webfont.eot 37KB
glyphicons-halflings-regular.eot 20KB
iconfont.eot 2KB
zTreeStandard.gif 5KB
metro.gif 5KB
spinner.gif 2KB
throbber.gif 2KB
AjaxLoader.gif 1KB
loading.gif 847B
loading.gif 381B
loading.gif 381B
line_conn.gif 45B
.gitattributes 86B
.gitignore 246B
index.html 14KB
index.html 12KB
userManager.html 10KB
index.html 9KB
top.html 3KB
login.html 2KB
left.html 2KB
footer.html 2KB
401.html 1KB
head.html 1KB
index.html 805B
control.html 383B
dashboard.html 181B
MenuService.java 13KB
FundsService.java 13KB
FundServiceImpl.java 8KB
CookieUtil.java 7KB
HttpClientUtil.java 7KB
UserInfoDao.java 6KB
ChineseToSpellUtil.java 6KB
UserInfoService.java 6KB
JwtTokenUtil.java 5KB
FileUtil.java 5KB
ObjectUtil.java 5KB
FundValuationServiceImpl.java 5KB
FundStockServiceImpl.java 4KB
FundHoldServiceImpl.java 4KB
Interceptor.java 4KB
FundController.java 4KB
UserInfoController.java 4KB
FundValuationService.java 3KB
FundStockService.java 3KB
FundHoldService.java 3KB
FundService.java 3KB
MenuController.java 3KB
FundValuationController.java 3KB
FundStockController.java 2KB
FundHoldController.java 2KB
RoleInfoController.java 2KB
FieldMetaObjectHandler.java 2KB
CharStreamUtil.java 2KB
SystemUtil.java 2KB
ReturnValueHandler.java 2KB
DateUtil.java 2KB
RespCode.java 2KB
BigDecimalUtil.java 2KB
ClassTypeEnum.java 2KB
WebMvcConfig.java 2KB
RoleInfoService.java 1KB
UserInfoMapper.java 1KB
RoleInfoDao.java 1KB
FundEntity.java 1KB
Menu.java 1KB
MenuDao.java 1KB
RoleInfoMapper.java 1KB
共 348 条
- 1
- 2
- 3
- 4
资源评论
专家大圣
- 粉丝: 2019
- 资源: 7730
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于微信小程序与JavaScript的成都亲子出游活动源码设计
- 基于Vue的lisa_auto_web车管系统前端设计源码
- 基于Kotlin的Camera1 & TextureView双预览设计源码,支持镜像、旋转、拍照录像功能
- 基于Vue+Springboot的Online-Study在线学习平台设计源码
- 基于微信小程序的mini-music网易云音乐设计源码
- 基于JavaScript与微信小程序技术的多元化城市生活探索设计源码
- 基于SpringBoot的Java快速应用开发框架设计源码
- 基于jQuery Mobile和jsSHA的HTML+JavaScript多因素认证应用设计源码
- 基于Java语言的宠物类应用设计源码
- 基于JavaScript、CSS、HTML的zzshzc浙江社会仲裁系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功