package com.ld.igds.sys.service; import com.alibaba.fastjson.JSONArray; import com.bstek.bdf2.core.business.IUser; import com.bstek.bdf2.core.model.Url; import com.bstek.bdf2.core.orm.hibernate.HibernateDao; import com.bstek.bdf2.core.view.frame.main.MainFrame; import com.ld.igds.data.Menu; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.*; import java.util.stream.Collectors; @Repository public class SystemServiceImpl extends HibernateDao implements SystemService { /** * 引入BDF2底层获取菜单的接口,该接口从缓存中获取 */ @Autowired private MainFrame mainFrame; @Autowired private SysRoleService sysRoleService; @Override public List getSysMenu() { // 调用系统接口获取当前用户所拥有的菜单(默认最高父编码=null) Collection cacheUrls = mainFrame.loadMeunUrls(null); // 将获取到的URL转换为页面需要的Menu对象 return this.url2Menu(cacheUrls); } @Override public List getSysGroupMenu() { // 调用系统接口获取当前用户所拥有的菜单(默认最高父编码=null) Collection cacheUrls = mainFrame.loadMeunUrls(null); //只保留库点使用菜单,也就是BIZTAG = null if (cacheUrls.size() > 0) { List collect = cacheUrls.stream().filter(u -> Url.BIZ_TAG_GROUP.equals(u.getSystemId())).collect(Collectors.toList()); // 将获取到的URL转换为页面需要的Menu对象 return this.url2Menu(collect); } return null; } /** * 由于字段设置相同,使用JSON格式直接转换 * * @param cacheUrls * @return */ private List url2Menu(Collection cacheUrls) { return JSONArray.parseArray(JSONArray.toJSONString(cacheUrls), Menu.class); } @Override public List getSysMenuByParentCode(String code) { // 调用系统接口获取当前用户所拥有的菜单(默认最高父编码=null) Collection cacheUrls = mainFrame.loadMeunUrls(code); // 将获取到的URL转换为页面需要的Menu对象 return this.url2Menu(cacheUrls); } @Override public List getMenuBySystemId(String companyId, String systemId, IUser user) { Collection cacheUrls = mainFrame.loadMeunUrlsBySystemId(companyId, systemId); //如果是管理员 if (user.isAdministrator()) return this.url2Menu(cacheUrls); //二次验证 Map mapUrl = sysRoleService.getMapUrlByUser(companyId, user.getUsername()); if (null == mapUrl || mapUrl.isEmpty()) return this.url2Menu(cacheUrls); Collection newUrls = new ArrayList<>(); checkUrl(cacheUrls, newUrls, mapUrl); // 将获取到的URL转换为页面需要的Menu对象 return this.url2Menu(newUrls); } private void checkUrl(Collection cacheUrls, Collection newUrls, Map mapUrl) { Collection children; List newChildren; for (Url url : cacheUrls) { if (null == mapUrl.get(url.getId())) continue; children = url.getChildren(); if (null != children) { newChildren = new ArrayList<>(); checkUrl(children, newChildren, mapUrl); url.setChildren(newChildren); } newUrls.add(url); } } @Override public void refreshUrlCache() { mainFrame.cacheNavigatorUrls(); } }