用户资源(菜单)控制学习使用

效果图

在这里插入图片描述
在这里插入图片描述

第一步 需要再定义常量资源

//信访听证 资源前缀public static final String RESPREFIX_MODULE_XINFTZ_="module_xinftz_";//听证专家库public static final ConstantItem RES_MODULE_XINFTZ_TINGZZJK = new ConstantItem(RESPREFIX_MODULE_XINFTZ_ + "tingzzjk","听证专家库");//听证模板库public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK = new ConstantItem(RESPREFIX_MODULE_XINFTZ_ + "tingzmbk","听证模板库");//听证模板库public static final String RESPREFIX_MODULE_XINFTZMBK_="module_xinftzmbk_";//听证模板库public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_PILDRMB = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"pildrmb","批量导入模板");public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_DAORMB = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"daormb","导入模板");public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_BIANJ = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"bianj","编辑");public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_SHANC = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"shanc","删除");public static final ConstantItem RES_MODULE_XINFTZ_TINGZMBK_TUODBS = new ConstantItem(RESPREFIX_MODULE_XINFTZMBK_+"tuodbs","拖动标识");

第二部组装数据

    private static final String RESCATEGORY_MODULE_XINFTZ=XysdSysConstants.RESPREFIX_MODULE_XINFTZ_;//信访听证private static final String RESCATEGORY_MODULE_XINFTZ_TINGZZJK=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZZJK.getId();//听证专家库private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBK=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK.getId();//听证模板库private static final String RESPREFIX_MODULE_XINFTZMBK=(String)XysdSysConstants.RESPREFIX_MODULE_XINFTZMBK_;//听证模板库private static final String RESCATEGORY_MODULE_XINFTZ_TINGZDJ=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZDJ.getId();//听证登记private static final String RESCATEGORY_MODULE_XINFTZ_BENDWTZCX=(String)XysdSysConstants.RES_MODULE_XINFTZ_BENDWTZCX.getId();//本单位听证查询private static final String RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX=(String)XysdSysConstants.RES_MODULE_XINFTZ_ZERDWTZCX.getId();//责任单位听证查询private static final String RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX=(String)XysdSysConstants.RES_MODULE_XINFTZ_BENDWCYTZCX.getId();//本单位参与听证查询private static final String RESCATEGORY_MODULE_XINFTZ_TINGZTJ=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZTJ.getId();//听证统计private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_PILDRMB.getId();//批量导入模板private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_DAORMB.getId();//导入模板private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_BIANJ.getId();//编辑private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_SHANC.getId();//删除private static final String RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS=(String)XysdSysConstants.RES_MODULE_XINFTZ_TINGZMBK_TUODBS.getId();//拖动标识
