|
|
@@ -0,0 +1,452 @@
|
|
|
+package com.vber.dataSeeder.menu;
|
|
|
+
|
|
|
+import com.vber.common.constant.UserConstants;
|
|
|
+import com.vber.common.core.domain.entity.SysMenu;
|
|
|
+import com.vber.common.utils.DateUtils;
|
|
|
+import com.vber.common.utils.StringUtils;
|
|
|
+import com.vber.dataSeeder.mapper.DsMenuMapper;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileWriter;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Component
|
|
|
+@Slf4j
|
|
|
+public class DefaultMenuCreator {
|
|
|
+
|
|
|
+ private final DsMenuMapper menuMapper;
|
|
|
+ public DefaultMenuCreator(DsMenuMapper menuMapper) {
|
|
|
+ this.menuMapper = menuMapper;
|
|
|
+ }
|
|
|
+ private Long Id = 2000L;
|
|
|
+ private boolean IsSystem = false;
|
|
|
+ private Long DirId = 1L;
|
|
|
+ private Long MenuId = 100L;
|
|
|
+ private Long ChildMenuId = 500L;
|
|
|
+ private Long BtnId = 1000L;
|
|
|
+
|
|
|
+ private String javaPermissionStr;
|
|
|
+ private String vuePermissionStr;
|
|
|
+ private List<SysMenu> meunList = new ArrayList<>();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public void create(boolean isGenPerm){
|
|
|
+ log.debug(StringUtils.format("-- START -- {}", this.getClass().getName()));
|
|
|
+
|
|
|
+ init();
|
|
|
+ SysMenu root = getRoot();
|
|
|
+
|
|
|
+ System(root);
|
|
|
+ Monitor(root);
|
|
|
+ if(isGenPerm){
|
|
|
+ generatorPermission();
|
|
|
+ }
|
|
|
+
|
|
|
+ log.debug(StringUtils.format("-- END -- {}", this.getClass().getName()));
|
|
|
+ }
|
|
|
+
|
|
|
+ private void init(){
|
|
|
+ Id = 2000L;
|
|
|
+ IsSystem = false;
|
|
|
+ DirId = 1L;
|
|
|
+ MenuId = 100L;
|
|
|
+ ChildMenuId = 500L;
|
|
|
+ BtnId = 1000L;
|
|
|
+
|
|
|
+ meunList=new ArrayList<>();
|
|
|
+ javaPermissionStr="";
|
|
|
+ vuePermissionStr="";
|
|
|
+ }
|
|
|
+ private SysMenu getRoot(){
|
|
|
+ SysMenu root = new SysMenu();
|
|
|
+ root.setMenuId(0L);
|
|
|
+ return root;
|
|
|
+ }
|
|
|
+
|
|
|
+ // region BASE_SYSTEM
|
|
|
+
|
|
|
+ private void System(SysMenu root){
|
|
|
+ IsSystem = true;
|
|
|
+ SysMenu dir= createDir(root,"系统管理","system",100,"terminal");
|
|
|
+
|
|
|
+ SysMenu user= createMenu(dir,"系统用户管理","user","system/user/index",10,"person-circle");
|
|
|
+ createCurdBtnWithExport(user,"用户");
|
|
|
+ createImportBtn(user,"用户",20);
|
|
|
+ createHideBtn(user,"重置密码","resetPwd",20,"file-lock2");
|
|
|
+
|
|
|
+ SysMenu role = createMenu(dir,"系统角色管理","role","system/role/index",11,"person-gear");
|
|
|
+ createCurdBtnWithExport(role,"角色");
|
|
|
+
|
|
|
+ SysMenu menu = createMenu(dir,"功能菜单管理","menu","system/menu/index",12,"list");
|
|
|
+ createCurdBtn(menu,"菜单");
|
|
|
+
|
|
|
+ SysMenu dept = createMenu(dir,"系统部门管理","dept","system/dept/index",13,"card-list");
|
|
|
+ createCurdBtn(dept,"部门");
|
|
|
+
|
|
|
+ SysMenu post = createMenu(dir,"系统岗位管理","post","system/post/index",14,"file-person");
|
|
|
+ createCurdBtnWithExport(post,"岗位");
|
|
|
+
|
|
|
+ SysMenu dict = createMenu(dir,"系统字典管理","dict","system/dict/index",15,"file-earmark-medical");
|
|
|
+ createCurdBtnWithExport(dict,"字典");
|
|
|
+
|
|
|
+ SysMenu config = createMenu(dir,"系统配置管理","config","system/config/index",16,"gear");
|
|
|
+ createCurdBtnWithExport(config,"配置");
|
|
|
+
|
|
|
+ SysMenu notice = createMenu(dir,"通知公告管理","notice","system/notice/index",17,"bell");
|
|
|
+ createCurdBtnWithExport(notice,"公告");
|
|
|
+
|
|
|
+ SysMenu log = createChildDir(dir,"系统日志管理","log",18,"file-earmark-medical");
|
|
|
+ SysMenu operlog = createChildMenu(log,"操作日志","operlog","system/log/operlog",10,"file-earmark-easel");
|
|
|
+ createQueryBtn(operlog,"操作",10);
|
|
|
+ createDeleteBtn(operlog,"操作",11);
|
|
|
+ createExportBtn(operlog,"操作",12);
|
|
|
+
|
|
|
+ SysMenu logininfor= createChildMenu(log,"登录日志","logininfor","system/log/logininfor",11,"file-earmark-person");
|
|
|
+ createQueryBtn(logininfor,"登录",10);
|
|
|
+ createDeleteBtn(logininfor,"登录",11);
|
|
|
+ createExportBtn(logininfor,"登录",12);
|
|
|
+ createHideBtn(logininfor,"账户解锁","unlock",12,"#");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Monitor(SysMenu root){
|
|
|
+ IsSystem = true;
|
|
|
+ SysMenu dir= createDir(root,"系统监控","monitor",101,"display");
|
|
|
+ SysMenu online= createMenu(dir,"在线用户","online","monitor/online/index",10,"graph-up");
|
|
|
+ createQueryBtn(online,"在线用户",10);
|
|
|
+ createHideBtn(online,"批量强退","batchLogout",10,"#");
|
|
|
+ createHideBtn(online,"单条强退","forceLogout",11,"#");
|
|
|
+
|
|
|
+ createMenu(dir,"数据监控","druid","monitor/druid/index",11,"list-task");
|
|
|
+ createMenu(dir,"服务监控","server","monitor/server/index",12,"pc-display-horizontal");
|
|
|
+ createMenu(dir,"缓存监控","cache","monitor/cache/index",13,"exclude");
|
|
|
+ createMenu(dir,"缓存列表","cacheList","monitor/cache/list",14,"file-slides");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // endregion
|
|
|
+
|
|
|
+ // region CREATE
|
|
|
+
|
|
|
+ // region Dir
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建目录
|
|
|
+ * @param parent
|
|
|
+ * @param name
|
|
|
+ * @param path 传入 *开头 表示不需要鉴权
|
|
|
+ * @param sort
|
|
|
+ * @param icon
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private SysMenu createDir(SysMenu parent,String name,String path,int sort,String icon){
|
|
|
+ return createDir(parent,name,path, sort,icon,true);
|
|
|
+ }
|
|
|
+ private SysMenu createHideDir(SysMenu parent,String name,String path,int sort,String icon){
|
|
|
+ return createDir(parent,name,path, sort,icon,false);
|
|
|
+ }
|
|
|
+ private SysMenu createDir(SysMenu parent,String name,String path,int sort,String icon,boolean visible){
|
|
|
+ return createDir(parent,name,path, sort,icon,visible,"");
|
|
|
+ }
|
|
|
+ private SysMenu createDir(SysMenu parent,String name,String path,int sort,String icon,boolean visible,String remark){
|
|
|
+ Long id = IsSystem ? DirId++ : Id++;
|
|
|
+ return createEntity(id,parent,name,path,"", UserConstants.TYPE_DIR,sort,icon,"","","",visible,false,true,remark);
|
|
|
+ }
|
|
|
+
|
|
|
+ // region ChildDir
|
|
|
+ private SysMenu createChildDir(SysMenu parent,String name,String path,int sort,String icon){
|
|
|
+ return createChildDir(parent,name,path, sort,icon,true);
|
|
|
+ }
|
|
|
+ private SysMenu createChildHideDir(SysMenu parent,String name,String path,int sort,String icon){
|
|
|
+ return createChildDir(parent,name,path, sort,icon,false);
|
|
|
+ }
|
|
|
+ private SysMenu createChildDir(SysMenu parent,String name,String path,int sort,String icon,boolean visible){
|
|
|
+ return createChildDir(parent,name,path, sort,icon,visible,"");
|
|
|
+ }
|
|
|
+ private SysMenu createChildDir(SysMenu parent,String name,String path,int sort,String icon,boolean visible,String remark){
|
|
|
+ Long id = IsSystem ? MenuId++ : Id++;
|
|
|
+ return createEntity(id,parent,name,path,"", UserConstants.TYPE_DIR,sort,icon,"","","",visible,false,true,remark);
|
|
|
+ }
|
|
|
+ // endregion
|
|
|
+
|
|
|
+ // endregion
|
|
|
+
|
|
|
+ // region MENU
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建菜单
|
|
|
+ * @param parent
|
|
|
+ * @param name
|
|
|
+ * @param path 传入 *开头 表示不需要鉴权
|
|
|
+ * @param component
|
|
|
+ * @param sort
|
|
|
+ * @param icon
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private SysMenu createMenu(SysMenu parent,String name,String path,String component,int sort,String icon){
|
|
|
+ return createMenu(parent,name,path,component, sort,icon,true);
|
|
|
+ }
|
|
|
+ private SysMenu createHideMenu(SysMenu parent,String name,String path,String component,int sort,String icon){
|
|
|
+ return createMenu(parent,name,path,component, sort,icon,false);
|
|
|
+ }
|
|
|
+ private SysMenu createMenu(SysMenu parent,String name,String path,String component,int sort,String icon,boolean visible){
|
|
|
+ return createMenu(parent,name,path,component, sort,icon,visible,false,true,"");
|
|
|
+ }
|
|
|
+ private SysMenu createMenu(SysMenu parent,String name,String path,String component,int sort,String icon,boolean visible,boolean isFrame,boolean isCache,String remark){
|
|
|
+ Long id = IsSystem ? MenuId++ : Id++;
|
|
|
+ return createEntity(id,parent,name,path,component, UserConstants.TYPE_MENU,sort,icon,"","","",visible,isFrame,isCache,remark);
|
|
|
+ }
|
|
|
+
|
|
|
+ // region ChildMenu
|
|
|
+ private SysMenu createChildMenu(SysMenu parent,String name,String path,String component,int sort,String icon){
|
|
|
+ return createChildMenu(parent,name,path,component, sort,icon,true);
|
|
|
+ }
|
|
|
+ private SysMenu createChildHideMenu(SysMenu parent,String name,String path,String component,int sort,String icon){
|
|
|
+ return createChildMenu(parent,name,path,component, sort,icon,false);
|
|
|
+ }
|
|
|
+ private SysMenu createChildMenu(SysMenu parent,String name,String path,String component,int sort,String icon,boolean visible){
|
|
|
+ return createChildMenu(parent,name,path,component, sort,icon,visible,false,true,"");
|
|
|
+ }
|
|
|
+ private SysMenu createChildMenu(SysMenu parent,String name,String path,String component,int sort,String icon,boolean visible,boolean isFrame,boolean isCache,String remark){
|
|
|
+ Long id = IsSystem ? ChildMenuId++ : Id++;
|
|
|
+ return createEntity(id,parent,name,path,component, UserConstants.TYPE_MENU,sort,icon,"","","",visible,isFrame,isCache,remark);
|
|
|
+ }
|
|
|
+ // endregion
|
|
|
+
|
|
|
+ // endregion
|
|
|
+
|
|
|
+ // region BTN
|
|
|
+
|
|
|
+ private void createCurdBtn(SysMenu parent,String postName){
|
|
|
+ createQueryBtn(parent,postName,10);
|
|
|
+ createAddBtn(parent,postName,11);
|
|
|
+ createEditBtn(parent,postName,12);
|
|
|
+ createDeleteBtn(parent,postName,13);
|
|
|
+ }
|
|
|
+ private void createCurdBtnWithExport(SysMenu parent,String postName){
|
|
|
+ createQueryBtn(parent,postName,10);
|
|
|
+ createAddBtn(parent,postName,11);
|
|
|
+ createEditBtn(parent,postName,12);
|
|
|
+ createDeleteBtn(parent,postName,13);
|
|
|
+ createExportBtn(parent,postName,14);
|
|
|
+ }
|
|
|
+ private SysMenu createQueryBtn(SysMenu parent,String postName,int sort){
|
|
|
+ return createHideBtn(parent,"查询"+postName,"query",sort,"eye","","");
|
|
|
+ }
|
|
|
+ private SysMenu createAddBtn(SysMenu parent,String postName,int sort){
|
|
|
+ return createBtn(parent,"新增"+postName,"add",sort,"plus-square","btn btn-light-primary","handleCreate");
|
|
|
+ }
|
|
|
+ private SysMenu createEditBtn(SysMenu parent,String postName,int sort){
|
|
|
+ return createBtn(parent,"修改"+postName,"edit",sort,"pencil-square","btn btn-light-success","handleUpdate@1");
|
|
|
+ }
|
|
|
+ private SysMenu createDeleteBtn(SysMenu parent,String postName,int sort){
|
|
|
+ return createBtn(parent,"删除"+postName,"remove",sort,"dash-square","btn btn-light-danger","handleDelete@0");
|
|
|
+ }
|
|
|
+ private SysMenu createExportBtn(SysMenu parent,String postName,int sort){
|
|
|
+ return createBtn(parent,"导出"+postName,"export",sort,"cloud-download","btn btn-light-info","handleExport");
|
|
|
+ }
|
|
|
+ private SysMenu createImportBtn(SysMenu parent,String postName,int sort){
|
|
|
+ return createBtn(parent,"导入"+postName,"import",sort,"cloud-upload","btn btn-light-warning","handleImport");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建按钮
|
|
|
+ * @param parent
|
|
|
+ * @param name
|
|
|
+ * @param path 传入 *开头 表示不需要鉴权
|
|
|
+ * @param sort
|
|
|
+ * @param icon
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private SysMenu createBtn(SysMenu parent,String name,String path,int sort,String icon){
|
|
|
+ return createBtn(parent,name, path,sort,icon,"","",true,"");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建按钮
|
|
|
+ * @param parent
|
|
|
+ * @param name
|
|
|
+ * @param path 传入 *开头 表示不需要鉴权
|
|
|
+ * @param sort
|
|
|
+ * @param icon
|
|
|
+ * @param btnClass
|
|
|
+ * @param btnScript
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private SysMenu createBtn(SysMenu parent,String name,String path,int sort,String icon,String btnClass,String btnScript){
|
|
|
+ return createBtn(parent,name, path,sort,icon,btnClass,btnScript,true,"");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建隐藏按钮
|
|
|
+ * @param parent
|
|
|
+ * @param name
|
|
|
+ * @param path 传入 *开头 表示不需要鉴权
|
|
|
+ * @param sort
|
|
|
+ * @param icon
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private SysMenu createHideBtn(SysMenu parent,String name,String path,int sort,String icon){
|
|
|
+ return createBtn(parent,name, path,sort,icon,"","",false,"");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建隐藏按钮
|
|
|
+ * @param parent
|
|
|
+ * @param name
|
|
|
+ * @param path 传入 *开头 表示不需要鉴权
|
|
|
+ * @param sort
|
|
|
+ * @param icon
|
|
|
+ * @param btnClass
|
|
|
+ * @param btnScript
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private SysMenu createHideBtn(SysMenu parent,String name,String path,int sort,String icon,String btnClass,String btnScript){
|
|
|
+ return createBtn(parent,name, path,sort,icon,btnClass,btnScript,false,"");
|
|
|
+ }
|
|
|
+ private SysMenu createBtn(SysMenu parent,String name,String path,int sort,String icon,String btnClass,String btnScript,boolean visible,String remark){
|
|
|
+ Long id = IsSystem ? BtnId++ : Id++;
|
|
|
+ return createEntity(id,parent,name,path,"", UserConstants.TYPE_BUTTON,sort,icon,btnClass,btnScript,"",visible,false,true,remark);
|
|
|
+ }
|
|
|
+
|
|
|
+ // endregion
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建功能菜单
|
|
|
+ * @param menuId
|
|
|
+ * @param parent
|
|
|
+ * @param name
|
|
|
+ * @param path 传入 *开头 表示不需要鉴权
|
|
|
+ * @param component
|
|
|
+ * @param menuType
|
|
|
+ * @param sort
|
|
|
+ * @param icon
|
|
|
+ * @param btnClass
|
|
|
+ * @param btnScript
|
|
|
+ * @param query
|
|
|
+ * @param visible
|
|
|
+ * @param isFrame
|
|
|
+ * @param isCache
|
|
|
+ * @param remark
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private SysMenu createEntity(Long menuId,SysMenu parent,String name,String path,String component,String menuType, int sort,String icon,String btnClass,String btnScript,String query,boolean visible,boolean isFrame,boolean isCache,String remark){
|
|
|
+ Boolean flag= false;
|
|
|
+ SysMenu menu = menuMapper.selectMenuById(menuId);
|
|
|
+ if(menu==null){
|
|
|
+ menu = new SysMenu();
|
|
|
+ menu.setMenuId(menuId);
|
|
|
+ flag = true;
|
|
|
+ }
|
|
|
+ menu.setMenuName(name);
|
|
|
+ menu.setParentId(parent.getMenuId());
|
|
|
+ menu.setOrderNum(sort);
|
|
|
+ menu.setComponent(component);
|
|
|
+ menu.setQuery(query);
|
|
|
+ menu.setIsCache(isCache?"0":"1");
|
|
|
+ menu.setIsFrame(isFrame?"0":"1");
|
|
|
+ menu.setMenuType(menuType);
|
|
|
+ menu.setVisible(visible?"0":"1");
|
|
|
+ menu.setStatus("0");
|
|
|
+ String perm ="";
|
|
|
+
|
|
|
+ // path传入 *开头 表示不需要鉴权
|
|
|
+ if(path.startsWith("*")){
|
|
|
+ path=path.substring(1);
|
|
|
+ }else{
|
|
|
+ perm = (StringUtils.isEmpty(parent.getPerms()) ? "" : parent.getPerms() + ":")+path;
|
|
|
+ }
|
|
|
+
|
|
|
+ menu.setPath(path);
|
|
|
+ menu.setPerms(perm);
|
|
|
+ menu.setIcon(icon);
|
|
|
+ menu.setBtnClass(btnClass);
|
|
|
+ menu.setBtnScript(btnScript);
|
|
|
+ menu.setCreateBy("admin");
|
|
|
+ menu.setCreateTime(new Date());
|
|
|
+ menu.setUpdateBy("");
|
|
|
+ menu.setUpdateTime(null);
|
|
|
+ menu.setRemark(remark);
|
|
|
+
|
|
|
+ if(flag){
|
|
|
+ menuMapper.insertMenu(menu);
|
|
|
+ }else{
|
|
|
+ menuMapper.updateMenu(menu);
|
|
|
+ }
|
|
|
+ if(!perm.isEmpty()){
|
|
|
+ meunList.add(menu);
|
|
|
+ }
|
|
|
+ return menu;
|
|
|
+ }
|
|
|
+
|
|
|
+ // endregion
|
|
|
+
|
|
|
+ // region WRITE
|
|
|
+
|
|
|
+ private void generatorPermission(){
|
|
|
+ vuePermissionStr += "/**\n\n";
|
|
|
+ vuePermissionStr += "class permissionName {\n";
|
|
|
+
|
|
|
+ javaPermissionStr ="";
|
|
|
+ javaPermissionStr +="package com.vber.system.permissions;\n\n";
|
|
|
+ javaPermissionStr +="/**\n";
|
|
|
+ javaPermissionStr +=" * AUTO_GENERATOR\n";
|
|
|
+ javaPermissionStr +=" * DATE: " + DateUtils.getTime()+"\n";
|
|
|
+ javaPermissionStr +=" * BY IWB_Y\n";
|
|
|
+ javaPermissionStr +=" */\n";
|
|
|
+ javaPermissionStr +="public class permissionName {\n";
|
|
|
+ meunList.forEach(v->{
|
|
|
+ String name= StringUtils.convertToCamelCase(v.getPerms().replace(":","_"));
|
|
|
+ javaPermissionStr += String.format("\tpublic static final String %s = \"%s\";\n",name,v.getPerms());
|
|
|
+ vuePermissionStr += String.format("\t%s = \"%s\"\n",name,v.getPerms());
|
|
|
+ });
|
|
|
+ vuePermissionStr +="}\n";
|
|
|
+ vuePermissionStr +="export const permissionNames = new permissionName()\n";
|
|
|
+ vuePermissionStr +="export default permissionName\n\n";
|
|
|
+ vuePermissionStr +="*/\n";
|
|
|
+
|
|
|
+ javaPermissionStr +="}\n";
|
|
|
+ saveFile("\\vber-system\\src\\main\\java\\com\\vber\\system\\permissions\\","permissionName.java", javaPermissionStr +"\n\n"+ vuePermissionStr);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void saveFile(String path,String name,String content) {
|
|
|
+ String filePath= System.getProperty("user.dir") + path;
|
|
|
+ File dir = new File(filePath);
|
|
|
+ // 检查放置文件的文件夹路径是否存在,不存在则创建
|
|
|
+ if (!dir.exists()) {
|
|
|
+ dir.mkdirs();// mkdirs创建多级目录
|
|
|
+ }
|
|
|
+ String javaPermissionFileName = filePath + name;
|
|
|
+ FileWriter writer = null;
|
|
|
+ try {
|
|
|
+ File javaFile= new File(javaPermissionFileName) ;
|
|
|
+ if (!javaFile.exists()) {
|
|
|
+ javaFile.createNewFile();// 创建目标文件
|
|
|
+ }
|
|
|
+ writer = new FileWriter(javaFile, false);
|
|
|
+ writer.append(content);
|
|
|
+ writer.flush();
|
|
|
+ System.out.println( "【"+name+"】文件写入成功 "+javaPermissionFileName);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ try{
|
|
|
+ if (null != writer){
|
|
|
+ writer.close();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // endregion
|
|
|
+
|
|
|
+}
|