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<Menu> getSysMenu() {
|
|
// 调用系统接口获取当前用户所拥有的菜单(默认最高父编码=null)
|
Collection<Url> cacheUrls = mainFrame.loadMeunUrls(null);
|
|
// 将获取到的URL转换为页面需要的Menu对象
|
return this.url2Menu(cacheUrls);
|
}
|
|
@Override
|
public List<Menu> getSysGroupMenu() {
|
// 调用系统接口获取当前用户所拥有的菜单(默认最高父编码=null)
|
Collection<Url> cacheUrls = mainFrame.loadMeunUrls(null);
|
|
|
//只保留库点使用菜单,也就是BIZTAG = null
|
if (cacheUrls.size() > 0) {
|
List<Url> 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<Menu> url2Menu(Collection<Url> cacheUrls) {
|
return JSONArray.parseArray(JSONArray.toJSONString(cacheUrls),
|
Menu.class);
|
}
|
|
@Override
|
public List<Menu> getSysMenuByParentCode(String code) {
|
// 调用系统接口获取当前用户所拥有的菜单(默认最高父编码=null)
|
Collection<Url> cacheUrls = mainFrame.loadMeunUrls(code);
|
// 将获取到的URL转换为页面需要的Menu对象
|
return this.url2Menu(cacheUrls);
|
}
|
|
@Override
|
public List<Menu> getMenuBySystemId(String companyId, String systemId, IUser user) {
|
Collection<Url> cacheUrls = mainFrame.loadMeunUrlsBySystemId(companyId, systemId);
|
|
|
//如果是管理员
|
if (user.isAdministrator()) return this.url2Menu(cacheUrls);
|
|
//二次验证
|
Map<String, String> mapUrl = sysRoleService.getMapUrlByUser(companyId, user.getUsername());
|
if (null == mapUrl || mapUrl.isEmpty()) return this.url2Menu(cacheUrls);
|
|
|
Collection<Url> newUrls = new ArrayList<>();
|
checkUrl(cacheUrls, newUrls, mapUrl);
|
|
|
// 将获取到的URL转换为页面需要的Menu对象
|
return this.url2Menu(newUrls);
|
}
|
|
private void checkUrl(Collection<Url> cacheUrls, Collection<Url> newUrls, Map<String, String> mapUrl) {
|
Collection<Url> children;
|
List<Url> 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();
|
}
|
|
}
|