| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | package org.jeecg.modules.ngalain.service.impl;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import org.jeecg.common.util.oConvertUtils;import org.jeecg.modules.ngalain.service.NgAlainService;import org.jeecg.modules.system.entity.SysPermission;import org.jeecg.modules.system.mapper.SysDictMapper;import org.jeecg.modules.system.service.ISysPermissionService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import java.util.Base64;import java.util.List;import java.util.Map;@Service("ngAlainService")public class NgAlainServiceImpl implements NgAlainService {    @Autowired    private ISysPermissionService sysPermissionService;    @Autowired    private SysDictMapper mapper;    @Override    public JSONArray getMenu(String id) throws Exception {        return getJeecgMenu(id);    }    @Override    public JSONArray getJeecgMenu(String id) throws Exception {        List<SysPermission> metaList = sysPermissionService.queryByUser(id);        JSONArray jsonArray = new JSONArray();        getPermissionJsonArray(jsonArray, metaList, null);        JSONArray menulist= parseNgAlain(jsonArray);        JSONObject jeecgMenu = new JSONObject();        jeecgMenu.put("text", "jeecg菜单");        jeecgMenu.put("group",true);        jeecgMenu.put("children", menulist);        JSONArray jeecgMenuList=new JSONArray();        jeecgMenuList.add(jeecgMenu);        return jeecgMenuList;    }    @Override    public List<Map<String, String>> getDictByTable(String table, String key, String value) {        return this.mapper.getDictByTableNgAlain(table,key,value);    }    private JSONArray parseNgAlain(JSONArray jsonArray) {        JSONArray menulist=new JSONArray();        for (Object object : jsonArray) {            JSONObject jsonObject= (JSONObject) object;            String path= (String) jsonObject.get("path");            JSONObject meta= (JSONObject) jsonObject.get("meta");            JSONObject menu=new JSONObject();            menu.put("text",meta.get("title"));            menu.put("reuse",true);            if (jsonObject.get("children")!=null){                JSONArray child=  parseNgAlain((JSONArray) jsonObject.get("children"));                menu.put("children",child);                JSONObject icon=new JSONObject();                icon.put("type", "icon");                icon.put("value", meta.get("icon"));                menu.put("icon",icon);            }else {                menu.put("link",path);            }            menulist.add(menu);        }        return menulist;    }    /**     *  获取菜单JSON数组     * @param jsonArray     * @param metaList     * @param parentJson     */    private void getPermissionJsonArray(JSONArray jsonArray,List<SysPermission> metaList,JSONObject parentJson) {        for (SysPermission permission : metaList) {            if(permission.getMenuType()==null) {                continue;            }            String tempPid = permission.getParentId();            JSONObject json = getPermissionJsonObject(permission);            if(parentJson==null && oConvertUtils.isEmpty(tempPid)) {                jsonArray.add(json);                if(!permission.isLeaf()) {                    getPermissionJsonArray(jsonArray, metaList, json);                }            }else if(parentJson!=null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))){                if(permission.getMenuType()==0) {                    JSONObject metaJson = parentJson.getJSONObject("meta");                    if(metaJson.containsKey("permissionList")) {                        metaJson.getJSONArray("permissionList").add(json);                    }else {                        JSONArray permissionList = new JSONArray();                        permissionList.add(json);                        metaJson.put("permissionList", permissionList);                    }                }else if(permission.getMenuType()==1) {                    if(parentJson.containsKey("children")) {                        parentJson.getJSONArray("children").add(json);                    }else {                        JSONArray children = new JSONArray();                        children.add(json);                        parentJson.put("children", children);                    }                    if(!permission.isLeaf()) {                        getPermissionJsonArray(jsonArray, metaList, json);                    }                }            }        }    }    private JSONObject getPermissionJsonObject(SysPermission permission) {        JSONObject json = new JSONObject();        //类型(0:一级菜单 1:子菜单  2:按钮)        if(permission.getMenuType()==2) {            json.put("action", permission.getPerms());            json.put("describe", permission.getName());        }else if(permission.getMenuType()==0||permission.getMenuType()==1) {            json.put("id", permission.getId());            if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {                String url= new String(Base64.getUrlEncoder().encode(permission.getUrl().getBytes()));                json.put("path", "/sys/link/" +url.replaceAll("=",""));            }else {                json.put("path", permission.getUrl());            }            //重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用)            json.put("name", urlToRouteName(permission.getUrl()));            //是否隐藏路由,默认都是显示的            if(permission.isHidden()) {                json.put("hidden",true);            }            //聚合路由            if(permission.isAlwaysShow()) {                json.put("alwaysShow",true);            }            json.put("component", permission.getComponent());            JSONObject meta = new JSONObject();            meta.put("title", permission.getName());            if(oConvertUtils.isEmpty(permission.getParentId())) {                //一级菜单跳转地址                json.put("redirect",permission.getRedirect());                meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));            }else {                meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));            }            if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {                meta.put("url", permission.getUrl());            }            json.put("meta", meta);        }        return json;    }    /**     * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-)     * 举例: URL = /isystem/role     *     RouteName = isystem-role     * @return     */    private String urlToRouteName(String url) {        if(oConvertUtils.isNotEmpty(url)) {            if(url.startsWith("/")) {                url = url.substring(1);            }            url = url.replace("/", "-");            return url;        }else {            return null;        }    }}
 |