Commit 112e597a sunke

菜单重构

1 个父辈 7abd1e25
......@@ -17,6 +17,7 @@ import com.neotel.smfcore.security.service.po.Menu;
import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -43,14 +44,15 @@ public class DataInitManager {
@Autowired
IRoleManager roleManager;
@Autowired
IMenuManager menuManager;
@Autowired
DataCache dataCache;
@Autowired
MainTimer mainTimer;
@Autowired
MenuInit menuInit;
@Autowired
PermissionInitUtil annotationUtil;
@Autowired
......@@ -66,16 +68,10 @@ public class DataInitManager {
@Value("${app.version}")
private String version;
/**
* 是否是mimo专用版本
*/
@Value("${app.type}")
private String appType="";
@PostConstruct
public void DataInit() {
try {
log.info("smfcore Version:["+version+"],类型["+appType+"]。初始化环境...");
log.info("smfcore Version:["+version+"], 初始化环境...");
//查询admin的用户是否存在
String userName = Constants.SUPER_USERNAME;
User admin = userManager.findByUserName(userName);
......@@ -98,7 +94,7 @@ public class DataInitManager {
log.info("初始化环境完成...");
}
updateMenu(menuShowList,menuHideList);
menuInit.updateMenu(menuShowList,menuHideList);
mainTimer.init();
......@@ -117,226 +113,4 @@ public class DataInitManager {
log.error("初始化环境出错..." + exception.toString(),exception);
}
}
/**
* 循环创建父级菜单
*/
private Menu createMenu(Menu menu){
Menu dbMenu = menuManager.findByPath(menu.getPath());
if(dbMenu == null){
//数据库不存在,需要插入
Menu parentMenu = menu.getParentMenu();
if(parentMenu != null){
parentMenu = createMenu(parentMenu);
menu.setPid(parentMenu.getId());
menu.setParentMenu(parentMenu);
}
log.info("创建菜单:" + menu.toString());
dbMenu = menuManager.saveMenu(menu);
}
return dbMenu;
}
private void addNewFunctionMenu(int menuSort, Menu parentMenu,String permission, String title, String path, String component, String icon, Map<String,Menu> functionMenuMap){
Menu menu = new Menu(new ArrayList<Menu>(), 1, permission, title, menuSort, path, component,"",0, icon);
menu.setParentMenu(parentMenu);
functionMenuMap.put(menu.getPath(), menu);
}
private Map<String,Menu> getAllMenuMap(){
//功能菜单(不包含父级菜单),key为path
Map<String,Menu> functionMenuMap = new HashMap<>();
//AGV看板
addNewFunctionMenu(1,null,"agvkanban", "AGV看板","agvkanban", "agv/agvkanban/index","agv",functionMenuMap);
//设备看板
addNewFunctionMenu(1,null,"boxkanban", "设备看板","lockMaterial", "lockMaterial/material/index","kanban",functionMenuMap);
//物料管理:工单出库,查找出库(UID出库,PN出库),物料标签,料盒操作,出库策略,工单设置
Menu poutOut = Menu.CreatePMenu("物料管理", 1, "order", 2, "workOrder", null);
Menu out = Menu.CreatePMenu("查找出库", 11, "searchOut", 2, "findOut",poutOut);
addNewFunctionMenu(1,out,"checkOut", "UID出库", "singleOuput", "neolight/singleOuput/index","export1",functionMenuMap);
addNewFunctionMenu(2, out,"tacticsOuput", "PN出库", "tacticsOuput", "neolight/tacticsOuput/index", "tacticsOuput",functionMenuMap);
addNewFunctionMenu(1,poutOut,"workOrder", "工单出库","workOrder", "neolight/workOrder/index","orderOut",functionMenuMap);
addNewFunctionMenu(2,poutOut,"posOutput", "库位出库", "posOutput", "system/posOutput/index", "swagger",functionMenuMap);
addNewFunctionMenu(3, poutOut, "labelOuput", "物料标签", "labelOuput", "neolight/labelOuput/index", "mgroup",functionMenuMap);
addNewFunctionMenu(4, poutOut, "materialBox", "料盒操作", "materialBox", "neolight/materialBox/index", "mIbox",functionMenuMap);
addNewFunctionMenu(12, poutOut, "outSetting", "出库策略", "outSetting", "system/outSetting/index", "outSet",functionMenuMap);
// Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet");
addNewFunctionMenu(5, poutOut, "inList", "入库单", "inList", "system/inList/index", "headIcon",functionMenuMap);
addNewFunctionMenu(6, poutOut, "putIn", "物料入库", "putIn", "system/putIn/index", "headIcon",functionMenuMap);
addNewFunctionMenu(7, poutOut, "dumpWarehousing", "转储入库", "dumpWarehousing", "system/dumpWarehousing/index", "headIcon",functionMenuMap);
addNewFunctionMenu(8, poutOut, "singleDiskWarehousing", "单盘入库", "singleDiskWarehousing", "system/singleDiskWarehousing/index", "headIcon",functionMenuMap);
addNewFunctionMenu(9, poutOut, "sluggishMaterials", "呆滞物料", "sluggishMaterials", "system/sluggishMaterials/index", "sMaterial",functionMenuMap);
addNewFunctionMenu(10,poutOut, "safetyInventory", "安全库存", "safetyInventory", "system/safetyInventory/index", "safeInventory",functionMenuMap);
addNewFunctionMenu(11, poutOut, "expireMaterials", "过期物料", "expireMaterials", "system/expireMaterials/index", "sMaterial",functionMenuMap);
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", 2, "MSD",null);
addNewFunctionMenu(21, msd, "msdManage", "MSD库存", "msdManage", "neolight/msdManage/index", "MSDManager",functionMenuMap);
addNewFunctionMenu(22, msd, "msdData", "MSD追溯性", "msdData", "neolight/msdData/index", "MSDData",functionMenuMap);
addNewFunctionMenu(23, msd, "msdSetting", "MSD设置", "msdSetting", "neolight/msdSetting/index", "MSDSet",functionMenuMap);
//锡膏管理:设备概览.库存.追溯性.设置
Menu solderPaste = Menu.CreatePMenu("锡膏管理", 3, "solderPaste", 2, "sMana",null);
addNewFunctionMenu(31, solderPaste, "solderPasteKanban", "设备概览","solderPasteKanban", "neolight/solderPasteKanban/index","sKanban",functionMenuMap);
addNewFunctionMenu(32,solderPaste, "solderPasteManage", "库存", "solderPasteManage", "neolight/solderPasteManage/index","solder",functionMenuMap);
addNewFunctionMenu(33, solderPaste, "solderPasteData", "追溯性", "solderPasteData", "neolight/solderPasteData/index","sData",functionMenuMap);
addNewFunctionMenu(34,solderPaste,"solderPasteSetting", "设置", "solderPasteSetting", "neolight/solderPasteSetting/index","system",functionMenuMap);
//档案管理:元器件
Menu pMenuWl = Menu.CreatePMenu("档案管理", 4, "materiel ", 2, "BOM",null);
addNewFunctionMenu(41, pMenuWl,"component:list", "元器件","componentParts", "parts/component/index","server",functionMenuMap);
//条形码:条码管理,条码设置
Menu pMenuBarcode = Menu.CreatePMenu("条形码", 5, "barcodes ", 2, "barcodeMenu",null);
addNewFunctionMenu(51,pMenuBarcode, "barcode:list", "条码管理", "barcode", "barcode/barcode/index","chart",functionMenuMap);
addNewFunctionMenu(52, pMenuBarcode, "barcode", "条码设置","barcodeSetting", "system/barcodeSetting/index", "barcode",functionMenuMap);
//日志管理:物料日志
Menu pMenuLog = Menu.CreatePMenu("日志管理", 6, "log", 2, "log",null);
addNewFunctionMenu(61, pMenuLog, "taskLog", "物料日志", "taskLog", "neolight/taskLog/index", "education",functionMenuMap);
addNewFunctionMenu(62, pMenuLog, "message", "消息查询", "message", "neolight/message/index", "messagefind",functionMenuMap);
addNewFunctionMenu(63, pMenuLog, "interfaceException", "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind",functionMenuMap);
//报表:出入库、库存
Menu pMenuReport = Menu.CreatePMenu("报表", 7, "report", 2, "inOutData",null);
addNewFunctionMenu(71, pMenuReport, "inOutData", "出入库", "inOutData", "neolight/inOutData/index", "outPut",functionMenuMap);
addNewFunctionMenu(72, pMenuReport,"inventory", "库存", "inventory", "neolight/inventory/index", "inventory",functionMenuMap);
addNewFunctionMenu(73, pMenuReport,"humiture", "温湿度", "humiture", "humiture/humitureReport/index", "humiture",functionMenuMap);
//可观测性:物料追踪
Menu guanceMenu = Menu.CreatePMenu("可观测性", 8, "observability", 2, "scanKey",null);
addNewFunctionMenu(81,guanceMenu, "materialChart", "物料追踪", "materialChart", "neolight/materialChart/index", "maChart",functionMenuMap);
//物联网:共享文件夹
Menu pMenuWulian = Menu.CreatePMenu("物联网", 9, "internet", 2, "interMenu",null);
addNewFunctionMenu(91,pMenuWulian, "orderSetting", "共享文件夹", "orderSetting", "system/orderSetting/index", "sysSet",functionMenuMap);
//设置:料仓管理,菜单管理
Menu poutSet = Menu.CreatePMenu("设置", 10, "system", 2, "system",null);
addNewFunctionMenu(101, poutSet, "storage:list", "设备管理", "bunker", "storage/storage/index", "database",functionMenuMap);
addNewFunctionMenu(102,poutSet, "storagePos:list", "库位管理", "storagePos", "storagePos/storagePos/index", "tree-table",functionMenuMap);
addNewFunctionMenu(103, poutSet, "menu:list", "菜单管理", "menu", "system/menu/index", "menu",functionMenuMap);
// Menu sysSetting = new Menu(, "barcode", "条码设置", "barcodeSetting", "system/barcodeSetting/index", "database");
// Menu outSet = new Menu(, "outSetting", "出库策略", "outSetting", "system/outSetting/index", "outSet");
addNewFunctionMenu(104,poutSet, "sysSetting", "系统设置", "sysSetting", "system/sysSetting/index", "sysSet",functionMenuMap);
addNewFunctionMenu(105,poutSet, "translation", "资源翻译", "translation", "system/translation/index", "translation",functionMenuMap);
// Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet");
addNewFunctionMenu(106,poutSet, "shelfSetting", "料架设置", "shelfSetting", "system/shelfSetting/index", "translation",functionMenuMap);
//用户管理:用户管理,角色管理
Menu pMenuUser = Menu.CreatePMenu("用户管理", 11, "userManager", 2, "Steve-Jobs", null);
addNewFunctionMenu(111, pMenuUser,"user:list", "用户管理", "peoples", "system/user/index", "peoples",functionMenuMap);
addNewFunctionMenu(112, pMenuUser,"role:list", "角色管理", "role", "system/role/index", "role",functionMenuMap);
Menu helpAbout = Menu.CreatePMenu("帮助", 12, "help", 2, "help",null);
addNewFunctionMenu(121, helpAbout, "instruction", "说明书", "instruction", "system/instruction/index","aboutBook",functionMenuMap);
addNewFunctionMenu(122, helpAbout, "about", "关于","about", "system/about/index","message",functionMenuMap);
return functionMenuMap;
}
private void updateMenu(String[] menuListToShow, String[] menuListToHide){
List<Menu> dbMenus = menuManager.findAll();
List<String> menuList = Lists.newArrayList();
if(dbMenus.isEmpty()){
log.info("创建默认菜单...");
String[] defaultMenus = new String[]{
"lockMaterial", //设备看板
"singleOuput",
"tacticsOuput",
"outSetting",
"componentParts",
"barcode",
"barcodeSetting",
"taskLog",
"msdSetting",
//"orderSetting",//工单设置
"inOutData", //报表->出入库
"inventory", //报表->库存
"bunker", //设备管理
"storagePos", //库位管理
//"sysSetting", //系统设置
"peoples", //用户管理
"role" //角色管理
};
menuList = Lists.newArrayList(defaultMenus);
}
for (String menuToShow : menuListToShow) {
menuList.add(menuToShow);
}
Set<String> showIdSet = showMenu(menuList);
Set<String> hideIdSet = hideMenu(menuListToHide);
if(!showIdSet.isEmpty() || !hideIdSet.isEmpty()){
List<Role> roles = roleManager.findByQuery(new Query(Criteria.where("name").is("admin")));
Role roleAdmin = roles.get(0);
Set<String> roleMenus = roleAdmin.getMenus();
roleMenus.addAll(showIdSet);
roleMenus.removeAll(hideIdSet);
roleManager.saveRole(roleAdmin);
}
}
/**
* 循环添加菜单ID(父级菜单也会添加)
*/
private void addToMenuIdSet(Set<String> menuIdSet,Menu menu){
menuIdSet.add(menu.getId());
if(menu.getParentMenu() != null){
addToMenuIdSet(menuIdSet,menu.getParentMenu());
}
}
/**
* 展示菜单
*/
private Set<String> showMenu(List<String> menuListToShow){
Map<String, Menu> allMenus = getAllMenuMap();
Set<String> showIdSet = new HashSet<>();
for (String showPath : menuListToShow) {
Menu showMenu = allMenus.get(showPath);
if(showMenu != null){
showMenu = createMenu(showMenu);
log.info("展示菜单:" + showMenu.getPath());
addToMenuIdSet(showIdSet,showMenu);
}else{
log.error("展示菜单:" + showPath + "不存在");
}
}
return showIdSet;
}
/**
* 隐藏菜单
*/
private Set<String> hideMenu(String[] menuListToHide){
Set<String> hideIdSet = new HashSet<>();
for (String hidePath : menuListToHide) {
Menu hideMenu = menuManager.findByPath(hidePath);
if(hideMenu != null){
hideMenu.setHidden(true);
menuManager.saveMenu(hideMenu);
log.info("隐藏菜单:" + hideMenu.getPath());
addToMenuIdSet(hideIdSet,hideMenu);
}else{
log.error("菜单:" + hidePath + "不存在");
}
}
return hideIdSet;
}
}
package com.neotel.smfcore.common.init;
import com.google.common.collect.Lists;
import com.neotel.smfcore.security.service.manager.IMenuManager;
import com.neotel.smfcore.security.service.manager.IRoleManager;
import com.neotel.smfcore.security.service.po.Menu;
import com.neotel.smfcore.security.service.po.Role;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @author sunke
* @date 2022/12/14 10:04 AM
*/
@Slf4j
@Service
public class MenuInit {
@Autowired
IMenuManager menuManager;
@Autowired
IRoleManager roleManager;
/**
* 默认展示菜单
*/
private static String DEFAULT_SHOW_MENU = "default";
/**
* XLC展示菜单
*/
private static String XLC_SHOW_MENU = "xlc";
/**
* 锡膏料仓展示菜单
*/
private static String SP_SHOW_MENU = "sp";
private static Map<String, Menu> allMenuMap = new HashMap<>();
/**
* 展示菜单
* @param menuPathOrClientLabel 菜单路径或菜单标识
*/
public void showMenu(String... menuPathOrClientLabel){
updateMenu(menuPathOrClientLabel, new String[]{});
}
/**
* 给菜单打标识
* @param label
* @param menus
*/
public void labelMenu(String label, String... menus){
Map<String, Menu> allMenuMap = getAllMenuMap();
for (String menuPath : menus) {
Menu menu = allMenuMap.get(menuPath);
if(menu != null){
addMenu(label,menu);
}else{
log.error("标记菜单["+menuPath+"]为["+label+"]时,未找到菜单");
}
}
}
/**
* 添加自定义菜单
* @param clientLabel 菜单标识
* @param menus 菜单列表
*/
public static void addMenu(String clientLabel, Menu... menus){
for (Menu menu : menus) {
Menu existMenu = allMenuMap.get(menu.getPath());
if(existMenu != null){
menu = existMenu;
}
menu.addClientLabel(clientLabel);
allMenuMap.put(menu.getPath(), menu);
}
}
private Map<String, Menu> getAllMenuMap(){
//AGV看板
//addDefaultFunctionMenu(1,null,"AGV看板","agvkanban", "agv/agvkanban/index","agv");
//设备看板
addDefaultFunctionMenu(1,null,"设备看板","lockMaterial", "lockMaterial/material/index","kanban",DEFAULT_SHOW_MENU);
//物料管理:工单出库,查找出库(UID出库,PN出库),物料标签,料盒操作,出库策略,工单设置
Menu poutOut = Menu.CreatePMenu("物料管理", 1, "order", "workOrder", null);
Menu out = Menu.CreatePMenu("查找出库", 11, "searchOut", "findOut",poutOut);
addDefaultFunctionMenu(1,out,"UID出库", "singleOuput", "neolight/singleOuput/index","export1",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(2, out,"PN出库", "tacticsOuput", "neolight/tacticsOuput/index", "tacticsOuput",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(1,poutOut,"工单出库","workOrder", "neolight/workOrder/index","orderOut");
addDefaultFunctionMenu(2,poutOut,"库位出库", "posOutput", "system/posOutput/index", "swagger");
addDefaultFunctionMenu(3, poutOut, "物料标签", "labelOuput", "neolight/labelOuput/index", "mgroup");
addDefaultFunctionMenu(4, poutOut, "料盒操作", "materialBox", "neolight/materialBox/index", "mIbox");
addDefaultFunctionMenu(12, poutOut, "出库策略", "outSetting", "system/outSetting/index", "outSet");
// Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet");
addDefaultFunctionMenu(5, poutOut, "入库单", "inList", "system/inList/index", "headIcon");
addDefaultFunctionMenu(6, poutOut, "物料入库", "putIn", "system/putIn/index", "headIcon");
addDefaultFunctionMenu(7, poutOut, "转储入库", "dumpWarehousing", "system/dumpWarehousing/index", "headIcon");
addDefaultFunctionMenu(8, poutOut, "单盘入库", "singleDiskWarehousing", "system/singleDiskWarehousing/index", "headIcon");
addDefaultFunctionMenu(9, poutOut, "呆滞物料", "sluggishMaterials", "system/sluggishMaterials/index", "sMaterial");
addDefaultFunctionMenu(10,poutOut, "安全库存", "safetyInventory", "system/safetyInventory/index", "safeInventory");
addDefaultFunctionMenu(11, poutOut,"过期物料", "expireMaterials", "system/expireMaterials/index", "sMaterial");
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", "MSD",null);
addDefaultFunctionMenu(21, msd, "MSD库存", "msdManage", "neolight/msdManage/index", "MSDManager");
addDefaultFunctionMenu(22, msd, "MSD追溯性", "msdData", "neolight/msdData/index", "MSDData");
addDefaultFunctionMenu(23, msd, "MSD设置", "msdSetting", "neolight/msdSetting/index", "MSDSet");
//锡膏管理:设备概览.库存.追溯性.设置
Menu solderPaste = Menu.CreatePMenu("锡膏管理", 3, "solderPaste", "sMana",null);
addDefaultFunctionMenu(31, solderPaste,"设备概览","solderPasteKanban", "neolight/solderPasteKanban/index","sKanban",SP_SHOW_MENU);
addDefaultFunctionMenu(32,solderPaste, "库存", "solderPasteManage", "neolight/solderPasteManage/index","solder",SP_SHOW_MENU);
addDefaultFunctionMenu(33, solderPaste,"追溯性", "solderPasteData", "neolight/solderPasteData/index","sData",SP_SHOW_MENU);
addDefaultFunctionMenu(34,solderPaste, "设置", "solderPasteSetting", "neolight/solderPasteSetting/index","system",SP_SHOW_MENU);
//档案管理:元器件
Menu pMenuWl = Menu.CreatePMenu("档案管理", 4, "materiel ", "BOM",null);
addDefaultFunctionMenu(41, pMenuWl,"元器件","componentParts", "parts/component/index","server",DEFAULT_SHOW_MENU);
//条形码:条码管理,条码设置
Menu pMenuBarcode = Menu.CreatePMenu("条形码", 5, "barcodes ", "barcodeMenu",null);
addDefaultFunctionMenu(51,pMenuBarcode, "条码管理", "barcode", "barcode/barcode/index","chart",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(52, pMenuBarcode, "条码设置","barcodeSetting", "system/barcodeSetting/index", "barcode",DEFAULT_SHOW_MENU);
//日志管理:物料日志
Menu pMenuLog = Menu.CreatePMenu("日志管理", 6, "log","log",null);
addDefaultFunctionMenu(61, pMenuLog, "物料日志", "taskLog", "neolight/taskLog/index", "education",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(62, pMenuLog, "消息查询", "message", "neolight/message/index", "messagefind");
addDefaultFunctionMenu(63, pMenuLog, "接口异常", "interfaceException", "neolight/interfaceException/index", "messagefind");
//报表:出入库、库存
Menu pMenuReport = Menu.CreatePMenu("报表", 7, "report","inOutData",null);
addDefaultFunctionMenu(71, pMenuReport, "出入库", "inOutData", "neolight/inOutData/index", "outPut");
addDefaultFunctionMenu(72, pMenuReport,"库存", "inventory", "neolight/inventory/index", "inventory");
addDefaultFunctionMenu(73, pMenuReport,"温湿度", "humiture", "humiture/humitureReport/index", "humiture");
//可观测性:物料追踪
Menu guanceMenu = Menu.CreatePMenu("可观测性", 8, "observability", "scanKey",null);
addDefaultFunctionMenu(81,guanceMenu, "物料追踪", "materialChart", "neolight/materialChart/index", "maChart");
//物联网:共享文件夹
Menu pMenuWulian = Menu.CreatePMenu("物联网", 9, "internet", "interMenu",null);
addDefaultFunctionMenu(91,pMenuWulian, "共享文件夹", "orderSetting", "system/orderSetting/index", "sysSet");
//设置:料仓管理,菜单管理
Menu poutSet = Menu.CreatePMenu("设置", 10, "system","system",null);
addDefaultFunctionMenu(101, poutSet, "设备管理", "bunker", "storage/storage/index", "database",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(102,poutSet, "库位管理", "storagePos", "storagePos/storagePos/index", "tree-table",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(103, poutSet, "菜单管理", "menu", "system/menu/index", "menu");
// Menu sysSetting = new Menu(, "barcode", "条码设置", "barcodeSetting", "system/barcodeSetting/index", "database");
// Menu outSet = new Menu(, "outSetting", "出库策略", "outSetting", "system/outSetting/index", "outSet");
addDefaultFunctionMenu(104,poutSet, "系统设置", "sysSetting", "system/sysSetting/index", "sysSet");
addDefaultFunctionMenu(105,poutSet, "资源翻译", "translation", "system/translation/index", "translation");
// Menu orderSet = new Menu(, "orderSetting", "工单设置", "orderSetting", "system/orderSetting/index", "sysSet");
addDefaultFunctionMenu(106,poutSet, "料架设置", "shelfSetting", "system/shelfSetting/index", "translation");
//用户管理:用户管理,角色管理
Menu pMenuUser = Menu.CreatePMenu("用户管理", 11, "userManager", "Steve-Jobs", null);
addDefaultFunctionMenu(111, pMenuUser,"用户管理", "peoples", "system/user/index", "peoples",DEFAULT_SHOW_MENU);
addDefaultFunctionMenu(112, pMenuUser,"角色管理", "role", "system/role/index", "role",DEFAULT_SHOW_MENU);
Menu helpAbout = Menu.CreatePMenu("帮助", 9999, "help", "help",null);
addDefaultFunctionMenu(99991, helpAbout, "说明书", "instruction", "system/instruction/index","aboutBook");
addDefaultFunctionMenu(99992, helpAbout, "关于","about", "system/about/index","message",DEFAULT_SHOW_MENU);
return allMenuMap;
}
private void addDefaultFunctionMenu(int menuSort, Menu parentMenu, String title, String path, String component, String icon, String... clientLabels){
Menu menu = Menu.createFunctionMenu(parentMenu, title, menuSort, path, component, icon);
for (String clientLabel : clientLabels) {
addMenu(clientLabel, menu);
}
}
protected void updateMenu(String[] menuListToShow, String[] menuListToHide){
List<Menu> dbMenus = menuManager.findAll();
List<String> menuList = Lists.newArrayList();
if(dbMenus.isEmpty()){
log.info("创建默认菜单...");
for (Menu menu : getAllMenuMap().values()) {
if(menu.getClients().contains(DEFAULT_SHOW_MENU)){
menuList.add(menu.getPath());
}
}
}
for (String menuToShow : menuListToShow) {
menuList.add(menuToShow);
}
Set<String> showIdSet = showMenu(menuList);
Set<String> hideIdSet = hideMenu(menuListToHide);
if(!showIdSet.isEmpty() || !hideIdSet.isEmpty()){
List<Role> roles = roleManager.findByQuery(new Query(Criteria.where("name").is("admin")));
Role roleAdmin = roles.get(0);
Set<String> roleMenus = roleAdmin.getMenus();
roleMenus.addAll(showIdSet);
roleMenus.removeAll(hideIdSet);
roleManager.saveRole(roleAdmin);
}
}
/**
* 循环添加菜单ID(父级菜单也会添加)
*/
private void addToMenuIdSet(Set<String> menuIdSet,Menu menu){
menuIdSet.add(menu.getId());
if(menu.getParentMenu() != null){
addToMenuIdSet(menuIdSet,menu.getParentMenu());
}
}
/**
* 展示菜单
*/
private Set<String> showMenu(List<String> menuListToShow){
Map<String, Menu> allMenus = getAllMenuMap();
Set<String> showIdSet = new HashSet<>();
for (String showPath : menuListToShow) {
log.info("展示菜单:" + showPath);
Menu showMenu = allMenus.get(showPath);
if(showMenu != null){
showMenu = createMenu(showMenu);
addToMenuIdSet(showIdSet,showMenu);
}else{
for (Menu menu : allMenus.values()) {
if(menu.getClients().contains(showPath)){
showMenu = createMenu(menu);
log.info("展示菜单:" + menu.getPath());
addToMenuIdSet(showIdSet,menu);
}
}
}
}
return showIdSet;
}
/**
* 隐藏菜单
*/
private Set<String> hideMenu(String[] menuListToHide){
Set<String> hideIdSet = new HashSet<>();
for (String hidePath : menuListToHide) {
Menu hideMenu = menuManager.findByPath(hidePath);
if(hideMenu != null){
hideMenu.setHidden(true);
menuManager.saveMenu(hideMenu);
log.info("隐藏菜单:" + hideMenu.getPath());
addToMenuIdSet(hideIdSet,hideMenu);
}else{
log.error("菜单:" + hidePath + "不存在");
}
}
return hideIdSet;
}
/**
* 循环创建父级菜单
*/
private Menu createMenu(Menu menu){
Menu dbMenu = menuManager.findByPath(menu.getPath());
if(dbMenu == null){
//数据库不存在,需要插入
Menu parentMenu = menu.getParentMenu();
if(parentMenu != null){
parentMenu = createMenu(parentMenu);
menu.setPid(parentMenu.getId());
menu.setParentMenu(parentMenu);
}
log.info("创建菜单:" + menu.toString());
dbMenu = menuManager.saveMenu(menu);
}
return dbMenu;
}
}
......@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.api;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.init.MenuInit;
import com.neotel.smfcore.core.api.listener.ISmfApiListener;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.api.bean.CodeValidateParam;
......@@ -77,7 +78,6 @@ public class SmfApi {
fetchInListUrl = dataCache.getConfigCache("api.fetchInListUrl",fetchInListUrl);
fetchOrderUrl = dataCache.getConfigCache("api.fetchOrderUrl",fetchOrderUrl);
}
/**
......@@ -201,4 +201,7 @@ public class SmfApi {
return false;
}
public String getApiName(){
return apiName;
}
}
package com.neotel.smfcore.custom.haman;
import com.neotel.smfcore.common.init.MenuInit;
import com.neotel.smfcore.core.api.SmfApi;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* @author sunke
* @date 2022/12/14 4:01 PM
*/
@Component
public class HamanMenu {
@Autowired
MenuInit menuInit;
@Autowired
SmfApi smfApi;
@PostConstruct
public void init(){
String[] menus = new String[]{
"lockMaterial",
"workOrder",
"singleOuput",
"tacticsOuput",
"inList",
"sluggishMaterials",
"expireMaterials",
"outSetting",
"componentParts",
"barcode",
"barcodeSetting",
"taskLog",
"message",
"inOutData",
"inventory",
"orderSetting",
"bunker",
"storagePos",
"sysSetting",
"translation",
"shelfSetting",
"peoples",
"role",
"about"
};
menuInit.labelMenu("haman", menus);
String apiName = smfApi.getApiName();
if(Strings.isNotBlank(apiName)){
menuInit.showMenu(apiName);
}
}
}
......@@ -23,10 +23,7 @@ import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.*;
/**
* @author Zheng Jie
......@@ -106,6 +103,15 @@ public class Menu extends BasePo implements Serializable {
@Transient
private Menu parentMenu;
/**
* 定制菜单标识
*/
private Set<String> clients = new HashSet<>();
public void addClientLabel(String clientLabel){
clients.add(clientLabel);
}
public Boolean getHasChildren() {
if(subCount==0){
return false;
......@@ -128,7 +134,7 @@ public class Menu extends BasePo implements Serializable {
/**
* 此方法用于构建一级菜单,type=1
*/
public Menu(final List<Menu> children,final Integer type, final String permission, final String title, final Integer menuSort, final String path, final String component, final String pid, final Integer subCount, final String icon) {
public Menu(final List<Menu> children,final Integer type, final String permission, final String title, final Integer menuSort, final String path, final String component, final String pid, final Integer subCount, final String icon) {
this.children = children;
this.permission = permission;
this.type=type;
......@@ -145,7 +151,7 @@ public class Menu extends BasePo implements Serializable {
this.icon = icon;
this.titleKey=path;
}
public Menu ( final String permission, final String title, final Integer menuSort, final String pid ) {
public Menu (final String permission, final String title, final Integer menuSort, final String pid ) {
this.children = new ArrayList<Menu>();
this.type = 2;
......@@ -164,19 +170,51 @@ public class Menu extends BasePo implements Serializable {
this.titleKey=path;
}
/**
* 此方法用于构建权限菜单,type=2
*/
public static Menu CreatePerMenu( final String permission, final String title, final String pid ) {
Menu menu=new Menu(new ArrayList<Menu>(),2,permission,title,999,"","",pid,0,false,false,false,"","","",null);
* 创建功能菜单
*/
public static Menu createFunctionMenu(Menu parentMenu, final String title, final Integer menuSort, final String path, final String component, final String icon) {
Menu menu = new Menu();
menu.setChildren(new ArrayList<Menu>());
menu.setType(1);
menu.setPermission(path);
menu.setTitle(title);
menu.setMenuSort(menuSort);
menu.setPath(path);
menu.setComponent(component);
menu.setPid("");
menu.setSubCount(0);
menu.setIFrame(false);
menu.setCache(false);
menu.setHidden(false);
menu.setComponentName("");
menu.setIcon(icon);
menu.setTitleKey("");
menu.setParentMenu(parentMenu);
return menu;
}
/**
* 此方法用户创建只用于显示的一级菜单,type=0
*/
public static Menu CreatePMenu( final String title, final Integer menuSort, final String path, final Integer subCount, final String icon, Menu parentMenu ) {
public static Menu CreatePMenu(final String title, final Integer menuSort, final String path, final String icon, Menu parentMenu ) {
String titleKey=path;
Menu menu = new Menu(new ArrayList<Menu>(), 0, "", title, menuSort, path, "", "", subCount, false, false, false, title, icon,titleKey,parentMenu);
Menu menu = new Menu();
menu.setChildren(new ArrayList<Menu>());
menu.setType(0);
menu.setPermission("");
menu.setTitle(title);
menu.setMenuSort(menuSort);
menu.setPath(path);
menu.setComponent("");
menu.setPid("");
menu.setSubCount(1);
menu.setIFrame(false);
menu.setCache(false);
menu.setHidden(false);
menu.setComponentName(title);
menu.setIcon(icon);
menu.setTitleKey(titleKey);
menu.setParentMenu(parentMenu);
return menu;
}
......
......@@ -2,7 +2,7 @@ server:
port: 8800
api:
name:
name: haman
inCheckUrl:
outNotifyUrl:
inNotifyUrl:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!