private List<TreeNode> buildTreeNodes(List<SysDataSimpleDTO> resList) {List<TreeNode> nodes=new ArrayList<>();List<TreeNode> xinftzResList=new ArrayList<>();//信访听证xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ,"信访听证",null,"root",false,"Category",false));List<TreeNode> xinftmbkzResList=new ArrayList<>();//信访听证xinftmbkzResList.add(new TreeNode(RESPREFIX_MODULE_XINFTZMBK,"听证模板库",null,"root",false,"Category",false));
}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZZJK)){//信访听证-听证专家库if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZZJK)) {xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZZJK,"听证专家库",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZZJK, new SysDataSimpleDTO());}continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZDJ)){//信访听证-听证登记if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZDJ)) {xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZDJ,"听证登记",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZDJ, new SysDataSimpleDTO());}continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX)){//信访听证-本单位听证查询if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX)) {xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX,"本单位听证查询",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_BENDWTZCX, new SysDataSimpleDTO());}continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX)){//信访听证-责任单位听证查询if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX)) {xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX,"责任单位听证查询",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_ZERDWTZCX, new SysDataSimpleDTO());}continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX)){//信访听证-本单位参与听证查询if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX)) {xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX,"本单位参与听证查询",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_BENDWCYTZCX, new SysDataSimpleDTO());}continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZTJ)){//信访听证-听证统计if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZTJ)) {xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZTJ,"听证统计",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZTJ, new SysDataSimpleDTO());}continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBK)){//信访听证-听证模板库if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBK)) {xinftzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBK,"听证模板库",null,RESCATEGORY_MODULE_XINFTZ,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBK, new SysDataSimpleDTO());}xinftzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBK,false,"Res",false));continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB)){//信访听证-听证模板库批量导入if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB)) {xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB,"批量导入模板",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB, new SysDataSimpleDTO());}xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_PILDRMB,false,"Res",false));continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB)){//信访听证-听证模板库导入模板if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB)) {xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB,"导入模板",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB, new SysDataSimpleDTO());}xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_DAORMB,false,"Res",false));continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ)){//信访听证-听证模板库编辑if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ)) {xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ,"编辑",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ, new SysDataSimpleDTO());}xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_BIANJ,false,"Res",false));continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC)){//信访听证-听证模板库删除if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC)) {xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC,"删除",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC, new SysDataSimpleDTO());}xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_SHANC,false,"Res",false));continue;}if(res.getId().startsWith(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS)){//信访听证-听证模板库拖动标识if(!handledRes.containsKey(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS)) {xinftmbkzResList.add(new TreeNode(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS,"拖动标识",null,RESPREFIX_MODULE_XINFTZMBK,false,"Category",false));handledRes.put(RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS, new SysDataSimpleDTO());}xinftmbkzResList.add(new TreeNode(res.getId(),res.getName(),null,RESCATEGORY_MODULE_XINFTZ_TINGZMBKT_TUODBS,false,"Res",false));continue;}//信访听证资源nodes.addAll(xinftzResList);
//信访听证模板库资源
nodes.addAll(xinftmbkzResList); return nodes;

第三步 定义接口

@ApiOperation(value="树-获取所有节点", httpMethod="POST")@ApiImplicitParam(name="params", value="参数集合", dataType="Map<String,String>")@RequestMapping(value="/allnodes/get",method=RequestMethod.POST)public ApiResultDTO<List<TreeNode>> getAllTreeNodes(@RequestBody Map<String,String> params,HttpServletRequest hreq){return RestAPITemplate.restapi(new IMyLogic<List<TreeNode>>() {@Overridepublic List<TreeNode> logic() {AccessTokenUser user=new AccessTokenUserAssembler().getAccessTokenUserFromReq(hreq);String treeType=params.get("treeType");ITreeService treeService=getTreeServiceByTreeType(treeType);return treeService.getAllTreeNodes(user, params);}});}public List<TreeNode> getAllTreeNodes(AccessTokenUser user,Map<String, String> params) {List<SysDataSimpleDTO> resList=systemGatewayService.findAllResList();List<TreeNode> nodes=this.buildTreeNodes(resList);return nodes;}

返回值模型

ApiModel(value="MenuDTO ",description="菜单模型")
@JsonIgnoreProperties(ignoreUnknown=true)
public class MenuDTO {@ApiModelProperty(value="菜单标识")private String id;@ApiModelProperty(value="菜单名称")private String name;@ApiModelProperty(value="菜单名称简称")private String simpleName;@ApiModelProperty(value="菜单打开的链接地址")private String url;@ApiModelProperty(value="菜单描述")private String description;@ApiModelProperty(value="是否显示")private Boolean isShow = false;@ApiModelProperty(value="子菜单")private List<MenuDTO> submenus = new ArrayList<MenuDTO>();public String getId() {return id;}public String getName() {return name;}public String getSimpleName() {return simpleName;}public String getUrl() {return url;}public String getDescription() {return description;}public void setSubmenus(List<MenuDTO> submenus) {this.submenus = submenus;}public List<MenuDTO> getSubmenus() {return submenus;}public Boolean getShow() {return isShow;}public void setShow(Boolean show) {isShow = show;}public MenuDTO() {super();}public MenuDTO(String id, String name, String simpleName) {super();this.id = id;this.name = name;this.simpleName=simpleName;if(StringUtils.isNotBlank(name) && StringUtils.isBlank(simpleName)){this.simpleName=name.substring(0,2);}}public MenuDTO(String id, String name, String simpleName, String url, String description) {super();this.id = id; this.name = name;this.simpleName=simpleName;if(StringUtils.isNotBlank(name) && StringUtils.isBlank(simpleName)){this.simpleName=name.substring(0,2);}this.url = url;this.description = description;}/**************************************************************开始格式化数据方法**************************************************************//*** 是否有子菜单* @return*/public boolean isHasSubMenus() {return this.submenus.size()>0;}}

请求参数

{"treeType": "resourceTree"
}

返回值

在这里插入图片描述

效果图

在这里插入图片描述

将用户与资源关联

@AuditLogEnregistor(module="角色管理",action="保存")@ApiOperation(value="保存角色", httpMethod="POST")@ApiImplicitParam(name="roleDTO", value="角色详情", required=true)@RequestMapping(value="/save", method=RequestMethod.POST)public ApiResultDTO<RoleDTO> saveRole(@RequestBody RoleDTO roleDTO,HttpServletRequest hreq) {return RestAPITemplate.restapi(new IMyLogic<RoleDTO>() {@Overridepublic RoleDTO logic() {AccessTokenUser user=new AccessTokenUserAssembler().getAccessTokenUserFromReq(hreq);roleService.saveRole(user,null,roleDTO);return roleDTO;}});}public void saveRole(AccessTokenUser user, Date operateTime, RoleDTO roleDTO) {if(roleDTO.getParent()==null||StringUtils.isBlank(roleDTO.getParent().getId())){throw new RuntimeException("请选择上级节点!");}//this.checkRoleCanEditByRoleName(roleDTO.getName());//检查可编辑权限RoleDTOAssembler roleDTOAssembler=new RoleDTOAssembler(this.beansFactoryService);String roleId=roleDTO.getId();String parentId=roleDTO.getParent().getId();Role role=null;Role parent=this.roleRepository.getRoleById(parentId);if(parent==null){throw new RuntimeException("未找到上级节点!");}String oldParentId=null;Integer oldOrderNo=null;if(StringUtils.isBlank(roleId)){role = roleDTOAssembler.fromRoleDTO(roleDTO);role.updateCreateInfo(user, operateTime, parent);}else{role=this.roleRepository.getRoleById(roleId);if(role==null){throw new RuntimeException("根据角色id未找到相应的角色!");}//this.checkRoleCanEditByRoleName(role.getName());//检查可编辑权限oldParentId=role.getParent().getId();oldOrderNo=role.getOrderNo();String name=roleDTO.getName();String visibleLevel=roleDTO.getVisibleLevel();String resourceCodes = roleDTO.obtainResourceCodes();String comments=roleDTO.getComments();int orderNo=roleDTO.getOrderNo();role.updateRole(user, operateTime, parent, name, visibleLevel, resourceCodes,comments, orderNo);}roleRepository.createOrUpdateRole(role);if (oldParentId==null || oldOrderNo==null || oldOrderNo!=role.getOrderNo() ||!oldParentId.equals(role.getParent().getId())){//更新fullId和fullOrderroleDomainService.updateRoleFullIdAndFullOrder(user, operateTime,role);roleRepository.createOrUpdateRole(role);}//更新角色 用户关系roleDomainService.updateRoleUsers(user, operateTime,roleDTO.getUsers(),role);if (StringUtils.isBlank(roleDTO.getId())){roleDTO.setId(role.getId());}}

实体模型

@Entity
@Table(name = "T_ROLE")
public class Role extends ExBizEntity {public static final String NODETYPE_ROOT = "Root";public static final String NODETYPE_CATEGORY = "Category";public static final String NODETYPE_ROLE = "Role";@Column(length=200)private String name;//角色名称@Column(length=20)private String nodeType;//节点类型@Column(length=100)private String visibleLevel;//可见级别@Column(columnDefinition="text")private String resourceCodes;//拥有的资源的资源编码@OneToMany(mappedBy="roleId")@OrderBy("createTime,id")private Set<RoleUser> roleUsers = new LinkedHashSet<RoleUser>();//拥有此角色的用户@Column(length = 500)private String fullId;//增强树,全路径@Column(length = 500)private String fullOrder;//增强树排序@Column(length = 1000)private String comments;//说明private int orderNo = 0;//归口顺序号@ManyToOne(fetch = FetchType.LAZY)private Role parent;//父节点@OneToMany(mappedBy = "parent")@OrderBy("orderNo")private Set<Role> children = new HashSet<Role>();//子节点//todo 省略get方法public Role() {super();}public Role(String nodeType,String visibleLevel, String name, String resourceCodes,String comments, int orderNo) {super();this.nodeType = nodeType;this.visibleLevel = visibleLevel;this.name = name;this.resourceCodes = resourceCodes;this.comments = comments;this.orderNo = orderNo;}//为跟节点构造private Role(AccessTokenUser user, Date operateTime, String name){this.setCreateInfo(new OperateInfo(user));this.id = getRoleRootId();this.nodeType = NODETYPE_ROOT;this.name = name;this.orderNo = 1;this.fullId = this.id+"-";this.fullOrder = 1+"-";}//获取角色跟节点id@Transientpublic static String getRoleRootId(){return "rootRole";}//创建角色跟节点public static Role createRoleRoot( AccessTokenUser user,Date operateTime){Role root=new Role(user, operateTime, "角色管理");return root;}public void updateCreateInfo(AccessTokenUser user,Date operateTime, Role parent) {this.setCreateInfo(new OperateInfo(user));this.parent = parent;}public void updateRole(AccessTokenUser user, Date operateTime, Role parent,String name, String visibleLevel,String resourceCodes,String comments, int orderNo) {if(operateTime==null){operateTime = new Date();}this.lastUpdateDate = operateTime;this.name = name;this.visibleLevel = visibleLevel;this.parent = parent;this.orderNo = orderNo;this.resourceCodes = resourceCodes;this.comments = comments;}//更新角色fullId和fullOrderpublic void updateRoleFullIdAndFullOrder(AccessTokenUser user, Date operateTime,String oldFullId,String oldFullOrder) {if(this.parent!=null){this.fullId = this.parent.getFullId()+this.id+"-";this.fullOrder = this.parent.getFullOrder()+Utils.lpadStr(this.orderNo+"",10,'0')+"-";}else{this.fullId = this.id+"-";this.fullOrder = Utils.lpadStr(this.orderNo+"",10,'0')+"-";}//如果fullId或者fullOrder发生改变if(!fullId.equals(oldFullId)||!fullOrder.equals(oldFullOrder)){if(operateTime==null){operateTime = new Date();}this.lastUpdateDate = operateTime;}}
}
@Entity
@Table(name = "T_USER_ROLE")
public class RoleUser extends ValueObjectEntity {@Column(length=100)private String roleId;//角色id@Column(length=200)private String roleName;//角色名称@Column(length=100)private String userId;//用户id@Column(length=200)private String userName;//用户名称//todo 省略get方法public RoleUser() {super();}public RoleUser(String roleId, String roleName, String userId,String userName) {super();this.roleId = roleId;this.roleName = roleName;this.userId = userId;this.userName = userName;}//创建角色用户关系public void createRoleUser(AccessTokenUser user,Date operateTime) {this.setCreateInfo(new OperateInfo(user));this.id = this.userId+"_"+this.roleId;}}

数据库表数据

在这里插入图片描述

系统显示用户拥有的菜单

定义接口
@ApiOperation(value="获取框架菜单", httpMethod="GET")@RequestMapping(value="/menus/get", method=RequestMethod.GET)public ApiResultDTO<Map<String,List<MenuDTO>>> getHomePageMenus(@RequestParam(value = "fromType",required = false) String fromType, HttpServletRequest hreq,HttpServletResponse hrep){return RestAPITemplate.restapi(new IMyLogic<Map<String,List<MenuDTO>>>() {@Overridepublic Map<String,List<MenuDTO>> logic() {AccessTokenUser user = new AccessTokenUserAssembler().getAccessTokenUserFromReq(hreq);return layoutService.getLayoutMenus(user,fromType);}});}
Service服务+数据组装
@Overridepublic Map<String,List<MenuDTO>> getLayoutMenus(AccessTokenUser user,String fromType) {Map<String,List<MenuDTO>> result=new HashMap<String, List<MenuDTO>>();PrivilegesUser puser = ThreadLocalCache.fetchAPIData("PrivilegesUser."+user.getUserId(),new IDataFetch<ApiResultDTO<PrivilegesUser>>() {@Overridepublic ApiResultDTO<PrivilegesUser> fetchData() {return systGatewayService.getPrivilegesUserById(user.getUserId());}});puser.getOtherData().put("accessToken", user.getAccessToken());UserLayoutSetDTO layoutSet=this.getNotNullUserLayoutSet(user,fromType);Map<String,List<MenuDTO>> allMenus=this.getMyAllMenus(user,fromType);List<MenuDTO> leftTop = new ArrayList<MenuDTO>();//左菜单 上半部分result.put("leftTop", leftTop);List<WorkReminderDTO> gongztxq = layoutSet.getGongztxq();for (int i = 0; i < gongztxq.size(); i++) {for (MenuDTO menuDto : allMenus.get("gongztxq")) {if(menuDto==null) continue;if(menuDto.getId().equals(gongztxq.get(i).getMenuId()) && gongztxq.get(i).getShow()){leftTop.add(menuDto);break;}}}List<MenuDTO> leftBottom = new ArrayList<MenuDTO>();//左菜单 下半部分result.put("leftBottom", leftBottom);
//        Map<String,MenuDTO> changygnqMap=allMenus.get("changygnq").stream().collect(
//            Collectors.toMap(d->d.getId(), d->d)
//        );if(layoutSet.getChangygnq() != null){for (int i = 0; i < layoutSet.getChangygnq().size(); i++) {for (MenuDTO menuDto : allMenus.get("changygnq")) {if(menuDto==null) continue;if(menuDto.getSubmenus().size() > 0){for (MenuDTO submenu : menuDto.getSubmenus()) {if(submenu.getId().equals(layoutSet.getChangygnq().get(i))){leftBottom.add(submenu);break;}}}else{if(menuDto.getId().equals(layoutSet.getChangygnq().get(i))){leftBottom.add(menuDto);}}}}}if (leftTop.size()==0){List<MenuDTO> leftBottom1 = result.get("leftBottom");result.put("leftTop",leftBottom1);result.put("leftBottom",new ArrayList<MenuDTO>());}return result;}
public Map<String,List<MenuDTO>> getMyAllMenus(AccessTokenUser user,String fromType) {List<MenuDTO> gongztxq = new ArrayList<>();//工作提醒区String quyName="gongztxq";result.put(quyName, gongztxq);//待办if(puser.hasAppointPrefixResource((String)XysdSysConstants.RES_MODULE_SHOUY_DAIB_.getId())) {gongztxq.add(new MenuDTO(quyName+"_daib", "待办", "待办", "/xf/waitTodo", "待处理工作,需及时处理"));}//提醒if(puser.hasResource((String)XysdSysConstants.RES_MODULE_SHOUY_TIX.getId())) {gongztxq.add(new MenuDTO(quyName+"_tix", "提醒", "提醒", "/xf/remind", "新件、催办、退办等提醒"));}//预警 海淀 HDXF-21069 增加 预警飘窗,去掉这个 工作人员app,公交集团 还是需要if (ValueObjectEntity.SYSCODE_GJJTXF.equals(BaseConstants.getProperty("syscode", null))|| XysdConstants.TOKEN_FORMTYPE_APP.equals(user.obtainFromType())||"gzapp".equals(fromType)){//处理PC登陆APPif(puser.hasAppointPrefixResource((String)XysdSysConstants.RES_MODULE_SHOUY_YUJ_.getId())) {gongztxq.add(new MenuDTO(quyName+"_yuj", "预警", "预警", "/xf/earlyWarn", "信访三率预警"));}}//监控if(puser.hasAppointPrefixResource((String)XysdSysConstants.RES_MODULE_SHOUY_JIANK_.getId())) {gongztxq.add(new MenuDTO(quyName+"_jiank", "监控", "监控", "/xf/monitor", "未结件跟进办理"));}//看板if(puser.hasResource((String)XysdSysConstants.RES_MODULE_SHOUY_KANB.getId())) {gongztxq.add(new MenuDTO(quyName+"_kanb", "看板", "看板", "/xf/bulletinBoard", "全区信访统计分析"));}//数据分析if(puser.hasResource((String)XysdSysConstants.RES_MODULE_SHOUY_SHUJFX.getId())) {gongztxq.add(new MenuDTO(quyName+"_shujfx", "数据分析", "数据分析", "/xf/dataAnalysis", "数据分析"));}List<MenuDTO> defaultChangygnq = new ArrayList<MenuDTO>();//默认常用功能区List<MenuDTO> changygnq = new ArrayList<MenuDTO>();//常用功能区quyName="changygnq";result.put(quyName, changygnq);result.put("defaultChangygnq", defaultChangygnq);
//查询统计menuDTO = new MenuDTO(quyName+"_chaxtj", "查询统计", "查询统计");//查询统计-查询if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_XINF_CHAX_)) {MenuDTO cxMuDTO = new MenuDTO(quyName+"_chaxtj_xinfcx", "查询", "查询", "/xf/query", "办理查询");menuDTO.getSubmenus().add(cxMuDTO);defaultChangygnq.add(cxMuDTO);}//查询统计-统计if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_TONGJBB_)) {MenuDTO tjMuDTO = new MenuDTO(quyName+"_chaxtj_tongj", "统计", "统计", "/xf/statistics", "统计中心,进行各类统计");menuDTO.getSubmenus().add(tjMuDTO);defaultChangygnq.add(tjMuDTO);}
//信访库menuDTO = new MenuDTO(quyName+"_xinfk", "信访库", "信访库");//信访库-查询if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_XINFK_CHAX_)) {menuDTO.getSubmenus().add(new MenuDTO(quyName+"_xinfk_chax", "信访库", "信访库", "/xf/infoLibrary", "信访人、信访件等集中查询"));}//信访库-整理if(puser.hasAppointPrefixResource(XysdSysConstants.RESPREFIX_MODULE_XINFK_ZHENGL_)) {menuDTO.getSubmenus().add(new MenuDTO(quyName+"_xinfk_zhengl", "信访库整理", "信访库整理", "/xf/infoArrange", "信访库整理"));}if(menuDTO.isHasSubMenus()) {changygnq.add(menuDTO);}return result;
}

返回值

在这里插入图片描述

效果图

请看最上面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】每日一题 2024_1_22 最大交换(模拟)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;最大交换题目描述&#xff1a;代码与解题思路 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 几百年没有见到题目描述这么短的题目了&#xff0c;泪目了 题目&#x…

计算机缺失msvcp110.dll如何修复?只需学会这个5个方法,轻松解决dll问题

丢失msvcp110.dll文件可能会引发一系列广泛的问题&#xff0c;这个动态链接库文件对于Windows操作系统中某些应用程序的正常运行至关重要。当msvcp110.dll缺失时&#xff0c;用户可能会遭遇如程序无法启动、运行过程中突然崩溃、功能受限或完全失效等现象。具体来说&#xff0c…

蓝桥杯真题(Python)每日练Day4

题目 OJ编号2117 题目分析 第一种先采用暴力的思想&#xff0c;从第一根竹子开始&#xff0c;找到连续的高度相同的竹子&#xff0c;砍掉这些竹子&#xff0c;一直循环这个方法&#xff0c;直到所有的竹子高度都为1。很明显&#xff0c;依次遍历竹子的高度复杂度为O&#x…

air001研究笔记.基于arduino快速开发简单项目

一、air001芯片简介 air001是厂商合宙推出的一款tssop封装的mcu芯片。支持swd与串口烧录&#xff0c;多面向简单的功能简单类别的电子产品&#xff0c;因为官方文档齐全上手简易&#xff0c;所以也特别适合非专业爱好者乃至于幼儿编程。芯片内置资源&#xff1a;AIR001芯片数据…

智能小程序环境配置流程

App 与智能小程序 在用户使用 App 扫描小程序的二维码或者点击设备&#xff0c;尝试进入小程序时&#xff0c;系统会对 App 当前环境与小程序所需运行环境进行比对&#xff0c;确定环境配置兼容后&#xff0c;App 才能启动并运行小程序。 比对规则中&#xff0c;主要涉及&…

Redis分布式系统:集群

"还不如留给花园&#xff0c;多一瞬色彩~" 当我们聊到“集群”这一个词&#xff0c;我们脑中构想出的画面&#xff0c;一定是多台机器&#xff0c;构成的分布式系统&#xff0c;这可以被称为一个“集群”。其实&#xff0c;在前篇的哨兵机制下&#xff0c;奇数个监控…

【算法小记】——机器学习中的概率论和线性代数,附线性回归matlab例程

内容包含笔者个人理解&#xff0c;如果错误欢迎评论私信告诉我 线性回归matlab部分参考了up主DR_CAN博士的课程 机器学习与概率论 在回归拟合数据时&#xff0c;根据拟合对象&#xff0c;可以把分类问题视为一种简答的逻辑回归。在逻辑回归中算法不去拟合一段数据而是判断输入…

git使用指南——以gitlab为例

注册gitlab 自行注册 新建项目 选择新建一个空白的项目 上传项目 clone项目地址到本地 执行完之后&#xff0c;会在目录下生成如下内容&#xff1a;进入里面&#xff0c;选择.git&#xff0c;要上传的内容&#xff08;资料或代码复制到该目录下&#xff09;&#xff1a;…

【MATLAB源码-第123期】基于matlab的SSK(空间位移键控)调制和QSSK(正交空间位移键控)调制误码率对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. SSK&#xff08;空间位移键控&#xff09;&#xff1a; - 基本原理&#xff1a;SSK是一种MIMO&#xff08;多输入多输出&#xff09;系统中的调制技术。它通过选择性地激活不同的发送天线来传输信息。在每个时间槽&…

Nuxt2.x Error页面返回自定义请求状态码

一、问题描述 最近接到一个需求&#xff0c;针对Nuxt2.x的一个项目进行SEO优化&#xff0c;需要对404页面的状态进行修改&#xff0c;将404页面的请求状态码改为301&#xff0c;而不是404&#xff1a; 二、解决方案 1.几种无效尝试 &#xff08;1&#xff09;layouts下的err…

多家头部企业宣布「启动鸿蒙原生应用开发」,你看好鸿蒙系统走向「独立」吗?

我觉得跟着国家对鸿蒙的推进&#xff0c;就知道发展前景肯定是没错的。并且现在已经走向独立道路。 华为鸿蒙是国家主推的操作系统项目&#xff0c;而之前由于美丽国的一系列制裁后。华为也终于崛起&#xff1b;在1月18号的华为鸿蒙仪式中&#xff0c;推出了HarmonyOSNEXT星空…

Java基础 - 09 Set之linkedHashSet , CopyOnWriteArraySet

LinkedHashSet和CopyOnWriteArraySet都是Java集合框架提供的特殊集合类&#xff0c;他们在特定场景下有不同的用途和特点。 LinkedHashSet是Java集合框架中的一种实现类&#xff0c;它继承自HashSet并且保持插入顺序。它使用哈希表来存储元素&#xff0c;并使用链表来维护插入…

Git学习笔记(第3章):Git常用命令

目录 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库状态 3.4 添加暂存区 3.5 提交本地库 3.6 历史版本 3.7 修改文件 3.8 版本穿梭 小结 命令 作用 git config --global user.name 用户名 设置用户签名 git config --global user.email 邮箱 设置用户签名 …

全国各城市绿地及绿化面积数据,shp/excel格式,2020-2022年

基本信息. 数据名称: 全国各城市绿地及绿化面积数据 数据格式: Shp、excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1province省份名称2city城市名称4city_dm城市…

【python】python实现代码雨【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、效果图&#xff1a; 二、准备工作 &#xff08;1)、导入必要的模块&#xff1a; 代码首先导入了需要使用的模块&#xff1a;requests、lxml和csv。 import requests from lxml import etree import csv 如果出现模…

Linux大老都是怎么记住这么多命令的?

今天给大家带来的是面试/实际工作中经常用到的Linux相关操作命令: 一. vi/vim编辑器 ---->文本编辑器 作用&#xff1a;创建文件&#xff0c;编辑文件&#xff0c;查看文件 格式&#xff1a;vi/vim 文件的名字 解析&#xff1a;如果该文件不存在&#xff0c;vi就会创建该…

外包干了一个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

【QML COOK】- 012-在QML中使用OpenGL渲染

本文是参照了两个文章编写的。 一是QML的例子&#xff1a;Scene Graph - OpenGL Under QML | Qt Quick 6.6.1 二是关于SceneGraph的介绍&#xff1a;Qt Quick Scene Graph | Qt Quick 6.2.11 这里我提取一下重点方便大家理解。 一个QML程序只能用一种计算机图形接口。不能有…

基于SpringBoot Vue美食网站系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

测试工程师必看!测试用例设计全解析,让你彻底掌握

测试工程师在入行时&#xff0c;都会接触到一个名词——测试用例&#xff0c;都知道测试用例是干什么用的&#xff0c;提到设计测试用例的方法&#xff0c;大部分测试工程师都会侃侃而谈&#xff1a;等价类法、边界值法、判定表法、正交分解法……这些方法说起来都如数家珍&…